使用pm2快速將專案部署到遠端伺服器
使用背景
當我們需要將專案部署到遠端線上伺服器時;傳統的方法可能就是:
將原生代碼通過ssh、ftp等方式上傳到伺服器;然後通過ssh登入到伺服器,配置好環境;手動啟動應用。太過手動化,麻煩,操作繁瑣。
現代自動化部署
環境:本地(Mac);遠端伺服器(CentOS)使用工具:Git、pm2、node;需知概念:ssh祕鑰登陸;Github新增Deploy Keys
1、伺服器環境部署
基本工具安裝:git、pm2、node
2、ssh伺服器免密登陸
伺服器生成祕鑰對
ssh-keygen -t rsa -C '[email protected]'
-t 指定金鑰型別,預設即 rsa ,可以省略
-C 設定註釋文字,比如郵箱,可以省略
由於使用的是百度雲伺服器,裡面可以直接介面生成祕鑰對,然後下載到本地的是一個xxx.txt檔案
. 此時登陸可以使用ssh -i xxx.txt[下載的公鑰路徑] name@domain報錯:
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@ WARNING: UNPROTECTED PRIVATE KEY FILE! @
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
Permissions 0644 for 'server-key.txt' are too open.
It is required that your private key files are NOT accessible by others.
This private key will be ignored.
Load key "server-key.txt": bad permissions
大概意思就是,私鑰檔案不能被其他人所訪問。可能考慮到如果被別人獲取到,就可能對伺服器安全造成影響,所以需要從新設定下祕鑰檔案的許可權
重新設定祕鑰檔案許可權:chmod 600 server-key.txt,取消其他使用者Read許可權但是,使用ssh name@domain形式還是沒法直接登入;追其原因,發現因為不是本地直接生成的祕鑰對;所以需要使用ssh-add -K ~/.ssh/xxx.txt[下載公鑰檔案](-K表示永久儲存式,如果不使用者每次開機後需要重新ssh-add),就像是本地生成祕鑰對然後部署到伺服器需要將祕鑰追加到ssh認證檔案一個道理;ssh name@domain可以正常免密登陸啦!(配置這種形式登陸後面pm2需要使用)配置快捷登入(附加)
1. 進入ssh目錄:cd ~/.ssh
2. 建立config檔案: touch config
3. 進入config配置檔案配置:vi config
Host lwh #快捷別名
HostName host #ssh伺服器ip或domain
Port port #ssh伺服器埠,預設為22
User root #ssh伺服器使用者名稱
IdentityFile ~/.ssh/server-key.txt #下載的私鑰檔案
4. :wq!儲存退出
5. 完成後可以直接使用:ssh lwh 登陸
在Github上新增Deploy Keys
伺服器生成祕鑰
# 生成ssh key
ssh-keygen -t rsa
# 檢視公鑰內容
cat ~/.ssh/id_rsa.pub
複製祕鑰內容,新增到Github上對應的專案倉庫Settings下的Deploy keys中配置Deploy keys,使得伺服器可以通過ssh拉取專案倉庫;
配置pm2
配置ecosystem.config.js;具體pm2配置及基本使用介紹,戳~使用pm2配置生產環境
module.exports = {
apps: [
{
name: 'back-Api', //應用名
script: './server/start.js', //應用檔案位置
env: {
//PM2_SERVE_PATH: "./apidoc", //靜態服務路徑
PM2_SERVE_PORT: 8080, //靜態伺服器訪問埠
NODE_ENV: 'development' //啟動預設模式
},
env_production : {
PM2_SERVE_PORT: 8080,
NODE_ENV: 'production' //使用production模式 pm2 start ecosystem.config.js --env production
},
instances:"max", //將應用程式分佈在所有CPU核心上,可以是整數或負數
instance_var: "INSTANCE_ID",
exec_mode: "cluster",
min_uptime: "30s",
max_restarts: 10,
//cron_restart: "40",
watch:[
"server",
], //監聽模式,不能單純的設定為true,易導致無限重啟,因為日誌檔案在變化,需要排除對其的監聽
merge_logs: true, //叢集情況下,可以合併日誌
}
],
deploy: {
production : {
//配置沒法提供密碼,所以前面需要配置ssh免密碼登入伺服器
user: 'root', //ssh 登陸伺服器使用者名稱
host: '100.12.102.198', //ssh 地址伺服器domain/IP
ref: 'origin/master', //Git遠端/分支
repo: '[email protected]', //git地址使用ssh地址
path: '/liwenhui/www', //專案存放伺服器檔案路徑
"post-deploy": 'npm install && pm2 reload ecosystem.config.js --env production' //部署後的動作
}
}
};
豌豆資源搜尋網站 https://55wd.com 電腦刺繡繡花廠 http://www.szhdn.com
開始部署
開始部署
pm2deployecosystem.config.jsproduction
報錯
appledeMBP:back-server-api apple$ pm2 deploy ecosystem.config.js production
--> Deploying to production environment
--> on host 106.12.132.188
○ deploying origin/master
○ executing pre-deploy-local
○ hook pre-deploy
bash: 第 0 行:cd: /lwh/www/source: 沒有那個檔案或目錄
○ fetching updates
○ full fetch
bash: 第 0 行:cd: /lwh/www/source: 沒有那個檔案或目錄
fetch failed
Deploy failed
1
需要先初始化伺服器應用:pm2 deploy ecosystem.config.js production setup,然後:pm2 deploy ecosystem.config.js production