# ================================ # MC Panel Backend - Production Dockerfile # ================================ FROM python:3.11-slim AS production # Метаданные LABEL maintainer="MC Panel Team" \ version="2.0.0" \ description="MC Panel Backend - FastAPI Server" \ component="backend" # Переменные окружения ENV PYTHONDONTWRITEBYTECODE=1 \ PYTHONUNBUFFERED=1 \ PYTHONPATH=/app \ PORT=8000 \ WORKERS=1 \ DEBIAN_FRONTEND=noninteractive # Устанавливаем системные зависимости RUN apt-get update && apt-get install -y --no-install-recommends \ curl \ procps \ ca-certificates \ tini \ && rm -rf /var/lib/apt/lists/* \ && apt-get clean # Создаем пользователя для безопасности RUN groupadd -r -g 1000 mcpanel && \ useradd -r -u 1000 -g mcpanel -d /app -s /bin/bash mcpanel # Создаем рабочую директорию WORKDIR /app # Копируем requirements и устанавливаем зависимости COPY requirements.txt ./ RUN pip install --no-cache-dir --upgrade pip && \ pip install --no-cache-dir -r requirements.txt # Копируем исходный код COPY --chown=mcpanel:mcpanel . ./ # Создаем необходимые директории RUN mkdir -p \ servers \ data \ logs \ && touch users.json tickets.json # Создаем конфигурационные файлы по умолчанию если их нет RUN [ ! -f users.json ] && echo '{}' > users.json || true && \ [ ! -f tickets.json ] && echo '{}' > tickets.json || true # Устанавливаем права доступа RUN chown -R mcpanel:mcpanel /app && \ chmod -R 755 /app && \ chmod +x main.py # Переключаемся на непривилегированного пользователя USER mcpanel # Health check HEALTHCHECK --interval=30s --timeout=10s --start-period=60s --retries=3 \ CMD curl -f http://localhost:${PORT}/health 2>/dev/null || \ curl -f http://localhost:${PORT}/ 2>/dev/null || exit 1 # Expose порт EXPOSE 8000 # Volumes для персистентных данных VOLUME ["/app/servers", "/app/data", "/app/logs"] # Используем tini как init процесс ENTRYPOINT ["/usr/bin/tini", "--"] # Команда запуска CMD ["sh", "-c", "python -m uvicorn main:app --host 0.0.0.0 --port ${PORT} --workers ${WORKERS}"]