CentOS 上部署 Node.js 项目的标准流程
一 准备与安装
sudo yum update -ysudo yum groupinstall -y "Development Tools"(便于编译原生依赖)curl -sL https://rpm.nodesource.com/setup_16.x | sudo bash -
sudo yum install -y nodejs
node -v、npm -v二 部署应用代码
sudo mkdir -p /var/www/myapp
cd /var/www/myapp
git clone <你的仓库地址> .
scp -r /本地/项目/路径 用户@服务器IP:/var/www/myapp
cd /var/www/myapp
npm install # 或 yarn install
npm run build # 以项目 package.json 脚本为准
三 进程管理与开机自启
sudo npm install -g pm2pm2 start app.js --name <app-name>pm2 status、pm2 logs <app-name>、pm2 restart <app-name>、pm2 stop <app-name>pm2 startup 按提示执行,然后 pm2 savemodule.exports = {
apps: [{
name: 'my-app',
script: 'app.js',
instances: 'max',
exec_mode: 'cluster',
autorestart: true,
watch: false,
max_memory_restart: '1G',
env: { NODE_ENV: 'development' },
env_production: { NODE_ENV: 'production' }
}]
};
pm2 start ecosystem.config.js --env productionsudo nano /etc/systemd/system/myapp.service[Unit]
Description=My Node.js App
After=network.target
[Service]
ExecStart=/usr/bin/node /var/www/myapp/app.js
Restart=always
User=nodeuser
Group=nodeuser
Environment=NODE_ENV=production
WorkingDirectory=/var/www/myapp
StandardOutput=journal
StandardError=journal
[Install]
WantedBy=multi-user.target
sudo systemctl daemon-reload && sudo systemctl enable myapp && sudo systemctl start myapp四 反向代理与防火墙
sudo yum install -y nginx
sudo systemctl start nginx
sudo systemctl enable nginx
sudo nano /etc/nginx/conf.d/myapp.confserver {
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_cache_bypass $http_upgrade;
}
}
sudo systemctl reload nginxsudo firewall-cmd --permanent --zone=public --add-service=http
sudo firewall-cmd --permanent --zone=public --add-service=https
sudo firewall-cmd --reload
五 环境变量与日志排查
dotenv 等库加载),或写入系统级脚本:sudo nano /etc/profile.d/node.sh
# 内容示例:
export NODE_ENV=production
export DATABASE_URL=your_db_url
# 生效:
source /etc/profile.d/node.sh
pm2 logs <app-name>、pm2 monitsudo journalctl -u myapp -f