Skip to main content

使用pm2管理进程

安装

npm i pm2

创建 strapi 服务启动脚本

scripts/server.js
const strapi = require('@strapi/strapi');

strapi({}).start();

创建 pm2 配置文件

pm2.json
{
"apps": {
"name": "server", // 项目名
"script": "scripts/server.js", // 执行文件
"cwd": "./", // 根目录
// "watch": true, // 是否监听文件变动然后重启
"ignore_watch": ["node_modules", "public"],
"exec_mode": "cluster_mode", // 应用启动模式,支持 fork 和 cluster 模式
"instances": "max", // 应用启动实例个数,仅在 cluster 模式有效 默认为 fork
"error_file": "./logs/app-err.log", // 错误日志文件
"out_file": "./logs/app-out.log", // 正常日志文件
"merge_logs": true, // 设置追加日志而不是新建日志
"log_date_format": "YYYY-MM-DD HH:mm:ss",
"min_uptime": "60s", // 应用运行少于时间被认为是异常启动
"max_restarts": 30, // 最大异常重启次数
"autorestart": true, // 默认为 true, 发生异常的情况下自动重启
"restart_delay": "60", // 异常重启情况下,延时重启时间
"env_production": {
"NODE_ENV": "production",
"ENV_PATH": ".env.prod"
},
"env_development": {
"NODE_ENV": "development",
"ENV_PATH": ".env"
}
}
}

启动命令

package.json
{
"scripts:": {
"deploy": "pm2 startOrRestart pm2.json --env production",
"deploy:container": "pm2-runtime pm2.json --env production"
}
}

其中deploy:container是针对 docker 容器中使用的,因为 pm2 启动服务后 docker 以为运行完成了就会立刻结束服务,所以需要使用pm2-runtime来维持 docker 服务。

本地测试

pm2 startOrRestart pm2.json --env development