在Linux系統中部署NodeJS專案

X南川發表於2021-05-21

在Linux系統中部署NodeJS專案

安裝NodeJS

  • 下載下來後是一個字尾為 xz 的壓縮包,我們把這個包上傳到 Linux 系統中的 /usr/local

  • 接著 cdlocal 資料夾下面解壓這個壓縮包

    tar -xvf node-v14.17.0-linux-x64.tar.xz
    
  • 然後修改一下名字,修改為 node,方便我們下面建立軟連線

    mv node-v14.17.0-linux-x64 node
    
  • 然後進入到 node 資料夾裡面的 bin 目錄下,檢視是否有 nodenpm

  • 建立軟連結,這一步是為了可以在任何目錄下都能使用 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 專案

PM2官網

安裝

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 埠了,開放其他埠和上述方法一致

相關文章