149 lines
5.6 KiB
Markdown
149 lines
5.6 KiB
Markdown
# 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`
|