解放雙手,利用 PM2 一鍵部署 Node 專案至 Centos7

愛全庫發表於2018-07-12

配置 Vue-Yarn-PM2 工具環境

說明 本地環境是 Mac , 伺服器環境是 Centos7.x, 開始之前,請自帶翻牆

本地環境

nvm node git pm2 yarn
複製程式碼

首先安裝 brew

/usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"
複製程式碼

安裝 Nvm

wget -qO- https://raw.githubusercontent.com/creationix/nvm/v0.33.11/install.sh | bash
複製程式碼

然後 使用

command -v nvm
複製程式碼

重新啟動 終端 檢視版本

nvm -v
複製程式碼

檢視可裝的 Node 版本

nvm ls-remote
複製程式碼

安裝最新版本的 Node

nvm install v10.6.0
nvm alias default v10.6.0
複製程式碼

安裝 git

去這個網站下載, 然後無腦下一步即可

https://git-scm.com/
複製程式碼

安裝完成 git 先進行配置

 git config --global user.name "mhkz"  
 git config --global user.email 'iquanku@163.com'
複製程式碼

生成 ssh-key

ssh-keygen -t rsa -b 4096 -C "your_email@example.com"
複製程式碼

生成key的時候,會提示建立密碼,不用管,一路回車,回車三次即可

然後把生成的 public key 新增到 github ,防止每次提交都得重新輸入密碼 利用

cat ~/.ssh/id_rsa.pub
複製程式碼

將得到的字串整體複製下來, 然後貼上到 Settings下的 SSH and GKG keys 中,標題隨便寫,自己能夠區別就好

在 github 上新建倉庫,並且複製倉庫地址

本地生成新的倉庫

git init
git add README.md
git commit -m "initial commit"
git remote add origin https://github.com/mhkz/project.git
git push -u origin master
複製程式碼

ok 本地專案已經生成並且上傳到 github 上

安裝 pm2 部署工具

npm install pm2 -g
複製程式碼

檢視開啟的 Node 服務

pm2 list
複製程式碼

伺服器 環境

伺服器環境比較複雜,不僅需要上述的所有步驟,還需要 Nginx 反向代理,以及 SSH 免密登陸, 不然我們每次部署都需要輸入密碼,那就太麻煩了

  yarn nvm node pm2 git nginx
複製程式碼

其中前四種安裝步驟跟 Mac 下安裝方法大同小異,不再詳敘

現在重點說說 Nginx 的安裝和代理的設定

Nginx

Nginx 在 Centos7 下有兩種安裝方式,第一種原始碼安裝,第二種 yum 安裝,這裡採用第一種,原始碼安裝‘

  • 下載並且解壓
wget http://nginx.org/download/nginx-1.10.1.tar.gz
tar -zxvf nginx-1.10.1.tar.gz
複製程式碼
  • 進入 解壓後的資料夾進行編譯
./configure --prefix=/usr/local/webserver/nginx --with-http_stub_status_module --with-http_ssl_module --with-pcre
複製程式碼
  • 編譯
 make && make install
複製程式碼
  • 啟動
cd /usr/local/nginx/sbin

./nginx
複製程式碼
  • 關閉
./nginx -s stop
複製程式碼

nginx 埠代理與域名指向

進入conf 目錄,在該目錄下建立include 檔案。進入 conf/include 目錄,建立 nginx.node.conf 檔案,在裡面輸入如下程式碼:

upstream nodejs {
    server 127.0.0.1:3000;
    keepalive 64;
}
 
複製程式碼
server {
    listen 80;
    server_name p.iquanku.com 47.95.7.29;
    location / {
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header Host  $http_host;
        proxy_set_header X-Nginx-Proxy true;
        proxy_set_header Connection "";
        proxy_pass      http://nodejs;
    }
}
複製程式碼

進入conf ,開啟nginx.conf, 在http 裡面新增 。

