POST://deploy-nextjs-low-memory
带点橘子味的馒头的头像
带点橘子味的馒头

FRONTEND / DESKTOP DEV

返回文章列表

小内存服务器部署 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,有几个细节:

  1. 端口映射:反代监听 8080,容器就映射 127.0.0.1:8080:3000
  2. 网络:加入 1panel-network,方便和其他容器(数据库等)用容器名互通;
  3. 重启策略:先 --restart=no 手动启动,确认稳定后再开自启;
  4. 数据目录data/content/ 一定要挂载卷或放宿主机目录,否则容器重建就丢数据。

小结

小内存服务器跑 Next.js,核心思路就一句话:把最吃内存的构建阶段从服务器挪走。本地构建 + 上传产物 + 服务器只跑 next start,是最稳的组合。

相关文章