Quick start

从零开始部署 xfrp

需要 Go 1.26+、Node.js 20+ 和 pnpm。前端构建产物由 Nginx 托管,中控只提供 API。

1. 构建

在项目根目录执行,产物包括三个二进制和前端静态文件。

make build
# bin/xfrp-master
# bin/xfrp-server
# bin/xfrp-client
# web/dist/website  web/dist/user  web/dist/admin

2. 创建管理员并启动中控

管理员没有默认密码,只能通过命令行或已有管理员创建。

./bin/xfrp-master admin create \
  --username admin \
  --email [email protected]

./bin/xfrp-master --addr :9000

健康检查:http://127.0.0.1:9000/healthz。

3. 接入网关

在管理端创建网关,复制安装命令到公网机器执行。每台网关都必须归属一个用户。

xfrp-server \
  --master wss://panel.example.com/api/v1/ws/node \
  --id srv_xxxxxxxxxxxx \
  --secret xxxxxxxx \
  --data-dir /var/lib/xfrp

4. 接入客户端并添加代理

内网机器只安装 xfrp-client,运行 frpc,不需要网页。

xfrp-client \
  --master wss://panel.example.com/api/v1/ws/node \
  --id cli_xxxxxxxxxxxx \
  --secret xxxxxxxx \
  --data-dir /var/lib/xfrp

节点也支持 XFRP_MASTER_URL、XFRP_NODE_ID、XFRP_NODE_SECRET 环境变量,适合交给 systemd 或 Docker 管理。

5. Nginx 路径

公共站、用户控制台、管理端和 API 使用同一个域名,按二级路径转发。

# http {} 中:map $http_upgrade $connection_upgrade { default upgrade; '' close; }

location /         { root /srv/xfrp/website; try_files $uri $uri/ $uri.html =404; }
location = /user   { return 301 /user/; }
location /user/    { root /srv/xfrp; try_files $uri $uri/ /user/index.html; }
location = /admin  { return 301 /admin/; }
location /admin/   { root /srv/xfrp; try_files $uri $uri/ /admin/index.html; }
location /api/     {
    proxy_pass http://127.0.0.1:9000;
    proxy_http_version 1.1;
    proxy_set_header Host $host;
    proxy_set_header Upgrade $http_upgrade;
    proxy_set_header Connection $connection_upgrade;
    proxy_read_timeout 3600s;
}

完整示例见仓库的 deploy/nginx.conf.example。生产环境务必使用 HTTPS,并把中控的 http.public_url 设为对外地址,节点安装命令会据此生成 wss:// 地址。

下一步

登录控制台,添加客户端和第一条代理。

进入控制台