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

Команда dump сохраняет инсталляцию в ZIP-файл. Этот файл можно распаковать и использовать для восстановления экземпляра инсталляции.

Полнота резервного копирования#

SourceControl состоит из базы данных, файлов и git-репозиториев, которые меняются при их использовании. Например, в процессе миграции создается транзакция в базе данных, и в то же время копируется git-репозиторий. Если резервное копирование происходит во время миграции, git-репозиторий может быть неполным, хотя база данных уже будет иметь полную информацию о репозитории. Во избежание такой ситуации остановите экземпляр SourceControl во время резервного копирования.

Создание резервной копии (dump)#

Для того чтобы создать резервную копию приложения и базы данных, используется команда sc dump. В этом случае используется XORM-библиотека (ORM-библиотека для языка Go, которая позволяет хранить структуры данных приложения в базе данных без дополнительных преобразований). Однако до сих пор существуют проблемы с восстановлением дампов, созданных с помощью XORM, поэтому рекомендуется осуществлять дамп БД стандартными средствами используемой СУБД (смотрите раздел Резервная копия базы данных стандартными средствами СУБД).

Для создания резервной копии через XORM-библиотеку переключитесь на пользователя, под которым запущен SourceControl: su git. Выполните ./sc dump -f sc-dump-1610949662.zip в каталоге установки SC. Должно получиться следующее (пример):

./sc dump -f sc-dump-1610949662.zip
2023/08/02 11:53:09.815359 dump.go:258:runDump() [INFO] Dumping local repositories... /sc/data/sc-repositories
2023/08/02 11:53:10.060029 dump.go:299:runDump() [INFO] Dumping database...
2023/08/02 11:53:10.161813 dump.go:311:runDump() [INFO] Adding custom configuration file from /sc/custom/conf/app.ini
2023/08/02 11:53:10.166293 dump.go:339:runDump() [INFO] Packing data directory... sc/data
2023/08/02 11:53:10.184666 dump.go:423:runDump() [INFO] Finish dumping in file sc-dump-1610949662.zip

Содержимое файла sc-dump-1610949662.zip:

  • app.ini — Необязательная копия конфигурационного файла, если изначально он хранился вне пользовательского каталога по умолчанию (custom/).

  • custom — Все файлы конфигурации или пользовательские настройки находятся в custom/.

  • data — Каталог данных (APP_DATA_PATH), за исключением сессий, если вы используете файловые сессии. В этом каталоге содержатся attachments, avatars, lfs, indexers.

  • sc-db.sql — SQL-дамп базы данных.

  • repos — Полная копия каталога репозитория.

  • log/ — Различные логи (не нужны для восстановления или миграции).

Промежуточные файлы резервных копий создаются во временном каталоге, указанном либо с помощью параметра командной строки --tempdir, либо переменной окружения TMPDIR.

Резервная копия базы данных стандартными инструментами СУБД#

Для PostgreSQL создание резервной копии выглядит следующим образом:

# postgres
pg_dump -U $USER $DATABASE > sc-db.sql

Восстановление резервной копии (restore)#

В настоящее время команда восстановления не поддерживается. Это ручной процесс, который в основном включает перемещение файлов в их правильное расположение и восстановление дампа базы данных, например:

unzip sc-dump-1610949662.zip
cd sc-dump-1610949662
mv data/conf/app.ini /etc/sc/conf/app.ini
mv data/* /var/lib/sc/data/
mv log/* /var/lib/sc/log/
mv repos/* /var/lib/sc/repositories/
chown -R sc:sc /etc/sc/conf/app.ini /var/lib/sc

# postgres
psql -U $USER -d $DATABASE < sc-db.sql

service sc restart

Если метод установки изменен или если SourceControl установлен в отличный от предыдущей установки каталог, заново сгенерируйте git-хуки репозитория. Для этого при запущенном SourceControl из каталога, где находится бинарный файл, выполните команду ./sc admin regenerate hooks. Если этого не сделать, команда git push завершится неудачей.

Обратите внимание
Для корректного восстановления резервной копии необходимо сначала остановить экземпляр SourceControl.

Файловая структура SourceControl#

  • AppWorkPath

    • Параметр WORK_PATH в app.ini

    • Флаг --work-path

    • Переменная окружения SC_WORK_DIR

    • Директория, которая содержит бинарный файл SourceControl

  • AppDataPath (по умолчанию для БД, индексов и т.п.)

    • APP_DATA_PATH из app.ini

    • AppWorkPath/data

  • CustomPath (пользовательские шаблоны)

    • Флаг --custom-path

    • Переменная окружения SC_CUSTOM

    • AppWorkPath/custom

  • HomeDir

    • Unix: Переменная окружения HOME

  • RepoRootPath

    • Если это абсолютный путь, то ROOT в разделе [repository] файла app.ini

    • Иначе (путь относительный) AppWorkPath/ROOT, если ROOT в разделе [repository] файла app.ini

    • По умолчанию %(APP_DATA_PATH)/sc-repositories

  • Конфигурационный файл (app.ini)

    • Флаг --config

    • CustomPath/conf/app.ini