# 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`