惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

爱范儿
爱范儿
Y
Y Combinator Blog
博客园 - Franky
D
Docker
B
Blog RSS Feed
M
MIT News - Artificial intelligence
雷峰网
雷峰网
博客园 - 司徒正美
人人都是产品经理
人人都是产品经理
宝玉的分享
宝玉的分享
S
SegmentFault 最新的问题
GbyAI
GbyAI
Recent Announcements
Recent Announcements
Martin Fowler
Martin Fowler
H
Hackread – Cybersecurity News, Data Breaches, AI and More
MyScale Blog
MyScale Blog
B
Blog
H
Help Net Security
Microsoft Security Blog
Microsoft Security Blog
WordPress大学
WordPress大学
Vercel News
Vercel News
The Cloudflare Blog
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
Google DeepMind News
Google DeepMind News

博客园 - crockery

13-心一网络助手-XinYiNetTool 12-奥赛题库-OlympiadMath 11-核痕-KeHen 10-烽燧-FengSui 09-弈局-ChessForge 08-立方之蛇-CubeSerpent 06-纯粹数独-PureSudoku 05-砂漏-Grainfall 04-回响回廊-EchoHalls 03-烬塔-EmberTower 02-胶囊医生-DrCapsule 01-离阵-ArrowExodus 一文看懂--什么是typescript 一个项目从 0 到上线的技术路线图 Vue + Node + Nginx 从 0 到上线 github上有哪些star非常多的项目 一篇文章搞懂所有前端后端概念图 【基于智能监控系统的配置问题】1、zabbix部署与配置 【基于智能监控系统的配置问题】2、zabbix如何部署centos和stream9 【基于智能监控系统的配置问题】3、仪表盘的界面设定 【基于智能监控系统的配置问题】4、与grafana的连接问题 【基于智能监控系统的配置问题】5、grafana上遇到的问题 【基于智能监控系统的配置问题】6、如何生成单页的监控界面 【基于智能监控系统的配置问题】7、zabbix如何实现免登录预览监控 【基于智能监控系统的配置问题】8、关于grafana的汉化问题 【基于各种多模态文件的在线预览系统】1、多模态预览 【基于各种多模态文件的在线预览系统】2、部署问题 【基于各种多模态文件的在线预览系统】3、本地磁盘挂载虚拟机 【基于各种多模态文件的在线预览系统】4、其他值得推荐的应用 【基于各种多模态文件的在线预览系统】5、出现无法访问的情况
windows批量部署nodeJS项目
crockery · 2026-07-10 · via 博客园 - crockery

✅ 为什么需要“管理/整合”:问题梳理

  • 每个项目可能监听不同端口(比如 3000, 3001, 4000 …),直接 node app.js 启动,管理起来混乱。
  • 当项目挂了、重启机器、更新代码时,需要手动启动/停止。
  • 如果希望用统一域名/子域名 + 默认 HTTP/HTTPS 访问,需要“反向代理 + 端口映射 + SSL + 域名管理”。
  • 多项目、多 Node 版本、日志管理、状态监控也需要考虑。

因此,用专门的“进程管理 + 反向代理/域名映射 + 服务管理”方案,会比“自己手动多窗口启动 + port + 记笔记”靠谱很多。


🔧 推荐方案 / 工具组合

下面是几种常见且适合 Windows Server + 多个 Node/Vue 项目的方案 / 工具/组合:

PM2(Node 专用进程管理器) + Windows + (可选)NVM for Windows

  • PM2 是流行的 Node.js 进程管理器,支持启动/停止/重启/自动重启/日志管理/后台运行 —— 可把每个 Vue+Node 项目(后端 server.js / app.js)当成一个 “app” 来管理。 (维基百科)
  • 在 Windows 上也可以运行 PM2(不是仅限 Linux/Unix)。 (维基百科)
  • 如果不同项目需要不同 Node.js 版本,可以配合 NVM for Windows。然后在 PM2 的配置中为每个项目指定不同 Node 版本(interpreter),这样兼容性更好。 (Medium)

优点:启动/停止/重启统一管理;后台运行;日志统一;支持不同 Node 版本。
适合:你有多个纯 Node 后端服务 + 希望简单管理 + 不依赖 Docker 的场景。


