This commit is contained in:
191
DOCKER_SEPARATE_README.md
Normal file
191
DOCKER_SEPARATE_README.md
Normal file
@@ -0,0 +1,191 @@
|
||||
# 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**: можно собирать образы отдельно и деплоить независимо
|
||||
Reference in New Issue
Block a user