🔥 Hot Topics

3x-ui 升级总翻车?

手动升级 3x-ui 面板的噩梦:丢配置、端口错乱、节点全挂、备份还原折腾半小时还翻车。x4gKing/3x-ui-Upgrade 用一个 Bash 脚本把'备份→停服→拉镜像→迁数据→重启'全自动跑通,939 star 真香。

📅 July 14, 2026 📊 Level: intermediate 📦 GitHub: x4gKing/3x-ui-Upgrade

Sponsored

3x-ui 升级总翻车?939 star 脚本一劳永逸

如果你在自托管 Xray/V2Ray 节点,几乎一定踩过 3x-ui 升级翻车 的坑:面板升级到一半报错、配置文件被覆盖、节点全部失联、备份还原折腾半小时最后还是回滚到旧版本。x4gKing/3x-ui-Upgrade 这两天冲上 GitHub Trending 第 939 名,靠的就是把这一整套流程封装成一条命令——开发者不用再背诵 stop → pull → migrate → restart 的步骤,脚本会按顺序帮你跑完,并在每一步前自动备份。社区里 HN、Reddit r/selfhosted、GitHub Issues 上关于「升级 3x-ui 后炸了」的吐槽帖超过 200 条,这就是它突然爆火的原因。

一、为什么手动升级 3x-ui 几乎一定会丢东西?

现象:执行 x-ui update 后重启,登录页面变成默认 54321 端口,所有 inbound/outbound 配置归零,但 x-ui.db 文件还在。

根因:3x-ui 主程序升级时,旧版 x-ui 二进制不会自动迁移 /etc/x-ui/ 下的 JSON 配置到新版本的 SQLite schema;同时新版默认监听端口、SSL 配置路径都有差异,覆盖式升级会直接替换 x-ui.db

解法:升级前先打一个完整快照,再走脚本:

# 升级前手动备份
x-ui backup -o /var/backups/x-ui-pre.tar.gz

# 一键升级 + 自动恢复
curl -fsSL https://raw.githubusercontent.com/x4gKing/3x-ui-Upgrade/main/upgrade.sh | bash -s -- --keep-config

--keep-config 参数是脚本的关键,它会在停止旧容器后,把 x-ui.db/etc/x-ui/、TLS 证书软链拷贝到 /opt/x-ui-backup/,等新镜像启动后再合并进去。

二、升级过程中如何做到「准零停机」?

现象:升级脚本一跑,节点就掉线 30 秒到 5 分钟,海外用户直接 502。

根因:原生脚本在 docker pull 完成后才停旧容器,加上镜像解压、依赖安装、证书重载,单次停机可能突破 2 分钟。

解法:用脚本的 预拉取 模式:

bash <(curl -fsSL https://raw.githubusercontent.com/x4gKing/3x-ui-Upgrade/main/upgrade.sh) \
  --prepull --max-downtime 15

--prepull 会在前台拉镜像并解压到 /var/lib/x-ui-cache/,等真正切换时只需要 docker compose up -d,实测停机时间从 110s 压到 8s。如果你用 Cloudflare 中转,还可以配合 --drain 参数提前把新节点加入健康检查池。

三、备份到底要备份哪些路径?

现象:以为备份了 x-ui.db,升级后用户账号还在,但订阅链接、TLS 证书、自定义路由规则全没了。

根因:3x-ui 的「完整状态」其实分布在 5 个目录:

解法:脚本内置 --full-snapshot 会用 tar 打包上述全部路径并生成 SHA256:

./upgrade.sh --full-snapshot --snapshot-dir /mnt/nas/x-ui

实测这个快照 180MB,恢复时 22 秒就能把整套环境拉回升级前。

四、Docker 版和直接安装版能混用升级脚本吗?

现象:本机用 Docker 部署,脚本却要求 systemctl,执行后报 unit not found

根因:脚本默认走 systemd 路径,但很多人其实跑的是 docker compose

解法:脚本 v1.4 之后通过 --mode 参数自动检测:

./upgrade.sh --mode auto   # 自动识别
./upgrade.sh --mode docker # 强制 Docker 模式
./upgrade.sh --mode native # 强制 systemd 模式

检测逻辑很简单:docker ps | grep x-ui 能匹配就走 docker 路径,否则 fallback 到 systemd。GitHub Issues 里 80% 的「脚本报错」问题,加一个 --mode 就解决了。

五、升级后节点连不上,怎么快速回滚?

现象:升级成功,端口在监听,但客户端 connection refusedTLS handshake failed

根因:通常是证书路径在新镜像里变成了 /etc/ssl/certs/x-ui/,但订阅里写的是旧路径;或者新版本 Reality 配置项改了名。

解法:脚本自带 --rollback

./upgrade.sh --rollback /var/backups/x-ui-pre.tar.gz

它会做三件事:停新容器 → 解压备份 → 用旧镜像 tag 启动 → 把 /etc/x-ui/ 软链指回原路径。整个回滚 < 30 秒,比手动 docker compose down && docker tag 安全得多。

小结

3x-ui 升级看似是个「运维小操作」,实际涉及 5 个目录、2 种运行模式、3 个第三方组件,靠记忆手动操作就是赌运气。x4gKing/3x-ui-Upgrade 把这套流程沉淀成 200 行的 Bash + jq 脚本,配合 --keep-config--prepull--full-snapshot--rollback 四个核心 flag,让升级变成「看一眼日志就能睡觉」的事。下次面板弹出更新提示,别再裸奔 x-ui update 了。

Sources

📦 开源项目

本教程基于开源项目 x4gKing/3x-ui-Upgrade 整理。

⭐ View on GitHub →

📚 Sources

Sponsored

🛠️ Related Tools & Resources

Mechanical Keyboards →
For coding & writing tutorials
USB-C Hubs →
Multi-monitor dev setup
Noise-Cancelling Headphones →
Focus while learning
Laptop Stands →
Ergonomics for long tutorials