ΠœΠΈΠ³Ρ€Π°Ρ†ΠΈΡ Π±Π°Π·Ρ‹ 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