Corp/DOCKER_ORCHESTRATION.md
igor_nadein 3cd5bd4167 feat: Полная интеграция Next.js frontend с Docker orchestration
- Создан Next.js 16 frontend приложение с TypeScript и Tailwind
- Настроена Docker инфраструктура (docker-compose с 7 сервисами)
- Добавлен nginx reverse proxy для маршрутизации frontend/backend
- Реализован полный API client с JWT авторизацией
- Интегрированы страницы: login, register, feed, employees
- Переименована папка corp.front → frontend
- Исправлены проблемы с trailing slash в Django APPEND_SLASH
- Добавлена документация: DOCKER_ORCHESTRATION.md, INTEGRATION_GUIDE.md

Архитектура:
- nginx:80 → frontend:3000 (Next.js) + web:8000 (Django API)
- PostgreSQL 16 + Redis 7 для backend
- Celery worker + beat для фоновых задач
- JWT authentication через SimpleJWT
2026-02-19 13:51:19 +03:00

290 lines
7.2 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# EUSRR Docker Orchestration Guide
## Обзор архитектуры
Проект EUSRR теперь имеет полную оркестрацию с использованием Docker Compose:
```
┌─────────────┐
│ Nginx │ :80 - Reverse Proxy
│ (Gateway) │
└──────┬──────┘
│
├──────────┐
│ │
┌──────▼──────┐ ┌─▼────────────┐
│ Frontend │ │ Backend │
│ (Next.js) │ │ (Django) │
│ :3000 │ │ :8000 │
└──────┬──────┘ └──┬─────┬─────┘
│ │ │
└───────┬───┘ │
│ │
┌──────▼───┐ ┌──▼────┐
│ Redis │ │ DB │
│ :6379 │ │ :5432 │
└──────────┘ └────────┘
```
## Сервисы
### 1. **db** (PostgreSQL 16)
- Порт: `5432`
- База данных Django
- Persistent volume: `postgres_data`
### 2. **redis** (Redis 7)
- Порт: `6379`
- Кэш и Channels backend
- Persistent volume: `redis_data`
### 3. **web** (Django Backend)
- Порт: `8000`
- ASGI сервер (Daphne)
- REST API + WebSocket
- Подключается к `db` и `redis`
### 4. **celery** (Celery Worker)
- Фоновые задачи
- Подключается к `redis` и `db`
### 5. **celery-beat** (Celery Scheduler)
- Планировщик задач
- Django Celery Beat
### 6. **frontend** (Next.js)
- Порт: `3000`
- Корпоративный фронтенд
- Использует `web` backend через proxy
### 7. **nginx** (Reverse Proxy)
- Порт: `80` (основной вход)
- Маршрутизация:
- `/` → Frontend (Next.js)
- `/api/` → Backend API
- `/admin/` → Django Admin
- `/ws/` → WebSocket
- `/static/`, `/media/` → Статика
## Быстрый старт
### Запуск всех сервисов
```bash
# Создайте .env файл из примера
cp .env.example .env
# Запустите все сервисы
docker-compose up -d
# Просмотр логов
docker-compose logs -f
```
### Доступ к приложению
- **Основной вход (через Nginx)**: http://localhost
- **Frontend напрямую**: http://localhost:3000
- **Backend API**: http://localhost:8000/api/
- **Django Admin**: http://localhost/admin/
### Остановка
```bash
# Остановка всех сервисов
docker-compose down
# Остановка с удалением volumes
docker-compose down -v
```
## Конфигурация
### Environment Variables
Основные переменные в `.env`:
```env
# Database
POSTGRES_DB=eusrr
POSTGRES_USER=eusrr_user
POSTGRES_PASSWORD=change-me-postgres-password
# Django
DEBUG=True
SECRET_KEY=dev-secret-key
ALLOWED_HOSTS=localhost,127.0.0.1,web,nginx
# Ports
WEB_PORT=8000
FRONTEND_PORT=3000
NGINX_PORT=80
```
### Frontend Environment
Файл `corp.front/.env.local`:
```env
NEXT_PUBLIC_API_URL=http://web:8000
NEXT_PUBLIC_WS_URL=ws://web:8000
```
## Разработка
### Режим разработки
```bash
# Backend отдельно (с hot-reload)
cd backend
../.venv/Scripts/python manage.py runserver
# Frontend отдельно (с hot-reload)
cd corp.front
npm run dev
```
### Режим Production
```bash
# Полная оркестрация через Docker
docker-compose up -d
```
## Миграции и первичная настройка
```bash
# Выполнить миграции
docker-compose exec web python manage.py migrate
# Создать суперпользователя
docker-compose exec web python manage.py createsuperuser
# Собрать статику
docker-compose exec web python manage.py collectstatic --noinput
```
## Мониторинг
```bash
# Статус сервисов
docker-compose ps
# Логи конкретного сервиса
docker-compose logs -f web
docker-compose logs -f frontend
docker-compose logs -f nginx
# Использование ресурсов
docker stats
```
## Отладка
### Проверка сети
```bash
# Проверить связь frontend → backend
docker-compose exec frontend ping web
# Проверить связь backend → db
docker-compose exec web pg_isready -h db -U eusrr_user
```
### Доступ к контейнерам
```bash
# Backend shell
docker-compose exec web bash
docker-compose exec web python manage.py shell
# Frontend shell
docker-compose exec frontend sh
# Database
docker-compose exec db psql -U eusrr_user -d eusrr
```
## Volumes
Persistent данные сохраняются в volumes:
- `postgres_data` - база данных
- `redis_data` - Redis данные
- `static_volume` - статические файлы Django
- `media_volume` - загруженные медиафайлы
## Сеть
Все сервисы находятся в сети `eusrr_network` и могут обращаться друг к другу по именам сервисов:
- `web` - Django backend
- `frontend` - Next.js frontend
- `db` - PostgreSQL
- `redis` - Redis
- `nginx` - Nginx
## Nginx маршрутизация
- `location /` - Next.js фронтенд
- `location /api/` - Django REST API
- `location /admin/` - Django Admin
- `location /ws/` - WebSocket (Django Channels)
- `location /static/` - Статические файлы
- `location /media/` - Медиа файлы
- `location /health` - Health check endpoint
## Production Deployment
Для production окружения:
1. Обновите `.env`:
- Установите `DEBUG=False`
- Смените `SECRET_KEY`
- Обновите `ALLOWED_HOSTS`
- Используйте надежные пароли БД
2. Настройте HTTPS (добавьте SSL в nginx)
3. Используйте внешние managed сервисы для БД и Redis (опционально)
4. Настройте backup для volumes
## Troubleshooting
### Frontend не может подключиться к backend
Проверьте переменные окружения в `corp.front/.env.local` и убедитесь, что используется правильный URL для Docker сети.
### Backend не запускается
```bash
# Проверьте логи
docker-compose logs web
# Проверьте подключение к БД
docker-compose exec web python manage.py check --database default
```
### Nginx 502 Bad Gateway
Убедитесь, что `web` и `frontend` сервисы запущены:
```bash
docker-compose ps
```
## Файлы конфигурации
- `docker-compose.yml` - Оркестрация сервисов
- `nginx.conf` - Конфигурация Nginx
- `backend/Dockerfile` - Django image
- `corp.front/Dockerfile` - Next.js image
- `.env.example` - Шаблон переменных окружения
- `corp.front/.env.example` - Шаблон для frontend
---
**Дата создания**: 19 февраля 2025
**Версия**: 1.0