使用pm2一键部署多个服务
- pm2支持远程部署服务,创建文件
ecosystem.json
,内容形式如:
{
// Applications part
"apps" : [{
"name" : "API",
"script" : "app.js",
"env": {
"COMMON_VARIABLE": "true"
},
// Environment variables injected when starting with --env production
// http://pm2.keymetrics.io/docs/usage/application-declaration/#switching-to-different-environments
"env_production" : {
"NODE_ENV": "production"
}
},{
"name" : "WEB",
"script" : "web.js"
}],
// 部署部分
// Here you describe each environment
"deploy" : {
"production" : {
"user" : "node",
// 多主机配置
"host" : ["212.83.163.1", "212.83.163.2", "212.83.163.3"],
// 服务使用的分支
"ref" : "origin/master",
// Git 仓库地址
"repo" : "git@github.com:repo.git",
// 项目目录
"path" : "/var/www/production",
// Can be used to give options in the format used in the configura-
// tion file. This is useful for specifying options for which there
// is no separate command-line flag, see 'man ssh'
// can be either a single string or an array of strings
"ssh_options": "StrictHostKeyChecking=no",
// To prepare the host by installing required software (eg: git)
// even before the setup process starts
// 可以使用";"分割多个命令
// or path to a script on your local machine
"pre-setup" : "npm install",
// Commands / path to a script on the host machine
// This will be executed on the host after cloning the repository
// eg: placing configurations in the shared dir etc
"post-setup": "ls -la",
// Commands to execute locally (on the same machine you deploy things)
// Can be multiple commands separated by the character ";"
"pre-deploy-local" : "echo 'This is a local executed command'"
// Commands to be executed on the server after the repo has been cloned
"post-deploy" : "npm install && pm2 startOrRestart ecosystem.json --env production"
// Environment variables that must be injected in all applications on this env
"env" : {
"NODE_ENV": "production"
}
},
"staging" : {
"user" : "node",
"host" : "212.83.163.1",
"ref" : "origin/master",
"repo" : "git@github.com:repo.git",
"path" : "/var/www/development",
"ssh_options": ["StrictHostKeyChecking=no", "PasswordAuthentication=no"],
"post-deploy" : "pm2 startOrRestart ecosystem.json --env dev",
"env" : {
"NODE_ENV": "staging"
}
}
}
}
Edit the file according to your needs.
- Be sure that you have the public ssh key on your local machine
ssh-keygen -t rsa
ssh-copy-id node@myserver.com
If you encounter any errors, please refer to the troubleshooting section below.
- Now initialize the remote folder with:
pm2 deploy <configuration_file> <environment> setup
Example:
pm2 deploy ecosystem.json production setup
This command will create the folders on your remote server.
- Deploy your code
pm2 deploy ecosystem.json production
Now your code will be populated, installed and started with PM2.
Deployment options
Display deploy help via pm2 deploy help:
pm2 deploy <configuration_file> <environment> <command>
Commands:
setup run remote setup commands
update update deploy to the latest release
revert [n] revert to [n]th last deployment or 1
curr[ent] output current release commit
prev[ious] output previous release commit
exec|run <cmd> execute the given <cmd>
list list previous deploy commits
[ref] deploy to [ref], the "ref" setting, or latest tag
官方文档:https://pm2.keymetrics.io/docs/usage/pm2-doc-single-page/#simple-deploy