У меня есть серверная часть Django с остальными API, frond-конец Angular6cli, и я использую Docker.Интерфейс Angular доступен через веб-сервер nginx, а Django предоставляется локально с помощью uWSGI.Для того, чтобы сделать django-apis доступным для клиента, nginx также должен их маршрутизировать.
Вот мои:
структура проекта
project
|-- django-backend
|-- folders
|-- settings.py
|-- back.Dockerfile
|-- manage.py
|-- requirements.txt
|-- uwsgi.ini
|-- angular-frontend
|-- src/
|-- front.Dockerfile
|-- nginx.conf
|-- docker-compose.yml
назад. Dockerfile
FROM python:3.6.5
RUN apt-get update && \
apt-get install -y && \
pip install uwsgi
RUN mkdir /src
WORKDIR /src
COPY . /src/
RUN pip install -r requirements.txt
uwsgi.ini
[uwsgi]
project = backend
base = %d
http-socket = :8000
chdir = %(base)
module = %(backend).wsgi
master = true
processes = 2
threads = 2
front.Dockerfile
# Stage 0, based on Node.js, to build and compile Angular
FROM node:8.11.1 as node
RUN mkdir /src
WORKDIR /src
COPY package.json /src/
RUN npm install
COPY . /src/
RUN npm run build -- --configuration $CONFIG
# Stage 1, based on Nginx, to have only the compiled app, ready for production with Nginx
FROM nginx:1.15
COPY --from=node src/dist/web /var/www/miap
COPY ./nginx.conf /etc/nginx/conf.d/default.conf
nginx.conf
upstream django {
server 127.0.0.1:8000;
}
server {
listen 8080;
location / {
root /var/www/miap;
index index.html index.htm;
try_files $uri $uri/ /index.html =404;
}
location ~ ^/(api|auth)/ {
allow all;
proxy_http_version 1.1;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Host $http_host;
proxy_set_header X-Cluster-Client-Ip $remote_addr;
proxy_pass http://django;
}
}
docker-compose.yml
version: '3'
# docker-compose run Code in produntion mode
services:
# configure postgres database image
db:
image: postgres:10.1
restart: always
ports:
- "5432:5432"
environment:
POSTGRES_USER: 'admin'
POSTGRES_PASSWORD: '12345'
POSTGRES_DB: 'db'
volumes:
- data:/var/lib/postgresql/data/
# build and serve django within uwsgi server
server:
ports:
- "8000:8000"
build:
context: ./django-backend
dockerfile: back.Dockerfile
command: uwsgi --ini /src/uwsgi.ini
depends_on:
- db
# build and serve angular front-end and proxy to uwsgi
web:
ports:
- "8080:8080"
build:
context: ./angular-frontend
dockerfile: front.Dockerfile
volumes:
data:
Я получаю следующую ошибку
name: "HttpErrorResponse"
ok: false
status: 502
statusText: "Bad
Gateway" url: "http://:8080/auth/login/"
при доступе к django-api напрямую через порт 8000 все работает нормально, поэтому я полагаю, что в соединении между nginx и uWSGI должна быть какая-то ошибка. Простое отображение uWSGI без веб-сервера перед ним не может быть решением.
Любые идеи, или я делаю это совершенно неправильно для моего варианта использования?