include ./include/*
複製程式碼

重啟nginx , 輸入

nginx -c conf/nginx.conf
複製程式碼
  • 利用 Node 建立新專案並且啟動 在伺服器任何地方 建立 server.js 檔案
vim server.js
複製程式碼

把 Node 官網事例貼上進去

const http = require('http');

const hostname = '127.0.0.1';
const port = 3000;

const server = http.createServer((req, res) => {
  res.statusCode = 200;
  res.setHeader('Content-Type', 'text/plain');
  res.end('您好, 我是 大白--------');
});

server.listen(port, hostname, () => {
  console.log(`Server running at http://${hostname}:${port}/`);
});
複製程式碼

利用 pm2 啟動

pm2 server.js start
複製程式碼

在瀏覽器中輸入 p.iquanku.com 或者伺服器域名, 便是能看到返回的 “您好, 我是 大白--------”這寫內容

上面所有內容告一段落,接下來配置自動化倉庫來部署專案
複製程式碼

首先把伺服器 所有 Node 專案停掉

pm2 kill
複製程式碼
pm2 list
複製程式碼

配置伺服器免密登陸

進入本地終端

ssh-copy-id -i ~/.ssh/id_rsa.pub root@47.95.7.29
複製程式碼

重啟控制檯 不用輸入密碼,便可以利用直接連到伺服器

ssh root@47.95.7.29
複製程式碼

在本地最開始初始化的專案中建立兩個檔案 一個是 ecosystem.json檔案, 一個是 server.js檔案

ecosystem.json 內容

{
	"apps": [{
		"name": "new-doc",
		"script": "server.js",
		//"instances": 2 伺服器核心數配置
		"env": {
			"COMMON_VARIABLE": "true"
		},
		"env_production": {
			"NODE_ENV": "production"
		}
	}],
	"deploy": {
		"production": {
			"user": "root",
			"host": ["47.95.7.29"],
			"port": "22",
			"ref": "origin/master",
			"repo": "https://github.com/mhkz/project.git",
			"path": "/www/doc/production",
			"ssh_options": "StrictHostKeyChecking=no",
//			"post-deploy": "npm install"
			"pre-deploy-local": "echo 'Deploy Done'",
			"env": {
				"NODE_ENV": "production"
			}
		}
	}
}
複製程式碼

server.js 內容

const http = require('http');

const hostname = '127.0.0.1';
const port = 3000;

const server = http.createServer((req, res) => {
  res.statusCode = 200;
  res.setHeader('Content-Type', 'text/plain');
  res.end('您好, 我是 大白--------');
});

server.listen(port, hostname, () => {
  console.log(`Server running at http://${hostname}:${port}/`);
});
複製程式碼

然後把專案內容提交到 github 上

git add .
git commit -m "deploy project test"
git push origin master
複製程式碼
  • 一健初始化部署釋出專案
pm2 deploy ecosystem.json production setup
複製程式碼
  • 釋出專案
pm2 deploy ecosystem.json production
複製程式碼

開啟瀏覽器輸入 p.iquanku.com 看到了輸出內容

  • 修改本地檔案內容
const http = require('http');

const hostname = '127.0.0.1';
const port = 3000;

const server = http.createServer((req, res) => {
  res.statusCode = 200;
  res.setHeader('Content-Type', 'text/plain');
  res.end('為什麼路飛的橡膠果實不懼怕閃電');
});

server.listen(port, hostname, () => {
  console.log(`Server running at http://${hostname}:${port}/`);
});
複製程式碼
  • 再次釋出 內容變化
pm2 deploy ecosystem.json production
複製程式碼

這樣,每次修改完成專案提交後,不需要伺服器做任何操作,把程式碼合併到主分支,測試完成後,直接一健部署即可。

  • pm2 開機自啟
pm2 startup centos
複製程式碼

別的命令用到自行 Google ,這裡不再累述

個人公眾號

解放雙手,利用 PM2 一鍵部署 Node 專案至 Centos7

相關文章