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>
This commit is contained in:
59
docs/DEPLOY.md
Normal file
59
docs/DEPLOY.md
Normal file
@@ -0,0 +1,59 @@
|
||||
# 生产部署(LA 节点,无 Docker)
|
||||
|
||||
服务器资源有限(1 核/1.9G),采用 Node 直跑 + systemd 守护,前端在本机构建后由服务端静态托管,反向代理与证书由 aaPanel 管理。
|
||||
|
||||
## 拓扑
|
||||
|
||||
```
|
||||
客户端 ──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。
|
||||
|
||||
## 更新代码
|
||||
|
||||
日常更新用项目级 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
|
||||
```
|
||||
Reference in New Issue
Block a user