Files
microdao-daarion/docs/DB_PERSISTENCE_SUMMARY.md
2025-12-02 13:43:16 -08:00

3.4 KiB
Raw Blame History

Підсумок виправлення періодичної втрати даних 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