Commit bc2fc77e by luoqi

docs(deploy): 修正 host 凭据命令(rotate-secret)+ 补 nginx 反代步骤

- rotate-app-secret --host= → 实际 CLI 是 rotate-secret <name>(只换 appSecret,appId 不变)
- compose 全绑 127.0.0.1,补「反向代理(nginx)必需」一节:TLS + /pac/→3101、/→3100,
  SSE 关缓冲、不禁 iframe 嵌入。

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
parent 65b2028d
Pipeline #3359 failed in 0 seconds
...@@ -42,17 +42,57 @@ DEEPSEEK_API_KEY='sk-...' ALERT_WEBHOOK_URL='https://qyapi.weixin.qq.com/...' \ ...@@ -42,17 +42,57 @@ DEEPSEEK_API_KEY='sk-...' ALERT_WEBHOOK_URL='https://qyapi.weixin.qq.com/...' \
bash deploy/gen-env.sh bash deploy/gen-env.sh
# 末尾报 __FILL_ME__ 的项要补齐(或带全环境变量 + FORCE=1 重跑) # 末尾报 __FILL_ME__ 的项要补齐(或带全环境变量 + FORCE=1 重跑)
# ② 部署 App # ② 部署 App(容器都只绑 127.0.0.1,还不能公网访问)
bash deploy/deploy-prod.sh bash deploy/deploy-prod.sh
# ③ 数据首灌(增量自动注册,不用管) # ③ 反向代理(nginx)—— compose 全绑本地,必须加反代做 TLS + 路由,见下方「反向代理」
# ④ 数据首灌(增量自动注册,不用管)
HOST=jvs-dw DRY_RUN=1 bash deploy/first-import.sh # 先 dry-run 验翻译 HOST=jvs-dw DRY_RUN=1 bash deploy/first-import.sh # 先 dry-run 验翻译
HOST=jvs-dw bash deploy/first-import.sh # 真灌前:去掉 manifest cohort 的 LIMIT/OFFSET HOST=jvs-dw bash deploy/first-import.sh # 真灌前:去掉 manifest cohort 的 LIMIT/OFFSET
# ④ 给宿主一把生产 appSecret(换票用,交给对方后端) # ⑤ 给宿主换票凭据(appId 稳定不变 + 轮换出的新 appSecret,一起交给对方后端)
docker compose -f docker-compose.prod.yml exec pac-service \ docker compose -f docker-compose.prod.yml exec pac-service \
node dist/cli/host-admin.cli.js rotate-app-secret --host=jvs-dw node dist/cli/host-admin.cli.js rotate-secret jvs-dw
# ↑ 只换 appSecret;appId 不变(查:… psql -tAc "SELECT name,app_id FROM hosts")
```
### 反向代理(nginx,必需)
compose 里 pac-service(3101)/ pac-web(3100)都只绑 `127.0.0.1`,不加反代无法公网访问。示例:
```nginx
server {
listen 443 ssl;
server_name pac.<域名>;
ssl_certificate /etc/ssl/pac/fullchain.pem;
ssl_certificate_key /etc/ssl/pac/privkey.pem;
# 后端 API(pac-service)
location /pac/ {
proxy_pass http://127.0.0.1:3101;
proxy_http_version 1.1;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_buffering off; # SSE 流式端点(script:stream / summary:stream)必须关缓冲
proxy_read_timeout 300s;
}
# 前端(pac-web,含 iframe 嵌入)
location / {
proxy_pass http://127.0.0.1:3100;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
proxy_set_header Host $host;
proxy_set_header X-Forwarded-Proto $scheme;
# 不要设 X-Frame-Options DENY —— PAC 要被宿主 iframe 嵌;
# 嵌入白名单由应用侧 CSP frame-ancestors + CORS_ORIGINS 控制。
}
}
``` ```
TLS 证书自备(Let's Encrypt / 云证书);域名要和 `.env``PAC_DOMAIN` 一致。
**必须换成生产值**:`PAC_DOMAIN``DATABASE_URL`/`POSTGRES_PASSWORD``REDIS_URL``DW_CLICKHOUSE_*``DEEPSEEK_API_KEY``ALERT_WEBHOOK_URL` **必须换成生产值**:`PAC_DOMAIN``DATABASE_URL`/`POSTGRES_PASSWORD``REDIS_URL``DW_CLICKHOUSE_*``DEEPSEEK_API_KEY``ALERT_WEBHOOK_URL`
**红线**:JWT 两把密钥切勿复用其他环境(gen-env 已随机);生产 `PAC_ENABLE_MOCK_LOGIN=false`(gen-env 已设,开着=任何人可假冒登录)。PG 密码含 `@:/?#&` 会破坏 `DATABASE_URL`,用 URL 安全字符或直接传完整 `DATABASE_URL=` **红线**:JWT 两把密钥切勿复用其他环境(gen-env 已随机);生产 `PAC_ENABLE_MOCK_LOGIN=false`(gen-env 已设,开着=任何人可假冒登录)。PG 密码含 `@:/?#&` 会破坏 `DATABASE_URL`,用 URL 安全字符或直接传完整 `DATABASE_URL=`
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment