Всім привіт!
У цій статті здійснимо міграцію бази 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
success2. Там же, але у файлі 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
