从 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 是正确的入口文件(根据项目结构修改)。

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

相关推荐
南烟斋..8 分钟前
GDB调试核心指南
linux·服务器
爱跑马的程序员28 分钟前
Linux 如何查看文件夹的大小(du、df、ls、find)
linux·运维·ubuntu
像风一样自由2 小时前
android native 中的函数动态注册方式总结
android·java·服务器·安卓逆向分析·native函数动态注册·.so文件分析
oMcLin3 小时前
如何在 Ubuntu 22.04 LTS 上部署并优化 Magento 电商平台,提升高并发请求的响应速度与稳定性?
linux·运维·ubuntu
Qinti_mm3 小时前
Linux io_uring:高性能异步I/O革命
linux·i/o·io_uring
优雅的38度3 小时前
linux环境下,使用docker安装apache kafka (docker-compose)
linux·架构
小李独爱秋3 小时前
计算机网络经典问题透视:TLS协议工作过程全景解析
运维·服务器·开发语言·网络协议·计算机网络·php
想唱rap4 小时前
表的约束条件
linux·数据库·mysql·ubuntu·bash
山上三树4 小时前
对比用户态线程与内核态轻量级进程
linux
2501_948195344 小时前
RN for OpenHarmony英雄联盟助手App实战:设置实现
linux·ubuntu