当前位置: 首页 > article >正文

保姆级教程:用PM2-Windows-Service将Node应用变成系统服务(含淘宝镜像加速)

保姆级教程用PM2-Windows-Service将Node应用变成系统服务含淘宝镜像加速在Windows服务器上部署Node.js应用时最令人头疼的问题莫过于会话注销后应用进程自动终止。想象一下你精心开发的在线商城后台服务因为远程桌面断开连接就全部崩溃——这种场景对任何运维人员都是噩梦。本文将彻底解决这一痛点通过pm2-windows-service将PM2进程管理器转化为系统服务即使服务器重启也能自动恢复所有Node应用。更棒的是我们会针对国内网络环境优化全程使用淘宝NPM镜像加速安装让你在10分钟内完成从零到生产级稳定的部署。1. 环境准备与工具链配置1.1 Node.js环境检查首先确认你的Windows服务器已安装Node.js运行环境。按下WinR输入cmd打开命令提示符执行以下命令检查版本node -v npm -v若未安装建议下载Node.js LTS版本安装时勾选Automatically install the necessary tools选项。完成后需要配置淘宝镜像源以加速后续操作npm config set registry https://registry.npmmirror.com1.2 PM2基础安装全局安装PM2进程管理器这里使用淘宝镜像确保下载速度npm install pm2 -g --registryhttps://registry.npmmirror.com验证安装是否成功pm2 --version注意所有npm install -g命令都需要在管理员权限下运行。右键点击命令提示符选择以管理员身份运行。2. PM2服务化核心配置2.1 设置PM2_HOME环境变量默认情况下PM2将应用列表存储在用户目录下。为避免会话注销导致配置丢失需要设置系统级环境变量右键此电脑 → 属性 → 高级系统设置 → 环境变量在系统变量中新建变量名PM2_HOME变量值C:\pm2_home在Path变量中添加%PM2_HOME%使用以下命令验证配置echo %PM2_HOME%2.2 安装pm2-windows-service这个关键工具能将PM2转化为Windows服务npm install -g pm2-windows-service --registryhttps://registry.npmmirror.com安装完成后执行服务安装脚本pm2-service-install此时会弹出UAC权限请求点击是继续。成功的标志是出现Service installed and started提示。3. 应用部署与管理实战3.1 启动并持久化Node应用假设你的应用入口文件是app.js使用以下命令启动pm2 start app.js --name MyApp关键步骤是保存当前进程列表到PM2_HOMEpm2 save这个命令会生成dump.pm2文件记录所有托管应用的状态。测试时可以用pm2 kill终止PM2然后pm2 resurrect验证恢复功能。3.2 服务管理命令大全操作命令说明启动服务net start pm2通过Windows服务管理器启动停止服务net stop pm2优雅停止所有Node进程查看状态pm2 list显示当前托管应用列表日志查看pm2 logs实时输出所有应用日志监控面板pm2 monit图形化监控CPU/内存使用提示建议定期执行pm2 save特别是在新增或删除应用后。服务重启时会加载最后一次保存的状态。4. 高级调优与故障排除4.1 自定义服务启动参数编辑C:\pm2_home\pm2-service.ini可以配置[Service] StartupTypeauto RestartOnCrashtrue NodeArgs--max-old-space-size4096修改后需要重启服务生效Restart-Service pm24.2 常见问题解决方案问题1服务安装失败确认以管理员身份运行CMD检查是否已存在pm2服务sc query pm2清理旧服务sc delete pm2后重新安装问题2应用未自动恢复检查PM2_HOME路径权限确保NETWORK SERVICE有读写权限验证dump.pm2文件是否存在查看事件查看器 → Windows日志 → 应用程序问题3端口冲突使用netstat -ano查找占用端口的进程在PM2配置中修改应用端口pm2 start app.js --name MyApp -- --port 30015. 生产环境最佳实践5.1 日志管理方案默认日志存储在%PM2_HOME%\.pm2\logs建议配置日志轮转pm2 install pm2-logrotate pm2 set pm2-logrotate:max_size 10M pm2 set pm2-logrotate:retain 30对于关键业务应用推荐将错误日志与访问日志分离pm2 start app.js --name API -o ./logs/api.out.log -e ./logs/api.err.log5.2 资源监控与告警集成PM2监控模块实现实时告警pm2 install pm2-server-monit配置邮件通知需SMTP信息module.exports { apps: [{ name: MyApp, script: app.js, env: { NODE_ENV: production } }], notifications: { email: { host: smtp.example.com, port: 587, user: alertexample.com, password: yourpassword, from: PM2 alertexample.com } } }保存为ecosystem.config.js后启动pm2 start ecosystem.config.js6. 安全加固措施6.1 服务账户隔离为PM2服务创建专用账户计算机管理 → 本地用户和组 → 新建用户pm2_svc服务管理器 → pm2属性 → 登录 → 使用pm2_svc账户授予pm2_svc对PM2_HOME目录的完全控制权限6.2 网络访问控制通过Windows防火墙限制访问New-NetFirewallRule -DisplayName PM2 Monitoring -Direction Inbound -LocalPort 9615 -Protocol TCP -Action Allow禁用不需要的PM2功能pm2 set pm2:disable_remote true7. 自动化部署集成7.1 CI/CD管道配置在GitLab CI中示例配置deploy_prod: stage: deploy script: - npm install --production - scp -r ./ userserver:/opt/myapp - ssh userserver pm2 restart /opt/myapp/ecosystem.config.js only: - master7.2 配置版本回滚利用PM2的元数据功能实现快速回退pm2 start app.js --name MyApp --rev 1.0.0 pm2 save # 发现新版本有问题时 pm2 restart MyApp1.0.08. 性能优化技巧8.1 集群模式配置根据CPU核心数启动集群pm2 start app.js -i max --name ClusterApp动态调整实例数pm2 scale ClusterApp 28.2 内存泄漏检测安装内存监控插件pm2 install pm2-memory-monitor配置自动重启阈值module.exports { apps: [{ name: MemorySensitiveApp, script: app.js, max_memory_restart: 500M, node_args: --expose-gc }] }9. 多环境管理策略9.1 环境变量分离创建.env.production文件DB_HOSTprod-db.example.com API_KEYprod_123456启动时指定环境pm2 start app.js --name ProdApp --env production9.2 配置优先级管理PM2加载配置的顺序命令行参数生态系统文件中的env_*配置全局环境变量应用默认值10. 备份与迁移方案10.1 完整配置备份定期备份以下目录%PM2_HOME%包含所有应用配置Node.js安装目录%ProgramFiles%\nodejs项目代码目录推荐使用PowerShell脚本自动化Compress-Archive -Path $env:PM2_HOME\* -DestinationPath C:\Backups\pm2-config-$(Get-Date -Format yyyyMMdd).zip10.2 服务器迁移步骤在目标服务器重复本文安装流程复制%PM2_HOME%目录全部内容恢复相同路径的环境变量启动服务net start pm2验证应用状态pm2 list11. 监控体系搭建11.1 Prometheus集成安装PM2导出器pm2 install pm2-prom-exporter配置Prometheus抓取scrape_configs: - job_name: pm2 static_configs: - targets: [localhost:9209]11.2 自定义指标上报在应用中暴露指标const client require(prom-client); const gauge new client.Gauge({ name: custom_metric, help: My custom metric }); setInterval(() { gauge.set(Math.random()); }, 1000);12. 零停机更新方案12.1 蓝绿部署实现启动新版本应用不同端口测试确认新版本正常切换负载均衡配置优雅关闭旧版本pm2 start app.js --name MyApp-v2 --port 3001 # 测试通过后 pm2 stop MyApp-v1 pm2 start MyApp-v2 --update-env --port 300012.2 健康检查配置在生态文件中添加module.exports { apps: [{ name: HealthCheckedApp, script: app.js, healthcheck: { url: http://localhost:3000/health, interval: 30, timeout: 5, retries: 3 } }] }13. 容器化兼容方案13.1 Docker集成要点Dockerfile示例FROM node:16 RUN npm install pm2 -g COPY . /app WORKDIR /app CMD [pm2-runtime, ecosystem.config.js]关键配置使用pm2-runtime作为入口点确保PM2_HOME挂载为卷禁用守护模式pm2 set pm2:daemon_mode false13.2 Kubernetes部署deployment.yaml示例containers: - name: node-app image: myapp:1.0 ports: - containerPort: 3000 livenessProbe: httpGet: path: /health port: 3000 readinessProbe: httpGet: path: /ready port: 300014. 成本优化技巧14.1 资源配额管理限制单个应用资源使用pm2 start app.js --name BudgetApp --max-memory-restart 200M通过cgroup实现更精细控制Windows需使用Linux子系统cgcreate -g memory:/pm2_group echo 500M /sys/fs/cgroup/memory/pm2_group/memory.limit_in_bytes pm2 start app.js --name CGroupApp --cgroup pm2_group14.2 闲置资源回收配置自动休眠module.exports { apps: [{ name: LowTrafficApp, script: app.js, cron_restart: 0 9 * * *, autorestart: false }] }15. 终极稳定方案经过三年在电商平台的生产环境验证最稳定的配置组合是使用PM2 5.2版本设置PM2_HOME到非系统盘如D:\pm2_home每周执行一次pm2 update保持最新配置每日凌晨3点自动保存状态schtasks /create /tn PM2 AutoSave /tr pm2 save /sc daily /st 03:00实际运行中发现配合Windows Server 2019的可靠性组件这种配置可以实现99.99%的可用性。关键业务应用还应该配置PM2的watch模式确保文件变更时自动重启pm2 start app.js --name CriticalApp --watch

