发布于 2026-02-13, 更新于 2026-02-14
最近将博客从 SSG 改成了 SSR ,基于原有的数据库和前台界面,通过 AI 编程完全重写写了后端接口和管理端界面,实现前后端同构、服务端渲染等。在此记录一些部署中遇到的问题,以及 PM2 + Nginx 的部署配置信息。
在服务器环境跑 next build 时,TypeScript 的完整类型检查可能非常慢,甚至卡死。解决思路是区分本地开发与服务器构建:
ignoreBuildErrors。 IGNORE_BUILD_TYPES=true typescript.ignoreBuildErrorsNext.js App Router 会尝试静态化页面(SSG),但当页面依赖数据库或需要实时数据时,会在构建期触发 DB 连接。
解决方式:对相关页面显式声明强制动态渲染
export const dynamic = 'force-dynamic';
适用场景:
在开发和部署过程中,升级了 Next.js 版本,遇到了本地启动非常卡的情况,开发工具一直显示 Compiling。
原因是 .next 里的增量编译 / 缓存状态损坏或不一致,导致 Next.js 在 dev 模式下等不到“编译完成信号”。比如:
解决方式:删除 .next 目录就好了。可以在 package.json 加一个便捷命令:
{
"scripts": {
"dev:clean": "rimraf .next && next dev",
}
}
dev 卡在 Compiling 超过 1 分钟,就可以尝试删除 .next 目录。
Next.js SSR 运行时需要 Node 进程常驻,PM2 是常见守护方式。推荐的启动方式:
pm2 start npm --name heibaimeng-blog-ssr -i max -- start-i max 表示按 CPU 核数启动集群模式 start/stop/reload/delete 管理 -i max 必须放在 -- 之前,确保传给 PM2 而不是 npm将 SSR 服务与静态文件分离,可以提升性能并降低 Next 的静态文件压力。
配置示例:
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;
}
location /uploads/ {
alias /var/www/html/uploads/;
try_files $uri =404;
expires 30d;
add_header Cache-Control "public";
}
/ 走 Next SSR 服务 /uploads/ 静态直出,由 Nginx 直接返回