位置: 文档库 > JavaScript > 如何操作nodeJS服务器创建与重启

如何操作nodeJS服务器创建与重启

汽水味星辰2085 上传于 2023-10-24 19:46

《如何操作Node.js服务器创建与重启》

Node.js作为基于Chrome V8引擎的JavaScript运行时环境,凭借其非阻塞I/O和事件驱动特性,已成为构建高性能服务器的首选技术栈。本文将系统阐述如何从零开始创建Node.js服务器,并详细介绍生产环境下的重启策略与最佳实践。

一、Node.js服务器基础创建

1.1 环境准备

在开始前需确保系统已安装:

  • Node.js(建议LTS版本)
  • npm或yarn包管理工具
  • 代码编辑器(VS Code/WebStorm等)

通过命令行验证安装:

node -v
npm -v

1.2 创建基础HTTP服务器

使用Node.js内置的http模块创建最简服务器:

const http = require('http');

const server = http.createServer((req, res) => {
  res.writeHead(200, {'Content-Type': 'text/plain'});
  res.end('Hello Node.js Server\n');
});

const PORT = 3000;
server.listen(PORT, () => {
  console.log(`Server running at http://localhost:${PORT}/`);
});

此代码实现了:

  • 创建HTTP服务器实例
  • 定义请求处理回调
  • 监听3000端口

1.3 使用Express框架升级

安装Express(轻量级Web框架):

npm init -y
npm install express

创建Express服务器:

const express = require('express');
const app = express();

app.get('/', (req, res) => {
  res.send('Hello Express Server');
});

const PORT = 3000;
app.listen(PORT, () => {
  console.log(`Express server listening on port ${PORT}`);
});

Express优势:

  • 简化的路由系统
  • 中间件支持
  • 模板引擎集成

二、服务器配置与优化

2.1 环境变量管理

使用dotenv包管理配置:

npm install dotenv
// 创建.env文件
PORT=3000
NODE_ENV=development

在代码中加载:

require('dotenv').config();
const PORT = process.env.PORT || 3000;

2.2 跨域处理(CORS)

安装cors中间件:

npm install cors
// 使用示例
const cors = require('cors');
app.use(cors());

2.3 静态文件服务

app.use(express.static('public'));

此配置会将public目录下的文件作为静态资源提供

三、服务器重启策略

3.1 手动重启

开发阶段常用方式:

  • Ctrl+C停止服务器
  • 再次运行node app.js

缺点:

  • 需要人工干预
  • 无法处理意外崩溃

3.2 使用nodemon自动重启

安装开发依赖:

npm install --save-dev nodemon

在package.json中添加脚本:

"scripts": {
  "dev": "nodemon app.js"
}

运行命令:

npm run dev

nodemon特性:

  • 文件变更自动重启
  • 支持排除特定文件
  • 可配置延迟重启

3.3 PM2进程管理(生产环境)

安装PM2:

npm install pm2 -g

启动应用:

pm2 start app.js --name "my-app"

常用命令:

pm2 list          // 查看进程列表
pm2 restart my-app // 重启应用
pm2 reload my-app  // 零停机重启
pm2 stop my-app    // 停止应用
pm2 delete my-app  // 删除进程

PM2高级功能:

  • 集群模式(多核利用)
  • 日志管理
  • 监控仪表盘

四、生产环境部署要点

4.1 反向代理配置

使用Nginx作为反向代理:

server {
  listen 80;
  server_name example.com;

  location / {
    proxy_pass http://localhost:3000;
    proxy_http_version 1.1;
    proxy_set_header Upgrade $http_upgrade;
    proxy_set_header Connection 'upgrade';
    proxy_set_header Host $host;
    proxy_cache_bypass $http_upgrade;
  }
}

4.2 HTTPS配置

使用Let's Encrypt免费证书:

sudo apt install certbot python3-certbot-nginx
sudo certbot --nginx -d example.com

4.3 负载均衡

PM2集群模式示例:

pm2 start app.js -i max  // 自动根据CPU核心数启动实例

五、故障排查与日志管理

5.1 常见问题处理

端口占用解决:

// Linux/Mac
lsof -i :3000
kill -9 PID

// Windows
netstat -ano | findstr :3000
taskkill /PID type_pid /F

5.2 日志记录

使用winston日志库:

npm install winston
const winston = require('winston');

const logger = winston.createLogger({
  level: 'info',
  format: winston.format.json(),
  transports: [
    new winston.transports.File({ filename: 'error.log', level: 'error' }),
    new winston.transports.File({ filename: 'combined.log' })
  ]
});

app.use((req, res, next) => {
  logger.info(`${req.method} ${req.url}`);
  next();
});

六、自动化部署方案

6.1 GitHub Actions集成

创建.github/workflows/node.yml:

name: Node.js CI

on:
  push:
    branches: [ main ]

jobs:
  build:
    runs-on: ubuntu-latest
    steps:
    - uses: actions/checkout@v2
    - name: Use Node.js
      uses: actions/setup-node@v1
      with:
        node-version: '14'
    - run: npm ci
    - run: npm run build
    - name: PM2 Deploy
      uses: appleboy/ssh-action@master
      with:
        host: ${{ secrets.SSH_HOST }}
        username: ${{ secrets.SSH_USERNAME }}
        key: ${{ secrets.SSH_PRIVATE_KEY }}
        script: |
          cd /path/to/app
          git pull
          npm install
          pm2 reload my-app

6.2 Docker容器化

创建Dockerfile:

FROM node:14
WORKDIR /usr/src/app
COPY package*.json ./
RUN npm install
COPY . .
EXPOSE 3000
CMD ["node", "app.js"]

构建并运行:

docker build -t my-node-app .
docker run -p 3000:3000 -d my-node-app

七、安全最佳实践

7.1 依赖安全

定期运行安全审计:

npm audit
npm audit fix

7.2 请求限制

使用express-rate-limit防止暴力攻击:

npm install express-rate-limit
const rateLimit = require('express-rate-limit');

app.use(
  rateLimit({
    windowMs: 15 * 60 * 1000, // 15分钟
    max: 100 // 每个IP限制100个请求
  })
);

7.3 安全头设置

使用helmet中间件:

npm install helmet
app.use(helmet());

八、性能监控

8.1 基础指标收集

const os = require('os');
setInterval(() => {
  console.log(`Memory usage: ${(1 - os.freemem() / os.totalmem()) * 100}%`);
}, 5000);

8.2 PM2监控

pm2 monitor

8.3 New Relic集成

npm install newrelic
// 创建newrelic.js配置文件
require('newrelic');

关键词:Node.js服务器、Express框架、服务器重启、PM2进程管理、nodemon自动重启、生产环境部署Nginx反向代理、Docker容器化、安全实践性能监控

简介:本文系统介绍了Node.js服务器的创建流程,从基础HTTP服务器搭建到Express框架应用,详细阐述了手动重启、nodemon自动重启PM2进程管理等不同场景下的重启方案。内容涵盖环境配置、静态文件服务、跨域处理、集群模式、日志管理、自动化部署、安全防护和性能监控等全生命周期管理要点,为开发者提供完整的Node.js服务器运维解决方案。