Strapi 生产环境部署与 PM2 守护完整指南
上篇文章《在宝塔面板中创建独立用户部署和运行Strapi完整教程》 中,我们介绍了 Strapi 生产环境部署的基本步骤,包括安装依赖、配置环境变量、创建数据库、迁移数据库、启动 Strapi 等。 本教程旨在以非 Root 用户(普通用户)身份运行 Strapi,以确保服务器的安全性,并使用 PM2 进行进程守护和开机自启。
前置准备与环境检查
假设你的服务器已经安装了 Node.js 和 PM2。
- 目标用户:
strapi_user(请根据实际情况替换) - 项目路径:
/www/wwwroot/strapi/my-strapi-app(请根据实际情况替换)
切换到 Root 用户进行基础设置:
su -修正目录权限: 确保项目目录的所有权归属于
strapi_user用户,否则普通用户无法写入日志或读取文件。chown -R strapi_user:strapi_user /www/wwwroot/strapi/my-strapi-app
️ 第一步:配置 PM2 生态文件
这是最关键的一步。为了避免权限报错(To use --uid and --gid please run pm2 as root),我们需要修改配置文件,明确告诉 PM2 以非特权模式运行。
切换到普通用户并进入项目目录:
su - strapi_user cd /www/wwwroot/strapi/my-strapi-app创建或编辑
ecosystem.config.js:vim ecosystem.config.js填入以下标准配置(已针对你的环境优化):
module.exports = { apps: [ { name: 'strapi-app', // 注意:在较新版本的 PM2 中,建议将命令拆分 script: 'npm', args: 'run start', // 【核心修复】 // 1. 使用 namespace 替代 user 字段,避免触发 UID 切换检查 namespace: 'strapi_user', // 2. 显式关闭特权模式,允许普通用户运行 privileged: false, cwd: '/www/wwwroot/strapi/my-strapi-app', // 项目绝对路径 env: { NODE_ENV: 'production', PORT: 1337, // 确保端口大于 1024,普通用户可监听 }, // 生产环境建议配置 instances: 1, // Strapi 通常单实例即可 autorestart: true, // 崩溃自动重启 max_memory_restart: '500M', // 内存超过 500M 自动重启(防止内存泄漏) log_date_format: 'YYYY-MM-DD HH:mm:ss', // 日志带时间戳 }, ], };启动服务:
pm2 start ecosystem.config.js此时你应该能看到应用状态为
online,且没有权限报错。
第二步:配置开机自启
为了让服务器重启后 Strapi 能自动运行,需要利用 Systemd 生成服务脚本。这一步必须分两步走:先保存,再生成。
保存当前进程列表(在
strapi_user用户下执行):pm2 save这会将进程信息保存到
/home/strapi_user/.pm2/dump.pm2。生成启动脚本(切回
root用户执行):先退出普通用户:
exit然后执行生成命令(注意替换用户名和家目录):
# 语法:pm2 startup systemd -u <目标用户> --hp <目标用户家目录> pm2 startup systemd -u strapi_user --hp /home/strapi_user执行返回的命令(至关重要!): 终端会输出一行以
sudo env PATH=...开头的命令。请务必复制并执行它,否则开机自启不会生效。
️ 常用维护命令速查
为了方便你日后的管理,这里列出常用的 PM2 命令(请在 strapi_user 用户下执行):
| 功能 | 命令 | 说明 |
|---|---|---|
| 查看状态 | pm2 list |
查看所有运行的应用及其状态 |
| 查看日志 | pm2 logs |
实时查看应用日志(排错必用) |
| 重启应用 | pm2 restart strapi-app |
重启指定应用,服务不中断 |
| 停止应用 | pm2 stop strapi-app |
停止指定应用 |
| 删除应用 | pm2 delete strapi-app |
从 PM2 列表中移除应用 |
| 监控面板 | pm2 monit |
查看 CPU、内存等实时监控数据 |
| 更新配置 | pm2 reload ecosystem.config.js |
修改配置文件后重载应用 |
验证清单
完成上述所有步骤后,你可以通过以下方式确认部署成功:
- 检查进程:输入
pm2 list,确认strapi-app状态为online。 - 检查服务:在
root下输入systemctl status pm2-strapi_user.service,确认状态为active (running)。 - 访问测试:在浏览器访问
http://你的服务器IP:1337/admin,看能否打开 Strapi 后台。
评论区