- Add complete Next.js 16 frontend with TypeScript and Tailwind CSS - Implement API proxy route for CORS-free backend communication - Create UserContext for global authentication state management - Add authentication flow with JWT tokens - Implement real data integration for posts and employees pages - Add dynamic user avatars (with fallback to initials) - Update API types to match backend Employee serializer - Remove all hardcoded mock data - Add route protection with automatic redirect to /login - Configure Docker orchestration for full-stack setup
290 lines
7.2 KiB
Markdown
290 lines
7.2 KiB
Markdown
# 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
|