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

四、执行部署

  1. 将 publish.bat 放在项目根目录。
  2. 打开 PowerShell,进入项目目录,执行:

    powershell
     

    .\publish.bat

  3. 输出 Deployment completed successfully! 即为部署成功。

五、验证部署结果

  1. 登录 Linux 服务器:

    powershell

    ssh root@47.103.63.55
    
  2. 检查应用状态:

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

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/diannao/95860.shtml
繁体地址,请注明出处:http://hk.pswp.cn/diannao/95860.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

智能汽车领域研发,复用云原始开发范式?

汽车电子电气架构演进趋势:分散的功能ECU -> 域控制器 -> 中央计算服务器汽车电子方案与架构在发展与迭代时会使用虚拟化方法几种可行的软硬一体化方案:多ECU,硬件隔离,硬件分区,车规级多核硬件架构 Hypervisor…

数据电台询价的询价要求

技术规格及主要参数 1.电台基本要求: 1.1 电台中的信号处理基于FPGA设计,采用FPGAARM高速AD/DA设计架构; 1.2 具备频谱感知、自主选频、跳频、扩频等功能; 1.3 具备链路质量信息、自组网路由信息、电池电压监测信息、北斗定位信息…

IoT/HCIP实验-5/基于WIFI的智慧农业实验(LwM2M/CoAP+PSK+ESP8266 连接到 IoTDA)

文章目录概述WIFI8266 通信模组WIFI模组也用AT指令?ESP8266 内置协议栈?支持的无线网络模式MCU通过串口与模组交互Wifi模组做客户端PC-AT接入路由器向本地TCP服务发数据用代码接入你家路由器已接入AP(你家Wifi)平台侧开发工程配置和编译工程…

定时器输出PWM波配置(呼吸灯)

使用定时器 4 通道 3 生成 PWM 波控制 LED1 ,实现呼吸灯效果。 频率:2kHz,PSC71,ARR499pwm.c:#include "pwm.h" // 本模块头文件:应声明 pwm_init/pwm_compare_set 等原型、并包含 HAL 头//(示…

[ai-agent]环境简介之沙盒e2b vs daytona

所谓的环境的就是agent运行在哪里,或者是agent和那里进行交互。 最常见的环境就是本地开发环境,也就是个人主机,但是存在问题就是没有办法出网和横向扩展。 在沙盒之前也是有其他选择的: 云服务器, 虚拟机,…

【前端面试题】前端面试知识点(第三十一题到第六十一题)

三十一. CSS实现垂直水平居中 实现元素的垂直水平居中是前端开发中的常见需求,主要有以下几种思路: text-align + line-height实现单行文本水平垂直居中 适用于单行文本元素,通过text-align: center实现水平居中,line-height等于容器高度实现垂直居中 text-align + vertic…

嵌入式练习项目——————抓包获取天气信息

一、内容 尝试通过实时天气接口 - 数据接口 - NowAPI此网站获取天气信息,实现可以发送城市查询当前天气和未来天气 二、获取请求报文 可以根据测试示例看到获取内容,此时数据是cJSON格式,我们首先要通过合适的网址抓包获取到请求报文&#x…

Python爬虫实战:研究NewsCrawl ,构建新浪和网易新闻数据采集系统

1. 引言 1.1 研究背景与意义 在信息时代,新闻作为社会动态、公众观点的重要载体,其传播速度与影响力持续扩大。传统的人工筛选与采集方式已无法满足对海量新闻数据的高效处理需求,亟需自动化工具实现大规模、结构化的新闻数据采集。网络爬虫技术作为一种按照预设规则自动抓…

PyTorch神经网络工具箱全解析:nn.Module vs nn.functional

🔍 为何需要神经网络工具箱? 在仅用 Autograd 和 Tensor 实现模型时,开发者需手动设置参数梯度(requires_gradTrue)、反向传播(backward())及梯度提取,过程繁琐且易出错。nn 工具箱应…

Java注解学习记录

目录 一、为什么要学注解? 二、注解是什么? 三、为什么要使用注解? 四、注解的作用 五、注解的分类 5.1 元注解 Retention(/ rɪˈtenʃ(ə)n /) ★★★★★ Target ★★★★★ Inherited(/ ɪnˈherɪtɪd /…

43.安卓逆向2-补环境-使用unidbg(使用Smali语法调用方法和使用方法地址调用方法)

免责声明:内容仅供学习参考,请合法利用知识,禁止进行违法犯罪活动! 内容参考于:图灵Python学院 工具下载: 链接:https://pan.baidu.com/s/1bb8NhJc9eTuLzQr39lF55Q?pwdzy89 提取码&#xff1…

【Kubernetes知识点问答题】Pod 调度

1. 如何将特定 Pod 调度到指定的节点?可以使用下列方法中的任何一种来选择 K8s 对特定 Pod 的调度:① 与节点标签匹配的 nodeSelector:在 Pod 的规范中使用 nodeSelector 字段来指定节点标签,以便将 Pod 调度到具有特定标签的节点…

wordpress显示时间日期的几种常见的方式

在WordPress中,显示时间日期有多种常见方式,包括使用默认设置、模板标签、插件等,以下是详细介绍: 使用默认设置 WordPress的默认设置允许你在文章列表中显示文章的发布时间。登录到WordPress后台,在“设置”中找到“…

基于飞算JavaAI实现布隆过滤器防止缓存穿透:原理、实践与全流程解析

引言:当缓存失效时,系统如何避免“雪崩式崩溃”? 在互联网高并发场景中(如电商秒杀、社交平台热点新闻),缓存是提升系统性能的核心手段——将频繁访问的数据(如商品详情、用户信息)存…

DeepResearch开源与闭源方案对比

在这个AI不再只是聊天工具的时代,"深度研究"已经成为大语言模型(LLM)的一项新能力。先进的LLM不再只是给出快速的一次性回答,而是可以像研究助手一样工作——搜索网上信息,调用各种工具(比如搜索…

UniApp 页面传参方式详解

在 UniApp 开发中,页面间参数传递是核心功能之一。以下是 8 种常用的传参方式,每种方式都有其适用场景和特点:一、URL 拼接传参(最常用) 适用场景:简单数据传递,如 ID、状态值等基础类型数据 实…

音频分类标注工具

pyqt 分类标注工具:import glob import sys import json import os from PyQt5.QtWidgets import (QApplication, QMainWindow, QTableWidget, QTableWidgetItem,QSplitter, QVBoxLayout, QWidget, QPushButton, QRadioButton,QButtonGroup, QLabel, QHBoxLayout, Q…

云计算-Kubernetes+Istio 实现金丝雀发布:流量管理、熔断、流量镜像、ingreess、污点及pv案例实战

介绍 在微服务架构中,如何安全、高效地实现服务发布与流量管理是保障业务稳定性的核心挑战。金丝雀发布(Canary Release)、灰度发布等策略通过精细化的流量控制,可有效降低新版本上线风险, Istio 作为主流的服务网格(Service Mesh)工具。 此次Istio 在 Kubernetes 集群…

12.web api 3

定时器-间歇函数

ComfyUI进阶:EchoMimic插件全解析,让静态肖像实现音频驱动的精准口型动画

在数字内容创作中,让静态肖像“开口说话”并做出自然表情,是提升交互感与沉浸感的关键。传统动画制作需专业人员逐帧调整口型与表情,成本高且效率低。ComfyUI的EchoMimic插件通过音频驱动技术,实现了“输入音频→自动生成匹配口型…