развертывание angular 9 с django drf с docker - запросы отклоняются - PullRequest
1 голос
/ 30 апреля 2020

Отказ от ответственности: извините за мой плохой английский sh, и я новичок в angular, django и производстве.

Я пытаюсь сделать sh первый набросок того, что у меня есть превращенный в локальный производственный сервер, на котором у меня работает CentOS 7. До сих пор я работал в режиме разработки с proxy.config.json для связывания между Django и Angular, пока все хорошо.

{
  "/api": {
    "target": "example.me",
    "secure": false,
    "logLevel": "debug",
    "changeOrigin": true
  }
}

когда я захотел запустить sh в производство, я не смог связать внешний интерфейс контейнера с внутренним. это настройки, которые я сделал

  1. Контейнер angular и помещение скомпилированных файлов в NGINX контейнер - порт 3108
  2. Контейнер Django и запуск gunicorn - порт 80
  3. Postgres image

DockerFiles и Docker -композит

Django Dockerfile

FROM python:3.8

# USER app
ENV PYTHONUNBUFFERED 1

RUN mkdir /code
WORKDIR /code
ADD requirements.txt /code/
RUN pip install -r requirements.txt
ADD . /code/

Angular Dockerfile

FROM node:12.16.2 AS build
LABEL version="0.0.1"
WORKDIR /app
COPY ["package.json","npm-shrinkwrap.json*","./"]
RUN npm install -g @angular/cli
RUN npm install --silent
COPY . .
RUN ng build --prod

FROM nginx:latest
RUN rm -rf /usr/share/nginx/html/*
COPY ./nginx/nginx.conf /etc/nginx/conf.d/default.conf
COPY --from=build /app/dist/frontend /usr/share/nginx/html
EXPOSE "3108"

Docker -композит

version: '3'

services:
  db:
    image: postgres
    environment:
      - POSTGRES_DB=database_name
      - POSTGRES_USER=postgres
      - POSTGRES_PASSWORD=postgres
    networks:
      - app
  backend:
    build: .
    command: gunicorn --bind 0.0.0.0:80 myproject.wsgi
    volumes:
      - .:/code
    ports:
      - "80:80"
    networks:
      - app
    depends_on: 
      - db
  frontend:
    build: 
      context: ../frontend
      dockerfile: Dockerfile
    command: nginx -g "daemon off;"
    ports:
      - "3108:3108"
    networks:
      - app
    depends_on:
      - backend

networks:
  app:

NGINX конфигурационный файл

server {
  listen 3108;
  server_name example.me;
  root /usr/share/nginx/html;

  location / {
    index index.html index.htm;
    try_files $uri $uri/ /index.html =404;

  }
}

Я пытался mimi c прокси angular добавив следующий ответ от этого поста , когда он говорил о docker

 location /api {
    proxy_pass example.me;
    }

, это привело к возвращению бэкэнда Error 403

, затем я изменил BaseEndPoint запросить непосредственно с сервера и добавил corsheaders к django и начал получать 401 Error.

environment.prod

export const environment = {
      production: true,
      ConfigApi: {
            BaseEndPoint: 'example.me',
            LoginEndPoint: '/api/account/login/',
        RegisterEndPoint: '/api/account/registration/',
        MembersList: '/api/membres_list/',
        Meeting: '/api/meeting/create_list/',
        TaskList: '/api/task_list/create/',
        }
    };

Я не могу указать на проблему или его источник; Я должен отметить, что запрос от Почтальона к бэкэнду работает нормально.

TL; DR

Бэкэнд продолжает отклонять запросы Frontend с 403 или 401, и я не знаю почему

...