Отказ от ответственности: извините за мой плохой английский sh, и я новичок в angular, django и производстве.
Я пытаюсь сделать sh первый набросок того, что у меня есть превращенный в локальный производственный сервер, на котором у меня работает CentOS 7. До сих пор я работал в режиме разработки с proxy.config.json
для связывания между Django и Angular, пока все хорошо.
{
"/api": {
"target": "example.me",
"secure": false,
"logLevel": "debug",
"changeOrigin": true
}
}
когда я захотел запустить sh в производство, я не смог связать внешний интерфейс контейнера с внутренним. это настройки, которые я сделал
- Контейнер angular и помещение скомпилированных файлов в NGINX контейнер - порт 3108
- Контейнер Django и запуск gunicorn - порт 80
- 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
, и я не знаю почему