上篇文章《在宝塔面板中创建独立用户部署和运行 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 后台。
💬 评论
加载中...