反向代理 + HTTP 服务器(如 nginx / Windows 上的 IIS + 反向代理模块 / URL 重写)

  • 使用 Nginx(或 IIS + URL 重写/反向代理模块 / IISNode)将不同域名/子域名/路径反向代理到不同端口上的后端项目。这样客户端只需访问标准端口(80/443),无需关心后端端口号。 (维基百科)
  • 对于前端 Vue 应用(build 后的静态资源)也可以通过同一个代理/HTTP 服务进行统一部署/管理。 (CSDN)

优点:外部访问统一、域名/子域管理方便、支持 HTTPS(如果配置);隐藏真实端口;更标准/生产环境友好。
适合:多个项目都要对外服务,希望用域名/标准端口访问 + SSL + 域名管理。


组合方案:PM2 + 反向代理(Nginx/IIS)

这是目前最常见也比较推荐的组合方式:

  • 用 PM2 管理每个 Node 项目的启动 / 进程 /日志 /自动重启
  • 用 Nginx 或 IIS 做前端(静态) + 反向代理 + 域名 / SSL 管理
  • 每个项目只需配置一次,重启服务器后 PM2 自动启动,反向代理继续把 HTTP/HTTPS 请求导向对应项目

这种方式既有进程管理,也有统一对外访问,适合生产环境 / 多项目管理。很多社区教程也推荐这种组合。 (CSDN)


如果想彻底隔离 / 更现代 / 容器化:使用 Docker / 容器 + 反向代理 / Orchestration

鉴于你之前有用 Docker 的经验(你提到你喜欢 Docker + Flask/Streamlit 项目部署),若将每个 Vue+Node 项目都封装成 Docker 容器:

  • 每个项目端口互不冲突,互相独立。
  • 用一个专门容器(Nginx / Traefik / Caddy)做“反向代理 + 域名 + SSL + 路由” → 对外就是统一的域名/端口/HTTPS。
  • 容器便于版本管理、迁移、复制、隔离依赖。

优点:隔离、标准、便于扩容/移植/迁移/分布式部署。
适合:你项目多、想标准化管理/未来可能迁移到云端/希望用 Docker 的场景。


📋 给你根据你的背景 + 偏好,我推荐的最适合方案

考虑到你之前就有用 Docker/云部署经验,同时也可能希望灵活管理多个项目/长期运行/自动化部署/开机启动——我建议你采用 Docker + 反向代理 + 容器化 + (必要时 PM2) 的方式,但如果你暂时不想切 Docker,也可以先从 PM2 + Nginx(或 IIS) 入手。

推荐理由:

  • 你熟悉 Docker、云部署、自动化,迁移/管理/未来扩展更方便。
  • 多项目、多端口、多依赖,多容器更干净,也更便于管理。
  • 反向代理 + 域名 + SSL + 容器网络 编排,适合生产/内网/外网混合使用。

🛠 如果你现在就想快速上手 —— 一个简单 “PM2 + Nginx on Windows Server” 的操作步骤大纲:

  1. 安装 Node.js + npm
  2. 全局安装 PM2:npm install -g pm2 (Oryoy)
  3. 对每个项目,进入项目目录,用 PM2 启动,例如: pm2 start server.js --name project1
  4. 安装 Nginx for Windows,配置反向代理,比如把 https://your-domain.com/app1app1.your-domain.com 转发到 localhost:3000app2 转发到 localhost:4000,等等。 参考 Nginx 的配置方式。 (维基百科)
  5. (可选)设置 Windows 防火墙 / 端口规则,确保外部访问正常。
  6. 日后如果项目多了/复杂了,可以考虑 Docker 容器化 + Docker Compose / Traefik / Nginx。

🧠 对你目前环境/需求的小建议(结合你背景)

因为你:

  • 本身熟悉开发/运维/自动化/Docker
  • 有“多个模块/多个项目”背景(你之前希望部署多个 ML 教学网站、自己的 DeepSeek AI 应用、图纸系统等等)

所以强烈建议你 Docker 化 + 容器 + 反向代理 + 域名/SSL 管理 —— 长期来看可维护性、可扩展性、隔离性都更好。

如果你目前只是几个小项目、想先稳定运行 → 可以直接用 PM2 + Nginx


下面是 完整可直接用 的 Windows Server 多项目模板,包括:

  • ✔ PM2 多项目管理(ecosystem.config.js)
  • ✔ Nginx 多项目反向代理(前端 + 后端)
  • ✔ 文件结构示例
  • ✔ 启动命令
  • ✔ 适合 Vue + Node.js 多应用部署

