From 8c801c1dab4784a64ef925fe9375c35ea0f8d718 Mon Sep 17 00:00:00 2001 From: Apple Date: Tue, 2 Dec 2025 13:43:16 -0800 Subject: [PATCH] docs: Add database persistence summary --- docs/DB_PERSISTENCE_SUMMARY.md | 70 ++++++++++++++++++++++++++++++++++ 1 file changed, 70 insertions(+) create mode 100644 docs/DB_PERSISTENCE_SUMMARY.md diff --git a/docs/DB_PERSISTENCE_SUMMARY.md b/docs/DB_PERSISTENCE_SUMMARY.md new file mode 100644 index 00000000..eff77ff3 --- /dev/null +++ b/docs/DB_PERSISTENCE_SUMMARY.md @@ -0,0 +1,70 @@ +# Підсумок виправлення періодичної втрати даних 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 годин + +## 🔍 Як перевірити + +### Перевірити стан БД +```bash +cd /opt/microdao-daarion +bash scripts/db-health-check.sh +``` + +### Перевірити дані +```bash +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 +```bash +tail -f /var/log/db-health-check.log +``` + +### Перевірити cron +```bash +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 +