Всім привіт!
У цій статті здійснимо міграцію бази 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