# MC Panel - Separate Docker Services ## Обзор Теперь у вас есть отдельные Dockerfile для backend и frontend, что обеспечивает: - **Лучшую изоляцию** - каждый сервис в своем контейнере - **Независимое масштабирование** - можно масштабировать backend и frontend отдельно - **Гибкость деплоя** - можно деплоить сервисы на разные серверы - **Оптимизацию ресурсов** - каждый контейнер оптимизирован под свою задачу ## Структура файлов ``` mc-panel/ ├── backend/ │ └── Dockerfile # Backend (FastAPI + Python) ├── frontend/ │ └── Dockerfile # Frontend (React + Nginx) ├── docker-compose.separate.yml # Production с отдельными сервисами ├── docker-compose.dev.yml # Development с hot reload ├── start-separate.bat # Запуск production └── start-dev.bat # Запуск development ``` ## Backend Dockerfile **Особенности:** - Базовый образ: `python:3.11-slim` - Пользователь: `mcpanel` (UID/GID 1000) - Порт: 8000 - Health check: `/health` endpoint - Volumes: `/app/servers`, `/app/data`, `/app/logs` - Init процесс: `tini` **Команда сборки:** ```bash cd backend docker build -t mc-panel-backend . ``` ## Frontend Dockerfile **Multi-stage сборка:** ### Stage 1: Builder - Базовый образ: `node:20-alpine` - Собирает React приложение - Оптимизирует статические файлы ### Stage 2: Production - Базовый образ: `nginx:alpine` - Служит статические файлы - Проксирует API запросы к backend - Поддерживает React Router (SPA) ### Stage 3: Development - Базовый образ: `node:20-alpine` - Vite dev server с hot reload - Порт: 5173 **Команда сборки:** ```bash cd frontend # Production docker build --target production -t mc-panel-frontend . # Development docker build --target development -t mc-panel-frontend-dev . ``` ## Способы запуска ### 1. Production (отдельные сервисы) ```bash # Windows start-separate.bat # Linux/macOS docker-compose -f docker-compose.separate.yml up --build -d ``` **Доступ:** - Frontend: http://localhost - Backend API: http://localhost:8000 ### 2. Development (с hot reload) ```bash # Windows start-dev.bat # Linux/macOS docker-compose -f docker-compose.dev.yml up --build -d ``` **Доступ:** - Frontend Dev: http://localhost:5173 - Backend API: http://localhost:8000 ### 3. Оригинальный (монолитный) ```bash # Windows docker-start.bat # Linux/macOS docker-compose up --build -d ``` ## Конфигурация Nginx (Frontend) Frontend Dockerfile включает оптимизированную конфигурацию Nginx: - **Gzip сжатие** для статических файлов - **Кеширование** статических ресурсов (1 год) - **Security headers** (XSS, CSRF защита) - **SPA поддержка** (React Router) - **API прокси** на backend:8000 - **WebSocket прокси** для real-time функций ## Переменные окружения ### Backend ```env PORT=8000 WORKERS=2 PYTHONPATH=/app DEBUG=false LOG_LEVEL=INFO ``` ### Frontend (Development) ```env VITE_API_URL=http://localhost:8000 ``` ## Volumes ### Production - `mc_servers` - серверы Minecraft - `mc_data` - данные приложения - `mc_logs` - логи ### Development - `mc_servers_dev` - серверы (dev) - `mc_data_dev` - данные (dev) - `mc_logs_dev` - логи (dev) ## Полезные команды ### Логи ```bash # Production docker-compose -f docker-compose.separate.yml logs -f backend docker-compose -f docker-compose.separate.yml logs -f frontend # Development docker-compose -f docker-compose.dev.yml logs -f backend-dev docker-compose -f docker-compose.dev.yml logs -f frontend-dev ``` ### Остановка ```bash # Production docker-compose -f docker-compose.separate.yml down # Development docker-compose -f docker-compose.dev.yml down ``` ### Пересборка ```bash # Production docker-compose -f docker-compose.separate.yml build --no-cache # Development docker-compose -f docker-compose.dev.yml build --no-cache ``` ## Преимущества отдельных сервисов 1. **Масштабирование**: можно запустить несколько backend инстансов 2. **Обновления**: можно обновлять frontend и backend независимо 3. **Мониторинг**: отдельные метрики для каждого сервиса 4. **Безопасность**: изоляция сервисов 5. **Разработка**: разные команды могут работать независимо ## Рекомендации - **Для разработки**: используйте `docker-compose.dev.yml` - **Для тестирования**: используйте `docker-compose.separate.yml` - **Для production**: рассмотрите Kubernetes или Docker Swarm - **Для CI/CD**: можно собирать образы отдельно и деплоить независимо