在你的 Linux 服务器上部署 Xboard 实现自建机场

2026 年 6 月 22 日

3830 字

19 分钟

教程

在你的 Linux 服务器上部署 Xboard 实现自建机场

这篇教程源于我最近的一次从零搭建 Xboard 面板、Caddy HTTPS、Hysteria2 节点、订阅域名、SMTP 邮件和上线收口的完整过程。

适合你的场景是:你有一台公网 Linux 服务器部署 Xboard 面板,再用一台或多台 Linux VPS 作为节点。当然 Xboard 部署在本地也不是大问题,但至少要有一台海外服务器承接节点。

准备清单

开工前,建议先把下面这些东西准备齐:

  • 一台面板服务器:Ubuntu 22.04 / 24.04 或 Debian 12,建议 1GB 内存起步,2GB 更稳,需要开放 80/tcp443/tcp
  • 一台或多台节点服务器:Ubuntu 22.04 / 24.04 或 Debian 12,协议使用 Hysteria2,需要开放 8443/udp,或者后续使用端口跳跃时开放 20000-29999/udp
  • 一组拆开的域名:一个面板域名、一个订阅域名、一个或多个节点域名。
  • Cloudflare DNS 管理权限:本文示例全部基于 Cloudflare 做 DNS 管理。
  • 一个 SMTP 发信服务:这里使用 Brevo 免费 SMTP。
  • 一个可接收验证邮件的邮箱入口:这里配合 Cloudflare Email Routing 使用。
  • 基础系统工具:curlwgetgitufw,以及后续要安装的 Docker、Caddy、certbot。

本文示例域名如下:

面板域名:v.shishishi3.com
订阅域名:474769754.xyz
香港节点:hk.474769754.xyz
美国节点:us.474769754.xyz

实际使用时替换成你自己的域名。

架构图

本文采用直接的 Linux 部署方式:

用户 -> 域名 HTTPS -> Linux 服务器 Caddy -> Xboard 容器
用户 -> HY2 节点域名 UDP -> Linux 节点服务器 xboard-node

推荐把域名职责拆开:

v.shishishi3.com
用途:Xboard 主面板、后台登录、管理员操作

474769754.xyz
用途:订阅分发入口

hk.474769754.xyz
用途:香港节点域名

us.474769754.xyz
用途:美国节点域名
说明

不建议用同一个域名同时做后台、订阅和节点。分开之后排错和风控都清爽很多,同时也能降低某一项业务出问题后连带影响其他业务的风险。

如果你打算把订阅入口单独拆出来,买一个纯数字域名通常就够用了,一般不会超过 ¥10。

正式教程

1. 服务器准备

面板服务器建议:

系统:Ubuntu 22.04 / 24.04 或 Debian 12
内存:1GB 起,2GB 更稳
端口:80/tcp, 443/tcp

节点服务器建议:

系统:Ubuntu 22.04 / 24.04 或 Debian 12
协议:Hysteria2
端口:8443/udp,或端口跳跃 20000-29999/udp

先更新系统:

sudo apt-get update
sudo apt-get install -y curl wget ca-certificates git ufw
排错

如果这里因为之前安装过 Ookla speedtest 源报错卡住,直接跳到 系统 apt 源报错

2. DNS 配置

Cloudflare DNS 示例:

A  v    面板服务器 IP  DNS only
A  @    面板服务器 IP  DNS only
A  hk   香港节点 IP    DNS only
A  us   美国节点 IP    DNS only

重点:

  1. 根域名 474769754.xyz 的主机名要填 @,不是填 474769754
  2. 节点域名必须灰云,也就是 DNS only,不要橙云。
  3. HY2 走 UDP,Cloudflare 普通代理不转发这种流量。
  4. DNS 刚改完可能要等几分钟。

验证:

nslookup 474769754.xyz 1.1.1.1
nslookup hk.474769754.xyz 1.1.1.1
nslookup us.474769754.xyz 1.1.1.1
排错

如果你本机开了代理或 TUN,看到了 198.18.x.x 这种 fake-ip,跳到 DNS 被 fake-ip 干扰

3. 安装 Docker 与 Compose

如果服务器还没有 Docker:

curl -fsSL https://get.docker.com | sudo sh
sudo systemctl enable --now docker
docker --version
docker compose version

4. 部署 Xboard

Xboard 官方 compose 分支提供了 Docker Compose 模板,默认把容器 7001 暴露到宿主机 7001

cd /opt
sudo git clone -b compose --depth 1 https://github.com/cedar2025/Xboard Xboard
cd /opt/Xboard