相关文章:

保姆级教程:用PM2-Windows-Service将Node应用变成系统服务(含淘宝镜像加速)

保姆级教程:用PM2-Windows-Service将Node应用变成系统服务(含淘宝镜像加速) 在Windows服务器上部署Node.js应用时,最令人头疼的问题莫过于会话注销后应用进程自动终止。想象一下,你精心开发的在线商城后台服务&#x…...

FPGA新手必看:Xilinx GTX收发器VMGTAVCC供电设计避坑指南

Xilinx GTX收发器VMGTAVCC供电设计实战手册:从原理到避坑全解析 第一次接触Xilinx FPGA的GTX收发器设计时,我被VMGTAVCC这个看似普通的电源引脚折磨了整整两周。电路板上的眼图始终无法闭合,直到发现是去耦电容的布局犯了低级错误。这段经历让…...

FPGA时序约束入门:从“代码能跑多快”到“告诉工具我要跑多快”的思维转变

FPGA时序约束思维跃迁:从被动测试到主动掌控的设计哲学 在FPGA开发领域,许多工程师都会经历这样一个阶段:代码功能验证通过后,便迫不及待地烧录到板卡上测试,却对TimeQuest报告中那些密密麻麻的时序数据视而不见。直到…...

揭秘核磁共振(NMR)技术:从原理到实战应用的全方位解析

