一、準備工作
1. 環境說明
- 本地開發環境:Windows 服務器(需執行部署腳本)
- 目標服務器:Linux 服務器(需安裝?
node.js
、pm2
、unzip
) - 核心工具:
7-Zip
(壓縮)、OpenSSH
(scp
/ssh
?命令)
2. 安裝必要工具
(1)安裝 7-Zip(文件壓縮)
- 下載地址:7-Zip 官方網站
- 安裝后將安裝目錄(如?
C:\Program Files\7-Zip
)添加到系統環境變量?Path
。
(2)安裝 OpenSSH 客戶端(scp
/ssh
?命令)
- 打開?
設置 → 應用 → 可選功能 → 添加功能
,搜索?OpenSSH 客戶端
?并安裝。 - 驗證:打開 PowerShell,輸入?
ssh -V
?和?scp -V
,顯示版本信息即為成功。
(3)Linux 服務器準備
- 安裝依賴:
bash
# 安裝 Node.js(示例為 Ubuntu,其他系統請適配) curl -fsSL https://deb.nodesource.com/setup_20.x | sudo -E bash - sudo apt install -y nodejs unzip# 安裝 pm2(進程管理工具) npm install -g pm2
二、配置 SSH 免密登錄(核心步驟)
1. 在 Windows 生成 SSH 密鑰對
- 打開 PowerShell,執行以下命令(一路回車,無需設置密碼):
powershell
ssh-keygen -t rsa
- 生成的密鑰對位于:
C:\Users\你的用戶名\.ssh\
(id_rsa
?為私鑰,id_rsa.pub
?為公鑰)。
2. 將公鑰上傳到 Linux 服務器
- 執行以下命令(替換?
root
?和?47.103.63.55
?為你的服務器信息):powershell
# 手動輸入服務器密碼(僅第一次需要) ssh root@47.103.63.55 "mkdir -p ~/.ssh && chmod 700 ~/.ssh" scp C:\Users\你的用戶名\.ssh\id_rsa.pub root@47.103.63.55:~/.ssh/authorized_keys ssh root@47.103.63.55 "chmod 600 ~/.ssh/authorized_keys"
3. 驗證免密登錄
- 執行?
ssh root@47.103.63.55
,若無需輸入密碼直接登錄,說明配置成功。
三、編寫全自動部署腳本
1. 創建部署腳本
在項目根目錄創建?publish.bat
,內容如下:
@echo off
chcp 65001 >nul 2>&1:: 配置參數
set "LINUX_USER=root"
set "LINUX_IP=47.103.63.55"
set "LINUX_DIR=/root/testgameserver"
set "ZIP_NAME=project_package.zip" :: 顯示當前路徑
set "PROJECT_DIR=%cd%"
echo Using current directory as project path: %PROJECT_DIR%:: 2. 打包項目(排除 node_modules、.git 等無用文件)
:: 注意:需將 7z 路徑添加到系統環境變量,或使用完整路徑(如 "C:\Program Files\7-Zip\7z.exe")
7z a -tzip "%ZIP_NAME%" * -x!node_modules -x!*.log -x!.git -x!*.zip:: 3. Create target directory on Linux server (if not exists)
echo Creating target directory on server...
ssh %LINUX_USER%@%LINUX_IP% "mkdir -p %LINUX_DIR%":: 4. 通過 scp 傳輸打包文件到 Linux 服務器
echo Transferring file to Linux server...
scp "%ZIP_NAME%" %LINUX_USER%@%LINUX_IP%:"%LINUX_DIR%/%ZIP_NAME%":: 5. 通過 ssh 遠程執行 Linux 部署命令
echo Executing remote deployment commands...ssh %LINUX_USER%@%LINUX_IP% "cd %LINUX_DIR% && unzip -o %ZIP_NAME% && rm -f %ZIP_NAME% && npm install && pm2 restart ecosystem.config.cjs && pm2 save && pm2 startup"echo Operation completed!
2. 腳本說明
- 壓縮階段:排除?
node_modules
、日志等無用文件,減少傳輸體積。 - 安全校驗:每個步驟添加錯誤檢查,失敗時終止并提示。
- 自動化部署:遠程執行解壓、安裝依賴、啟動服務全流程,無需手動干預。
四、執行部署
- 將?
publish.bat
?放在項目根目錄。 - 打開 PowerShell,進入項目目錄,執行:
powershell
?.\publish.bat
- 輸出?
Deployment completed successfully!
?即為部署成功。
五、驗證部署結果
- 登錄 Linux 服務器:
powershell
ssh root@47.103.63.55
- 檢查應用狀態:
pm2 list # 查看應用是否運行 pm2 logs %APP_NAME% # 查看應用日志(替換為你的 APP_NAME)
六、常見問題排查
-
免密登錄失敗:
- 檢查 Windows 私鑰權限(
id_rsa
?僅當前用戶可訪問)。 - 確認 Linux 服務器?
~/.ssh/authorized_keys
?內容為 Windows 公鑰(id_rsa.pub
)。
- 檢查 Windows 私鑰權限(
-
文件傳輸失敗:
- 驗證服務器 IP、端口是否正確,防火墻是否開放 22 端口。
- 檢查?
LINUX_DIR
?路徑是否正確,確保有讀寫權限。
-
應用啟動失敗:
- 查看日志:
pm2 logs %APP_NAME%
。 - 確認?
src/index.js
?是正確的入口文件(根據項目結構修改)。
- 查看日志:
通過以上步驟,即可實現從代碼壓縮到服務啟動的全自動化部署,適合小型項目快速迭代。