PM2 的功能不多做介紹了,總之使用簡單,功能強(qiáng)大。
今天實(shí)現(xiàn)了本地自動(dòng)部署node項(xiàng)目到服務(wù)器的流程。簡單總結(jié)下幾個(gè)注意點(diǎn)。
建議先看 文檔
- 先要保證要部署的服務(wù)器上(以下簡稱server)能直接ssh拉倉庫代碼,比如
git clone git@gitee.com:finley/demo.git。不行的話配下server生成ssh-key,然后把public key告訴代碼倉庫服務(wù)商,比如coding.net, github。 - 權(quán)限問題,比如server的登錄用戶是Ubuntu,將來項(xiàng)目要部署在/home/ubuntu下面,可以執(zhí)行下
sudo chown ubuntu:ubuntu /home/ubuntu/.pm2/*不然可能會(huì)部署失敗。 - 部署成功后會(huì)在配置的項(xiàng)目路徑里出現(xiàn)以下三個(gè)目錄:
current -- 當(dāng)前服務(wù)運(yùn)行的文件夾(是source的軟鏈接)
share -- log pid 等共享數(shù)據(jù)
source -- clone 下來的源代碼
- 配置腳本
module.exports = {
/**
* Application configuration section
* http://pm2.keymetrics.io/docs/usage/application-declaration/
*/
apps : [
{
name : 'NODE-API',
script : 'server.js',
env_development: {
NODE_ENV: 'development',
SERVER_PORT: 8081,
LOGSTASH_URL: 'http://localhost/finley/PHP/test.php'
},
env_production : {
NODE_ENV: 'production',
SERVER_PORT: 8081,
LOGSTASH_URL: 'http://192.168.100.16:9700'
}
}
],
/**
* Deployment section
* http://pm2.keymetrics.io/docs/usage/deployment/
*/
deploy : {
// 項(xiàng)目信息
// 下面的配置是我用什么用戶登錄哪個(gè)服務(wù)器,從哪拉代碼,項(xiàng)目存到什么位置。拉完執(zhí)行的腳本是啥
'node1' : {
user : 'ubuntu',
// 寫成數(shù)組,可以同時(shí)部署到多臺(tái)服務(wù)器
host : '119.254.xxx.xxx',
ref : 'origin/develop',
repo : 'ssh://git@demo.com/demo.git',
// 項(xiàng)目的存放地址,會(huì)生成current, source, share目錄
path : '/home/ubuntu/node-project',
// "ssh_options": ["StrictHostKeyChecking=no", "PasswordAuthentication=no"],
"post-deploy" : 'npm install && pm2 startOrRestart ecosystem.config.js --env production'
}
}
};
- 執(zhí)行命令, 如果是windows,在CMD中執(zhí)行沒用,建議在git bash下執(zhí)行。
node1就是要部署的項(xiàng)目名稱
pm2 deploy ecosystem.config.js node1 setup
這個(gè)命令只是拉倉庫代碼
pm2 deploy ecosystem.config.js node1
執(zhí)行這個(gè)命令會(huì)執(zhí)行 post-deploy,運(yùn)行項(xiàng)目
pm2 reload 和pm2 restart 有啥區(qū)別
官方說明:As opposed to restart, which kills and restarts the process, reload achieves a 0-second-downtime reload.
簡單理解:
restart = stop+start
reload = 重新讀取配置文件
具體用哪個(gè)要根據(jù)項(xiàng)目運(yùn)行實(shí)際情況,有些項(xiàng)目需要7*24運(yùn)行,不得stop,這時(shí)候用reload比較好。