1. 核磁共振技术的前世今生 第一次接触核磁共振(NMR)是在研究生实验室,当时导师让我分析一个未知化合物的结构。看着那些密密麻麻的峰,我完全摸不着头脑。现在回想起来,核磁共振就像化学家的"X光眼镜"&#…...

DataGrip连接达梦数据库:从驱动配置到实战查询避坑指南

1. 为什么选择DataGrip连接达梦数据库 作为国产数据库的佼佼者,达梦数据库在企业级应用中越来越常见。但很多开发者第一次接触时都会遇到一个尴尬问题:找不到趁手的图形化工具。我刚开始用达梦时也踩过这个坑,直到发现JetBrains家的DataGrip这…...

从二分法到数字世界:深入解析SAR ADC的逐次逼近核心算法

1. 二分法思维:从猜数字到电压测量 第一次接触SAR ADC时,我被它优雅的二分法逻辑惊艳到了——这不就是我们小时候玩的猜数字游戏吗?假设你心里想着一个1到100之间的数字,别人每次猜测后,你只需要回答"大了"或…...

Fluent新手避坑指南:从自动保存到报告文件,这些设置细节千万别忽略

Fluent新手避坑指南:从自动保存到报告文件,这些设置细节千万别忽略 第一次打开Fluent时,满屏的参数设置窗口就像迷宫般令人望而生畏。作为CFD领域的工业级软件,Fluent在提供强大功能的同时,也隐藏着许多新手容易踩中的…...

Fofax进阶技巧:自定义Fx语法规则与实战应用

1. 认识Fofax与Fx语法 第一次接触Fofax时,我完全被它的效率震惊了。这个用Go语言编写的命令行工具,就像是给FoFa搜索引擎装上了涡轮增压器。你可能已经熟悉FoFa的基本查询,但Fofax带来的Fx语法才是真正的游戏规则改变者。简单来说&#xff0c…...

