本文详细解析pm2发布Node.js项目时ecosystem.json配置文件的核心参数,包括Git SSH地址、服务器路径权限及环境变量设置。通过分步演示setup与deploy命令的使用,结合SSH公钥配置、安全组白名单设置及端口占用排查,帮助开发者解决部署过程中的常见报错,实现从本地到服务器的自动化发布。
背景
pm2部署环境准备与配置文件结构
近期在构建基于Node.js、Koa和Vue的前后端分离项目时,采用了pm2进行服务发布与管理。
在此简要记录相关配置与操作流程。
首先,在项目根目录下创建配置文件。
文件命名为ecosystem.json。
{
"apps": [
{
"name": "ant-help-center",
"script": "./bin/www", //启动脚本
"env": {
"COMMON_VARIABLE": "true"
},
// 测试服务器
"env_development": {
"NODE_ENV": "development",
"PORT": 8087
},
// 生产环境
"env_production": {
"NODE_ENV": "production",
"PORT": 8087
}
}
],
"deploy": {
// 生产环境
"production": {
"user": "root", //Nginx服务器上的username
"host": ["xxx.xxx.xxx.xxx"], // 服务器地址
"port": "22",
"ref": "origin/master", //从指定的分支拉取代码
"repo": "git@gitee.com:xxx/xxxx.git", // 使用
"path": "/www/website/production", //发布到服务器指定的目录下
"ssh_options": "StrictHostKeyChecking=no",
//构建在发布
"post-deploy":
"npm install && pm2 startOrRestart ecosystem.json --env production",
"env": {
"NODE_ENV": "production"
}
},
// 测试环境
"development": {
"user": "root", //Nginx服务器上的username
"host": ["xxx.xxx.xxx.xxx"], // 服务器地址
"port": "22",
"ref": "origin/master", //从指定的分支拉取代码
"repo": "git@gitee.com:xxx/xxxx.git",
"path": "/www/website/development", //发布到服务器指定的目录下
"ssh_options": "StrictHostKeyChecking=no",
//构建在发布
"post-deploy":
"npm install && pm2 startOrRestart ecosystem.json --env development",
"env": {
"NODE_ENV": "development"
}
}
}
}
ecosystem.json核心参数配置详解
配置过程中需重点关注以下事项:
第一,repo参数必须配置为Git的SSH地址,而非HTTPS地址。

第二,需确保服务器端已创建目标path目录,且当前用户对该目录拥有写入权限。
例如,创建目录路径:/www/website/development。
确保development目录具备写入权限。
本地发布命令执行流程
接下来执行发布操作。
在本地项目文件夹中右键选择“Git Bash Here”打开终端。
首先执行初始化部署命令,确认执行成功后再进行后续步骤。
pm2 deploy ecosystem.json production setup
随后执行正式部署命令。
pm2 deploy ecosystem.json production
SSH配置与发布注意事项
发布环节需注意以下关键点:
第一,必须提前配置好SSH公钥,具体方法可参考相关文档。
第二,发布过程中需要输入服务器登录密码以完成身份验证。
部署后访问测试与故障排查
最后,进行访问测试与故障排查。
尝试通过“服务器IP地址+项目端口号”的方式访问项目。若访问失败,请继续排查。
可进入服务器项目current文件夹,手动执行启动命令以查看具体报错信息。
例如执行启动脚本。
node ./bin/www // 看下是否报错,排查错误
此外,还需注意以下网络与系统配置问题:
第一,Node项目使用的端口必须在云服务商的安全组白名单中开放,否则外部无法访问。第二,检查服务器端口是否被其他进程占用。
以上内容为本文全部要点,希望对各位开发者有所帮助,欢迎持续关注本站获取更多技术分享。