Node.js 在 Windows Server 上的离线部署方案

Node.js 在 Windows Server 上的离线部署方案

离线部署的核心是提前准备所有依赖资源(避免在线下载),并通过本地配置完成服务搭建,整体分为「依赖准备」「环境配置」「项目部署」「服务注册」4个阶段。

一、提前准备离线资源(关键:在有网机器操作)

需准备 3 类核心资源,确保无网环境下可完整安装:

资源类型获取方式注意事项
Node.js 离线安装包1. 访问 Node.js 官网
2. 选择对应版本(建议 LTS 版,如 20.x)
3. 下载 Windows 离线包(msizip,优先 msi 自动配置环境变量)
确认 Windows Server 系统架构(32/64 位),下载对应版本。
项目依赖包(node_modules)1. 在有网机器上,拷贝项目源码到本地
2. 执行 npm install --production(只装生产依赖,减小体积)
3. 压缩生成的 node_modules 文件夹
确保有网机器与 Windows Server 系统架构一致(避免依赖编译后不兼容,如 node-gyp 相关包)。
可选:编译依赖环境若项目依赖需编译(如 sqlite3 bcrypt),需提前下载:
1. Python 离线安装包
2. Visual Studio Build Tools 离线包
离线安装时,需先装 Python + Build Tools,再解压 node_modules(或执行本地依赖安装)。

二、Windows Server 环境配置(无网机器操作)

1. 安装 Node.js 环境

  1. 将下载的 Node.js msi 包拷贝到 Windows Server,双击运行安装;
  2. 安装向导中,勾选「Add to PATH」(自动配置环境变量,无需手动改),其余默认下一步;
  3. 验证安装:打开「命令提示符(CMD)」,执行以下命令,显示版本即成功:
    node -v  # 如 v20.11.0
    npm -v   # 如 10.2.4
    
    • 若用 zip 包:解压到指定目录(如 D:\Node.js),手动添加 D:\Node.jsD:\Node.js\node_global 到「系统环境变量-PATH」,再验证版本。

2. 配置项目目录

  1. 在 Windows Server 上创建项目目录(如 D:\NodeProjects\your-app);
  2. 拷贝以下文件到该目录:
    • 项目源码(app.js/server.js 入口文件、package.json、配置文件等);
    • 提前压缩的 node_modules 文件夹,解压到项目根目录(与 package.json 同级)。

三、项目部署与测试

1. 本地启动测试(验证项目可运行)

  1. 打开 CMD,进入项目目录:
    cd D:\NodeProjects\your-app
    
  2. 执行启动命令(根据项目入口文件调整,如 app.js):
    node app.js
    
  3. 验证服务:
    • 本地验证:在 Server 上打开浏览器,访问 http://localhost:端口号(如 http://localhost:3000),若返回正常页面/API 结果,说明项目可运行;
    • 局域网验证:在同一局域网机器上,访问 http://Windows Server IP:端口号(如 http://192.168.1.100:3000),确保端口未被防火墙拦截(需开放端口,见下文「故障排查」)。

2. 解决端口占用问题(可选)

若启动时报「端口被占用」,执行以下命令排查并释放:

  1. 查看端口占用情况(以端口 3000 为例):
    netstat -ano | findstr ":3000"
    
  2. 找到 PID(最后一列数字),结束对应进程:
    taskkill /F /PID 1234  # 1234 替换为实际 PID
    

四、注册 Windows 服务(实现后台运行+开机自启)

直接用 node app.js 启动后,关闭 CMD 服务会停止,需将 Node 项目注册为 Windows 系统服务,推荐用 pm2(轻量且支持 Windows 服务)。

1. 离线安装 pm2(提前在有网机器准备)

  1. 在有网机器上,执行 npm install pm2 -g(全局安装 pm2);
  2. 找到 pm2 安装目录(默认路径:C:\Users\用户名\AppData\Roaming\npm\node_modules\pm2);
  3. pm2 文件夹压缩,拷贝到 Windows Server 的 Node 全局模块目录(默认:C:\Users\用户名\AppData\Roaming\npm\node_modules\),解压覆盖。

2. 用 pm2 管理 Node 服务

  1. 进入项目目录,执行启动命令(指定入口文件,如 app.js):
    pm2 start app.js --name "your-app-name"  # --name 自定义服务名,方便管理
    
  2. 验证 pm2 服务状态:
    pm2 list  # 查看服务列表,状态为 "online" 即正常
    

3. 注册为 Windows 系统服务(开机自启)

  1. 执行 pm2 服务安装命令:
    pm2-service-install  # 弹出提示,直接按 Enter 确认(默认服务名 PM2)
    
  2. 验证系统服务:
    • 打开「控制面板 → 管理工具 → 服务」;
    • 找到「PM2」服务,确认「启动类型」为「自动」,「状态」为「正在运行」。

五、部署验证与故障排查

1. 最终验证

  • 重启 Windows Server,检查「PM2」服务是否自动启动;
  • 访问 http://Server IP:端口号,确认项目正常响应。

2. 常见问题解决

