Files
xmpp-server-prosody/references/backup-yandex-disk.md
T
2026-09-06 13:51:11 +00:00

3.0 KiB

Backup do Яндекс.Диска (ICQ project + reusable pattern)

Установлено 2026-08-29. Компактный self-hosted проект бэкапится одним tar по образцу соседних проектов (netbox, gitea) на той же машине.

Файлы и cron

  • Скрипт: /opt/icq/backup.sh (chmod 755, закоммичен в git проекта).
  • Cron (root crontab, добавлен рядом с соседями, чтобы не конфликтовать по ЯД/нагрузке):
    • 0 2 * * * netbox
    • 30 2 * * * gitea
    • 45 2 * * * /opt/icq/backup.sh >> /var/log/icq-backup.log 2>&1
  • Лог: /var/log/icq-backup.log (появляется при первом срабатывании cron).

Что бэкапится (INCLUDE в скрипте)

data config certs modules webchat docker-compose.yml .env README.md STATUS.md PRD.md MIGRATION.md WALKTHROUGH.md

  • data/ — самое ценное: аккаунты (accounts/admin.dat), PEP/OMEMO-бандлы (pep_*, pep_*omemo*devicelist), MUC, http_upload. Хранится URL-encoded: data/nixg%2eru/....
  • tar по живому data/ безопасен — Prosody хранит всё файлами, останавливать контейнер не нужно.
  • Сертификаты (certs/) кладутся в архив, но в git НЕ идут (.gitignore: certs/, data/, backups/, *.crt, *.key).

Логика скрипта (по образцу /opt/netbox/backup.sh)

  1. mkdir -p BACKUP_DIR (/opt/icq/backups).
  2. mountpoint -q /mnt/yandex-disk — если не примонтирован → exit 1 (ЯД монтируется @reboot через davfs).
  3. mkdir -p /mnt/yandex-disk/backup/icq-backups.
  4. tar czf icq_$(date +%Y%m%d_%H%M%S).tar.gz -C /opt/icq $INCLUDE.
  5. cp архива на ЯД.
  6. Ротация: локально 7 дней (find ... -mtime +7 -delete), на ЯД 30 дней (-mtime +30).

Проверка

  • Размер рабочего бэкапа ~5.5MB (вся data крошечная, ~200K; основной вес — webchat/dist 26MB до gitignore).
  • Состав проверить: tar tzf backups/icq_*.tar.gz | grep -E 'data/nixg%2eru/(accounts|pep)'.
  • curl/TXT не нужен; сразу после создания бэкапа файл лежит и локально, и в /mnt/yandex-disk/backup/icq-backups/.

Git-дисциплина проекта

  • Remote: git@gitverse.ru:kpa39l/icq.git (master).
  • Итог каждой сессии коммитить + пушить сразу (git push origin master). Секреты не коммитить: .env отсутствует в репо (пароль в защищённом хранилище) — это правильно.
  • Тестовые/временные артефакты (например, backups/icq_test_*.tar.gz) удалять после проверки — они не должны оставаться.