Причины: - В production логи nginx хранятся в системной папке хоста - В dev образ постоянно перестраивается, логи не накапливаются - Логи не нужны для хранения в контейнере Удалено: - Папка logs из корня проекта - mkdir -p /app/logs из Dockerfile - Монтирование logs из docker-compose.yml и docker-compose.prod.yml - Переменная TOUCH_RELOAD из settings.py и .env файлов Результат: более clean и минималистичная структура проекта
58 lines
2.5 KiB
Docker
58 lines
2.5 KiB
Docker
# Dockerfile для Django приложения rosmorport_tsts
|
||
# Многоэтапная сборка для оптимизации размера образа
|
||
|
||
# Первый этап: builder - установка зависимостей
|
||
FROM python:3.12-slim as builder
|
||
|
||
# Переводим в режим без буферизации для вывода логов
|
||
ENV PYTHONUNBUFFERED=1
|
||
ENV PYTHONDONTWRITEBYTECODE=1
|
||
|
||
# Устанавливаем poetry
|
||
RUN pip install --no-cache-dir poetry==1.8.3
|
||
|
||
# Устанавливаем рабочую директорию
|
||
WORKDIR /app
|
||
|
||
# Копируем файлы с информацией о зависимостях
|
||
COPY pyproject.toml poetry.lock* ./
|
||
|
||
# Создаем виртуальное окружение и устанавливаем зависимости
|
||
RUN python -m venv /opt/venv
|
||
ENV PATH="/opt/venv/bin:$PATH"
|
||
RUN poetry install --no-interaction --no-ansi
|
||
|
||
# Второй этап: runtime - финальный образ
|
||
FROM python:3.12-slim
|
||
|
||
# Переводим в режим без буферизации для вывода логов
|
||
ENV PYTHONUNBUFFERED=1
|
||
ENV PYTHONDONTWRITEBYTECODE=1
|
||
|
||
# Устанавливаем рабочую директорию
|
||
WORKDIR /app
|
||
|
||
# Копируем виртуальное окружение из builder
|
||
COPY --from=builder /opt/venv /opt/venv
|
||
|
||
# Добавляем путь к виртуальному окружению
|
||
ENV PATH="/opt/venv/bin:$PATH"
|
||
|
||
# Копируем содержимое проекта
|
||
COPY . .
|
||
|
||
# Создаём необходимые директории
|
||
RUN mkdir -p /app/public/media /app/public/static /app/database
|
||
|
||
# Устанавливаем пользователя для запуска приложения (из соображений безопасности)
|
||
RUN useradd -m -u 1000 appuser && chown -R appuser:appuser /app
|
||
USER appuser
|
||
|
||
# Открываем порт
|
||
EXPOSE 8000
|
||
|
||
# CMD - выполняет миграции, собирает статику и запускает Gunicorn
|
||
# Использует sh для выполнения нескольких команд последовательно
|
||
CMD ["sh", "-c", "cd /app/rosmorport_tsts && echo '>>> Applying database migrations...' && python manage.py migrate --noinput && echo '>>> Collecting static files...' && python manage.py collectstatic --noinput --clear && echo '>>> Starting Gunicorn...' && gunicorn --bind 0.0.0.0:8000 --workers 4 --worker-class sync --worker-tmp-dir /dev/shm --max-requests 1000 --timeout 60 --access-logfile - --error-logfile - rosmorport_tsts.wsgi:application"]
|
||
|