# Используем "легкую" версию Python на базе Debian Bookworm. # slim — это баланс между размером образа и наличием нужных утилит. FROM python:3.12-slim # Указываем рабочую папку внутри контейнера. Все последующие команды будут выполняться в ней. WORKDIR /app # Настройки окружения: # 1. Запрещаем Python писать файлы .pyc (байткод) на диск, чтобы не мусорить. ENV PYTHONDONTWRITEBYTECODE=1 # 2. Отключаем буферизацию логов. Так ты сразу увидишь ошибки в `docker logs`, а не будешь их ждать. ENV PYTHONUNBUFFERED=1 # Ставим системные зависимости: # apt-get update — обновляем списки пакетов. # gcc и libpq-dev — необходимы для сборки библиотеки psycopg2 (драйвер для Postgres). # rm -rf /var/lib/apt/lists/* — удаляем кэш установщика, чтобы уменьшить размер образа. RUN apt-get update && apt-get install -y --no-install-recommends \ gcc libpq-dev \ libfreetype6 libpng16-16 \ fonts-dejavu-core \ && rm -rf /var/lib/apt/lists/* # Сначала копируем только список зависимостей. # Это нужно для "кэширования слоев": если ты не менял библиотеки, Docker не будет переустанавливать их заново при сборке. COPY requirements.txt . RUN pip install --no-cache-dir -r requirements.txt # Теперь копируем весь остальной код проекта в контейнер. COPY . . # Даем права на выполнение нашему скрипту запуска. # Без этого контейнер может упасть с ошибкой "Permission denied". RUN chmod +x /app/entrypoint.sh # ENTRYPOINT — это команда, которая выполняется ВСЕГДА при старте. # Наш скрипт подготовит базу (миграции) и соберет статику. ENTRYPOINT ["/app/entrypoint.sh"] # CMD — это основная команда процесса. # Запускаем Gunicorn, привязываем его к порту 8000 и ставим 3 рабочих процесса для скорости. CMD ["gunicorn", "core.wsgi:application", "--bind", "0.0.0.0:8000", "--workers", "3"]