一、准备工作
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
是正确的入口文件(根据项目结构修改)。
- 查看日志:
通过以上步骤,即可实现从代码压缩到服务启动的全自动化部署,适合小型项目快速迭代。