# Multi-stage Docker build для оптимального размера FROM python:3.11-slim as base # Установка системных зависимостей RUN apt-get update && apt-get install -y \ gcc \ postgresql-client \ curl \ && rm -rf /var/lib/apt/lists/* # Создание пользователя приложения RUN useradd --create-home --shell /bin/bash app # Установка рабочей директории WORKDIR /app # Копирование и установка Python зависимостей COPY requirements.txt . RUN pip install --no-cache-dir --upgrade pip && \ pip install --no-cache-dir -r requirements.txt # Production stage FROM base as production # Build arguments для метаданных ARG BUILD_VERSION=latest ARG BUILD_DATE ARG VCS_REF # Метаданные образа LABEL org.opencontainers.image.title="CatLink Backend" \ org.opencontainers.image.description="Django REST API для CatLink" \ org.opencontainers.image.version="$BUILD_VERSION" \ org.opencontainers.image.created="$BUILD_DATE" \ org.opencontainers.image.revision="$VCS_REF" \ org.opencontainers.image.source="https://github.com/smartsoltech/links" # Копирование приложения COPY --chown=app:app . . # Создание необходимых директорий RUN mkdir -p staticfiles media logs && \ chown -R app:app /app # Переключение на пользователя приложения USER app # Сбор статических файлов RUN python manage.py collectstatic --noinput # Переменные окружения для продакшена ENV PYTHONPATH="/app" \ PYTHONUNBUFFERED=1 \ DJANGO_SETTINGS_MODULE="backend.settings" \ PORT=8000 # Health check HEALTHCHECK --interval=30s --timeout=30s --start-period=5s --retries=3 \ CMD curl -f http://localhost:$PORT/api/health/ || exit 1 # Открытие порта EXPOSE $PORT # Команда запуска CMD ["gunicorn", "--bind", "0.0.0.0:8000", "--workers", "4", "--worker-class", "sync", "--worker-connections", "1000", "--max-requests", "1000", "--max-requests-jitter", "100", "backend.wsgi:application"]