uchill/README-PROD.md

149 lines
5.6 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.

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