部署与运维
标准部署流程
运力管理(fleet)— PR + tag deploy
bash
# 本地
git checkout main && git pull
git tag v0.16.x && git push origin v0.16.x
# 服务器
ssh root@113.249.107.92
cd /opt/robovan
bash scripts/deploy.sh v0.16.x # pg_dump 备份 → migrate → pm2 reload(零停机)NEMPOI — push main 直接部署
bash
# 本地
git checkout main && git push
# 服务器
ssh root@113.249.107.92
cd /opt/nem-poi
git pull && bash scripts/build.sh && pm2 reload nem-poi门户静态文件
不需要 build,直接 git pull 后 nginx 自动 serve /opt/robovan/portal/。
文档门户(docs.zephyrian.site)
bash
cd /opt/robovan/docs-site
npm install
npm run build # 输出 .vitepress/dist/
# nginx serve /opt/robovan/docs-site/.vitepress/dist/紧急运维
pm2 进程
bash
pm2 status
pm2 logs nem-poi --lines 100
pm2 logs vehicle-mgmt --lines 100
pm2 reload <name> --update-env # 改 .env 必须 --update-envnginx
bash
nginx -t # 改完先 test
systemctl reload nginx # 不中断
systemctl restart nginx # 中断,极少用
tail -f /var/log/nginx/error.log数据库
bash
sudo -u postgres psql vehicle_mgmt
sudo -u postgres psql nem_poi
sudo -u postgres psql shared_auth
# 手动备份
bash /opt/robovan/scripts/backup-db.sh manual
bash /opt/nem-poi/scripts/backup-db.sh manualSSL 续期
- 主域 acme.sh:
/root/.acme.sh/acme.sh --list - 子域 certbot:
certbot renew --dry-run - 两者均有 cron / systemd timer 自动跑
应急
| 症状 | 排查 |
|---|---|
| 子域 502 | pm2 status 看进程;pm2 logs 看错;curl 127.0.0.1:<port> 测本地 |
| 登录后立刻 401 | JWT_SECRET 改了 / token_version 不一致 / cookie 跨域 secure 配置 |
| cookie 跨子域不工作 | Domain 必须是 .zephyrian.site,生产必须 secure=true |
| 飞书 OAuth invalid redirect | 飞书后台白名单必须含完整 URL(末尾斜杠也算) |
| 限流报错日志全是 127.0.0.1 | .env 加 TRUST_PROXY=true |
| 证书续期失败 | 80 端口被防火墙拦了 / DNS 没生效 |