设置nginx代理以使用docker compose反应多阶段构建

时间:2019-03-15 08:08:31

标签: django reactjs docker nginx

我-再次-非常困惑,与nginx,docker和反应。

这就是我想要的:1.)一个仅在本地公开端口的Django REST api 2.)我想要由nginx处理的REST api的静态文件3.)通过nginx提供服务的ReactJS前端在端口80上(我不知道通过nginx服务是否必要-但我听说它会减小图像大小)。

问题:它不起作用。所有容器均可单独运行,但通过docker compose提供服务将无法正常运行。我似乎无法代理api和前端。

我提示我的问题:我看到的是我在reactJS“ tiangolo / node-frontend:10”中分层的图像还复制了一个可能覆盖我的nginx.conf文件。

使用一百万个教程,我在这里:

nginx.conf

upstream website_rest {
        server restapi:8000;
    }

upstream website_frontend {
    server frontend:8080;
}

server {

    listen 80;

    location /rest_call/ {
        proxy_pass http://website_rest;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header Host $host;
        proxy_redirect off;
    }

    location / {
        proxy_pass http://frontend;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header Host $host;
        proxy_redirect off;
    }

    location /rest_call/staticfiles/ {
        alias /usr/src/website-dj/staticfiles/;
    }

}

这是用于响应的dockerfile:

# Stage 0, "build-stage", based on Node.js, to build and compile the frontend
FROM tiangolo/node-frontend:10 as build-stage
WORKDIR /website-rj
COPY package*.json /website-rj/
RUN npm install
COPY ./ /website-rj/
RUN npm run build

# Stage 1, based on Nginx, to have only the compiled app, ready for production with Nginx
FROM nginx:1.15
COPY --from=build-stage /website-rj/build/ /usr/share/nginx/html
# Copy the default nginx.conf provided by tiangolo/node-frontend
COPY --from=build-stage /nginx.conf /etc/nginx/conf.d/default.conf

Dockercompose:

version: '3.7'

services:
  frontend:
    expose:
      - 8080
    build: "./website_rj_docker"
    volumes:
      - ./website_rj_docker/build:/usr/src/website-rj/
  restapi:
    build: "./website_dj_docker/"
    # command: python /usr/src/website-dj/manage.py runserver 0.0.0.0:8000 --settings=rest.settings.production
    command: gunicorn rest.wsgi:application --bind 0.0.0.0:8000
    volumes:
      - ./website_dj_docker/:/usr/src/website-dj/
      - static_volume:/usr/src/website-dj/staticfiles
    expose:
      - 8000
    environment:
      - SECRET_KEY='something...'
      - SQL_ENGINE=django.db.backends.postgresql
      - SQL_DATABASE=postgres
      - SQL_USER=something...
      - SQL_PASSWORD=something...
      - SQL_HOST=db
      - SQL_PORT=5432
      - DATABASE=postgres
    depends_on:
      - db
  db:
    image: postgres:10.5-alpine
    volumes:
      - postgres_data:/var/lib/postgresql/data/
  nginx:
    build: ./nginx
    volumes:
      - static_volume:/usr/src/website-dj/staticfiles
    ports:
      - 1337:80
    depends_on:
      - restapi

0 个答案:

没有答案