Files
proxy-station/docs/DEPLOY.md
YANG JIANKUAN 5326c572a2 feat: 合并边缘节点运维并完善 Surge 配置安全
迁入通用节点部署工具、离线交付页生成器和共用技能,隔离真实配置与交付产物。统一 Codex 与 Claude Code 开发约定,补充节点迁移与运维文档。

完善 FINAL、策略组引用、输入校验、Surge 字段编码与 AI DNS 例外保护,增加隔离测试和订阅验证工具。

验证:全量类型检查、44 项单测、前端构建、脚本语法、技能入口与凭据隔离检查均通过。
2026-10-03 23:19:59 +08:00

3.7 KiB
Raw Blame History

生产部署(LA 节点,无 Docker)

服务器资源有限(1 核/1.9G),采用 Node 直跑 + systemd 守护,前端在本机构建后由服务端静态托管,反向代理与证书由 aaPanel 管理。

本文描述 Proxy Station 应用发布。边缘 VPS 的部署、重建与协议维护已合入本仓库,见 节点工作区 与 edge-node-multi-protocol 技能;其私有资料不随应用部署上传。LA 同时承载节点与本应用,维护 nginx、证书或 WARP 时需核对共享服务影响。

拓扑

客户端 ──HTTPS──▶ nginx(aaPanel 站点 ps.la.njcqtechaicoding.com,泛域名证书)
                     └─ proxy_pass http://127.0.0.1:3000 ──▶ proxy-station(systemd,用户 proxy-station)
项目 位置
代码 /opt/proxy-station(含 web/dist 构建产物,无 web/src)
数据库 /opt/proxy-station/data/proxy-station.db
环境变量 /etc/proxy-station/env(PORT/DATA_DIR/ADMIN_TOKEN,权限 600)
服务 systemctl status proxy-station,日志 journalctl -u proxy-station -f
nginx 站点 aaPanel 站点 ps.la.njcqtechaicoding.com,反代配置在 /www/server/panel/vhost/nginx/proxy/<域名>/
证书 /www/server/panel/vhost/cert/<域名>/,由 acme.sh 续期钩子统一复制

ADMIN_TOKEN 在 Web 界面「设置」页填入,存于浏览器 localStorage。

更新代码

日常更新用 Codex/Claude Code 共用的项目级技能 deploy(说「部署」即可匹配;也可分别用 $deploy//deploy 显式调用),也可在仓库根目录直接跑脚本:

bash .claude/skills/deploy/scripts/deploy.sh all      # 前后端一起(默认)
bash .claude/skills/deploy/scripts/deploy.sh web      # 只换前端产物,不重启
bash .claude/skills/deploy/scripts/deploy.sh server   # 只推后端源码,装依赖并重启

脚本自带本地 typecheck/单测、tar 管道推送、暂存目录原子换入、健康检查失败自动回滚源码,以及本地与远端的源码树指纹比对与公网校验。细节见 .claude/skills/deploy/SKILL.md。

SSH 别名必须用小写 la,大写会被当作域名解析。

迁移数据库

用 sqlite3 在线备份导出一致副本,避免直接拷贝带 WAL 的库文件:

sqlite3 server/data/proxy-station.db ".backup /tmp/ps.db"
scp /tmp/ps.db la:/tmp/ps.db
ssh la 'systemctl stop proxy-station && install -m 644 -o proxy-station -g proxy-station /tmp/ps.db /opt/proxy-station/data/proxy-station.db && rm -f /opt/proxy-station/data/proxy-station.db-wal /opt/proxy-station/data/proxy-station.db-shm /tmp/ps.db && systemctl start proxy-station'

反向代理注意点

  • aaPanel 的反代模板不带 X-Forwarded-Proto/X-Forwarded-Host,已手工补进反代配置。服务端 routes/sub.ts 的 baseUrl() 依赖这两个头还原外部地址,缺失时 Surge 的 #!MANAGED-CONFIG 与 Clash 的 provider URL 会变成 http://。
  • 站点通过面板类 AddSite/SetSSL/CreateProxy/HttpToHttps 创建(脚本模式见本仓库 .claude/skills/edge-node-multi-protocol/scripts/09-aapanel-sites.py),不要手写 vhost,否则面板里看不到。
  • 泛域名 *.la.njcqtechaicoding.com 的 DNS 已指向服务器,新子域无需单独加记录。
  • acme.sh 的 --reloadcmd 要把新站点加进复制循环,且证书源路径必须写死(原先引用未定义的 $SRC,续期后不会重新部署证书)。

验证

curl -s https://ps.la.njcqtechaicoding.com/api/health
curl -s "https://ps.la.njcqtechaicoding.com/sub/<token>/clash" > /tmp/c.yaml && mihomo -t -f /tmp/c.yaml