安装面板
面板 — xray-panel/backend · 节点 — xray-panel/node · 订阅页面 — xray-panel/subscription-page
面板 XLADA 是核心组件:用户、节点、订阅、模板、统计和 API。
它通过 docker compose 安装在一台服务器上:面板、数据库和缓存以三个容器
启动,不需要构建。
需要准备:
- 一台装有 Docker 和 Docker Compose 的主机 —— 至少 2 核、4 GB RAM 和 20 GB 磁盘,详见要求;
- 一个 A 记录已指向该主机的域名 —— 示例中为
panel.example.com; - 带 TLS 的反向代理:没有它面板无法工作。
Compose 会创建网络 xpanel-network 和数据卷 remnawave-db-data:
| 容器 | 镜像 | 作用 |
|---|---|---|
xpanel | ghcr.io/xray-panel/backend:latest | 127.0.0.1:3000 上的界面和 API |
xpanel-db | postgres:18.4 | 数据库 |
xpanel-redis | valkey/valkey:9-alpine | 缓存和队列 |
安装 Docker
sudo curl -fsSL https://get.docker.com | sh
第 1 步 —— 下载所需文件
创建目录,并从面板仓库下载 compose 文件和环境变量示例:
mkdir /opt/xlada && cd /opt/xlada
curl -o docker-compose.yml https://raw.githubusercontent.com/xray-panel/backend/main/docker-compose-prod.yml
curl -o .env https://raw.githubusercontent.com/xray-panel/backend/main/.env.sample
docker-compose.yml 不需要修改:端口、数据卷、网络和限制都已写好。
所有配置都在 .env 中。
第 2 步 —— 配置 .env
用现成的命令填入密钥和域名:
cd /opt/xlada
# 应用密钥:密码哈希、JWT、TOTP 加密。
sed -i "s/^APP_SECRET=.*/APP_SECRET=$(openssl rand -hex 64)/" .env
# PostgreSQL 密码,以及 DATABASE_URL 中的同一个密码。
pw=$(openssl rand -hex 24) \
&& sed -i "s/^POSTGRES_PASSWORD=.*/POSTGRES_PASSWORD=$pw/" .env \
&& sed -i "s|^\(DATABASE_URL=\"postgresql://postgres:\)[^@]*\(@.*\)|\1$pw\2|" .env
# 面板和订阅的域名。
sed -i "s|^PANEL_DOMAIN=.*|PANEL_DOMAIN=https://panel.example.com|" .env
sed -i "s|^FRONT_END_DOMAIN=.*|FRONT_END_DOMAIN=https://panel.example.com|" .env
sed -i "s|^SUB_PUBLIC_DOMAIN=.*|SUB_PUBLIC_DOMAIN=panel.example.com/api/sub|" .env
# Prometheus 指标的访问凭据。
sed -i "s/^METRICS_USER=.*/METRICS_USER=xpanel/" .env
sed -i "s/^METRICS_PASS=.*/METRICS_PASS=$(openssl rand -hex 24)/" .env
chmod 600 .env
| 变量 | 填什么 |
|---|---|
APP_SECRET | openssl rand -hex 64 的结果 |
POSTGRES_PASSWORD | 随机密码;同一个值也会写入 DATABASE_URL |
DATABASE_URL | 主机 remnawave-db —— compose 中的服务名,不需要修改 |
PANEL_DOMAIN | https://panel.example.com |
FRONT_END_DOMAIN | https://panel.example.com —— 允许发起 CORS 请求的来源 |
SUB_PUBLIC_DOMAIN | panel.example.com/api/sub —— 不带 https://,结尾也不带斜杠 |
METRICS_USER, METRICS_PASS | http://127.0.0.1:3001/metrics 的 basic auth 用户名和密码 |
密码哈希、JWT 和 TOTP 密钥加密都依赖 APP_SECRET。首次启动后不能修改:
否则登录会失效,TOTP 密钥也会变得无法读取。请生成一次并妥善保存。
没有 METRICS_USER 和 METRICS_PASS,面板容器不会启动。变量的完整解析见
环境变量。
第 3 步 —— 启动容器
docker compose up -d && docker compose logs -f -t
首次启动时面板会自行应用迁移并填充数据库。成功启动的输出如下:
xpanel | XLADA Backend v1.1.7
xpanel | Nest application successfully started
按 Ctrl+C 退出日志 —— 容器会继续运行。检查状态:
docker compose ps
三个容器 —— xpanel、xpanel-db、xpanel-redis —— 都应处于
running (healthy) 状态。如果 xpanel 反复重启,请在它的日志中查看原因:
docker compose logs --tail=100 xpanel
反向代理和 HTTPS
面板只监听 localhost:127.0.0.1:3000 —— 界面和 API,
127.0.0.1:3001 —— Prometheus 指标。对外由 nginx 或其他 Web 服务器提供,
不需要开放 3000 和 3001 端口。此时域名的 A 记录应已指向该主机,
并且 80 端口应处于空闲状态:Web 服务器要在该端口响应 Let's Encrypt 校验。
面板代码中有中间件,如果请求缺少 X-Forwarded-For 和
X-Forwarded-Proto: https 头,就会断开连接。没有带 TLS 的反向代理,面板无法工作。
包含所有头和 WebSocket 的完整配置见反向代理: 其中有 nginx、Caddy、Angie、Traefik 和 Cloudflare Tunnel。最短路径是 nginx:现成的配置、Let's Encrypt 证书和检查。 配置完成后,确认代理能返回面板:
curl -sI https://panel.example.com | head -3
首次登录
打开 https://panel.example.com —— 面板会提示创建管理员。填写用户名和密码。
密码要求:不少于 24 个字符,必须包含小写字母、大写字母和数字。
示例:XladaProd2026SecurePass!。
登录后立即创建 API 令牌:Settings → API Tokens → Create token。 该值只显示一次。订阅页面和外部集成需要这个令牌。