8.3. Резервное копирование¶
В NextGIS Web On-Premise реализовано два механизма резервного копирования:
Офлайн - требует остановки всех сервисов и выполняется снаружи контейнера приложения. Рекомендуется использовать для создания полных резервных копий при переносе на другой сервер.
Онлайн - не требует остановки сервисов и выполняется внутри контейнера приложения. Рекомендуется использовать для регулярного резервного копирования.
Важно
Все шаги в этом разделе должны выполняться с правами суперпользователя (root). Если вы используете sudo, то чтобы не запутаться в командах, рекомендуется сначала выполнить sudo -i для получения полноценной сессии суперпользователя.
8.3.1. Расположение резервных копий¶
При использовании обоих механизмов резервного копирования, созданные резервные копии сохраняются в вольюме backup, который смонтирован в директорию /opt/ngw/backup внутри контейнеров. В зависимости от конфигурации физически файлы резервных копий могут находиться, либо в /var/lib/docker/volumes/ngwdocker_backup/_data, либо в директории /srv/ngwdocker/backup, если в файле docker-compose.yaml для вольюма backup указан монтируемый путь.
8.3.2. Офлайн резервное копирование¶
Этот механизм реализован при помощи вспомогательного сервиса archivist, который входит в состав стека Docker NextGIS Web On-Premise. Суть его работы довольно проста: при помощи GNU Tar создает архив со данными всех вольюмов Docker используемых в стеке.
Резервные копии сделанные при помощи этого механизма предназначены для восстановления на той же версии NextGIS Web On-Premise, с которой была создана резервная копия.
Создание резервной копии¶
Для создания консистентной копии необходимо, чтобы никакие сервисы не меняли данные в момент создания резервной копии, поэтому перед созданием резервной копии необходимо остановить все сервисы стека:
$ cd /srv/ngwdocker
$ docker compose down
После остановки стека выполните команду создания резервной копии:
$ cd /srv/ngwdocker
$ docker compose run --rm archivist backup
Container ngwdocker-archivist-run-ff7e60e7c67f Creating
Container ngwdocker-archivist-run-ff7e60e7c67f Created
backup/archivist-20260117-002345.tar.zst
Файл archivist-20260117-002345.tar.zst имя которого содержит дату и время создания - это и есть созданная резервная копия. Посмотреть содержимое директории с резервными копиями можно например так:
$ ls -lhn /var/lib/docker/volumes/ngwdocker_backup/_data/
total 6.8M
-rw------- 1 1000 1000 6.8M Jan 17 03:23 archivist-20260117-002345.tar.zst
Посмотреть список всех файлов в архиве можно например так:
$ tar -tvf /var/lib/docker/volumes/ngwdocker_backup/_data/archivist-20260117-002345.tar.zst
Восстановление из резервной копии¶
Восстановление осуществляется при помощи того же сервиса archivist.
Для восстановления необходимо остановить все сервисы стека:
$ cd /srv/ngwdocker
$ docker compose down
После чего выполнить команду восстановления из резервной копии, указав путь к файлу резервной копии в том виде, в котором он был выведен при создании резервной копии (backup/*.tar.zst):
$ cd /srv/ngwdocker
$ docker compose run --rm archivist restore backup/archivist-20260117-002345.tar.zst
Container ngwdocker-archivist-run-2ab5bee644f6 Creating
Container ngwdocker-archivist-run-2ab5bee644f6 Created
После завершения восстановления можно запустить стек заново:
$ cd /srv/ngwdocker
$ docker compose up -d
8.3.3. Онлайн резервное копирование¶
Онлайн резервное копирование обеспечивается встроенным механизмом NextGIS Web и выполняется внутри контейнера приложения. Этот механизм не требует остановки сервисов и технически представляет собой дамп БД PostgreSQL и архив с файлами данных NextGIS Web.
Резервные копии сделанные при помощи этого механизма предназначены для восстановления на той же версии NextGIS Web On-Premise, с которой была создана резервная копия.
Создание резервной копии¶
Для создания резервной копии необходимо выполнить команду:
$ cd /srv/ngwdocker
$ docker compose run --rm app nextgisweb backup
Container ngwdocker-app-run-36f652b37a86 Creating
Container ngwdocker-app-run-36f652b37a86 Created
backup/nextgisweb-20260117-131917.ngwbackup
Как и в случае офлайн резервного копирования при помощи archivist, имя файла резервной копии содержит дату и время создания. Файл сохраняется в директории /opt/ngw/backup внутри контейнера приложения, которая смонтирована на вольюм backup стека Docker. Если посмотреть содержимое директории с резервными копиями, то можно увидеть созданный файл:
$ ls -lhn /var/lib/docker/volumes/ngwdocker_backup/_data/
total 210K
-rw-r--r-- 1 1000 1000 210K Jan 17 16:19 nextgisweb-20260117-131917.ngwbackup
Восстановление из резервной копии¶
Для восстановления из онлайн-резервной копии необходимо остановить все сервисы стека и запустить только сервис postgres:
$ cd /srv/ngwdocker
$ docker compose down
$ docker compose up -d postgres
Далее необходимо дождаться запуска сервиса postgres, обычно это занимает от 10 до 30 секунд, и удалить БД nextgisweb и перезапустить сервис postgres еще раз, чтобы чистая база данных была создана заново. Так же необходимо удалить вольюм с файлами данных NextGIS Web:
$ cd /srv/ngwdocker
$ docker compose exec postgres psql -c "DROP DATABASE nextgisweb"
$ docker compose up -d --force-recreate postgres
$ docker volume rm ngwdocker_data_app
На этом шаге также нужно дождаться запуска сервиса postgres, обычно это происходит в течение 10-30 секунд. После чего можно выполнить восстановление из резервной копии, указав путь к файлу резервной копии в том виде, в котором он был выведен при создании резервной копии (backup/*.ngwbackup):
$ cd /srv/ngwdocker
$ docker compose run --rm app nextgisweb restore backup/nextgisweb-20260117-131917.ngwbackup
✔ Volume ngwdocker_data_app Created
✔ Container ngwdocker-postgres-1 Running
Container ngwdocker-app-run-10fb82472656 Creating
Container ngwdocker-app-run-10fb82472656 Created
После завершения восстановления можно запустить стек заново:
$ cd /srv/ngwdocker
$ docker compose up -d