在nginx代理后面构建nextjs多阶段docker

时间:2019-02-27 17:08:34

标签: docker nginx next.js

我的nextjs前端应用程序具有多阶段docker构建。看起来像这样:

# Do the npm install or yarn install in the full image
FROM mhart/alpine-node AS builder
WORKDIR /app
COPY ./package.json ./
RUN npm install
COPY . .
RUN npm run build
RUN npm run export

FROM nginx
EXPOSE 3000
COPY ./nginx/default.conf /etc/nginx/conf.d/default.conf
COPY --from=builder /app/out /usr/share/nginx/html

问题是我现在有动态路线。因此,我无法运行next export命令,该命令会将我的应用程序构建为静态应用程序。 NextJS明确指出,并非每个应用程序都可以部署为静态应用程序。如果您的应用需要在运行时生成动态页面,则不能将其部署为静态应用。 https://nextjs.org/learn/excel/static-html-export

现在的问题是,在我的docker部署中,我依赖于将index.html文件从我的nextjs导出文件夹复制到nginx中的/ usr / share / nginx / html文件夹中。我有什么方法可以将3000从nextjs导出到nginx,但不能构建静态文件,并且仍然位于nginx后面,如果没有index.html文件,我需要将其复制到nginx吗?

将流量路由到客户端或服务器的Nginx Web服务器如下:

upstream client {
  server client:3000;
}

upstream api {
  server api:4000;
}

server {
  listen 80;

  location / {
    proxy_pass http://client;
  }

  location /sockjs-node {
    proxy_pass http://client;
    proxy_http_version 1.1;
    proxy_set_header Upgrade $http_upgrade;
    proxy_set_header Connection "Upgrade";
  }

  location /api {
    rewrite /api/(.*) /$1 break;
    proxy_pass http://api;
  }
}

1 个答案:

答案 0 :(得分:0)

在不同的容器上运行nginx和next.js。