Wiki
在 Windows 上安装
PowerShell 一行命令:激活码、通过 winget 安装 PostgreSQL、Windows 服务、防火墙、TLS 证书。
Windows 10、11 或 Windows Server 2019+(x64)。使用一行 PowerShell 命令安装。
安装
1. 以管理员身份打开 PowerShell
右键单击 PowerShell 图标 → 以管理员身份运行。 否则脚本会拒绝启动,并会告诉你。
2. 粘贴安装命令
只有一行,原样粘贴到你刚打开的窗口中:
iwr https://uversion.io/downloads/server/install.ps1 -UseBasicParsing | iex
随后脚本会在你眼前依次执行:
- 请求输入激活码,这是唯一会问的问题:见下一步
- 下载二进制文件并校验压缩包
- 如果缺少 PostgreSQL,则通过
winget安装(约 2 分钟) - 创建数据库、角色和 Windows 服务,并打开防火墙 (8443,另加作为回退的 8080)
- 注册程序和功能条目
- 启动服务,生成自签名 TLS 证书,然后显示管理员密码以及证书的 SHA-256 指纹
全部操作都在你的 PowerShell 窗口中进行,你可以看到每一步。这相当于 Linux 上
sudo apt install 的 Windows 版本。
3. 输入激活码
这是唯一会问的问题:其他所有选择都通过下文所述的参数完成。
该字段接受三种形式:短代码
UV-XXXX-XXXX-XXXX、指向包含你完整许可证密钥的文件的路径,
或直接粘贴该密钥。仅在第一种形式下,脚本才会联系
licence.uversion.io 用代码换取密钥。
4. 记下结尾的摘要
安装以一个方框结束:admin 用户名、临时密码、
服务器地址和证书指纹。请记下它们。
如果窗口关闭得太快,只要密码尚未更改,它仍然保留在磁盘上:
Get-Content "C:\ProgramData\uVersion\initial-admin-password"
该文件会在你更改密码后立即消失: 因此“Cannot find path”错误意味着更改已经发生。
之后你可以继续 首次登录。
Windows Server 2019 和 2022:先装 PostgreSQL
winget 在 Windows Server 2019 和
Windows Server 2022 上都不存在。此时脚本会当场停止,并显示一条明确告知你的消息。
这不是故障:先手动安装
PostgreSQL 16,
然后重新运行同一条命令。脚本会检测到已有的 PostgreSQL 服务,并使用它而不是再装一个。
非交互式变体(CI、脚本化部署)
短格式 iwr ... | iex 无法接收任何参数:
它运行脚本时不会向其传递任何实参,末尾加上的 -DataDir 会被悄悄忽略。
只要你想传递选项,请使用下面这种会构建显式脚本块的形式。
& ([scriptblock]::Create((iwr https://uversion.io/downloads/server/install.ps1 -UseBasicParsing).Content)) `
-LicenceKey "UV-XXXX-XXXX-XXXX" -DataDir "D:\uVersion" -DbOnDataDir
可接受的九个参数:
| 参数 | 默认值 | 作用 |
|---|---|---|
-LicenceKey | (会询问) | 激活码,或完整的许可证密钥。省去该问题。 |
-InstallDir | C:\Program Files\uVersion |
二进制文件的落地位置。 |
-DataDir | C:\ProgramData\uVersion |
你的数据、配置和机密的落地位置。这是会不断变大的文件夹,因此应放到你的大 磁盘上。 |
-DbOnDataDir | 禁用 | 也把 PostgreSQL 数据库放进数据文件夹,使得仅凭一块幸存的磁盘就足以 重建服务器。见下面的方框。 |
-Port | 8080 |
纯 HTTP 的回退端口,仅当你在配置中禁用 TLS 时才使用。 正常的 HTTPS 端口是 8443。 |
-BindAddress | 0.0.0.0 |
监听接口。默认在所有接口上监听。 |
-DownloadUrl | uversion.io | 压缩包的来源。要从内部镜像安装时更改它。 |
-Reconfigure | 禁用 | 即使 config.toml 已存在也重写它。 |
-Update | 禁用 | 更新现有安装的二进制文件并重启服务,不触及 PostgreSQL、许可证或配置。 这正是管理面板中“更新”按钮所触发的操作。 |
-DbOnDataDir 决定是否仅凭一块磁盘就能重建
你的服务器。没有它,PostgreSQL 数据库会另存别处:如果机器损坏,幸存的数据磁盘
包含你文件的内容,但不再有任何修订版本、任何账户、任何锁或任何权限。有了它,只需一块磁盘
加上 PostgreSQL 和这个脚本,就足以在别处重建服务器。代价是:该磁盘届时还会承载
许可证密钥和各个密码,而且该数据库只能由创建它的 PostgreSQL 主版本重新打开。
文件的存放位置
一切默认都存放在数据文件夹 C:\ProgramData\uVersion 中:
配置(config.toml)、你受版本控制的文件的内容
(data\chunks)、TLS 证书及其指纹
(data\tls),以及初始管理员密码。
该文件夹还以明文包含三个机密:
licence-key(你的许可证密钥)、db-password(uVersion
数据库的密码)和 postgres-superuser-password(PostgreSQL 管理员账户的
密码)。它们受到仅限管理员的权限保护。请把这个文件夹当作保险箱:不要把它复制到开放的
网络共享上,并在磁盘脱离你的掌控之前清除这些文件。
在手动修改 config.toml 之后,请重启服务以使其生效:
Restart-Service uVersionServer
验证安装
四项独立检查。如果你选择了其他数据文件夹,请把
C:\ProgramData\uVersion 替换为它。
1. 服务正在运行
Get-Service uVersionServer
预期:Status: Running。
2. 服务器在 8443 上以 HTTPS 监听
Get-NetTCPConnection -LocalPort 8443 -State Listen
应出现一行。服务在运行却什么都没有,通常意味着配置中禁用了 TLS:此时服务器切换为纯 HTTP,8443 不再监听。
3. 再次显示证书指纹
Get-Content "C:\ProgramData\uVersion\data\tls\fingerprint"
这就是每台工作站在首次连接时确认的指纹。
4. 重新读取生效的配置
Get-Content "C:\ProgramData\uVersion\config.toml"
如果服务拒绝启动,查看原因最直接的办法是在前台 启动该二进制文件:启动错误会直接显示在你的窗口里。这其实也是安装脚本在发现失败时 自己建议的命令。
$env:CONFIG_PATH = 'C:\ProgramData\uVersion\config'
& 'C:\Program Files\uVersion\uversion-server.exe'
随后用 Ctrl+C 停止,再执行 Start-Service uVersionServer。如果服务连产生错误
那一步都启动不到,Windows 事件查看器
(eventvwr.msc)会把它记录在系统日志中,来源为
Service Control Manager。不要在那里查找名为 uVersion 的
应用程序日志:服务器只写入其标准输出,并不注册 Windows 事件源,因此像
Get-EventLog -Source uVersionServer 这样的命令永远不会返回任何东西。
卸载
有两种等效方式。两者都运行同一个脚本(uninstall.ps1),它会处理服务、
防火墙、计算机环境变量、数据文件夹、二进制文件、程序和功能条目以及 PostgreSQL
数据库。
方法 1:通过程序和功能
- Win+R →
appwiz.cpl→ 回车 - 在列表中找到 uVersion Server
- 右键单击 → 卸载
- 会打开一个管理员 PowerShell 窗口并可见地运行脚本
方法 2:通过以管理员身份运行 PowerShell
iwr https://uversion.io/downloads/server/uninstall.ps1 -UseBasicParsing | iex
脚本在开始时会显示你的两个路径,最后显示一个验证块:对于服务、安装文件夹、 数据文件夹和程序和功能条目,你应看到绿色的 "OK absent"。
2026 年 8 月之前进行的自定义安装的情况。
卸载脚本现在会自行找到实际使用的路径:安装会把它们记录在其程序和功能条目旁边,
卸载再把它们读回。因此你无需指定任何内容,即使你曾选择了自定义的
-DataDir。
情况并非一直如此:早于此修复的安装没有记录其路径,那么卸载就会
退回到默认值。如果你属于这种情况并且曾自定义过路径,请显式传入它们,
否则 -DbOnDataDir 本应保留的数据库可能会被删除,而各个机密却
留在原处:
$body = (iwr "https://uversion.io/downloads/server/uninstall.ps1" -UseBasicParsing).Content
if ($body -is [byte[]]) { $body = [Text.Encoding]::UTF8.GetString($body) }
& ([scriptblock]::Create($body)) -InstallDir "D:\uVersion\bin" -DataDir "D:\uVersion"
也卸载 PostgreSQL 吗?
默认情况下 uninstall.ps1 不会触及 PostgreSQL:可能还有其他应用在
使用它。如需一并删除:
$body = (iwr "https://uversion.io/downloads/server/uninstall.ps1" -UseBasicParsing).Content
if ($body -is [byte[]]) { $body = [Text.Encoding]::UTF8.GetString($body) }
& ([scriptblock]::Create($body)) -RemovePostgreSQL
需要进行 [byte[]] 检查:根据所提供的 Content-Type,
Invoke-WebRequest -UseBasicParsing 可能以字节数组或字符串形式返回响应正文。
上述模式在两种情况下都有效。
-RemovePostgreSQL 会删除计算机上的所有
PostgreSQL 安装,而不仅仅是 uVersion 的数据库。仅当你确定没有其他程序使用它时
才使用它。