feat: финальная конфигурация production Docker для RosmorPort
Some checks failed
Build and Push PetClones-site / build-and-push (push) Failing after 21s
Some checks failed
Build and Push PetClones-site / build-and-push (push) Failing after 21s
Обновлен Dockerfile: - Исправлены права доступа пользователя appuser (создание перед COPY) - Правильный порядок операций (USER -> COPY -> mkdir) - Оптимизация для production (workers=1, timeout=120, max-requests=200) - collectstatic и удаление лишних файлов статики при build Обновлен docker-compose.prod.yml: - Переименован контейнер в petclones-site--backend - Production переменные окружения (DEBUG=False) - Volumes для media, database и nginx конфигов - Gunicorn с параметрами для production - Watchtower для автоматического обновления образов - Ограничение ресурсов (0.25 CPU, 512M RAM) - JSON logging с ротаци??бновлен Dockerfile: - Исправлены права доступа пользователя appuser (создание перед COPY?? Исправлены пр?? Правильный порядок операций (USER -> COPY -> mkdir) - Оптимизация для prod
This commit is contained in:
35
Dockerfile
35
Dockerfile
@@ -39,14 +39,29 @@ ENV PATH="/opt/venv/bin:$PATH"
|
||||
# Устанавливаем рабочую директорию
|
||||
WORKDIR /app
|
||||
|
||||
# Устанавливаем пользователя для запуска приложения (из соображений безопасности)
|
||||
RUN useradd -m -u 1000 appuser && chown -R appuser:appuser /app
|
||||
USER appuser
|
||||
|
||||
# Копируем виртуальное окружение из builder
|
||||
COPY --from=builder /opt/venv /opt/venv
|
||||
|
||||
# Копируем содержимое проекта
|
||||
COPY . .
|
||||
COPY --chown=appuser:appuser . .
|
||||
|
||||
# Создаём необходимые директории
|
||||
RUN mkdir -p /app/public/media /app/public/static /app/database /app/staticfiles
|
||||
# Создаём директорию для собранной статики и даём права пользователю app
|
||||
RUN mkdir -p /app/staticfiles && chown -R appuser:appuser /app/staticfiles
|
||||
|
||||
# Создаём директорию для media
|
||||
RUN mkdir -p /app/public/media && chown -R appuser:appuser /app/public/media
|
||||
|
||||
# Создаём директорию для БД и даём права пользователю app
|
||||
# Это важно когда БД монтируется как том с хоста
|
||||
RUN mkdir -p /app/database && chown -R appuser:appuser /app/database
|
||||
|
||||
# Копируем внешний nginx конфиг для экспорта на хост (через volume)
|
||||
# Это нужно для настройки reverse-proxy на хосте
|
||||
COPY config/nginx/pet-clones--external-nginx.conf /tmp/pet-clones--external-nginx.conf.source
|
||||
|
||||
# Собираем статику при сборке образа (для production)
|
||||
# Это гарантирует что статика готова и не нужно запускать collectstatic при старте
|
||||
@@ -68,21 +83,17 @@ RUN find /app/staticfiles/webfonts -type f \( -name "*.ttf" -o -name "*.eot" -o
|
||||
# bootstrap.css, all.css, fontawesome.css используем только .min версии
|
||||
RUN find /app/staticfiles/css -maxdepth 1 -name "*.css" -not -name "*.min.css" -not -name "rosmorport.css" -delete
|
||||
|
||||
# Устанавливаем пользователя для запуска приложения (из соображений безопасности)
|
||||
RUN useradd -m -u 1000 appuser && chown -R appuser:appuser /app
|
||||
USER appuser
|
||||
|
||||
# Открываем порт
|
||||
EXPOSE 8000
|
||||
|
||||
# CMD - выполняет миграции и запускает Gunicorn
|
||||
# Миграции выполняются при каждом запуске для гибкости
|
||||
# Статика уже собрана при сборке образа
|
||||
# Параметры оптимизированы для dev с минимальной нагрузкой:
|
||||
# Параметры оптимизированы для минимальной нагрузкой (ветер качает, но не падает):
|
||||
# - bind 0.0.0.0:8000 (все интерфейсы контейнера, необходимо для Docker проброса портов)
|
||||
# - workers=1 (один worker - достаточно для dev без нагрузок)
|
||||
# - timeout=30 (сокращенный таймаут - запросы должны быть быстрыми)
|
||||
# - max-requests=100 (перезагрузка воркера после 100 запросов - экономия памяти)
|
||||
# - workers=1 (один worker - достаточно если не будет нагрузок)
|
||||
# - timeout=120 (сокращенный таймаут - запросы должны быть быстрыми)
|
||||
# - max-requests=200 (перезагрузка воркера после 200 запросов - экономия памяти)
|
||||
# - access-logfile/error-logfile '-' (логи в stdout для docker)
|
||||
CMD ["sh", "-c", "cd /app/rosmorport_tsts && echo '>>> Applying database migrations...' && python manage.py migrate --noinput && echo '>>> Starting Gunicorn...' && gunicorn --bind 0.0.0.0:8000 --workers 1 --worker-class sync --worker-tmp-dir /dev/shm --max-requests 100 --timeout 30 --access-logfile - --error-logfile - rosmorport_tsts.wsgi:application"]
|
||||
CMD ["sh", "-c", "cd /app/rosmorport_tsts && echo '>>> Applying database migrations...' && python manage.py migrate --noinput && echo '>>> Starting Gunicorn...' && gunicorn --bind 0.0.0.0:8000 --workers 1 --worker-class sync --worker-tmp-dir /dev/shm --max-requests 200 --timeout 120 --access-logfile - --error-logfile - rosmorport_tsts.wsgi:application"]
|
||||
|
||||
|
||||
Reference in New Issue
Block a user