發現一台服務器部署管理多個nodejs服務,可以采用二級域名weekly.mwcxs.top,也可以采用固定后綴www.mwcxs.top/weekly的方式,本文先從固定后綴的方式部署管理多個nodejs服務。
以下詳細的介紹,以周報企業管理系統為例進行部署,歡迎fork和start,源碼地址:https://github.com/saucxs/weekly,展示地址:http://weekly.mwcxs.top有問題一起交流。
1、去官網下載和自己系統匹配的文件:
英文網址:https://nodejs.org/en/download/
中文網址:http://nodejs.cn/download/
建議去英文網站下載 ,因為中文這邊沒有給出穩定版,目前穩定版8點多。最新版是10點多
2、查看linux系統的位數
通過 uname -a 命令查看到我的Linux系統位數是64位(備注:x86_64表示64位系統, i686 i386表示32位系統),如圖
選擇64位
3、下載下來的tar文件上傳到服務器並且解壓
我使用的xshell中的rz命令來上傳文件
在xshell中輸入rz命令,看是否已經安裝了lrzsz,如果沒有安裝則執行 yum -y install lrzsz命令進行安裝。
安裝成功后,輸入rpm -qa lrzsz 命令確認是否正確安裝
輸入rz或者re -y,選擇剛才下的壓縮包
現在開始解壓
tar -xvf node-v8.12.0-linux-x64.tar.xz
修改文件夾(目錄)的名字
mv node-v8.12.0-linux-x64 nodejs
4、執行軟連接
注意:確認一下nodejs下bin目錄是否有node 和npm文件,如果有執行軟連接,如果沒有重新下載執行上邊步驟
確認有node和npm文件了
執行軟鏈接
ln -s /home/cxs/install/nodejs/bin/npm /usr/local/bin/
ln -s /home/cxs/install/nodejs/bin/node /usr/local/bin/
發現自己沒有權限,然后找老大要來root賬號
下面是root權限下執行
ok了,回到自己用戶下
ok了
5、安裝pm2,通過pm2啟動node可以使關閉終端時node依然運行。
進入后端代碼的跟目錄,通過npm i 安裝后端代碼需要的庫,啟動node
pm2 start index.js
說明,沒有配制到全局,雖然安裝到全局,不知道為啥,linux下不像windows下能自動創造一個環境變量去實現我們的全局。所以我們需要創建一個linux下的軟連接。
下面紅框就是pm2的安裝路徑,連接到全局環境路徑
下面出現的都是全局環境路徑,選哪一個都可以,我選的是紅框的全局環境變量/usr/local/bin
建立連接
ln -s /home/cxs/install/nodejs/bin/pm2 /usr/local/bin/
使用pm2 list驗證是否成功建立連接
pm2 list
說明pm2全局安裝成功,並且可以隨處訪問pm2,我試試我的賬號是不是也可以使用pm2命令
出現這個,說明其他賬號也可以全局都可以使用pm2
5、thinkjs項目,使用pm2 start pm2.json
來啟動項目
切換到自己的賬號上,需要全局變量時候沒有權限的時候采用root賬號
上傳項目代碼,使用xshell的rz -y來
執行
pm2 start pm2.json
出現上圖應該就算啟動起來了
但是我想看一下項目啟動之后訪問情況,怎么搞,這時候需要祭出nginx
6、nginx使用
已經部署完成,但是公網訪問出現問題,出現502,
發現是nginx配置的問題,
方案一:把nginx的實際訪問地址172.31.231.103:8362修改為127.0.0.1:8362
upstream weekly_node { server 172.31.231.103:8362; }
方案二:把項目node的啟動主機host(127.0.0.1)修改為0.0.0.0
附上完整的nginx服務配置
user root; worker_processes 1; #error_log logs/error.log; #error_log logs/error.log notice; #error_log logs/error.log info; #pid logs/nginx.pid; events { worker_connections 1024; } http { include mime.types; default_type application/octet-stream; sendfile on; keepalive_timeout 65; upstream weekly_node { server 172.31.231.103:8362; } server { listen 80; server_name localhost; charset utf-8; #weekly static location /weekly/ { #root /home/fastdfs/nginx/weekly/dist; alias /home/fastdfs/nginx/weekly/dist/; index index.html index.htm; try_files $uri $uri/ /index.html last; #root html; #index index.html; }
#nodejs服務方向代理 location /weekly_node/ { proxy_pass http://weekly_node; proxy_redirect off; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; client_max_body_size 10m; client_body_buffer_size 128k; proxy_connect_timeout 90; proxy_send_timeout 90; proxy_read_timeout 90; proxy_buffer_size 4k; proxy_buffers 4 32k; proxy_busy_buffers_size 64k; proxy_temp_file_write_size 64k; } } }