nodejs 部署成windows服务

博客围绕Node.js展开,但具体内容缺失。Node.js是信息技术领域后端开发常用技术,可用于构建高性能网络应用等。
1. 全局安装node-windows的库
      npm i -g node-windows
2. 在项目中新建一个安装文件nw.js
     let Service = require('node-windows').Service;

     let svc = new Service({
        name: 'ele4React',    //服务名称
        description: 'ele4React', //描述
        script: 'E:/mykoa/index.js' //nodejs项目要启动的文件路径
    });

    svc.on('install', () => {
        svc.start();
    });

    svc.install();
3. 在项目中新建一个卸载文件nw-uninstall.js
    let Service = require('node-windows').Service;

    let svc = new Service({
        name: 'ele4React',    //服务名称
        description: 'ele4React', //描述
        script: 'E:\mykoa\index.js' //nodejs项目要启动的文件路径
    });

  svc.on('uninstall',function(){
      console.log('Uninstall complete.');
      console.log('The service exists: ',svc.exists);
    });

  svc.uninstall();
4. 执行命令
      node nw.js //安装服务
      node nw-uninstall //卸载服务

 

<think> 我们已经在之前讨论了部署Node.js后端服务的一般步骤,现在针对Windows系统进行具体说明。在Windows部署Node.js后端服务与在Linux上类似,但有一些特定于Windows的注意事项。 部署步骤包括:安装Node.js、设置项目、安装依赖、配置环境变量、使用进程管理器(可选)、设置防火墙规则、配置IIS作为反向代理(可选)等。 下面将详细说明每个步骤。 </think>### 如何在 Windows 系统部署 NodeJS 后端服务Windows 系统部署 NodeJS 后端服务需要解决 Windows 特有的环境配置、进程管理和网络问题。以下是完整解决方案: #### 1. **安装 Node.js 运行时** ```javascript // 验证安装是否功 const checkNodeVersion = () => { console.log(`Node.js 版本: ${process.version}`); console.log(`npm 版本: ${process.versions.npm || '未找到'}`); }; checkNodeVersion(); ``` - **解释**:从 [Node.js 官网](https://nodejs.org/) 下载 LTS 版本安装包 - **注意事项**: - 勾选 "Automatically install the necessary tools" 选项 - 安装后以管理员身份运行 PowerShell 执行 `npm install -g windows-build-tools` - 路径中不要包含空格或特殊字符 #### 2. **配置项目环境** ```javascript // 创建环境配置文件 .env const fs = require('fs'); const envConfig = `PORT=3000 DB_HOST=localhost SECRET_KEY=your_secret_here NODE_ENV=production`; fs.writeFileSync('.env', envConfig); console.log('环境配置文件已创建'); // 使用 dotenv 加载配置 require('dotenv').config(); console.log(`运行端口: ${process.env.PORT}`); ``` - **解释**: - 使用 `dotenv` 包管理环境变量 - 敏感信息(如 API 密钥)不应直接写在代码中 - 在 `.gitignore` 中添加 `.env` 防止泄露 #### 3. **安装依赖并构建** ```bash # 安装生产依赖(不要使用 npm install --production) npm install --omit=dev # 如果使用 TypeScript 或 Babel npm run build ``` #### 4. **使用 PM2 进程管理** ```javascript // 安装 PM2 const { execSync } = require('child_process'); try { execSync('npm install pm2 -g'); console.log('PM2 安装功'); // 创建启动脚本 const startupScript = `@echo off pm2 start app.js --name "my-node-app" pm2 save pm2 startup`; fs.writeFileSync('start-app.bat', startupScript); console.log('已创建启动脚本'); } catch (error) { console.error('PM2 安装失败:', error.message); } ``` - **操作步骤**: 1. 以管理员身份运行 PowerShell 2. 执行 `Set-ExecutionPolicy RemoteSigned` 允许脚本运行 3. 运行 `start-app.bat` - **PM2 关键命令**: - `pm2 list` 查看运行状态 - `pm2 logs` 查看日志 - `pm2 monit` 监控资源使用 #### 5. **配置防火墙** ```javascript // 创建防火墙配置脚本 const firewallConfig = `netsh advfirewall firewall add rule name="Node.js HTTP" dir=in action=allow protocol=TCP localport=${process.env.PORT || 3000} timeout /t 5`; fs.writeFileSync('configure-firewall.bat', firewallConfig); console.log('防火墙配置脚本已创建,请以管理员身份运行'); ``` - **解释**:Windows Defender 默认会阻止 Node.js 端口访问 - **备选方案**:手动配置 1. 搜索 "Windows Defender 防火墙" 2. 选择 "高级设置" 3. 添加入站规则允许 TCP 端口 (3000 或自定义端口) #### 6. **设置开机自启动** ```javascript // 创建计划任务脚本 const taskConfig = `schtasks /create /tn "Start Node.js App" /tr "${process.cwd()}\\start-app.bat" /sc onstart /ru SYSTEM`; fs.writeFileSync('create-task.bat', taskConfig); console.log('开机启动脚本已创建,以管理员身份运行此文件'); ``` - **备选方法**: 1. 按 Win+R 输入 `taskschd.msc` 2. 创建基本任务 3. 操作:"启动程序" -> 选择 PM2 启动脚本 #### 7. **使用 IIS 作为反向代理(可选)** ```javascript // 生 Web.config 文件 const webConfig = `<?xml version="1.0" encoding="UTF-8"?> <configuration> <system.webServer> <handlers> <add name="iisnode" path="app.js" verb="*" modules="iisnode"/> </handlers> <rewrite> <rules> <rule name="NodeJS"> <match url="/*"/> <action type="Rewrite" url="app.js"/> </rule> </rules> </rewrite> </system.webServer> </configuration>`; fs.writeFileSync('web.config', webConfig); console.log('IIS 配置文件已生'); ``` - **安装步骤**: 1. 启用 IIS (控制面板 > 程序 > 启用或关闭 Windows 功能) 2. 安装 [iisnode](https://github.com/Azure/iisnode) 3. 安装 URL Rewrite 模块 4. 在 IIS 中创建站点并指向项目目录 ### 常见问题解决方案 1. **端口占用问题**: ```javascript // 检查端口占用 const net = require('net'); const port = process.env.PORT || 3000; const server = net.createServer(); server.once('error', (err) => { if (err.code === 'EADDRINUSE') { console.error(`端口 ${port} 已被占用`); } }); server.once('listening', () => { server.close(); console.log(`端口 ${port} 可用`); }); server.listen(port); ``` 2. **权限不足问题**: - 解决方案:始终以管理员身份运行 PowerShell 或命令提示符 - 在 package.json 中添加: ```json "scripts": { "start-admin": "powershell Start-Process -Verb RunAs npm start" } ``` 3. **路径问题**: ```javascript // 正确处理 Windows 路径 const path = require('path'); const logPath = path.join(__dirname, 'logs', 'app.log'); console.log(`日志路径: ${logPath}`); // 避免使用硬编码路径 ``` ### 部署后验证 1. 访问 `http://localhost:3000` 测试服务 2. 检查 PM2 日志:`pm2 logs` 3. 使用压力测试工具: ```bash npm install -g loadtest loadtest -n 1000 -c 100 http://localhost:3000/ ```
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值