Files
proxy-station/docs/DEPLOY.md
YANG JIANKUAN 43a753963c feat: 新增 deploy Skill 与 LA 生产部署文档
线上为 1 核 1.9G 机器,放弃 Docker:Node 直跑 + systemd 守护,
前端本地构建后由服务端静态托管,HTTPS 与反代由 aaPanel 的 nginx 管理。
部署脚本支持 web/server/all 三种目标,含本地类型检查与单测、
暂存目录原子换入、健康检查失败自动回滚源码、本地与远端源码树指纹比对
及公网校验。首次部署与一次性配置写在 docs/DEPLOY.md。

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-09-03 17:38:38 +08:00

60 lines
3.2 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 生产部署LA 节点,无 Docker
服务器资源有限1 核1.9G),采用 Node 直跑 + systemd 守护,前端在本机构建后由服务端静态托管,反向代理与证书由 aaPanel 管理。
## 拓扑
```
客户端 ──HTTPS──▶ nginxaaPanel 站点 ps.la.njcqtechaicoding.com泛域名证书
└─ proxy_pass http://127.0.0.1:3000 ──▶ proxy-stationsystemd用户 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。
## 更新代码
日常更新用项目级 Skill `deploy`(对 Claude 说「部署」即可触发),也可直接跑脚本:
```bash
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 的库文件:
```bash
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` 创建(脚本模式见 edge-nodes 的 `09-aapanel-sites.py`),不要手写 vhost否则面板里看不到。
- 泛域名 `*.la.njcqtechaicoding.com` 的 DNS 已指向服务器,新子域无需单独加记录。
- acme.sh 的 `--reloadcmd` 要把新站点加进复制循环,且证书源路径必须写死(原先引用未定义的 `$SRC`,续期后不会重新部署证书)。
## 验证
```bash
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
```