如何使 PM2 在系統啟動時自動啟動 Node.js 應用程式?
介紹
PM2 是一個用於 Node.js 應用程式的程序管理器。它能夠在應用程式崩潰時自動重啟應用程式,同時管理多個應用程式,並提供詳細的日誌和錯誤資訊。由於易用性和強大的功能,此工具已被 Node.js 開發人員廣泛採用。
使用 PM2 的最重要優勢之一是它簡化了 Node.js 應用程式的管理,透過自動化啟動、停止和重啟程序等常見任務。PM2 還提供監控功能,使開發人員能夠即時跟蹤應用程式效能指標。
在系統啟動時自動啟動 Node.js 應用程式的重要性
Node.js 已成為開發伺服器端應用程式最流行的程式語言之一。這些應用程式通常執行在伺服器上,這些伺服器需要頻繁重啟以進行更新或系統維護。
安裝 PM2
PM2 是一個用於 Node.js 應用程式的程序管理器。它提供諸如叢集模式、負載平衡和崩潰時自動重啟等功能。安裝 PM2 非常簡單直觀,可以使用 npm 輕鬆完成。
要安裝 PM2,您需要在您的機器上已經安裝了 Node.js。您可以在終端中執行命令 `node -v` 來檢查 Node.js 是否已安裝。
如果未安裝,請從官方網站下載並安裝它。安裝 Node.js 後,開啟您的終端並執行以下命令以全域性安裝 PM2:
npm install pm2 -g
這將在您的系統上全域性安裝 PM2,以便您可以在系統的任何位置使用它。
安裝 PM2 的分步指南
現在您已在系統上安裝了 PM2,讓我們逐步瞭解如何使用 PM2 設定 Node.js 應用程式:
導航到 Node.js 應用程式所在的目錄。
cd /path/to/your/nodejs/app
使用以下命令使用 PM2 啟動應用程式:
pm2 start app.js
這將使用預設設定啟動您的應用程式。
使用此命令檢查應用程式是否已成功啟動:
pm2 list
這將顯示在 PM2 下執行的所有應用程式的列表。
配置 PM2 用於 Node.js 應用程式
可以根據應用程式的具體需求配置 PM2。其主要配置選項之一是環境變數,它允許開發人員指定全域性引數,例如資料庫 URL 或身份驗證憑據。
要為應用程式的生態系統檔案 (ecosystem.config.json) 配置環境變數,請將其作為鍵值對新增到“env”物件中。例如,要為應用程式設定資料庫 URL 和身份驗證憑據,生態系統檔案應如下所示:
{ "apps": [ { "name": "myapp", "script": "app.js", "env": { "DATABASE_URL": "", "AUTHENTICATION_CREDENTIALS": "" } } ] }
透過此配置,可以使用 `process.env.DATABASE_URL` 和 `process.env.AUTHENTICATION_CREDENTIALS` 在程式碼中訪問環境變數。除了環境變數之外,PM2 還提供了許多其他配置選項,例如負載平衡、叢集模式等。
啟用系統啟動時自動啟動
如果您正在執行對業務運營至關重要的 Node.js 應用程式,則必須確保在伺服器每次啟動時都能自動啟動該應用程式。這樣,您就不必在每次系統重新啟動時手動啟動應用程式。在本節中,我們將討論如何在各種作業系統上使用不同的工具啟用系統啟動時自動啟動。
瞭解在系統啟動時啟用自動啟動的過程
在深入研究具體的工具和方法之前,讓我們瞭解在系統啟動時啟用自動啟動的一般過程。該概念在大多數作業系統中都類似;但是,在使用的工具和命令方面可能存在差異。
建立一個啟動 Node.js 應用程式的指令碼檔案。
確保此指令碼檔案具有可執行許可權。
將此指令碼檔案新增到作業系統中的適當位置。
建立一個服務或任務,以便在啟動時執行您的指令碼檔案。
使用 systemd 在 Linux 系統上啟用自動啟動
Systemd 是一個基於 Linux 的 init 系統和服務管理器,它使使用者能夠有效地管理服務。它預裝在大多數現代 Linux 發行版(如 Ubuntu 16.04 及更高版本)上。
要使用 systemd 為您的 Node.js 應用程式啟用自動啟動:
在 `/etc/systemd/system` 目錄中建立一個新的檔案,並使用 `.service` 副檔名(例如,myapp.service)。
新增以下配置行:
[Unit] Description=My Node.js App After=network.target [Service] Environment=NODE_ENV=production ExecStart=/usr/bin/node /path/to/your/app.js Restart=always User=nobody Group=nobody [Install] WantedBy=multi-user.target
儲存並關閉檔案。
使用命令 `systemctl daemon-reload` 重新載入 systemd 配置。
使用 `systemctl enable myapp.service` 啟用服務以在系統啟動時自動啟動。
高階配置選項
PM2 高階配置選項的功能
雖然用於自動啟動 Node.js 應用程式的 PM2 的基本安裝和配置非常簡單,但它還提供了大量高階配置選項,可以幫助您微調設定以滿足您的特定需求。PM2 提供的一個強大選項是能夠自定義啟動指令碼。
預設情況下,PM2 會自動檢測並啟動您主目錄或當前工作目錄中的 Node.js 應用程式。但是,您可以指定一個自定義啟動指令碼,該指令碼在啟動 Node.js 應用程式之前執行您需要執行的任何命令。
這可能包括設定環境變數、載入配置檔案或執行應用程式所需的其它程序。PM2 提供的另一個有用功能是能夠設定自定義環境變數。
環境變數允許您在執行時將重要資訊傳遞到您的應用程式中,這些資訊可能會影響應用程式的行為或處理的資料。預設情況下,PM2 在啟動應用程式時會繼承您 shell 會話中設定的所有環境變數。
使用示例自定義啟動指令碼和環境變數
自定義啟動指令碼的一個示例用例可能是執行一個預啟動指令碼,該指令碼在啟動主要的 Node.js 應用程式程序之前檢查 Git 儲存庫中是否有任何可用的更新。要使用 PM2 執行此操作,我們首先需要在我們的 `~/scripts/` 目錄中建立一個新的 `.sh` 指令碼檔案:
#!/bin/bash cd /path/to/my/app git fetch && git merge origin/master
然後,我們將在我們的 `ecosystem.config.js` 檔案中為我們的應用程式新增一個條目,該條目將此指令碼指定為 `pre` 命令:
javascript module.exports = { apps: [ { name: "my-app", script: "/path/to/my/app/index.js", env_production: { NODE_ENV: "production" }, // Add the following `pre` property pre: "/home/myuser/scripts/update-app.sh", } ] }
現在,每次我們使用 PM2 啟動 Node.js 應用程式程序時,它都會首先執行此自定義指令碼以從我們的 Git 儲存庫中獲取任何更新。
至於使用 PM2 設定環境變數,假設我們需要根據我們在開發模式還是生產模式下執行來在我們的應用程式中設定一個自定義 `PORT` 變數。我們可以透過在我們的應用程式配置檔案中新增一個條目來實現此目的,該條目在 `env` 物件中設定環境變數:
javascript module.exports = { apps: [ { name: "my-app", script: "/path/to/my/app/index.js", env_production: { NODE_ENV: "production" // Set custom PORT variable here: PORT: 8080, }, } ] }
現在,當我們在生產模式下啟動應用程式程序時,它將自動使用我們在配置檔案中指定的 `8080` 埠。
結論
使用 PM2 為 Node.js 應用程式啟用自動啟動是確保您的應用程式即使在系統重新啟動後也能保持可用和活動的關鍵步驟。透過遵循本文中概述的步驟,您可以輕鬆配置您的 PM2 以在 Linux、macOS 或 Windows 系統上啟用系統啟動時自動啟動。