# 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/logs /app/public/media /app/public/static # Собираем статические файлы RUN python rosmorport_tsts/manage.py collectstatic --noinput --clear || true # Устанавливаем пользователя для запуска приложения (из соображений безопасности) RUN useradd -m -u 1000 appuser && chown -R appuser:appuser /app USER appuser # Открываем порт EXPOSE 8000 # Команда для запуска приложения (используем gunicorn) CMD ["gunicorn", "--bind", "0.0.0.0:8000", "--workers", "4", "--timeout", "120", "rosmorport_tsts.wsgi:application"]