Strapi 生产环境部署与 PM2 守护完整教程

Strapi 生产环境部署与 PM2 守护完整教程

上篇文章《在宝塔面板中创建独立用户部署和运行 Strapi 完整教程》中,我们介绍了 Strapi 生产环境部署的基本步骤,包括安装依赖、配置环境变量、创建数据库、迁移数据库、启动 Strapi 等。本教程旨在以非 Root 用户(普通用户)身份运行 Strapi,以确保服务器的安全性,并使用 PM2 进行进程守护和开机自启。

前置准备与环境检查

假设你的服务器已经安装了 Node.js 和 PM2。

  • 目标用户strapi_user(请根据实际情况替换)
  • 项目路径/www/wwwroot/strapi/my-strapi-app(请根据实际情况替换)
  1. 切换到 Root 用户进行基础设置:
su -
  1. 修正目录权限:确保项目目录的所有权归属于 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 以非特权模式运行。

  1. 切换到普通用户并进入项目目录:
su - strapi_user
cd /www/wwwroot/strapi/my-strapi-app
  1. 创建或编辑 ecosystem.config.js
vim ecosystem.config.js
  1. 填入以下标准配置(已针对你的环境优化):
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', // 日志带时间戳
    },
  ],
};
  1. 启动服务
pm2 start ecosystem.config.js

此时你应该能看到应用状态为 online,且没有权限报错。


第二步:配置开机自启

为了让服务器重启后 Strapi 能自动运行,需要利用 Systemd 生成服务脚本。这一步必须分两步走:先保存,再生成

  1. 保存当前进程列表(在 strapi_user 用户下执行):
pm2 save

这会将进程信息保存到 /home/strapi_user/.pm2/dump.pm2

  1. 生成启动脚本(切回 root 用户执行):

先退出普通用户:

exit

然后执行生成命令(注意替换用户名和家目录):

# 语法:pm2 startup systemd -u <目标用户> --hp <目标用户家目录>
pm2 startup systemd -u strapi_user --hp /home/strapi_user
  1. 执行返回的命令(至关重要!):终端会输出一行以 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修改配置文件后重载应用

验证清单

完成上述所有步骤后,你可以通过以下方式确认部署成功:

  1. 检查进程:输入 pm2 list,确认 strapi-app 状态为 online
  2. 检查服务:在 root 下输入 systemctl status pm2-strapi_user.service,确认状态为 active (running)
  3. 访问测试:在浏览器访问 http://你的服务器IP:1337/admin,看能否打开 Strapi 后台。

💬 评论

加载中...