自建服务器教程

不想用官方服务器、想数据自持时,用这份教程。两条路都通:A. 只填 frps(推荐,快),B. SSH 一键部署(完整,和官方体验一致)。

先选一条路

方式 A · 只填 frps方式 B · SSH 一键部署
你需要的东西一台能跑 frps 的服务器(或已有 frp 服务)一台 Linux 服务器 + SSH root 权限
耗时5 分钟10–20 分钟
效果手机/外网可通过你 frps 的端口访问完整 HTTPS 入口 + 设备信任 + App 配对
缺点需要自己管入口(端口/HTTPS 可选)当前部署脚本针对 1Panel+OpenResty 布局,其他环境要微调(见下文)

本机前置条件


方式 A · 只填 frps(推荐)

你的服务器只需要一个 frps(FRP 服务端),不用装 OpenResty、不用证书。

1. 在服务器上起 frps

下载 frp(https://github.com/fatedier/frp/releases),写 frps.toml:

bindPort = 17000          # frps 监听端口,记住它
auth.method = "token"
auth.token = "换成你自己的强随机 token"   # 本机 frpc 要用同一个
allowPorts = [{ start = 17001, end = 17999 }]   # 允许的远端端口范围,要覆盖你用的 remote port

启动:./frps -c frps.toml(建议配 systemd 守护)。

注意:本机隧道默认远端端口是 17901(常量 REMOTE_PORT)。要么把上面 allowPorts 含 17901,要么改本机 browserctl.py 里的 REMOTE_PORT 常量并保持一致。

2. 本机填配置

编辑 browserctl_secrets.json(只填隧道相关的三样,SSH 密码留空即可):

{
  "ssh_host": "你的服务器地址或域名",
  "ssh_user": "root",
  "ssh_password": "",
  "frp_token": "跟 frps.toml 里一样的 token",
  "frp_server_port": 17000
}
地址用 ssh_host 字段统一承载:既是 frps 的 serverAddr,也是以后要 SSH 部署时的主机。只跑隧道时它等于 frps 地址。

3. 启动

python browserctl.py start

隧道会把本机 3080 闸机映射到 你的服务器:17901。手机/外网直接访问:

http://你的服务器:17901/

方式 B · SSH 一键部署(完整入口)

适合想跟官方一样"手机打开一个 HTTPS 网址就用"的用户。前提:服务器是 Ubuntu/Debian,且用 1Panel 安装的 OpenResty 容器(当前部署脚本按此布局编写)。

1. 填完整配置

browserctl_secrets.json 里再补上 SSH 凭据(密码或私钥):

{
  "ssh_host": "你的服务器",
  "ssh_user": "root",
  "ssh_password": "你的 root 密码,或用 ssh_key",
  "ssh_key": "",
  "frp_token": "你的 token",
  "frp_server_port": 17000
}

2. 固定主机指纹(首次)

python browserctl.py ssh-trust

3. 部署网关 + 引导页

python browserctl.py nginx --remote-port 17901

这一步会 SSH 到服务器:

之后 python browserctl.py upload 可单独重新上传引导页(如轮换 DSH Cookie 后)。

4. 关于部署路径(自建需要微调的地方)

部署脚本用到的服务器路径/容器名是常量,位于 browserctl.py 顶部:

SERVER_CONF = "/ymz/1panel/www/conf.d/<你的站点>.conf"     # OpenResty 配置落盘位置
SERVER_INDEX = "/ymz/1panel/www/sites/<你的站点>/index"     # 引导页目录
OPENRESTY = "<你的 OpenResty 容器名>"                       # docker exec 目标容器

你的服务器若布局不同,把这几个常量改成你环境的实际值再跑 nginx 命令。


常见问题