# PROD Окружение - Инструкция по управлению

## ⚠️ ВАЖНО: Защита данных

**PROD окружение использует отдельную сеть (`prod_network`) и именованные volumes для изоляции от dev.**

### Что было исправлено:

1. ✅ **Отдельная сеть** - `prod_network` вместо общей `dev_network`
2. ✅ **Именованные volumes** - все volumes имеют префикс `platform_prod_`
3. ✅ **Полные имена контейнеров** - в `DATABASE_URL` и `REDIS_URL` используются полные имена контейнеров
4. ✅ **Изоляция от dev** - prod не может случайно подключиться к dev БД

## 📋 Основные команды

### Безопасная остановка (СОХРАНЯЕТ данные БД):
```bash
# Использовать скрипт из /var/www/service
/var/www/service/platform/safe-down-prod.sh

# Или вручную
cd /var/www/platform/prod
docker compose down
```

### ⚠️ ОСТОРОЖНО: Полная очистка (УДАЛЯЕТ данные БД):
```bash
# Сначала создайте бэкап!
/var/www/service/backup/backup-prod-db.sh

# Затем можно удалить volumes
cd /var/www/platform/prod
docker compose down --volumes
```

### Запуск:
```bash
docker compose up -d
```

### Создание бэкапа БД:
```bash
# Бэкап PROD БД
/var/www/service/backup/backup-all-db.sh

# Альтернативный скрипт для PROD БД
/var/www/service/backup/backup-prod-db.sh

# Автоматический бэкап PROD БД (для cron)
/var/www/service/backup/backup-db-auto.sh
```

**Примечание:** DEV БД не бэкапится, так как это окружение разработки.

### Настройка автоматического бэкапа PROD БД (2 раза в день: 00:00 и 12:00):
```bash
# Установить автоматический бэкап PROD БД
/var/www/service/backup/setup-cron-backup.sh

# Удалить автоматический бэкап
/var/www/service/backup/remove-cron-backup.sh

# Проверить расписание
crontab -l | grep backup-db-auto

# Просмотр логов
tail -f /var/www/platform/prod/backups/backup.log
```

**Примечание:** Автоматически бэкапится только PROD БД. DEV БД не бэкапится.

### Полная пересборка PROD (с бэкапом):
```bash
/var/www/service/platform/rebuild-prod.sh
```
Этот скрипт:
1. Создаёт бэкап БД
2. Останавливает контейнеры
3. Пересобирает образы без кэша
4. Запускает контейнеры
5. Применяет миграции

### Применение миграций:
```bash
docker exec platform_prod_web python manage.py migrate
```

### Создание суперпользователя:
```bash
docker exec -it platform_prod_web python manage.py createsuperuser
```

## 🔧 Структура volumes

- `platform_prod_postgres_data` - данные PostgreSQL БД
- `platform_prod_redis_data` - данные Redis
- `platform_prod_front_material_node_modules` - node_modules для frontend
- `platform_prod_front_material_next` - кэш Next.js

## 🌐 Сеть

- **Prod сеть**: `platform_prod_network` (изолирована от dev)
- **Dev сеть**: `dev_network` (отдельная)

## 🔗 Подключения

Все сервисы используют полные имена контейнеров:
- БД: `platform_prod_db` (не `db`)
- Redis: `platform_prod_redis` (не `redis`)

Это гарантирует, что даже при запуске dev и prod одновременно, они не будут конфликтовать.

## 📝 Что делать если данные потеряны

1. Проверьте бэкапы: `ls -la ./backups/`
2. Если бэкапа нет, но данные есть в dev БД, можно скопировать:
   ```bash
   # Создать бэкап из dev
   docker exec platform_dev_db pg_dump -U platform_dev_user -d platform_dev_db > /tmp/dev_backup.sql
   
   # Применить миграции в prod
   docker exec platform_prod_web python manage.py migrate
   
   # Восстановить данные (осторожно!)
   docker exec -i platform_prod_db psql -U platform_prod_user -d platform_prod_db < /tmp/dev_backup.sql
   ```
3. Если данных нет нигде - создайте пользователей заново через `createsuperuser`

## 🚨 Частые ошибки

### ❌ НЕ делайте:
- `docker compose down --volumes` без бэкапа
- Использование коротких имен (`db`, `redis`) в переменных окружения
- Общая сеть для dev и prod

### ✅ Делайте:
- Всегда используйте `docker compose down` (без `--volumes`)
- Регулярно создавайте бэкапы PROD БД: `/var/www/service/backup/backup-all-db.sh`
- Используйте полные имена контейнеров в конфигурации

## 📁 Расположение скриптов

Все служебные скрипты перенесены в `/var/www/service/`:

- **Бэкапы**: `/var/www/service/backup/`
- **Управление платформой**: `/var/www/service/platform/`

Подробнее: `/var/www/service/README.md`