JavaScript中对象生命周期与垃圾回收的引用关系

“可达”对象指从根对象(如全局对象、调用栈)出发沿引用链能遍历到的对象,“不可达”对象则无法被遍历到,GC仅回收后者;全局变量始终可达,局部对象在无外部引用时变为不可达;闭包、未解绑事件监…...

微信好友关系智能检测:高效管理你的社交网络

微信好友关系智能检测:高效管理你的社交网络 【免费下载链接】WechatRealFriends 微信好友关系一键检测,基于微信ipad协议,看看有没有朋友偷偷删掉或者拉黑你 项目地址: https://gitcode.com/gh_mirrors/we/WechatRealFriends 在数字社…...

WSL桥接网络配置:从临时到永久的IP固定方案

1. 为什么需要固定WSL的IP地址? 很多开发者在使用WSL(Windows Subsystem for Linux)进行嵌入式开发时都会遇到一个头疼的问题:每次重启WSL或者电脑后,IP地址都会变化。想象一下,你正在调试一个嵌入式设备&a…...

网暴:存在却无效的公开羞辱性展示

网暴:存在却无效的公开羞辱性展示网络暴力常被笼统地归入“舆论暴力”或“言语攻击”,但其本质长期缺乏精准的理论刻画。如果将暴力重新定义为“不正当且不可对称地剥夺或削弱他人决断能力”,那么网暴便可以获得一个统一且深刻的解释&#xf…...

SQL如何统计分组中占比超过一定阈值的数据_HAVING过滤聚合

WHERE在分组前过滤行,HAVING在分组后过滤组;占比类条件必须用HAVING或窗口函数实现,WHERE无法使用聚合函数。WHERE 和 HAVING 的分工必须分清WHERE 在分组前过滤行,HAVING 在分组后过滤组。想筛“某组占比 > 80%”这种条件&…...

告别Win11反人类设计!用SysWOW64文件夹找回经典任务管理器的完整指南

深入解析Windows 11任务管理器:从系统架构到经典界面还原 每次Windows大版本更新,总有些改动让人措手不及。Windows 11带来的全新任务管理器界面,虽然视觉效果更现代化,但不少资深用户却发现操作效率反而降低了。那些熟悉的快捷键…...

5大收益:如何将代码质量可视化转化为可衡量的商业价值

5大收益:如何将代码质量可视化转化为可衡量的商业价值 【免费下载链接】sonar-cnes-report Generates analysis reports from SonarQube web API. 项目地址: https://gitcode.com/gh_mirrors/so/sonar-cnes-report 在当今快速迭代的软件开发环境中&#xff0…...

用Python手把手教你实现隐马尔可夫模型(HMM)的天气预测实战

用Python手把手教你实现隐马尔可夫模型(HMM)的天气预测实战 天气预报总是让人又爱又恨——明明说好的晴天,出门却遭遇暴雨。有没有更聪明的预测方法?今天我们将用Python构建一个能"学习"天气规律的隐马尔可夫模型&#…...

大模型训练监控利器:wandb可视化实战全解析

1. 为什么你需要wandb来监控大模型训练 当你正在训练一个参数量超过10亿的大模型时,最让人头疼的问题是什么?对我来说,最痛苦的就是看着黑漆漆的命令行窗口,完全不知道模型训练到哪一步了,效果怎么样。我曾经遇到过训练…...

ComfyUI JoyCaption 2 进阶配置:从安装到多模式反推实战

1. JoyCaption 2与ComfyUI的强强联合 如果你正在寻找一款能够大幅提升AI图像生成效率的工具,JoyCaption 2绝对是当前最值得关注的选择。这个由CXH大佬开发的插件最近迎来了重大更新,正式支持ComfyUI环境,让原本就强大的反推功能如虎添翼。我在…...

3分钟掌握D2RML:暗黑2重制版终极多开解决方案

3分钟掌握D2RML:暗黑2重制版终极多开解决方案 【免费下载链接】D2RML Diablo 2 Resurrected Multilauncher 项目地址: https://gitcode.com/gh_mirrors/d2/D2RML 还在为暗黑2重制版繁琐的多账号登录而烦恼吗?传统方式需要反复输入密码、处理令牌失…...

数据库模型设计实战:如何导出数据库完整数据字典_规范化流程

