跳到主要内容

安装面板

源代码

面板 — 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:

容器镜像作用
xpanelghcr.io/xray-panel/backend:latest127.0.0.1:3000 上的界面和 API
xpanel-dbpostgres:18.4数据库
xpanel-redisvalkey/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_SECRETopenssl rand -hex 64 的结果
POSTGRES_PASSWORD随机密码;同一个值也会写入 DATABASE_URL
DATABASE_URL主机 remnawave-db —— compose 中的服务名,不需要修改
PANEL_DOMAINhttps://panel.example.com
FRONT_END_DOMAINhttps://panel.example.com —— 允许发起 CORS 请求的来源
SUB_PUBLIC_DOMAINpanel.example.com/api/sub —— 不带 https://,结尾也不带斜杠
METRICS_USER, METRICS_PASShttp://127.0.0.1:3001/metrics 的 basic auth 用户名和密码
APP_SECRET 不可更改

密码哈希、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 校验。

必须使用 HTTPS

面板代码中有中间件,如果请求缺少 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。 该值只显示一次。订阅页面和外部集成需要这个令牌。

接下来​

  • 安装节点 —— 将代理服务器连接到面板。
  • 反向代理 —— 适用于你的 Web 服务器的现成配置。
  • 订阅页面 —— 美化后的订阅发放。
  • 面板安全 —— 已经做好了哪些防护,以及需要记住什么。