从 Windows 到 Linux 服务器的全自动部署教程(免密登录 + 压缩 + 上传 + 启动)

一、准备工作

1. 环境说明

  • 本地开发环境:Windows 服务器(需执行部署脚本)
  • 目标服务器 :Linux 服务器(需安装 node.jspm2unzip
  • 核心工具7-Zip(压缩)、OpenSSHscp/ssh 命令)

2. 安装必要工具

(1)安装 7-Zip(文件压缩)
  • 下载地址:7-Zip 官方网站
  • 安装后将安装目录(如 C:\Program Files\7-Zip)添加到系统环境变量 Path
(2)安装 OpenSSH 客户端(scp/ssh 命令)
  • 打开 设置 → 应用 → 可选功能 → 添加功能,搜索 OpenSSH 客户端 并安装。
  • 验证:打开 PowerShell,输入 ssh -Vscp -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 服务器

  • 执行以下命令(替换 root47.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,内容如下:

bash 复制代码
@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、日志等无用文件,减少传输体积。
  • 安全校验:每个步骤添加错误检查,失败时终止并提示。
  • 自动化部署:远程执行解压、安装依赖、启动服务全流程,无需手动干预。

四、执行部署

  1. publish.bat 放在项目根目录。

  2. 打开 PowerShell,进入项目目录,执行: powershell

    bash 复制代码
    .\publish.bat
  3. 输出 Deployment completed successfully! 即为部署成功。

五、验证部署结果

  1. 登录 Linux 服务器: powershell

    bash 复制代码
    ssh root@47.103.63.55
  2. 检查应用状态:

    bash 复制代码
    pm2 list  # 查看应用是否运行
    pm2 logs %APP_NAME%  # 查看应用日志(替换为你的 APP_NAME)

六、常见问题排查

  1. 免密登录失败

    • 检查 Windows 私钥权限(id_rsa 仅当前用户可访问)。
    • 确认 Linux 服务器 ~/.ssh/authorized_keys 内容为 Windows 公钥(id_rsa.pub)。
  2. 文件传输失败

    • 验证服务器 IP、端口是否正确,防火墙是否开放 22 端口。
    • 检查 LINUX_DIR 路径是否正确,确保有读写权限。
  3. 应用启动失败

    • 查看日志:pm2 logs %APP_NAME%
    • 确认 src/index.js 是正确的入口文件(根据项目结构修改)。

通过以上步骤,即可实现从代码压缩到服务启动的全自动化部署,适合小型项目快速迭代。

相关推荐
A小辣椒2 天前
TShark:Wireshark CLI 功能
linux
A小辣椒2 天前
TShark:基础知识
linux
AlfredZhao2 天前
OCI 明明分配了 200G 系统盘,为什么 df 只看到 30G?
linux·oci
AlfredZhao3 天前
vi 删除指定范围的行,不用再反复按 dd
linux·vi
用户9718356334663 天前
银河麒麟 KY10 申威(SW64) 安装 nginx-1.16.1-2.p01.ky10.sw_64.rpm 详细步骤
linux
猪脚踏浪3 天前
linux 拷贝文件或目录到指定的位置
linux
大树884 天前
金刚石散热越强,管路越先见顶
大数据·运维·服务器·人工智能·ai
摇滚侠4 天前
Linux CentOS7 rpm 安装 MySQL 5.7
linux·运维·mysql
bush44 天前
嵌入式linux学习记录十四、术语
linux·嵌入式
载数而行5204 天前
Linux 11 动态监控指令top
linux