uVersion
简体中文
下载 →

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 用户名、临时密码、 服务器地址和证书指纹。请记下它们。

安装结束时显示的摘要: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(会询问) 激活码,或完整的许可证密钥。省去该问题。
-InstallDirC:\Program Files\uVersion 二进制文件的落地位置。
-DataDirC:\ProgramData\uVersion 你的数据、配置和机密的落地位置。这是会不断变大的文件夹,因此应放到你的大 磁盘上。
-DbOnDataDir禁用 也把 PostgreSQL 数据库放进数据文件夹,使得仅凭一块幸存的磁盘就足以 重建服务器。见下面的方框。
-Port8080 纯 HTTP 的回退端口,仅当你在配置中禁用 TLS 时才使用。 正常的 HTTPS 端口是 8443。
-BindAddress0.0.0.0 监听接口。默认在所有接口上监听。
-DownloadUrluversion.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:通过程序和功能

  1. Win+R → appwiz.cpl → 回车
  2. 在列表中找到 uVersion Server
  3. 右键单击 → 卸载
  4. 会打开一个管理员 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 的数据库。仅当你确定没有其他程序使用它时 才使用它。