《如何操作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服务器运维解决方案。