前言
本文主要介紹Nodejs在ubuntu部署線上環境涉及到的知識點,包括環境配置、指令碼工具、PM2應用、Ngix反向代理等等,不斷完善中
推薦文章https://zhuanlan.zhihu.com/p/23778500
通過PM2部署線上專案
PM2是Nodejs應用用於成產過程管理的內建負載平衡器。它能夠讓應用持續執行,0秒過載,並能夠方便的進行常見的系統管理任務。
主要特性是: 1)內建負載均衡 2)後臺執行 3)0秒過載:維護升級不用停機,重新載入程式碼不失去連線 4)控制檯檢測
部署
-
安裝PM2指令
$ npm install pm2 -g 複製程式碼
-
配置pm2.json
{ "apps" : [{ "name" : "www", "cwd" : "/data/source/", "script" : "bin/www", "watch" : true, "node_args" : "--harmony", "merge_logs" : true, "error_file" : "../logs/stderr.log", "out_file" : "../logs/stdout.log", "pid_file" : "../pids/child.pid", "exec_mode" : "cluster_mode", "instances" : 0, "log_date_format" : "YYYY-MM-DD HH:mm Z", "env": { "NODE_ENV": "staging" } }] } 複製程式碼
從在上面的package.json
中我們制定了很多內容
name
:設定當前專案在pm2中展示的名稱
cwd
:指定專案原始碼位置
error_file
:命令列錯誤輸出
out_file
:命令列輸出
evn.Node_ENV
:環境變數
-
通過pm2配置檔案啟動專案
start_node_project.sh
#!/bin/bash #假設工程檔案壓縮包如下 tagname="project.zip" #刪除伺服器釋出目錄原始碼 cd /data/ rm -rf source/* #解壓工程壓縮包到制定目錄 unzip code/${tagname} -d source/ 複製程式碼
#將壓縮包拼上時間字尾,移動到指定目錄,用於版本回退 mv code/${tagname} code/project_
date +%Y%m%d%H%M
.zip #切換到工具目錄 cd /data/deploy/ #通過配置檔案啟動專案 pm2 start pm2.json #檢視node程式 ps -ef|grep node./start_node_project 複製程式碼
-
檢視專案執行情況
pm2 list 複製程式碼
-
追蹤資源執行情況
pm2 monit 複製程式碼
-
檢視應用詳細部署狀態 如果我們想要檢視一個應用詳細的執行狀態,可以執行:
pm2 descrbe {appId} 複製程式碼
-
檢視日誌
pm2 logs 複製程式碼
-
重啟應用
pm2 restart {appId} 複製程式碼
-
停止執行程式
pm2 stop pm2.json 複製程式碼
參考文章
Nginx 反向代理
Nginx ("engine x") 是一個高效能的 HTTP 和 反向代理伺服器,也是一個 IMAP/POP3/SMTP 代理伺服器。
之所以使用Nginx來為Nodejs做反向代理,是因為儘管Node.JS的效能不錯,但處理靜態事務確實不是他的專長,如:gzip編碼,靜態檔案,HTTP快取,SSL處理,負載平衡和反向代理及多站點代理等,都可以通過nginx來完成,從而減小node.js的負載,並通過nginx強大的快取來節省您網站的流量從而提高網站的載入速度。
雖然node.js也有一些如http-proxy的代理模組可以實現一臺伺服器上面架設多個網站(每個域名對映到不同nodejs程式的埠),但這種基礎性的工作,其實更應該交給ngnix來完成,下面看看一些基本操作。
-
安裝Nginx
apt-get install nginx 複製程式碼
-
編寫一個簡單的配置檔案/usr/local/nginx/conf/gaidu/nginx.conf
server { listen 80; server_name h.gaidu.cn;
access_log /data/nginx_log/h.gaidu.cn/access.log short; error_log /data/nginx_log/h.gaidu.cn/error.log ; if ($http_user_agent ~* "qihoobot|Baiduspider|Googlebot|Googlebot-Mobile|Googlebot-Image|Mediapartners-Google|Adsbot-Google|Feedfetcher-Google|Yahoo! Slurp|Yahoo! Slurp China|YoudaoBot|Sosospider|Sogou spider|Sogou web spider|MSNBot|ia_archiver|Tomato Bot") { return 403; } location / { proxy_pass http://10.1.2.147:9099; proxy_set_header Host "h.gaidu.cn"; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto $scheme; } 複製程式碼
}
-
在nginx主配置檔案中引入剛建立的自定義配置檔案
cd /usr/local/nginx/conf , # 開啟nginx.conf, 在http 裡面新增 include /usr/local/nginx/conf/gaidu/* 複製程式碼
-
重啟nginx
/usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf 複製程式碼
-
通過站點訪問
h.gaidu.cn 複製程式碼
-
備註:測試ngix配置檔案
nginx -t -c /usr/local/nginx/conf/gaidu/nginx.conf 複製程式碼