CentOS环境下Node.js与其他服务的集成实践
一 运行与进程管理
[Unit]
Description=My Node.js App
After=network.target
[Service]
ExecStart=/usr/bin/node /opt/myapp/index.js
WorkingDirectory=/opt/myapp
User=nodeuser
Group=nodegroup
Environment=NODE_ENV=production
Restart=always
[Install]
WantedBy=multi-user.target
sudo systemctl daemon-reload
sudo systemctl start node-app
sudo systemctl enable node-app
npm i -g pm2
pm2 start app.js --name myapp -i max
pm2 startup
pm2 save
二 反向代理与静态资源服务
sudo yum install -y nginx
sudo systemctl start nginx
sudo systemctl enable nginx
server {
listen 80;
server_name your.domain.com;
location / {
proxy_pass http://127.0.0.1:3000;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection 'upgrade';
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_cache_bypass $http_upgrade;
}
# 静态资源
location /static/ {
alias /opt/myapp/static/;
expires 1y;
add_header Cache-Control "public, immutable";
}
}
三 数据库集成
// 安装:npm i mongoose dotenv
require('dotenv').config();
const mongoose = require('mongoose');
mongoose.connect(process.env.MONGODB_URI, {
useNewUrlParser: true,
useUnifiedTopology: true
}).then(() => console.log('MongoDB connected'))
.catch(err => console.error('MongoDB connection error:', err));
// 安装:npm i mysql2 sequelize
const mysql = require('mysql2/promise');
const sequelize = new Sequelize(process.env.DB_NAME, process.env.DB_USER, process.env.DB_PASS, {
host: process.env.DB_HOST,
dialect: 'mysql'
});
sequelize.authenticate().then(() => console.log('MySQL connected')).catch(console.error);
sudo yum install -y mongodb-org
sudo systemctl start mongod
sudo systemctl enable mongod
sudo systemctl status mongod
其他数据库(如MySQL/PostgreSQL)亦可通过系统包管理器安装、启动与开机自启。四 消息队列与缓存集成
sudo yum install -y epel-release
sudo yum install -y redis
sudo systemctl start redis
sudo systemctl enable redis
// 安装:npm i redis
const redis = require('redis');
const client = redis.createClient({ url: process.env.REDIS_URL });
client.on('error', e => console.error('Redis error:', e));
client.connect().then(() => console.log('Redis connected'));
五 安全与网络配置要点
sudo firewall-cmd --zone=public --add-port=80/tcp --permanent
sudo firewall-cmd --zone=public --add-port=443/tcp --permanent
sudo firewall-cmd --reload