Files
2024-test-rosmorport/Dockerfile
erjemin 8385e04103 refactor: Удалена ненужная папка logs
Причины:
- В production логи nginx хранятся в системной папке хоста
- В dev образ постоянно перестраивается, логи не накапливаются
- Логи не нужны для хранения в контейнере
Удалено:
- Папка logs из корня проекта
- mkdir -p /app/logs из Dockerfile
- Монтирование logs из docker-compose.yml и docker-compose.prod.yml
- Переменная TOUCH_RELOAD из settings.py и .env файлов
Результат: более clean и минималистичная структура проекта
2026-03-31 13:45:32 +03:00

58 lines
2.5 KiB
Docker
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 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"]