uchill/README-PROD.md

5.7 KiB
Raw Permalink Blame History

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 БД

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

Безопасная остановка (СОХРАНЯЕТ данные БД):

# Использовать скрипт из /var/www/service
/var/www/service/platform/safe-down-prod.sh

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

⚠️ ОСТОРОЖНО: Полная очистка (УДАЛЯЕТ данные БД):

# Сначала создайте бэкап!
/var/www/service/backup/backup-prod-db.sh

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

Запуск:

docker compose up -d

Создание бэкапа БД:

# Бэкап 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):

# Установить автоматический бэкап 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 (с бэкапом):

/var/www/service/platform/rebuild-prod.sh

Этот скрипт:

  1. Создаёт бэкап БД
  2. Останавливает контейнеры
  3. Пересобирает образы без кэша
  4. Запускает контейнеры
  5. Применяет миграции

Применение миграций:

docker exec platform_prod_web python manage.py migrate

Создание суперпользователя:

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 БД, можно скопировать:
    # Создать бэкап из 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