Django, Nginx и Docker. РАЗРАБОТКА

Я хочу развернуть свое приложение, созданное на основе django и flutter, и я использовал docker для докеризации django и nginx. Вот что у меня есть на данный момент и что я должен добавить или изменить:

docker-compose.yaml:

version: '3.8'
services:
  api:
    build: 
      context: ./api
    command: gunicorn myproject.wsgi:application --bind 0.0.0.0:8000
    volumes:
      - ./api:/app/
      - static:/app/static/
    expose:
      - 8000
    depends_on:
      - db
  db:
    image: postgres:latest
    volumes:
      - data:/var/lib/postgresql/data/
  server:
    build: 
      context: ./server    
    volumes:
      - static:/app/static/
      - media:/app/media/
      - certs:/etc/nginx/certs
    ports:
      - 443:443
      - 80:80
    certbot:
      image: certbot/certbot
    depends_on:
      - api
volumes:
  data:
  static:
  media:
  certs:

dockerfile (django):

FROM python:latest

ENV SECRET_KEY 123
ENV DATABASE_PASSWORD postgres
ENV DEBUG 0

RUN  mkdir /app

WORKDIR /app

COPY . .

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

RUN python manage.py collectstatic --no-input

dockerfile (nginx):

FROM nginx:latest

RUN mkdir /server

RUN rm /etc/nginx/conf.d/default.conf

COPY ./nginx.conf /etc/nginx/conf.d/

WORKDIR /server

nginx.conf:

server {
    listen 80;
    server_name mydomain.com 
    return 301 https://$server_name$request_uri;

    location / {
        proxy_pass http://server;
    }

    location /static/ {
        alias /server/static/;
    }
}

server {
    listen 443 ssl;
    server_name mydomain.com;
}

Спасибо за ваше время

Я пытался искать в Интернете, но не смог найти много ответов

Я не эксперт, но:

Docker Compose file:

  1. Важный момент, используйте файл .env и конфигурационный параметр env_file для хранения ваших секретов.
  2. Удалите bind mount из службы api
  3. .
  4. Медиа том не существует на api сервисе, следовательно, не разделяется с прокси (внутри этого тома ничего не будет?)

Dockerfile (Django):

  1. Рассмотрите возможность использования фиксированной версии Python, иначе при перестройке могут возникнуть конфликты. (Вы можете тестировать и обновлять в dev environ)
  2. .
  3. Перемещайте переменные окружения в файл .env, чтобы скрыть свои секреты.
  4. Подумайте о добавлении и удалении временных файлов (и libs) после того, как вы их использовали, например:
RUN pip install -r requirements.txt && \
    rm requirements.txt

(Еще лучше, если вы добавите их в папку /temp, а затем удалите папку)

  1. Насколько я знаю, есть и другие хорошие практики, такие как создание пользователя для запуска приложения для ограничения привилегий (вместо запуска с правами root). Иметь сценарий оболочки в качестве точки входа и т.д.
  2. .

nginx.conf:

  1. Статический URL неверен? Нет такого каталога /server/static.
Вернуться на верх