PM2 + Nginx 部署 Next.js:从构建到开机自启
架构一览
用户 → :80 Nginx → 127.0.0.1:3000 → PM2 → next start
公网只开 80/443;不要把 3000 直接暴露到公网(防火墙 + 安全组双保险)。
服务器准备
# OpenCloudOS / CentOS 系
curl -fsSL https://rpm.nodesource.com/setup_20.x | sudo bash -
sudo yum install -y nodejs nginx
sudo npm install -g pm2
部署目录
sudo mkdir -p /var/www/zhubook
sudo chown $USER:$USER /var/www/zhubook
cd /var/www/zhubook
# 上传代码或 git pull
npm ci
npm run build
生产环境变量写入 /var/www/zhubook/.env.production(勿提交 Git):
ADMIN_USERNAME=admin
ADMIN_PASSWORD=强密码
JWT_SECRET=随机长字符串
PM2 配置
ecosystem.config.cjs:
module.exports = {
apps: [
{
name: "zhubook",
cwd: "/var/www/zhubook",
script: "node_modules/next/dist/bin/next",
args: "start -p 3000",
instances: 1,
exec_mode: "fork",
env: { NODE_ENV: "production" },
max_memory_restart: "600M",
},
],
};
pm2 start ecosystem.config.cjs
pm2 save
pm2 startup # 按提示执行 systemd 命令
Nginx 站点
/etc/nginx/conf.d/zhubook.conf:
server {
listen 80;
server_name 49.235.182.194; # 备案后改为 zhubook.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;
}
}
sudo nginx -t && sudo systemctl reload nginx
更新发布流程
cd /var/www/zhubook
git pull # 或 rsync 新包
npm ci && npm run build
pm2 restart zhubook
日志与监控
pm2 logs zhubook --lines 100
pm2 monit
磁盘占满时 PM2 可能写不动日志;可配置 pm2-logrotate。
备案后
- 域名 A 记录指向服务器 IP
server_name改为zhubook.com www.zhubook.com- 申请免费 SSL(Let's Encrypt 或腾讯云证书)
- 强制 HTTPS 跳转
小结
轻量个人站 PM2 + Nginx 足够稳定;关键是内网反代、环境变量与 pm2 startup 三件套,避免进程挂了就 502 无人知。
相关阅读
- 备案期间的开发与部署指南2026-05-19
- Docker 部署 Node.js 生产服务:多阶段构建与安全基线2026-05-16
- Next.js 个人站 SEO 实战:从 sitemap 到结构化数据2026-05-20
本站评论 (0)
- 暂无评论,来说第一句吧。