Резервное копирование и восстановление

Резервное копирование базы данных

Резервное копирование базы данных выполняется автоматически ежедневно в 7 утра. Файлы резервных копий базы данных размещаются в каталоге /opt/userside/data/backup. Имя файла содержит номер версии userside. Файлы старше 20 дней автоматически удаляются.

Если нужно запустить резревное копирование базы данных вручную в любое время, выполнить команду:

docker compose exec userside backup

Резервное копирование файлов

Все изменяемые файлы находятся в каталоге /opt/userside/data/var. Интересными для резервного копирования являются только файлы приложенных файлов из подкаталога /opt/userside/data/var/attachments. Необходимость резервного копирования и ее периодичность настраивайте самостоятельно любым удобным способом. Автоматическое резервное копирование этих файлов силами docker-сервиса userside не производится.

Восстановление резервной копии базы данных

  1. Остановить набор контейнеров:

    docker compose stop
    
  2. Если вносились измения в конфигурацию postgres, скопировать файл ./data/database/postgresql.conf. Если не вносились — пропустить этот шаг.

    sudo cp ./data/database/postgresql.conf ./
    
  3. Пересоздать каталог с базой данных:

    sudo rm -rf ./data/database
    sudo mkdir -p ./data/database
    
  4. Запустить только сервис postgres:

    docker compose up -d postgres
    

    И дождаться его готовности (состояния healthy) периодически просматривая состояние командой:

    docker compose ps postgres
    
  5. Выполнить восстановление нужной резервной копии базы данных:

    gunzip < ./data/backup/userside_3.18.31_....sql.gz \
      | docker compose exec -T postgres psql -U userside
    

    В ходе восстановления следить за выводом. Восстановление должно пройти без ошибок. Если есть ошибки, пишите мне в телеграм.

  6. Остановить набор сервисов:

    docker compose stop
    
  7. Сравнить версии образа сервиса userside из файла docker-compose.yaml с версией файла резервной копии. Если версия userside совпадает с версией базы данных или если версия userside новее (3.18.31) чем версия базы данных (3.18.19), то пропустить этот шаг.

    Если же версия userside более старая (3.18.19), чем версия резервной копии базы данных (3.18.31), то отредактировать docker-compose.yaml. Указать версию образа docker совпадающую с версией базы данных или новее.:

    services:
      userside:
        image: uscr.duckdns.org/userside/userside:3.18.31
    

    Важно

    Версия docker-образа userside должна либо совпадать с версией базы данных, либо версия docker-образа должна быть новее версии базы данных, но не наоборот!

  8. Если был скопирован файл postgres.conf (п.2), то переместить этот файл postgres.conf назад в каталог ./data/database:

    sudo mv -f postgresql.conf ./data/database/postgresql.conf
    
  9. Запустить набор контейнеров:

    docker compose up -d
    

    Если версия образа userside новее чем версия базы данных, автоматически запустится процесс обновления, который может выполняться долго. Наблюдать за ходом можно командой (выход Ctrl + C):

    docker compose logs -f
    

    Журнал миграций записывается в файл data/var/log/migrations.log, так что можно следить за этим файлом:

    tail -f data/var/log/migrations.log
    
  10. Больше никаких действий не требуется. Только дождаться окончания запуска (или окончания миграций).