Skip to content

# Підсумок виправлення періодичної втрати даних PostgreSQL

## ✅ Виконано

### 1. Виявлено причини проблеми

- Міграції не застосовуються автоматично при перезапуску (тільки при першому створенні БД)
- Конфлікт між старим `dagi-postgres` та новим `daarion-postgres` контейнерами
- Відсутність автоматичної перевірки цілісності БД

### 2. Створено скрипти для автоматизації

- `scripts/apply-migrations.sh`: Застосовує всі міграції автоматично
- `scripts/ensure-db-persistence.sh`: Перевіряє цілісність БД та додає відсутні колонки
- `scripts/db-health-check.sh`: Періодична перевірка здоров'я БД (кожні 30 хвилин через cron)

### 3. Видалено конфліктуючі контейнери

- Видалено старий `dagi-postgres` контейнер

### 4. Налаштовано автоматичний моніторинг

- Додано cron job для автоматичної перевірки кожні 30 хвилин
- Логи зберігаються в `/var/log/db-health-check.log`

### 5. Оновлено конфігурацію

- Додано монтування скриптів в `docker-compose.db.yml`
- Створено документацію `docs/DB_PERSISTENCE_FIX.md`

## 📊 Поточний стан

- MicroDAOs: 9 (всі з логотипами, 1 з банером)
- Volume size: 74M
- Health check: Працює автоматично кожні 30 хвилин
- Backups: Автоматичні кожні 12 годин

## 🔍 Як перевірити

### Перевірити стан БД

    cd /opt/microdao-daarion
    bash scripts/db-health-check.sh

### Перевірити дані

    docker exec daarion-postgres psql -U postgres -d daarion -c "SELECT COUNT(*) FROM microdaos;"
    docker exec daarion-postgres psql -U postgres -d daarion -c "SELECT slug, logo_url IS NOT NULL as has_logo, banner_url IS NOT NULL as has_banner FROM microdaos;"

### Перевірити логи health check

    tail -f /var/log/db-health-check.log

### Перевірити cron

    crontab -l | grep db-health-check

## 🚨 Що робити при втраті даних

1. Перевірити бекапи: `ls -lh /opt/microdao-daarion/db_backups/`
2. Відновити з бекапу (див. `docs/DB_PERSISTENCE_FIX.md`)
3. Застосувати міграції: `bash scripts/apply-migrations.sh`
4. Перевірити цілісність: `bash scripts/db-health-check.sh`

## 📝 Наступні кроки (рекомендації)

1. Розглянути використання PostgreSQL replication для високої доступності
2. Додати алерти при виявленні проблем (наприклад, через email або Telegram)
3. Налаштувати моніторинг розміру volume та попереджати при нестачі місця
4. Розглянути використання managed PostgreSQL (наприклад, AWS RDS) для production