Skip to content

部署与运维

标准部署流程

运力管理(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-env

nginx

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 manual

SSL 续期

  • 主域 acme.sh:/root/.acme.sh/acme.sh --list
  • 子域 certbot:certbot renew --dry-run
  • 两者均有 cron / systemd timer 自动跑

应急

症状排查
子域 502pm2 status 看进程;pm2 logs 看错;curl 127.0.0.1:<port> 测本地
登录后立刻 401JWT_SECRET 改了 / token_version 不一致 / cookie 跨域 secure 配置
cookie 跨子域不工作Domain 必须是 .zephyrian.site,生产必须 secure=true
飞书 OAuth invalid redirect飞书后台白名单必须含完整 URL(末尾斜杠也算)
限流报错日志全是 127.0.0.1.envTRUST_PROXY=true
证书续期失败80 端口被防火墙拦了 / DNS 没生效

京ICP备2026033946号