确认 compose.yaml 里有类似配置:

services:
  xboard:
    image: ghcr.io/cedar2025/xboard:latest
    restart: unless-stopped
    ports:
      - "7001:7001"
    volumes:
      - ./.env:/www/.env
      - ./.docker/.data/:/www/.docker/.data
      - ./storage/logs:/www/storage/logs
      - ./storage/theme:/www/storage/theme
      - ./plugins:/www/plugins
      - redis-data:/data

初始化安装,推荐 SQLite + 内置 Redis,简单好维护:

sudo docker compose run --rm \
  -e ENABLE_SQLITE=true \
  -e ENABLE_REDIS=true \
  -e ADMIN_ACCOUNT=admin@example.com \
  xboard php artisan xboard:install

安装完成后会输出:

管理员邮箱
管理员密码
后台路径

保存好这些信息,然后启动长期服务:

sudo docker compose up -d
sudo docker compose ps
sudo docker compose logs -f

测试本机访问:

curl -I http://127.0.0.1:7001

正常应返回:

HTTP/1.1 200 OK

5. 安装 Caddy

安装 Caddy:

sudo apt-get install -y debian-keyring debian-archive-keyring apt-transport-https curl
curl -1sLf 'https://dl.cloudsmith.io/public/caddy/stable/gpg.key' \
  | sudo gpg --dearmor -o /usr/share/keyrings/caddy-stable-archive-keyring.gpg
curl -1sLf 'https://dl.cloudsmith.io/public/caddy/stable/debian.deb.txt' \
  | sudo tee /etc/apt/sources.list.d/caddy-stable.list
sudo apt-get update
sudo apt-get install -y caddy

写入 /etc/caddy/Caddyfile

v.shishishi3.com {
	reverse_proxy 127.0.0.1:7001
}

