Files
MemRelay/projects/d44c219a-0b31-4de1-b160-323eb34a4c6a/生产部署与运维踩坑(宝塔-PM2-升级).md

29 lines
2.0 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.
---
title: 生产部署与运维踩坑(宝塔/PM2/升级)
type: experience
permalink: main/projects/d44c219a-0b31-4de1-b160-323eb34a4c6a/生产部署与运维踩坑宝塔-pm2-升级
stable_id: 2939ce96-a6f6-418a-9a70-568980dbdc2a
scope: project
project_id: d44c219a-0b31-4de1-b160-323eb34a4c6a
memory_type: experience
status: active
revision: 1
restored_from_commit: 6a6a895eafcca6052e81a14fca103a42635dd1c2
created_at: '2026-09-23T15:08:07.372480+00:00'
updated_at: '2026-09-23T15:08:07.372574+00:00'
tags:
- production
- pm2
- baota
- upgrade
- pitfall
---
- **宝塔“Node/PM2 项目”面板不会配置开机自启**:只做 `pm2 save` 不够,服务器重启后应用不在线(2026-09-03 续费重启后发生)。新服务器部署后必须 `pm2 startup systemd -u root --hp /root` + `pm2 save`,并检查 `systemctl is-enabled pm2-root`。resurrect 对在跑应用幂等。
- 服务器 MySQL 5.7 业务账号无 PROCESS 权限,`mysqldump` 必须加 `--no-tablespaces`。
- 上传到 Linux 的 shell 脚本必须 LF 无 BOM(CRLF 会让 bash 报错);本机 ps1 正文用英文,读远端中文需 `[Console]::OutputEncoding = UTF8`。
- 升级包必须解压到线上目录之外;`upgrade.sh/ps1` 会拒绝根目录/同目录/互相嵌套路径,并校验部署哨兵与包完整性;部署目录勿用 NTFS Junction。
- 生产包启动报缺 `.prisma/client/default`:安装依赖后必须在 apps/api 执行 `prisma generate`(init/upgrade 脚本已包含)。
- 安装向导建库:宝塔/云 DB 通常已预建库+账号,`ensureDatabase` 幂等跳过;自建 MySQL 业务账号需建库权限或填管理员账号,不自动 GRANT。
- 升级模式保留旧 `.env`,旧部署无 `SETTING_ENCRYPTION_KEY` 会回退 JWT_SECRET(无回归);Docker/remote 复用 `.deploy/deploy-secrets.json` 保证密钥稳定,否则旧数据因新随机密码连不上。
- 历史 `appIconUrl` 若存 `/uploads/...` URL,local→OSS 后可能指向旧路径;前端按所在端回退默认图标 `/admin/app-icon.svg`、`/trace/app-icon.svg`。