Files
links/backend/Dockerfile.optimized
Andrey K. Choi 01532e860a
Some checks failed
continuous-integration/drone/push Build is failing
CI/CD build notifications
2025-11-02 06:33:45 +09:00

65 lines
2.2 KiB
Docker
Raw Permalink 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.

# 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"]