474769754.xyz {
	handle /s/* {
		reverse_proxy 127.0.0.1:7001
	}

	handle /api/v1/client/subscribe* {
		reverse_proxy 127.0.0.1:7001
	}

	respond "Not Found" 404
}

解释:

v.shishishi3.com
完整反代 Xboard 面板。

474769754.xyz
只开放订阅路径,不暴露后台。

这里的 /s/* 很重要。Xboard 实际订阅链接可能是:

https://474769754.xyz/s/xxxxxxxxxxxxxxxx
排错

如果只放行 /api/v1/client/subscribe*,客户端导入订阅会被 Caddy 拦截。这种情况直接跳到 订阅 404

验证并重载 Caddy:

sudo caddy validate --config /etc/caddy/Caddyfile
sudo systemctl reload caddy
sudo journalctl -u caddy -f

测试:

curl -I https://v.shishishi3.com
curl -I https://474769754.xyz

预期:

https://v.shishishi3.com -> 200
https://474769754.xyz -> 404

数字域名根路径返回 404 是正常的,因为我们故意不暴露面板。

排错

如果这里出现 unexpected eof while reading,跳到 Caddy TLS EOF

6. Xboard 基础配置

进入后台后先改:

站点名称:xxx
站点 URL: 此处应为您的域名或子域名(例如 https://v.shishishi3.com)
订阅 URL:此处应为您的域名或子域名(例如 https://474769754.xyz)

安全建议:

后台路径:改成随机路径
开放注册:上线前再开(自用的话可以不开放)
邮箱验证:开启
登录验证码:开启
注册验证码:开启
订阅防盗:开启

如果只有一个 URL 字段,就填:

https://v.shishishi3.com

如果有单独订阅 URL,填:

https://474769754.xyz

7. 邮件 SMTP 配置(自用可以不用考虑此部分)

Cloudflare Email Routing 只能收信和转发,不能作为 SMTP 发信服务器。

推荐用 Brevo 免费 SMTP:

SMTP 主机:smtp-relay.brevo.com
SMTP 端口:587
加密方式:TLS
SMTP 用户名:Brevo 给你的 SMTP Login
SMTP 密码:Brevo SMTP Key
发件人地址:noreply@474769754.xyz

注意:

  1. 端口 587 对应 TLS/STARTTLS,不要选 SSL/TLS
  2. ac96b9001@smtp-brevo.com 这类地址是 SMTP 登录用户名,不是发件人地址。
  3. 发件人可以是 noreply@474769754.xyz,但必须在 Brevo 验证。
  4. Cloudflare Email Routing 可以接收 Brevo 发给 noreply@474769754.xyz 的验证邮件。

Cloudflare DNS 里 SPF 只能有一条。如果 Cloudflare 已有:

v=spf1 include:_spf.mx.cloudflare.net ~all

Brevo 又要求:

v=spf1 include:spf.brevo.com ~all

要合并成:

v=spf1 include:_spf.mx.cloudflare.net include:spf.brevo.com ~all

如果发验证码收不到,先看 Xboard 日志:

cd /opt/Xboard
sudo docker compose logs --tail=160 xboard
sudo grep -R "SMTP\|Brevo\|SendEmailJob\|Unauthorized" storage/logs/
排错

如果日志里出现 525 5.7.1 Unauthorized IP address,直接跳到 邮件验证码收不到

8. 套餐设计

请根据您的实际节点机器和情况来,以下为我的套餐示例:

如果美国节点有较大流量,香港节点只有少量流量,建议这样定位:

美国圣何塞:主力节点,1x
香港节点:备用节点,5x / 8x / 10x

低价套餐示例:

套餐名:Vela Basic
月付:3.9 元
年付:36 元
流量:50GB/月
限速:300Mbps
设备数:3
US:1x
HK:5x 或更高

如果定价是:

月付:3 元
年付:30 元

建议:

流量:40GB/月
限速:200Mbps
设备数:2
HK:8x

套餐描述模板:

## 套餐详情

- 流量:{{transfer}} GB
- 速度限制:{{speed}} Mbps
- 同时在线设备:{{devices}} 台
- 主力节点:美国西岸圣何塞
- 备用节点:香港高倍率节点

## 服务说明

1. 流量{{reset_method}}重置
2. 支持多平台使用,适配常见 iOS、Android、Windows、macOS 客户端
3. 美国圣何塞节点为主力线路,万兆带宽接入,实际可用峰值约 1.8Gbps - 6Gbps
4. 香港节点为备用线路,因月流量有限采用高倍率计费,适合临时切换或低延迟访问
5. 适合日常浏览、社交媒体、AI 工具访问与轻度流媒体使用
6. 禁止 BT/PT、挖矿、扫描攻击、垃圾邮件及长时间占满带宽等滥用行为
7. 7×24小时技术支持

9. 创建 HY2 节点

在 Xboard 后台创建节点,类型选择:

Hysteria

Xboard 后台新建 Hysteria 节点的基础表单

示例 HK 节点:

节点名称:HK-HY2-01
基础倍率:5
流量限制:0
标签:HK, HY2
权限组:Default
节点地址:hk.474769754.xyz
连接端口:8443
服务端口:8443
协议版本:V2
混淆:开启
混淆实现:Salamander
混淆密码:随机生成
SNI:hk.474769754.xyz
允许不安全:关闭
ECH:关闭
上行带宽:按真实带宽填
下行带宽:按真实带宽填
绑定服务器:独立部署或绑定对应机器

示例 US 节点:

节点名称:US-HY2-01
基础倍率:1
节点地址:us.474769754.xyz
连接端口:8443
服务端口:8443
SNI:us.474769754.xyz

注意:

  1. ECH 不是 TLS 证书,不要把 ECH 当成证书配置。
  2. HY2 不走 Caddy 反代。
  3. Caddy 不能用 reverse_proxy 代理普通 HY2 UDP 流量。
  4. 节点域名必须灰云。

下面这张图对应的是连接端口、服务端口、混淆、SNI 和 ECH 这些传输层相关配置:

Xboard 后台 Hysteria 节点的传输层配置

如果你要配置端口跳跃和绑定服务器,可以参考下面这张对应界面:

Xboard 后台 Hysteria 节点的 Hop 间隔与绑定服务器配置

10. 安装 Xboard-Node

您可以直接到 Xboard 的管理后台 -> 节点管理 -> 添加服务器 获取安装 xboard-node 的相关代码,然后将命令在服务器中执行,等待下载完成即可。

Xboard 后台生成服务器 Token 并提供安装命令的界面

在完成安装后可以看到面板的服务器显示在线以及负载等信息

Xboard 后台服务器管理页面显示节点在线状态

11. HY2 证书配置

HY2 必须有 TLS 证书。

排错

如果你已经看到 protocol "hysteria" requires TLS certificate files,直接跳到 服务器在线但节点未运行

先申请证书。节点服务器上如果没有 Web 服务占用 80,可以直接:

sudo apt-get install -y certbot

sudo certbot certonly --standalone \
  -d hk.474769754.xyz \
  --agree-tos \
  -m admin@474769754.xyz \
  --non-interactive

如果同机有 Caddy 或 nginx 占用 80,先停服务,申请后再启动:

sudo systemctl stop caddy
sudo certbot certonly --standalone -d hk.474769754.xyz --agree-tos -m admin@474769754.xyz --non-interactive
sudo systemctl start caddy

证书路径:

/etc/letsencrypt/live/hk.474769754.xyz/fullchain.pem
/etc/letsencrypt/live/hk.474769754.xyz/privkey.pem

复制到 Xboard-Node 目录:

sudo mkdir -p /etc/xboard-node/certs

sudo install -m 0644 /etc/letsencrypt/live/hk.474769754.xyz/fullchain.pem \
  /etc/xboard-node/certs/hk.fullchain.pem

sudo install -m 0600 /etc/letsencrypt/live/hk.474769754.xyz/privkey.pem \
  /etc/xboard-node/certs/hk.privkey.pem

编辑配置:

sudo nano /etc/xboard-node/config.yml

顶层加入:

cert:
  cert_mode: file
  domain: hk.474769754.xyz
  cert_file: /etc/xboard-node/certs/hk.fullchain.pem
  key_file: /etc/xboard-node/certs/hk.privkey.pem

注意 cert: 必须是顶层配置,不要缩进到 panel:machine: 下面。

重启:

sudo systemctl restart xboard-node
sudo journalctl -u xboard-node --since "2 minutes ago" --no-pager

验证 UDP 监听:

sudo ss -lunp | grep 8443

正常应该看到 8443/udp

US 节点同理,把域名和文件名换成:

us.474769754.xyz
/etc/xboard-node/certs/us.fullchain.pem
/etc/xboard-node/certs/us.privkey.pem

12. 防火墙与安全组

面板服务器开放:

80/tcp
443/tcp
22/tcp

节点服务器开放:

8443/udp
22/tcp

如果使用端口跳跃:

20000-29999/udp

ufw 示例:

sudo ufw allow 22/tcp
sudo ufw allow 80/tcp
sudo ufw allow 443/tcp
sudo ufw allow 8443/udp
sudo ufw enable
sudo ufw status

如果云厂商有安全组,也必须放行对应 UDP。只开系统防火墙不够。

13. HY2 端口跳跃

Hysteria2 支持端口跳跃。推荐范围:

20000-29999/udp

Xboard 节点配置:

连接端口:20000-29999
服务端口:8443
Hop 间隔:30

节点服务器把端口范围转发到实际监听端口:

sudo iptables -t nat -A PREROUTING -p udp --dport 20000:29999 -j REDIRECT --to-ports 8443

保存规则:

sudo apt-get install -y iptables-persistent
sudo netfilter-persistent save

检查:

sudo iptables -t nat -S PREROUTING | grep 8443
sudo ss -lunp | grep 8443

稳定前建议同时保留:

8443/udp
20000-29999/udp

稳定后可以只保留端口跳跃范围。

排错

如果你担心 ss 看不到端口范围,跳到 无法看到 UDP 端口范围

14. 用户订阅与客户端

用户创建流程:

创建套餐 -> 创建用户 -> 给用户绑定套餐 -> 复制订阅链接 -> 客户端导入

如果客户端导入后只有 DIRECT,没有节点,常见原因:

  1. 用户没有有效套餐。
  2. 套餐权限组没有包含节点权限组。
  3. 节点隐藏开关开启了。
  4. 节点没运行。
  5. 客户端不支持 Hysteria2。
  6. 订阅模板不支持 HY2。

直接看订阅内容:

curl -L "https://474769754.xyz/s/你的token"

如果输出里没有:

hysteria
hy2
hk.474769754.xyz
US-HY2-01

说明 Xboard 没把节点发出来,优先查套餐和权限组。

如果输出里有节点,但客户端不显示,换支持 HY2 的客户端或换订阅类型,例如 sing-box、Clash Meta、Mihomo。

15. 开放注册前检查

建议上线前确认:

SMTP 测试邮件成功
邮箱验证开启
注册验证码开启
登录验证码开启
后台路径已改随机
订阅域名只放行 /s/*
套餐权限组配置正确
节点倍率配置正确
HK 节点倍率较高
云安全组只开放必要端口

试用策略建议:

注册送套餐:关闭
或 1GB / 1 天
低价套餐不要开放过多 HK 流量

16. 上线收口

最终建议端口:

面板服务器:

80/tcp
443/tcp
22/tcp

节点服务器:

22/tcp
20000-29999/udp

如果不用端口跳跃:

22/tcp
8443/udp

Caddy 只暴露:

面板域名完整反代
订阅域名只放行 /s/* 和必要 API

后台设置:

开放注册:按需开启
邮箱验证:开启
验证码:开启
后台路径:随机
试用额度:极低或关闭

节点策略:

US 主力,1x
HK 备用,5x / 8x / 10x

这样就能从测试态进入公开上线态。

注意事项

系统 apt 源报错

如果遇到这个错误:

E: The repository 'https://packagecloud.io/ookla/speedtest-cli/ubuntu noble Release' does not have a Release file.

说明 Ookla speedtest 的 apt 源不支持当前系统版本,先禁用它:

grep -R "packagecloud.io/ookla" /etc/apt/sources.list /etc/apt/sources.list.d/

假设输出是:

/etc/apt/sources.list.d/ookla_speedtest-cli.list

禁用:

sudo mv /etc/apt/sources.list.d/ookla_speedtest-cli.list \
  /etc/apt/sources.list.d/ookla_speedtest-cli.list.disabled

sudo apt-get update

这是我们实际踩过的坑。安装脚本里只要跑 apt-get update,这个坏源就会把整套流程卡住。

DNS 被 fake-ip 干扰

如果你本机开了代理或 TUN,可能会看到 198.18.x.x 这种 fake-ip。这时用公共 DNS 或临时关闭代理排查。

Caddy TLS EOF

现象:

curl: (35) TLS connect error: unexpected eof while reading

排查:

nslookup 域名 1.1.1.1
sudo caddy validate --config /etc/caddy/Caddyfile
sudo journalctl -u caddy -f

常见原因:

  1. DNS 没指到服务器。
  2. Caddyfile 没上传到服务器。
  3. Caddy 没 reload。
  4. 80/443 没放行。

订阅 404

如果响应头是:

HTTP/2 404
server: Caddy
content-length: 9

说明 Caddy 拦了。确认 Caddyfile 放行:

handle /s/* {
	reverse_proxy 127.0.0.1:7001
}

邮件验证码收不到

看日志:

sudo grep -R "SendEmailJob\|SMTP\|Unauthorized" /opt/Xboard/storage/logs/

如果有:

525 5.7.1 Unauthorized IP address

这表示 Brevo 拒绝了发信出口 IP。查 Xboard 容器出口 IP:

cd /opt/Xboard
sudo docker compose exec -T xboard curl -s https://ifconfig.me

把返回的 IP 加到 Brevo 的 Authorized IP addresses 里。

服务器在线但节点未运行

看日志:

sudo journalctl -u xboard-node -n 120 --no-pager

如果有:

requires TLS certificate files

说明 HY2 缺证书配置,按第 11 节补 cert:

节点运行但无人使用

这是正常状态,表示节点已经启动,只是当前没有客户端连接。

无法看到 UDP 端口范围

检查:

sudo ss -lunp | grep 8443

如果使用端口跳跃,ss 不显示 20000-29999 是正常的,因为程序实际监听的是 8443。要看 iptables:

sudo iptables -t nat -S PREROUTING | grep 20000

同时别忘了云厂商安全组也要放行 20000-29999/udp

删除套餐失败

如果提示“该订阅下存在订单无法删除”,不要硬删。

推荐:

禁用套餐
隐藏套餐
关闭购买
改名 Test-Deprecated

生产系统里保留历史订单引用是正常设计。

参考资料

  • Xboard compose 分支与 ghcr.io/cedar2025/xboard:latest 镜像:https://github.com/cedar2025/Xboard/tree/compose
  • Xboard 官方 compose 默认将宿主机 7001 映射到容器 7001https://raw.githubusercontent.com/cedar2025/Xboard/compose/compose.yaml
  • Xboard-Node 支持 Hysteria2、machine mode、node mode 和安装脚本:https://github.com/cedar2025/Xboard-Node
  • Hysteria2 Port Hopping:https://v2.hysteria.network/docs/advanced/Port-Hopping/
  • Cloudflare Email Routing:https://developers.cloudflare.com/email-service/get-started/
  • Brevo SMTP:https://help.brevo.com/hc/en-us/articles/7924908994450-Send-transactional-emails-using-Brevo-SMTP
在你的 Linux 服务器上部署 Xboard 实现自建机场
https://blog.shishishi3.com/blog/xboard-linux-deployment-guide/
作者
豕豕豕
发布时间
2026 年 6 月 22 日
许可协议
CC BY-NC-SA 4.0

即将打开 RSS Feed

RSS 是给订阅器读取的 XML Feed,浏览器直接打开通常会看到 XML 文本,这属于正常现象。

为避免误触和误导跳转,这里会在 5 秒确认后再进入当前语言的 Feed 页面。

输入关键词开始搜索