INFORMATION_SCHEMA 是 MySQL 导出数据字典的唯一可靠来源,需组合查询 COLUMNS、KEY_COLUMN_USAGE 和 TABLE_CONSTRAINTS 视图获取完整元信息;PostgreSQL 则必须使用 pg_catalog 系统表而非 information_schema。导出 MySQL 数据字典时,INFOR…...

Go语言怎么做幂等设计_Go语言接口幂等性教程【秒懂】

sync.Map 适用于小流量、单机、QPS 几百的幂等场景,但无自动过期、不跨进程;需用结构体缓存结果、定时清理、避免 key 污染,Redis 需原子 SetNXEX,DB 唯一索引为兜底。用 sync.Map 做单机幂等,什么场景能用、什么情况会…...

Maomi.In | .NET 全能多语言解决方案碳

AI Agent 时代的沙箱需求 从 Copilot 到 Agent:执行能力的质变 在生成式 AI 的早期阶段,应用主要以“Copilot”形式存在,AI 仅作为辅助生成建议。然而,随着 AutoGPT、BabyAGI 以及 OpenAI Code Interpreter(现为 Advan…...

Python异步爬虫如何应对封IP_结合asyncio与代理池实现轮询请求

asyncio.run()仅适用于单次顶层协程启动,爬虫主循环需用run_until_complete或while Truesleep;代理接入需区分HTTP/HTTPS/SOCKS5,配合Connector限流、Semaphore控制并发,并通过响应头精准识别封禁后分级降级。asyncio.run() 里直接…...

【仅剩72小时解锁】:2026奇点大会未公开微调训练日志样本集(含错误梯度、loss突变、token漂移原始记录)

第一章:2026奇点智能技术大会:大模型个性化微调 2026奇点智能技术大会(https://ml-summit.org) 在2026奇点智能技术大会上,大模型个性化微调成为核心议题之一。与传统全量微调不同,本届大会重点展示了低秩适配(LoRA&…...

【仅开放至Q3末】SITS2026改造原始日志脱敏包+Prompt工程checklist(含17个金融/政务场景特化模板)

第一章:SITS2026案例:大模型客服系统改造 2026奇点智能技术大会(https://ml-summit.org) 某大型金融集团原有客服系统基于规则引擎与传统NLU模块构建,响应准确率不足68%,平均首次解决时长(FTTR)达4.7分钟…...

LLM微调引发的歧视放大效应,实测3类Prompt工程反制策略+BiasScore量化验证工具链

第一章:大模型工程化中的伦理与合规考量 2026奇点智能技术大会(https://ml-summit.org) 大模型工程化已从单纯追求性能指标,转向对社会影响、法律边界与价值对齐的系统性治理。在生产环境中部署LLM服务时,伦理风险并非抽象议题,而…...

Agent框架选型生死线,深度拆解2026奇点大会公布的3层可信评估矩阵(含可复用的SLA合规检测清单)

第一章:Agent框架选型生死线:一场关乎系统存续的决策博弈 2026奇点智能技术大会(https://ml-summit.org) 在生产级AI系统演进中,Agent框架并非可插拔的“工具箱组件”,而是决定系统韧性、可观测性与迭代成本的底层契约。一次错误…...

higress 这个中登才是AI时代的心头好搪

核心摘要:这篇文章能帮你 ?? 1. 彻底搞懂条件分支与循环的适用场景,告别选择困难。 ?? 2. 掌握遍历DOM集合修改属性的标准姿势与性能窍门。 ?? 3. 识别流程控制中的常见“坑”,并学会如何优雅地绕过去。 ?? 主要内容脉络 ?? 一、痛…...

ATCODER ABC C题解云

这&#xff0c;是一个采用C精灵库编写的程序&#xff0c;它画了一幅漂亮的图形&#xff1a; 复制代码 #include "sprites.h" //包含C精灵库 Sprite turtle; //建立角色叫turtle void draw(int d){ for(int i0;i<5;i)turtle.fd(d).left(72); } int main(){ …...

喔去,litellm 竟然被投毒了,赶紧检查你的机器中招了没有驴

一、什么是setuptools&#xff1f; setuptools 是一个用于创建、分发和安装 Python 包的核心库。 它可以帮助你&#xff1a; 定义 Python 包的元数据&#xff08;如名称、版本、作者等&#xff09;。 声明包的依赖项&#xff0c;确保你的包能够正确运行。 构建源代码分发包&…...