Jack Chou
/
Writing

Dec 4, 2025

FirtDemo

下面给你一份从零到可运行的完整指南,教你如何把 Next.js 应用部署到你自有的 Docker 环境中。步骤覆盖本地构建镜像、Dockerfile 编写、docker-compose 部署、环境变量管理、反向代理等常见需求。你可以直接复制使用。


✅ 部署流程总览

  1. 准备 Next.js 项目目录
  2. 编写 Dockerfile
  3. 构建生产镜像
  4. 用 Docker 或 Docker Compose 启动容器
  5. (可选) 配置 Nginx 反向代理 / HTTPS

下面详细展开。


📌 1. Next.js 生产部署的 Dockerfile

请在项目根目录创建:

Dockerfile

# 1. 使用官方 Node LTS 镜像
FROM node:18-alpine AS builder

# 2. 设置工作目录
WORKDIR /app

# 3. 复制文件
COPY package*.json ./
COPY . .

# 4. 安装依赖并构建
RUN npm install --frozen-lockfile && npm run build

# 5. 生产运行环境
FROM node:18-alpine AS runner
WORKDIR /app

ENV NODE_ENV=production

# 只复制产物
COPY --from=builder /app/package*.json ./
COPY --from=builder /app/.next ./.next
COPY --from=builder /app/public ./public
COPY --from=builder /app/node_modules ./node_modules

EXPOSE 3000

CMD ["npm", "start"]

⚠️ 如果你使用的是 Next.js 13+ App Router

也完全支持,无需调整。


📌 2. 构建 Docker 镜像

在项目根目录运行:

docker build -t my-next-app .

📌 3. 运行 Docker 容器

docker run -d -p 3000:3000 --name nextjs my-next-app

访问:

http://<你的服务器IP>:3000

即可看到 Next.js。


📌 4. 使用 docker-compose(推荐)

创建文件:docker-compose.yml

version: '3'
services:
  nextjs:
    build: .
    container_name: nextjs
    ports:
      - "3000:3000"
    environment:
      - NODE_ENV=production

然后运行:

docker compose up -d --build

📌 5. 使用 Nginx 反向代理(生产环境强烈建议)

nginx.conf 示例

server {
    listen 80;

    server_name genued.com;

    location / {
        proxy_pass http://nextjs:3000;
        proxy_http_version 1.1;
        proxy_set_header Host $host;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection 'upgrade';
    }
}

并在 compose 中加入 nginx:

nginx:
  image: nginx:latest
  ports:
    - "80:80"
  volumes:
    - ./nginx.conf:/etc/nginx/conf.d/default.conf
  depends_on:
    - nextjs

📌 6. 如何处理环境变量

创建 .env.production:

NEXT_PUBLIC_API_URL=https://api.xxx.com

在构建镜像时自动注入。


📌 7. 常见问题

❓为什么我修改代码后容器不更新?

因为 Docker 镜像只打包构建产物,需要重新 build:

docker compose up -d --build

❓如何大幅减小镜像大小?

改成:

FROM node:18-slim

或使用 Turbopack / standalone 模式:

next build --standalone

如果你告诉我:

  • 你当前 Next.js 版本
  • 是否需要 HTTPS
  • 是否使用 App Router 或 Pages Router
  • 是否已有 Docker 服务器架构(例如 Ubuntu + docker compose)

我可以帮你直接生成 可运行的完整部署模板