如何在 VPS 上安装 3X-UI 面板
面向生产环境的完整指南:在 Ubuntu 上安装 3X-UI Xray 面板、锁定 Web 管理界面、签发 TLS、创建 VLESS Reality 入站、管理用户,并在桌面和移动端连接客户端。

3X-UI 是面向 Xray-core 的 Web 面板。你可以管理入站(VLESS、VMess、Trojan、Shadowsocks 等)、签发订阅链接、设置流量上限和到期时间,并查看实时连接,而不必手工改 JSON。对已经在跑 VPS 的人来说,这是最快得到可维护代理栈的办法之一,而不是半年后没人敢动的一次性配置。
本指南面向全新的 Ubuntu 22.04 或 24.04 VPS,这也是大多数 Hiddence Linux 镜像首次启动后的样子。我们将安装广泛使用的 MHSanaei 3X-UI 构建、在首次登录时改掉所有默认密钥、把面板放到 HTTPS 后面、只开放真正需要的端口、创建 VLESS + Reality 入站,然后走一遍客户端应用。如果你已经读过我们的 Marzban 文章,思路类似——Xray 之上的面板——但安装路径、文件布局和日常工作流不同,所以除非你非常清楚如何拆分端口,否则不要在同一台服务器上混用两者。
为什么用 3X-UI 而不是裸 Xray 配置
裸 Xray 配置对单用户、单入站没问题。一旦要加朋友、轮换 Reality 密钥,或需要手机一键导入的订阅 URL,面板能省下数小时。3X-UI 把用户存在本地数据库里,改完后能干净地重启 Xray,并提供紧凑的流量与在线状态仪表盘。它本身不是魔法匿名层:VPS 位置、TLS 指纹、入站类型以及你自己的操作习惯,仍然决定这套方案在网络上的表现。
- 用 Web UI 管理入站、客户端、流量和到期,而不是手工编辑 JSON
- 内置面向 v2rayN、v2rayNG、Streisand、Happ 等客户端的订阅链接
- 一条命令安装,外加有文档的更新路径
- 小型 VPS 也能跑得很好(个人使用 1 vCPU / 1 GB RAM 就够)
- root 留在你自己的服务器上——面板不会把配置发到第三方云
开始之前你需要什么
不要跳过域名和防火墙。留在 HTTP、端口 2053、默认密码的面板,几小时内就会被机器人扫到。准备好这些,然后用 root(或 sudo 用户)通过 SSH 连接。
- 带公网 IPv4 地址的 Linux VPS(推荐 Ubuntu 22.04/24.04)
- 至少 1 GB RAM 和 10 GB 磁盘;如果还跑其他服务,2 GB RAM 更舒服
- 通过 SSH 的 root 或 sudo 权限
- A 记录指向 VPS IP 的域名或子域名(用于正规的面板证书)
- 大约 20–30 分钟,如果刚创建 A 记录还要加上 DNS 等待时间
步骤 1:更新系统并设置时区
全新 VPS 常常堆着待装的安全更新,时钟还是 UTC。先更新软件包,以免安装程序和过时的 OpenSSL 或 curl 打架。时区对 Xray 本身是可选的,但会让面板日志和证书到期日期好读得多。
ssh root@YOUR_VPS_IP
apt update && apt -y upgrade
apt -y install curl wget ca-certificates gnupg socat tar unzip
timedatectl set-timezone UTC
hostnamectl set-hostname panel
# Confirm DNS for your subdomain (should print your VPS IP):
dig +short panel.example.com步骤 2:安装 3X-UI
MHSanaei 3X-UI 构建的官方安装脚本会下载最新发行版、安装 Xray-core、创建 systemd 服务,并打印首次登录 URL。仔细读输出:里面有随机路径和生成的用户名/密码。立刻复制到密码管理器。如果脚本询问面板端口,可以保留 2053,也可以选一个未占用的高位端口;防火墙那一步要用到,记住即可。
bash <(curl -Ls https://raw.githubusercontent.com/mhsanaei/3x-ui/master/install.sh)
# After install, useful commands:
x-ui # interactive menu (start/stop/restart, reset, update)
systemctl status x-ui # confirm the service is active
ss -tulpn | grep x-ui # see which port the panel listens on步骤 3:首次登录并立刻加固
打开安装程序打印的 URL,通常是 http://YOUR_IP:2053/<random-path>。用生成的凭据登录,然后进入 Panel Settings(或 Configuration)。把用户名和密码改成独一无二的值。如果面板允许更改 Web 基路径,就改——很长的随机路径能砍掉大量路过扫描。如果你想用 2053 以外的端口,设置监听端口。保存,从 UI 或用 systemctl restart x-ui 重启面板,然后用新 URL 再登录。
接下来,如果你的构建提供双因素认证就打开它,并关掉永远不会用的入站模板。在 Xray 设置里,除非有明确理由钉死另一个构建,否则留下面板自带的核心版本。如果 80/443 稍后要给 Reality 或反向代理用,现在先不要把面板暴露在这些端口上——选一种策略并坚持。
- 立刻替换生成的管理员登录
- 保留密钥 Web 路径;不要把面板挪到 /
- 优先使用非默认面板端口并记下来
- 永远不要在其他服务上复用这个密码
步骤 4:面板的 TLS 证书
浏览器会警告 HTTP,在公共网络上明文发送管理员密码很糟糕。如果端口 80 空闲且域名指向这台 VPS,3X-UI 可以申请 Let's Encrypt 证书。在面板里打开证书 / SSL 部分,输入 panel.example.com,然后申请证书。如果端口 80 已被占用,使用 DNS-01 流程,或把 Caddy/Nginx 放在前面并反向代理到 127.0.0.1:2053。
# Quick check that port 80 is free before the panel ACME challenge:
ss -tulpn | grep ':80'
# If you terminate TLS on Caddy instead of inside 3X-UI:
# Caddyfile example (panel stays on 127.0.0.1:2053):
# panel.example.com {
# reverse_proxy 127.0.0.1:2053
# }步骤 5:创建 VLESS Reality 入站
在 Inbounds 中创建新入站。对许多网络来说,稳妥的默认是带 Reality 和 TCP 的 VLESS。选一个不是面板端口的端口——如果没有别的东西绑在那里,443 很常见;否则用高位 TCP 端口,并在防火墙里保持一致。为第一个客户端生成 UUID,在 UI 里生成 Reality 密钥对,把 dest / serverNames 设成你被允许模仿的合法目标(支持 TLS 1.3 的知名站点)。保存入站,并在面板日志中确认 Xray 无错误地重新加载。
然后在该入站上按需添加额外客户端:每个用户有一个 UUID、可选的邮箱标签,以及可选的流量或时间限制。从用户行复制连接链接或订阅 URL。不要把这些链接发到公开聊天;它们等价于密码。
# On the server, confirm Xray is listening on the inbound port (example: 443):
ss -tulpn | grep -E ':443|:2053'
# Follow Xray logs if a client cannot connect:
journalctl -u x-ui -f步骤 6:防火墙——只开放需要的端口
Ubuntu 上 UFW 就够了。先允许 SSH,以免把自己锁在外面,然后是面板端口和入站端口。如果从面板申请了 Let's Encrypt 证书,签发期间也允许 80/tcp。443 上的 Reality 入站需要 443/tcp(并且不要把面板放在同一端口)。
ufw allow OpenSSH
ufw allow 2053/tcp comment '3x-ui panel (change if you picked another port)'
ufw allow 443/tcp comment 'VLESS Reality inbound'
# ufw allow 80/tcp comment 'only if panel ACME needs it'
ufw enable
ufw status verbose连接客户端
在 Windows 上,v2rayN 可以从剪贴板导入 VLESS 链接。在 Android 上,v2rayNG 或类似的 Xray 客户端可以从二维码做同样的事。在 iOS 上,使用支持 VLESS Reality 的客户端(例如 Streisand 或 Happ,取决于你所在地区当前能拿到什么)。导入后启用配置,并查看面板的在线列表。如果客户端一直离线,常见原因是端口错误、在仅 TCP 的入站上打开了 UDP、与 dest 不匹配的 Reality serverName,或笔记本上的本地防火墙。
- Windows:v2rayN — 导入 VLESS 链接,按需要设置路由(全局 vs 基于规则)
- Android:v2rayNG — 从面板用户页扫描二维码
- macOS / iOS:支持 VLESS + Reality 的客户端;粘贴同一条链接
- 订阅 URL:加到客户端里,这样轮换 UUID 时不必手工重新导入
更新、备份和重装安全
每次更新面板之前,从 UI 下载备份(数据库 + 配置)。把它存在 VPS 之外。更新通常是 x-ui,然后菜单里的更新选项,或能检测到现有安装的同一条安装脚本。更新后,确认 systemd 服务是 active,入站仍在监听。如果重装操作系统,在面板里恢复备份,而不是手工重建每个 UUID。
x-ui # choose update when prompted, or:
# bash <(curl -Ls https://raw.githubusercontent.com/mhsanaei/3x-ui/master/install.sh)
# Backup files commonly live under /etc/x-ui/ — copy them off-box:
ls -la /etc/x-ui/
# Example offsite copy:
# scp -r /etc/x-ui/ you@backup-host:~/x-ui-backup-$(date +%F)/故障排除
第一天的大多数失败是 DNS、端口或 Reality 字段。在重装面板之前先过一遍这份列表。没有备份就重装,是人们丢掉每个客户端 UUID 的方式。
- 打不开 Web UI:检查 systemctl status x-ui、ss -tulpn 和 UFW。确认 URL 里包含了密钥路径。
- 忘记管理员密码:在服务器上运行 x-ui 并使用重置选项。
- 客户端能连上然后卡住:入站端口被拦,或你在仅 TCP 的 Reality 入站上启用了 UDP。
- 面板 TLS 错误:域名 A 记录还没指到这里,或 ACME 期间端口 80 被占用。
- Reality 握手失败:dest/serverNames 不匹配,或另一个服务已经绑在 443。
- CPU 很高:1 vCPU 套餐上入站太多,或开放端口上的扫描/洪水——检查 ss 和面板在线数量。
真正重要的安全注意事项
把面板当生产管理软件对待。它可以签发新用户并读取每个 UUID。限制谁能到达 Web 端口:如果有稳定的办公室 IP,在 UFW 里只允许该 IP 访问 2053/tcp。SSH 用密钥,不用密码。如果在 443 上使用 Reality,不要在同一 IP 上跑无关的公开网站——同一端口上互相竞争的 TLS 栈是经典的故障来源。如果面板截图曾经漏进聊天,就轮换管理员密码。
- 只用 SSH 密钥;密钥可用后禁用密码登录
- 能限制时就在防火墙里限制面板端口
- 按计划把 /etc/x-ui 备份到服务器外
- 不要在公开 Telegram 群分享订阅 URL
- 盯着磁盘:繁忙入站上日志和流量统计会增长
实用提示
- 一个入站带很多客户端,比十个几乎相同的入站更好运维
- 按设备给客户端命名(laptop-anna、phone-ben),流量图才有意义
- 如果还需要网站的反向代理,把站点放到另一个 IP 或另一个端口——不要和 Reality 抢 443
- 任何 x-ui 重启之后,离开 SSH 会话前先测一个客户端
- 更新前读 changelog;周五晚上不要跳到「latest」
你现在有了作为 systemd 服务安装的 3X-UI、锁定的管理 URL、面板上的 TLS、VLESS Reality 入站、匹配这些端口的防火墙规则,以及备份习惯。从入站页添加客户端,在每台设备上导入链接,并且只在备份之后更新面板。如果出了问题,VPS 上的 x-ui 菜单才是恢复路径——不是完整重装。