在Linux系統中部署NodeJS專案
安裝NodeJS
-
首先進入 Node 官網,下載對應的 Node包
-
下載下來後是一個字尾為
xz
的壓縮包,我們把這個包上傳到 Linux 系統中的/usr/local
中 -
接著
cd
到local
資料夾下面解壓這個壓縮包tar -xvf node-v14.17.0-linux-x64.tar.xz
-
然後修改一下名字,修改為
node
,方便我們下面建立軟連線mv node-v14.17.0-linux-x64 node
-
然後進入到
node
資料夾裡面的bin
目錄下,檢視是否有node
和npm
-
建立軟連結,這一步是為了可以在任何目錄下都能使用
node
ln -s /usr/local/node/bin/npm /usr/local/bin/ ln -s /usr/local/node/bin/node /usr/local/bin/
-
設定完成後切換任意目錄執行
npm -v,node -v
看到兩個版本號表示安裝完成
安裝pm2
pm2是一個 NODE.JS 的高階生產過程管理器,使用它可以幫助我們輕鬆的部署執行 Node 專案
安裝
npm install pm2 -g
安裝完成後會自動安裝到我們的 node 目錄下,同樣的需要個給pm2 建立一個軟連結
ln -s /usr/local/node/bin/pm2 /usr/local/bin
下面是 pm2 的一些常用命令
啟動:pm2 start demo.js //demo.js是你要啟動的app_name|app_id檔案
停止:pm2 stop app_name|app_id
刪除:pm2 delete app_name|app_id
重啟:pm2 restart app_name|app_id
停止所有:pm2 stop all
檢視所有的程式:pm2 list
檢視所有的程式狀態:pm2 status
檢視某一個程式的資訊:pm2 describe app_name|app_id
引數說明
--watch:監聽應用目錄原始碼的變化,一旦發生變化,自動重啟。如果要精確監聽、不見聽的目錄,最好通過配置檔案
-i --instances:啟用多少個例項,可用於負載均衡。如果-i 0或者-i max,則根據當前機器核數確定例項數目,可以彌補node.js缺陷
--ignore-watch:排除監聽的目錄/檔案,可以是特定的檔名,也可以是正則。比如--ignore-watch="test node_modules "some scripts"
-n --name:應用的名稱,檢視應用資訊的時候可以用到
-o --output <path>:標準輸出日誌檔案的路徑,有預設路徑
-e --error <path>:錯誤輸出日誌檔案的路徑,有預設路徑
--interpreter <interpreter>:the interpreter pm2 should use for executing app (bash, python...)
如完整引數命令:
pm2 start demo.js --watch -i 2 //開啟2個程式
pm2 start app.js -i max //根據機器CPU核數,開啟對應數目的程式
更多命令可以去官網檢視
這裡我們寫一個測試程式碼,程式碼如下
const express = require("express");
const app = express();
app.get("/", (req, res) => {
res.send("Hello World");
});
app.listen(8080, () => { // 啟動8080埠
console.log("run success");
});
然後把測試專案上傳到 /usr/web
目錄下,在這個資料夾下執行 pm2 start index.js
專案啟動成功後可以使用 ip 地址來訪問我們啟動的專案
linux檢視IP地址
ifconfig -a
紅框所標註的就是ip地址
現在我們使用 192.168.56.128:8080
來嘗試訪問一下看能否正常訪問
可以看到已經可以正常訪問了,這裡有一個坑會導致我們無法訪問,就是 linux 沒有開放我們啟動的8080埠,導致無法在外界訪問到,下面是開放埠方法
linux開放訪問埠
-
第一步:開放埠 以8080埠為例
firewall-cmd --zone=public --add-port=8080/tcp --permanent
命令含義
--zone #作用域 --add-port=8080/tcp #新增埠,格式為 埠/通訊協議 -- permanent #永久生效
成功後返回 success
-
第二步:重啟Centos防火牆
firewall-cmd --reload
成功後返回 success
-
上述步驟操作完成後就可以正常訪問 8080 埠了,開放其他埠和上述方法一致