GITLAB - перенос интегрированной базы Postgresql в штатную базу операционной системы


Если сервер на котором установлен GitLab используется не только как хранилище GIT-репозитариев и у вас уже есть "системный сервер Postgresql". то вы наверняка захотите перенести базу данных GITLAB на системный сервер СУБД. Это упростит мониторинг базы, высвободит часть системных ресурсов и упростит резервное копирование.

Итак, приступим и первым делом надо снять дамп базы данных Postgresl (встроенной в GitLab) и лучше всего использовать встроенные механизмы резервного копирования GitLab:

# gitlab-rake gitlab:backup:create

Созданный архив по умолчанию копируется в каталог /var/opt/gitlab/backups/ и если распаковать этот архив, то вы можете найти в нем файл db/database.sql.gz в котором как вы наверное понимаете находится сжатый дамп базы данных который тоже надо распаковать.

На системном сервере Postgresql мы создаем базу данных, пользовалеля базы данных и пароль, совершенно типовая операция администрирования СУБД Postgresql:

# su postgres
$ psql
# CREATE USER gitlab WITH CREATEDB PASSWORD 'SecretPassword';
# CREATE DATABASE gitlabhq_production OWNER gitlab;
# \q
# exit

Импортируем дамп базы данных:

# cat ./database.sql | psql -U gitlab -h 127.0.0.1 gitlabhq_production

Для переключения на использование системной базы данных отредактируйте конфигурационный файл /etc/gitlab/gitlab.rb:

postgresql['enable'] = false

gitlab_rails['db_adapter'] = 'postgresql'
gitlab_rails['db_encoding'] = 'utf8'
gitlab_rails['db_host'] = '127.0.0.1'
gitlab_rails['db_port'] = 5432
gitlab_rails['db_username'] = 'gitlab'
gitlab_rails['db_password'] = 'SecretPassword'

Простого изменения конфигурационного файла недостаточно и вам надо выполнить команду переконфигурирования GitLab:

# gitlab-ctl reconfigure

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

Recipe: postgresql::disable
 * link[/opt/gitlab/service/postgresql] action delete
   - delete link to file at /opt/gitlab/service/postgresql
 * directory[/opt/gitlab/sv/postgresql] action delete
   - delete existing directory /opt/gitlab/sv/postgresql
Recipe: gitlab::database_migrations
 * bash[migrate gitlab-rails database] action run

Вот собственно и все. Нам остается лишь убедиться, что встроенный в GitLab сервер Postgresql более не работает и мы можем авторизоваться в web-интерфейсе GitLab.