Some checks failed
continuous-integration/drone/push Build encountered an error
191 lines
5.5 KiB
Markdown
191 lines
5.5 KiB
Markdown
# 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**: можно собирать образы отдельно и деплоить независимо |