问题现象排查方向
服务启动后无法访问1. 检查端口是否开放(Windows 防火墙 → 高级设置 → 入站规则,添加端口允许)
2. 确认项目监听地址不是 127.0.0.1(需改为 0.0.0.0,允许外部访问)。
依赖报错(如 “module not found”)1. 检查 node_modules 是否完整(对比有网机器的文件夹大小)
2. 若依赖需编译,确认已安装 Python + Build Tools。
PM2 服务启动失败1. 查看 PM2 日志:pm2 logs
2. 检查 Windows 事件查看器(「Windows 日志 → 应用程序」),定位错误原因。

总结

离线部署的关键是提前规避“在线依赖”:所有 Node 环境、项目依赖、工具(如 pm2)都需在有网环境打包,再拷贝到 Windows Server;通过 pm2 注册系统服务,确保服务稳定运行且开机自启,最后验证端口和依赖兼容性即可完成部署。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

18.web api 9

3.M端事件4.js插件

母猪姿态转换行为识别:计算机视觉与行为识别模型调优指南

> 在现代智能化养殖中,母猪姿态识别是健康监测的关键技术。本文将带你从0到1构建高精度母猪姿态识别系统,准确率可达95%以上! ## 一、为什么母猪姿态识别如此重要? 母猪的行为姿态是其健康状况的重要指标: - **站立姿态**:可能表示发情期或进食需求 - **侧卧姿态**:…

Unity进阶--C#补充知识点--【Unity跨平台的原理】Mono与IL2CPP

来源于唐老狮的视频教学,仅作记录和感悟记录,方便日后复习或者查找 一.跨平台基本原理 知识回顾: ①在之前我们已经知道了跨语言的原理是.Net体系下定义了这些语言需要遵守的工业标准CLI。因此实现了面向.Net的语言都可以被编译转化成统一规…

LeetCode:无重复字符的最长子串

目录 解题过程: 描述: 分析条件: 正确解题思路: 通过这道题可以学到什么: 解题过程: 描述: 3. 无重复字符的最长子串 提示 给定一个字符串 s ,请你找出其中不含有重复字符的 最长 子串 的长度。 示例 1: 输入: s "abcabcbb" 输出: 3 解释: 因为…

JUC读写锁

文章目录一、读写锁概述1.1 核心目标1.2 核心思想1.3 关键规则与保证1.4 核心组件二、使用示例2.1 采用独占锁的姿势读、写数据2.2 使用读写锁读、写数据2.3 锁降级 **(Lock Downgrading)**三、应用场景3.1 缓存系统【高频读、低频更新】3.2 配置中心【配…

docker compose再阿里云上无法使用的问题

最原始的Dokcerfile # 使用官方Python 3.6.8镜像 FROM python:3.6.8-slimWORKDIR /app# 复制依赖文件 COPY requirements.txt .RUN pip install --upgrade pip # 检查并安装依赖(自动处理未安装的包) RUN pip install --no-cache-dir -r requirements.tx…

【运维进阶】LNMP + WordPress 自动化部署实验

LNMP WordPress 自动化部署实验 一、实验目标 通过 Ansible 自动化工具,在目标服务器(lnmp 主机组)上搭建 LNMP 架构(Linux 系统 Nginx 网页服务器 MariaDB 数据库 PHP 脚本语言),并部署 WordPress 博…

豆包 Java的23种设计模式

Java的23种设计模式是软件开发中常用的设计思想总结,根据用途可分为三大类:创建型、结构型和行为型。 一、创建型模式(5种) 用于处理对象创建机制,隐藏创建逻辑,使程序更灵活。 单例模式:保证一…

RISC-V汇编新手入门

有空就更。一、基础核心概念:什么是汇编语言?汇编语言是直接对应 CPU 指令的低级编程语言,每一行汇编代码基本对应一条 CPU 能直接执行的指令。相比 C 语言等高级语言,汇编更贴近硬件,能直接操作 CPU 的寄存器、内存和…

[每周一更]-(第155期):Go 1.25 发布:新特性、技术思考与 Go vs Rust 竞争格局分析

作为一名 Go 研发工程师,我一直关注 Go 语言的演进。2025 年 8 月 12 日,Go 团队发布了 Go 1.25 版本,这是继 Go 1.24 之后的又一重要更新。 这个版本聚焦于工具链优化、运行时改进和实验性功能引入,没有引入破坏性语言变化&#…

【网络安全】Webshell的绕过——绕过动态检测引擎WAF-缓存绕过(Hash碰撞)

目录 一、前言 二、环境 三、了解动态检测引擎 3.1 shuffle — 打乱数组 3.2 mt_srand — 播下一个更好的随机数发生器种子 四、缓存导致的绕过【hash碰撞】 五、总结 一、前言 在渗透测试过程中,成功获取 WebShell 时难免遇到 Web 应用防火墙(WA…

【Linux | 网络】高级IO

一、IO是什么二、五种IO模型2.1 理解五种IO模型2.2 五种IO模型的定义三、 非阻塞IO3.1 fcntl函数3.2 实现函数SetNoBlock(将文件描述符设置为非阻塞)四、多路转接IO4.1 多路转接IO之select4.1.1 select函数4.1.2 select的优缺点4.2 多路转接IO之poll4.2.…