Skip to content

Резервное копирование ​

Три слоя данных, которые нужно сохранять:

СлойГде живётЧем бэкапить
База данныхvolume Postgrespg_dump
Файлы (вложения)volume SeaweedFSкопия каталога данных / s3-синхронизация
Конфигурацияenv-файл, traefik/*, composeкопия файлов (секреты!)

Поисковый индекс Meilisearch бэкапить не нужно — он полностью восстанавливается командой search:rebuild.

База данных ​

Полный дамп (основной механизм) ​

bash
docker exec orbita_onpremise_db pg_dump -U orbita orbita > backup_$(date +%Y%m%d_%H%M).sql

Рекомендации:

  • снимать ежедневно по cron хост-системы + обязательно перед каждым обновлением;
  • сжимать (| gzip) и уносить с сервера (s3/объектное хранилище/другой хост) — бэкап на том же диске не переживёт отказ диска;
  • хранить минимум 14 суточных копий и несколько недельных.

Пример cron на хосте:

bash
# /etc/cron.d/orbita-backup
30 2 * * * root docker exec orbita_onpremise_db pg_dump -U orbita orbita | gzip > /backup/orbita_$(date +\%Y\%m\%d).sql.gz && find /backup -name 'orbita_*.sql.gz' -mtime +14 -delete

Файлы (SeaweedFS) ​

bash
# Простой способ — копия каталога данных контейнера
docker cp orbita_onpremise_s3:/data ./backup_files_$(date +%Y%m%d)

Для регулярного бэкапа удобнее монтировать volume и синхронизировать его rsync-ом/restic-ом на внешнее хранилище. Файлы иммутабельны (вложения не перезаписываются), поэтому инкрементальные бэкапы дёшевы.

Конфигурация ​

Сохраните вне сервера (в менеджере секретов):

  • env-файл стенда — особенно APP_KEY: без него зашифрованные данные из дампа БД не расшифровать;
  • traefik/ (включая acme/acme.json, иначе после восстановления сертификаты будут выпускаться заново);
  • локальные правки compose-файлов, если они есть.

Восстановление ​

Порядок на чистом сервере:

  1. Развернуть стенд по инструкции с тем же env-файлом (тот же APP_KEY!), но не выполнять инициализацию данных (сиды/tenant:init).
  2. Остановить всё, кроме БД: docker compose ... stop backend queue queue-reports scheduler reverb frontend.
  3. Залить дамп:
    bash
    cat backup.sql | docker exec -i orbita_onpremise_db psql -U orbita -d orbita
  4. Восстановить файлы в volume SeaweedFS (обратный docker cp / rsync).
  5. Поднять остальные сервисы, затем:
    bash
    docker exec orbita_onpremise_backend php artisan optimize:clear
    docker exec orbita_onpremise_backend php artisan search:rebuild
  6. Проверить: логин, открытие записей, скачивание старого вложения, поиск.

Репетиция восстановления

Бэкап, который ни разу не восстанавливали, — это гипотеза, а не бэкап. Прогоните восстановление на тестовой VM хотя бы раз в квартал.

Orbita ITSM — документация для системных администраторов