From 5868c4014bd31dc5a9286942bd5f22a2f908d634 Mon Sep 17 00:00:00 2001 From: arkonsadter Date: Sun, 18 Jan 2026 19:59:20 +0600 Subject: [PATCH] fixed dockerfile --- Dockerfile | 43 ++----------------------------------------- 1 file changed, 2 insertions(+), 41 deletions(-) diff --git a/Dockerfile b/Dockerfile index bbaf677..4770f73 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,59 +1,38 @@ -# ================================ -# MC Panel - Optimized Multi-Stage Dockerfile -# ================================ - -# Stage 1: Frontend Build FROM node:20-alpine AS frontend-builder -# Установка зависимостей для сборки RUN apk add --no-cache git python3 make g++ WORKDIR /app/frontend -# Копируем package files для кеширования зависимостей COPY frontend/package*.json ./ -# Устанавливаем зависимости с оптимизацией RUN npm ci --only=production --silent && \ npm ci --silent -# Копируем исходники и конфиги COPY frontend/ ./ -# Собираем продакшн версию RUN npm run build && \ - npm prune --production + npm prune --Production -# ================================ -# Stage 2: Python Dependencies Builder -# ================================ FROM python:3.11-slim AS python-builder -# Устанавливаем системные зависимости для компиляции RUN apt-get update && apt-get install -y \ build-essential \ gcc \ g++ \ && rm -rf /var/lib/apt/lists/* - -# Создаем виртуальное окружение + RUN python -m venv /opt/venv ENV PATH="/opt/venv/bin:$PATH" -# Обновляем pip и wheel RUN pip install --no-cache-dir --upgrade pip wheel setuptools -# Устанавливаем backend зависимости COPY backend/requirements.txt /tmp/backend-requirements.txt RUN pip install --no-cache-dir -r /tmp/backend-requirements.txt -# Устанавливаем daemon зависимости COPY daemon/requirements.txt /tmp/daemon-requirements.txt RUN pip install --no-cache-dir -r /tmp/daemon-requirements.txt -# ================================ -# Stage 3: Production Runtime -# ================================ FROM python:3.11-slim AS production # Метаданные @@ -62,7 +41,6 @@ LABEL maintainer="MC Panel Team" \ description="MC Panel - Minecraft Server Management Panel" \ org.opencontainers.image.source="https://github.com/your-repo/mc-panel" -# Переменные окружения ENV PYTHONDONTWRITEBYTECODE=1 \ PYTHONUNBUFFERED=1 \ PYTHONPATH=/app \ @@ -71,7 +49,6 @@ ENV PYTHONDONTWRITEBYTECODE=1 \ WORKERS=1 \ DEBIAN_FRONTEND=noninteractive -# Устанавливаем только runtime зависимости RUN apt-get update && apt-get install -y --no-install-recommends \ curl \ procps \ @@ -80,14 +57,11 @@ RUN apt-get update && apt-get install -y --no-install-recommends \ && 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 -# Копируем виртуальное окружение из builder stage COPY --from=python-builder /opt/venv /opt/venv -# Создаем структуру директорий WORKDIR /app RUN mkdir -p \ backend \ @@ -99,46 +73,33 @@ RUN mkdir -p \ backend/data \ && touch backend/users.json backend/tickets.json -# Копируем собранный frontend COPY --from=frontend-builder /app/frontend/dist ./frontend/dist/ -# Копируем backend код COPY --chown=mcpanel:mcpanel backend/ ./backend/ -# Копируем daemon код COPY --chown=mcpanel:mcpanel daemon/ ./daemon/ -# Копируем дополнительные файлы COPY --chown=mcpanel:mcpanel key.py ./ -# Создаем конфигурационные файлы по умолчанию если их нет RUN [ ! -f backend/users.json ] && echo '{}' > backend/users.json || true && \ [ ! -f backend/tickets.json ] && echo '{}' > backend/tickets.json || true -# Устанавливаем права доступа RUN chown -R mcpanel:mcpanel /app && \ chmod -R 755 /app && \ chmod +x backend/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/backend/servers", "/app/backend/data", "/app/logs"] -# Рабочая директория для запуска WORKDIR /app/backend -# Используем tini как init процесс для правильной обработки сигналов ENTRYPOINT ["/usr/bin/tini", "--"] -# Команда запуска с переменными окружения CMD ["sh", "-c", "python -m uvicorn main:app --host 0.0.0.0 --port ${PORT} --workers ${WORKERS}"] \ No newline at end of file