Как смонтировать приложение django в docker с nginx и uwsgi - PullRequest
0 голосов
/ 13 февраля 2020

Привет, прежде чем объяснить мою проблему, я приведу небольшое описание моих требований. Я работаю с kong и konga, чтобы управлять своими проектами с docker. Это помогает запускать разные приложения в разных папках, как если бы они были все на одном сайте.

У меня уже есть разные приложения с docker, но это первое, в котором я использую Django. Первоначально приложение было разработано с использованием gunicorn для запуска приложения django и nginx для обслуживания файлов c через другой порт. В локальной среде работает, но когда я запускаю свои приложения с Konga, мне нужно переключать оба способа таким образом, чтобы я мог работать под одним и тем же портом, и я считаю, что вариант uwsgi. Я на самом деле мог запустить приложение с Konga, но без обслуживания какого-либо актива.

Структура проекта:

blacklist/
   asgi.py
   settings.py
   urls.py
   wsgi.py
blacklist_app/
   controllers/
   migrations/
   templates/
   uploaded_files/
   urls.py models.py views.py etc
config/
   nginx/
     nginx.conf
     assets/ (Assets to be serve by nginx)
   uwsgi/
     uwsgi.ini

docker-compose.yml
Dockerfile
manage.py
requirements.txt

#docker-compose.yml
version: '3'

services:
  nginx:
    image: nginx:latest
    container_name: subida-excel-nginx
    ports:
      - "8011:8011"
    volumes:
      - ./nginx/src:/src
      - ./config/nginx:/etc/nginx/conf.d
      - ./config/uwsgi:/etc/uwsgi.d
    depends_on:
      - web
    networks: 
      - subida-excels
    environment: 
      - URL_BASE=${SUBIDAEXCEL_URLBASE}

  web:
    container_name: subida-excel
    build: .
    command: gunicorn -w 10 --timeout 86400 -b 0.0.0.0:8010 blacklist.wsgi
    volumes:
      - .:/code
      - ./.ssh:/root/.ssh
      - ./db.sqlite3:/code/db.sqlite3
      - ./app.socket:/var/run/uwsgi.sock
    ports:
      - "8010:8010"
    networks: 
      - kong-net
      - subida-excels
    environment: 
      - ALLOWED_HOST=${SUBIDAEXCEL_HOSTS}
      - DEBUG=${SUBIDAEXCEL_DEBUG}

networks: 
  subida-excels:
  kong-net:
    external: true

volumes: 
  db.sqlite3:
  app.socket:

#/config/uwsgi.ini
[uwsgi]

plugins=python3
chdir=/code
module=blacklist.uwsgi

pidfile=/run/uwsgi/app.pid
socket=/var/run/uwsgi.sock
master=True
processes=5
harakiri=20
max-requests=500
vacuum=True

#/config/nginx/nginx.conf
server 
{
    listen 0.0.0.0:8010;
    server_name $URL_BASE;

    location /static {
        alias /assets;
    }

    location / {
        include uwsgi_params;
        uwsgi_pass socket:/run/uwsgi/socket.sock;
    }
}

#/Dockerfile
FROM python:3.8.1

ENV PYTHONUNBUFFERED 1

RUN apt-get update && apt-get install sqlite3 vim -y
COPY . /code/
COPY ./.ssh /root/.ssh
WORKDIR /code/

COPY requirements.txt .
RUN pip install --upgrade pip
RUN pip install -r requirements.txt

RUN chmod -R 750 /code
RUN chmod 770 /code
RUN chmod 770 /code/db.sqlite3
RUN chmod -R 770 /code/blacklist_app/uploaded_files

EXPOSE 8010

Это основная структура, которая запускает его, хотя теперь не инициализируется из-за ошибки.

Буду признателен за помощь в правильном обслуживании активов, если они обслуживаются django или nginx

...