小内存服务器部署 Next.js 的三种姿势
约 1 分钟· 486 字 56 次阅读
Next.js 构建阶段的内存峰值很容易超过 1GB,在 2C2G 的轻量服务器上直接 npm run build 经常 OOM 或被系统杀掉。这里对比三种部署方案。
方案一:服务器上直接构建(不推荐)
cd /opt/www/site
npm ci
npm run build # 内存峰值高,1.6G 内存大概率失败
npm run start
优点:流程简单。缺点:构建内存吃紧,失败后还得手动清理半成品。
方案二:Docker 多阶段构建
FROM node:22-alpine AS builder
WORKDIR /app
COPY package.json package-lock.json ./
RUN npm ci
COPY . .
RUN npm run build
FROM node:22-alpine
WORKDIR /app
COPY --from=builder /app/.next ./.next
COPY --from=builder /app/node_modules ./node_modules
CMD ["npm", "run", "start"]
优点:镜像自包含、易迁移。缺点:构建仍在服务器上,小内存依然可能失败。
方案三:本地构建 + 产物上传(推荐)
构建留在内存充足的本地机器,服务器只跑产物:
# 本地
npm run build
tar -czf blog-release.tar.gz --exclude='node_modules' site
# 服务器
cd /opt/www/site
rm -rf node_modules && npm ci --omit=dev # 只装生产依赖
npm run start # 无构建步骤,内存占用很小
优点:服务器内存压力最小,构建环境可控。缺点:多一步上传,更新流程稍复杂。
容器部署注意点
如果走 Docker,有几个细节:
- 端口映射:反代监听 8080,容器就映射
127.0.0.1:8080:3000; - 网络:加入
1panel-network,方便和其他容器(数据库等)用容器名互通; - 重启策略:先
--restart=no手动启动,确认稳定后再开自启; - 数据目录:
data/和content/一定要挂载卷或放宿主机目录,否则容器重建就丢数据。
小结
小内存服务器跑 Next.js,核心思路就一句话:把最吃内存的构建阶段从服务器挪走。本地构建 + 上传产物 + 服务器只跑 next start,是最稳的组合。