一、方案概述
3x-ui 是基于 Xray-core 的 Web 可视化管理面板,提供图形化界面管理代理节点、用户、流量统计等,无需手动编写 JSON 配置文件,是目前最主流的 Xray 管理方案之一。
本文档使用 Docker Compose 部署,适合服务器上已有其他 Docker 服务的场景,方便统一管理、隔离和迁移。
架构图
客户端(手机/电脑)
↓
VLESS + Reality + XTLS Vision(443 端口)
↓
海外 VPS(Ubuntu 22.04)
└── Docker
├── 3x-ui 容器(Xray-core + Web 面板,54321 端口)
└── 其他现有服务容器...
↓
目标网站(公网)
与手动配置方案对比
| 项目 | 手动配置 | 3x-ui 面板(Docker) |
|---|---|---|
| 配置方式 | 手动编辑 JSON | Web 界面点击操作 |
| 多用户管理 | 手动维护 | ✅ 原生支持 |
| 流量统计 | ❌ | ✅ 实时图表 |
| 分享链接 | 手动拼接 | ✅ 自动生成 + 二维码 |
| 到期管理 | ❌ | ✅ 支持流量/时间限制 |
| 部署/迁移 | 手动备份配置 | ✅ 挂载卷, docker cp 即可迁移 |
二、服务器要求
| 项目 | 要求 |
|---|---|
| 系统 | Ubuntu 22.04 LTS / Debian 11+ |
| CPU | 1 核+ |
| 内存 | 512MB+(建议 1GB) |
| 带宽 | 5Mbps+ 上行 |
| Docker | ≥ 20.10 |
| Docker Compose | ≥ 2.x( docker compose 命令) |
三、系统初始化
验证 Docker 已安装
docker --version
docker compose version
若未安装 Docker:
curl -fsSL https://get.docker.com | sh
sudo systemctl enable --now docker
设置时区
sudo timedatectl set-timezone Asia/Singapore
验证 NTP 时间同步
timedatectl status
确认 System clock synchronized: yes ,若未同步:
sudo systemctl enable --now systemd-timesyncd
Reality 对时间精度有要求,服务端与客户端时间差不得超过 90 秒。
四、安装 3x-ui(Docker Compose)
官方项目: https://github.com/MHSanaei/3x-ui
创建目录结构
mkdir -p /opt/3x-ui
cd /opt/3x-ui
编写 docker-compose.yml
nano docker-compose.yml
写入以下内容:
services:
3x-ui:
image: ghcr.io/mhsanaei/3x-ui:latest
container_name: 3x-ui
restart: unless-stopped
network_mode: host
environment:
- XRAY_VMESS_AEAD_FORCED=false
volumes:
- /opt/3x-ui/db:/etc/x-ui
- /opt/3x-ui/cert:/root/cert
tty: true
为什么使用
network_mode: host?
Reality 需要直接绑定宿主机 443 端口,并进行底层 TCP 握手转发。使用 host 网络模式可以避免 NAT 导致的握手问题,确保 Reality 正常工作。
启动服务
docker compose up -d
验证容器运行状态
docker compose ps
docker compose logs -f
五、防火墙配置
# 放行代理端口(VLESS+Reality 使用)
sudo ufw allow 443/tcp
# 放行面板端口(仅管理使用,建议后续限制来源 IP)
sudo ufw allow 54321/tcp
# 启用防火墙
sudo ufw enable
# 验证规则
sudo ufw status
六、首次登录与安全设置
登录面板
浏览器访问:
http://你的VPS_IP:54321/
默认账号: admin / admin
修改用户名和密码(必做)
- 进入 面板设置 → 账号安全
- 修改用户名(建议随机字符串)
- 修改密码(建议 16 位以上随机密码)
- 点击 保存并重启面板
修改面板端口和路径(推荐)
- 进入 面板设置 → 面板配置
- 修改 面板端口 (如
18443,避免使用常见端口) - 修改 根路径 (如
/manage-xxxxxxxx/) - 保存后需在防火墙放行新端口,关闭旧端口
bash sudo ufw allow 18443/tcp sudo ufw delete allow 54321/tcp--- ## 七、创建 VLESS + Reality 节点 ### 进入入站列表 面板左侧菜单 → 入站列表 → 添加入站 ### 填写配置 按以下参数填写表单: | 字段 | 值 | | --- | --- | | 备注 | Reality(或自定义名称) | | 协议 | vless | | 监听 IP | 留空(默认 0.0.0.0) | | 端口 | 443 | | 传输协议 | TCP | ### 客户端设置 | 字段 | 值 | | --- | --- | | ID | 点击「生成」自动填入 UUID | | Flow | xtls-rprx-vision | ### TLS 设置 | 字段 | 值 | | --- | --- | | 安全 | Reality | | uTLS | chrome(或 firefox / safari) | | 目标地址 |www.microsoft.com:443| | 域名 |www.microsoft.com| | 私钥 | 点击「生成」自动填入 | | Short ID | 点击「生成」自动填入 | > 伪装目标建议 :避免使用www.cloudflare.com(过于常见),推荐: > > -www.microsoft.com:443> -addons.mozilla.org:443> -www.swift.com:443### 保存节点 点击 添加 完成创建。 --- ## 八、获取客户端连接信息 在入站列表中,点击对应节点的 操作 → 二维码 或 复制分享链接 。 分享链接格式示例: ```
vless://UUID@VPS_IP:443?security=reality&type=tcp&flow=xtls-rprx-vision&pbk=公钥&fp=chrome&sni=www.microsoft.com&sid=ShortID#Reality
---
## 九、添加多用户
在入站列表中,点击节点的 **操作** → **用户** → **添加用户** :
| 字段 | 说明 |
| --- | --- |
| 邮箱 | 用户标识,任意填写 |
| UUID | 自动生成 |
| Flow | xtls-rprx-vision |
| 流量限制 | 可选,如 10GB |
| 到期时间 | 可选,设置账号有效期 |
每个用户拥有独立的连接信息和流量统计。
---
## 十、性能优化(BBR)
编辑内核参数:
```bash
sudo nano /etc/sysctl.conf
追加:
net.core.default_qdisc=fq
net.ipv4.tcp_congestion_control=bbr
立即生效:
sudo sysctl -p
验证(两项均需确认):
sysctl net.ipv4.tcp_congestion_control
sysctl net.core.default_qdisc
预期输出:
net.ipv4.tcp_congestion_control = bbr
net.core.default_qdisc = fq
十一、安全加固
⚠️ 修改 SSH 端口(操作顺序极为重要)
第一步:先在防火墙放行新端口
sudo ufw allow 2222/tcp
第二步:修改 SSH 配置
sudo nano /etc/ssh/sshd_config
修改:
Port 2222
第三步:重启 SSH 服务
sudo systemctl restart ssh
第四步:新开终端验证新端口可用
ssh -p 2222 user@VPS_IP
确认可连接后,关闭旧端口:
sudo ufw delete allow 22/tcp
安装 Fail2Ban
sudo apt install fail2ban -y
sudo systemctl enable --now fail2ban
限制面板访问来源(推荐)
若管理者 IP 固定,可限制面板仅从该 IP 访问:
# 删除原面板端口全开规则
sudo ufw delete allow 18443/tcp
# 仅允许指定 IP 访问面板
sudo ufw allow from 你的管理IP to any port 18443
十二、3x-ui Docker 常用管理命令
# 进入 /opt/3x-ui 目录后执行以下命令
# 查看运行状态
docker compose ps
# 查看实时日志
docker compose logs -f
# 重启服务
docker compose restart
# 停止服务
docker compose stop
# 启动服务
docker compose start
# 更新到最新版本
docker compose pull && docker compose up -d
# 进入容器内部(调试用)
docker exec -it 3x-ui bash
数据备份与迁移
所有数据存储在宿主机 /opt/3x-ui/db/ 目录下,直接备份此目录即可:
# 备份
tar -czf 3x-ui-backup-$(date +%Y%m%d).tar.gz /opt/3x-ui/db/
# 迁移到新服务器:将备份文件传输后解压到同路径,重新 docker compose up -d 即可
十三、客户端推荐
Windows
- v2rayN (推荐): https://github.com/2dust/v2rayN
Android
- v2rayNG (推荐): https://github.com/2dust/v2rayNG
iOS / iPhone
- Shadowrocket (付费)
- Hiddify (免费)
macOS
- Hiddify (推荐): https://github.com/hiddify/hiddify-app
- V2rayU : https://github.com/yanue/V2rayU
客户端直接扫描面板生成的二维码即可导入,无需手动填写参数。
十四、排错方法
面板无法访问
# 检查面板服务状态
x-ui status
# 检查端口监听
sudo ss -tlnp | grep 54321
# 查看面板日志
x-ui log
节点连接失败
# 查看容器日志
docker compose logs --tail=100
# 检查 443 端口监听(host 网络模式下直接查宿主机)
sudo ss -tlnp | grep 443
常见错误
| 错误现象 | 可能原因 | 解决方案 |
|---|---|---|
| 面板打不开 | 防火墙未放行面板端口 | ufw allow 54321/tcp |
| 节点连接失败 | 443 端口被占用 | sudo lsof -i:443 检查占用进程 |
| Reality 握手失败 | 伪装目标不可达 | 换其他目标站点,并在 VPS 上 curl 验证 |
| 流量统计不准 | Xray 版本过旧 | x-ui update 更新面板 |
十五、总结
| 项目 | 推荐值 |
|---|---|
| 协议 | VLESS + Reality |
| 流控 | xtls-rprx-vision |
| 端口 | 443 |
| 伪装目标 | www.microsoft.com |
| TLS 指纹 | chrome |
| 拥塞控制 | BBR + fq |
| 面板 | 3x-ui |
3x-ui 将 Xray 的配置管理从命令行 JSON 提升到 Web 可视化界面,极大降低了维护成本,同时保留了 Xray-core 的全部性能优势,是个人和小团队长期使用的最优方案。