Files
NeveTimePanel/DOCKER_SEPARATE_README.md
arkonsadter 1a3fdf131c
Some checks failed
continuous-integration/drone/push Build encountered an error
Fixed dockerfile
2026-01-21 19:14:22 +06:00

5.5 KiB
Raw Permalink Blame History

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

Команда сборки:

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

Команда сборки:

cd frontend
# Production
docker build --target production -t mc-panel-frontend .
# Development
docker build --target development -t mc-panel-frontend-dev .

Способы запуска

1. Production (отдельные сервисы)

# Windows
start-separate.bat

# Linux/macOS
docker-compose -f docker-compose.separate.yml up --build -d

Доступ:

2. Development (с hot reload)

# Windows
start-dev.bat

# Linux/macOS
docker-compose -f docker-compose.dev.yml up --build -d

Доступ:

3. Оригинальный (монолитный)

# 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

PORT=8000
WORKERS=2
PYTHONPATH=/app
DEBUG=false
LOG_LEVEL=INFO

Frontend (Development)

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)

Полезные команды

Логи

# 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

Остановка

# Production
docker-compose -f docker-compose.separate.yml down

# Development
docker-compose -f docker-compose.dev.yml down

Пересборка

# 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: можно собирать образы отдельно и деплоить независимо