Міграція бази GitLab на зовнішній PostgreSQL

Всім привіт!

У цій статті здійснимо міграцію бази GitLab із внутрішнього PostgreSQL, який встановлюється разом із GitLab, на зовнішній PostgreSQL, який вже встановлений на іншому сервері.

Міграція бази GitLab на зовнішній PostgreSQL

ПРИМІТКА
Всі дії гарантовано працюють на CentOS 7.7.1908, PostgreSQL 12 та GitLab 12.4.2-ee.0.

попередня підготовка

Заздалегідь виконаємо три дії:

1. На сервері PostgreSQL до фаєрволу додайте правило, що дозволяє вхідні підключення на порт PostgreSQL 5432/TCP.

В моєму випадку:

firewall-cmd --add-service=postgresql --zone=internal --permanent
success
firewall-cmd --reload
success

2. Там же, але у файлі postgresql.conf дозвольте мережному інтерфейсу приймати підключення, що ззовні входять. Відкрийте файл postgresql.conf, знайдіть закоментований рядок#listen_addresses = 'localhost'» і під нею додайте рядок нижче. Де – 10.0.0.2, адреса вашого інтерфейсу.

В моєму випадку:

vi /var/lib/pgsql/12/data/postgresql.conf
# - Connection Settings -

#listen_addresses = 'localhost'         # what IP address(es) to listen on;
listen_addresses = 'localhost, 10.0.0.2'
                                        # comma-separated list of addresses;

3. Оскільки сервер GitLab коннектиться до зовнішньої бази, то на сервері PostgreSQL треба це дозволити у файлі pg_hba.conf. Адреса мого GitLab сервера 10.0.0.4.

Відкриємо файл pg_hba.conf і додамо рядок:

host    all             gitlab               10.0.0.4/24             md5

Виглядатиме це так:

# TYPE  DATABASE        USER            ADDRESS                 METHOD

# "local" is for Unix domain socket connections only
local   all             postgres                                     md5

# IPv4 local connections:
host    all             postgres             127.0.0.1/32            md5
host    all             gitlab               10.0.0.4/24             md5

І нарешті, перезапускаємо сервіс postgresql:

systemctl restart postgresql-12.service

Експорт бази GitLab

Виконаємо, на сервері GitLab, резервне копіювання бази:

sudo -u gitlab-psql /opt/gitlab/embedded/bin/pg_dumpall -U gitlab-psql --host=/var/opt/gitlab/postgresql > /tmp/internal-gitlab.sql

Резервна копія з'явилася в /tmp:

ls -lh
total 836K
-rw-r--r--. 1 root root 836K Nov 18 12:59 internal-gitlab.sql

Скопіюємо цю копію на сервер PostgreSQL:

scp /tmp/internal-gitlab.sql 10.0.0.2:/tmp/
internal-gitlab.sql                                                                               100%  835KB  50.0MB/s   00:00

Імпорт «internal-gitlab.sql» у PostgreSQL

Імпортуємо базу в PostgreSQL:

sudo -u postgres psql -f /tmp/internal-gitlab.sql

Перевірити, що база тепер у PostgreSQL:

sudo -u postgres psql -l

Повинен з'явитися такий рядок:

gitlabhq_production | gitlab   | UTF8     | en_US.UTF-8 | en_US.UTF-8 |

Конфігурація GitLab

Після імпортування бази в PostgreSQL було створено користувач gitlab. Вам потрібно змінити пароль користувача.

Змінюємо пароль:

sudo -u postgres psql -c "ALTER USER gitlab ENCRYPTED PASSWORD 'ПАРОЛЬ' VALID UNTIL 'infinity';"
Password for user postgres:
ALTER ROLE

Потім на сервері GitLab у файлі конфігурації /etc/gitlab/gitlab.rb вкажемо всі дані зовнішнього PostgreSQL.

Зробимо резервну копію файлу gitlab.rb:

cp /etc/gitlab/gitlab.rb /etc/gitlab/gitlab.rb.orig

Тепер до кінця файлу gitlab.rb додамо ці рядки:

# Отключить встроенный PostgreSQL.
postgresql['enable'] = false

# Данные для подключения к внешней базе. Указывайте свои.
gitlab_rails['db_adapter'] = 'postgresql'
gitlab_rails['db_encoding'] = 'utf8'
gitlab_rails['db_host'] = '10.0.0.2'
gitlab_rails['db_port'] = 5432
gitlab_rails['db_database'] = "gitlabhq_production"
gitlab_rails['db_username'] = 'gitlab'
gitlab_rails['db_password'] = '******'

Збережемо файл /etc/gitlab/gitlab.rb та переконфігуруємо GitLab:

gitlab-ctl reconfigure && gitlab-ctl restart

Ось і все 🙂

Велике прохання. Якщо ви поставили мінус, напишіть причину у коментарі.

Джерело: habr.com

Додати коментар або відгук