只要把目录、端口、域名改一下即可上线运行。


🧱 一、推荐的目录结构(示例)

D:\
 ├── webapps\
 │    ├── app1\
 │    │    ├── dist\        # Vue 编译后的前端文件
 │    │    └── server.js    # Node 后端
 │    ├── app2\
 │    │    ├── dist\
 │    │    └── server.js
 │    └── app3\
 │         ├── dist\
 │         └── server.js
 ├── pm2\
 │    └── ecosystem.config.js
 └── nginx\
      └── conf\
          └── nginx.conf

🚀 二、PM2 多项目管理模板(ecosystem.config.js)

把以下内容保存为:

D:\pm2\ecosystem.config.js
module.exports = {
  apps: [
    {
      name: "app1-backend",
      cwd: "D:/webapps/app1",
      script: "server.js",
      instances: 1,
      exec_mode: "fork",
      watch: false,
      env: {
        NODE_ENV: "production",
        PORT: 3001
      }
    },
    {
      name: "app2-backend",
      cwd: "D:/webapps/app2",
      script: "server.js",
      instances: 1,
      exec_mode: "fork",
      watch: false,
      env: {
        NODE_ENV: "production",
        PORT: 3002
      }
    },
    {
      name: "app3-backend",
      cwd: "D:/webapps/app3",
      script: "server.js",
      instances: 1,
      exec_mode: "fork",
      watch: false,
      env: {
        NODE_ENV: "production",
        PORT: 3003
      }
    }
  ]
}

▶ PM2 启动命令

管理员 CMD 运行:

cd D:\pm2
pm2 start ecosystem.config.js
pm2 save
pm2 startup

这样所有项目会:

  • 自动后台运行
  • 服务器重启后自动恢复
  • 支持日志查看

查看所有项目:

pm2 list

🌐 三、Nginx 多项目反向代理模板

适合以下两种情况:

  • Vue 前端静态页面(dist)直接由 Nginx 托管
  • Node.js 后端按端口反向代理

请把下面模板写入:

D:\nginx\conf\nginx.conf

🔶 完整 nginx.conf(可直接用)

worker_processes  1;

events {
    worker_connections  1024;
}

http {
    include       mime.types;
    default_type  application/octet-stream;

    sendfile        on;

    keepalive_timeout  65;

    # -------------------------
    # 站点:app1
    # -------------------------
    server {
        listen       80;
        server_name  app1.example.com;

        # Vue 前端
        root D:/webapps/app1/dist;
        index index.html;

        location /api/ {
            proxy_pass http://127.0.0.1:3001/;
        }

        location / {
            try_files $uri $uri/ /index.html;
        }
    }

    # -------------------------
    # 站点:app2
    # -------------------------
    server {
        listen       80;
        server_name  app2.example.com;

        root D:/webapps/app2/dist;
        index index.html;

        location /api/ {
            proxy_pass http://127.0.0.1:3002/;
        }

        location / {
            try_files $uri $uri/ /index.html;
        }
    }

    # -------------------------
    # 站点:app3
    # -------------------------
    server {
        listen       80;
        server_name  app3.example.com;

        root D:/webapps/app3/dist;
        index index.html;

        location /api/ {
            proxy_pass http://127.0.0.1:3003/;
        }

        location / {
            try_files $uri $uri/ /index.html;
        }
    }
}

🧩 四、说明(你只需改 3 个地方):

1. 每个站点的域名

app1.example.com
app2.example.com
app3.example.com

你也可以用路径模式:

  • /app1/
  • /app2/

我也可以给你生成“多项目 → 路径访问”的 Nginx 配置。


2. 每个 Node 项目监听的端口

PM2 已经定义:

项目 端口
app1 3001
app2 3002
app3 3003

你只需保持一致即可。


3. Vue 前端的 dist 目录路径

Nginx 中写了:

root D:/webapps/app1/dist;

按需要替换。


🧰 五、Nginx 常用操作(Windows Server)

启动

nginx.exe

重启(热加载配置)

nginx.exe -s reload

停止

nginx.exe -s stop

🧪 六、你的 3 个项目完整访问方式

项目 访问方式 代理到
app1 http://app1.example.com Node 端口 3001
app2 http://app2.example.com Node 端口 3002
app3 http://app3.example.com Node 端口 3003

对外展示统一,内部端口隔离。