Omnibus 版 GitLab の Postgresql への接続方法

前提条件というか環境情報

- Windows 10 Home
- Oracle VM Virtualbox 6.1.12
- vagrant 2.2.9
- Centos 7.8
- Box centos/7
- GitLab CE 10.2.5
vagrant up , vagrant ssh を実行した後からの内容になっています

1. gitlab-psql を利用する方法

vagrant ユーザで下記コマンドを実行

sudo gitlab-psql -d gitlabhq_production

2. gitlab omnibus 版に含まれている psql を利用する方法

vagrant ユーザで下記コマンドを実行

# root へ
su -

# gitlab-psql へ
su - gitlab-psql

# Postgresql へ接続
/opt/gitlab/embedded/bin/psql -U gitlab-psql \
  -h /var/opt/gitlab/postgresql -p 5432 -d gitlabhq_production


おまけ /opt/gitlab/embedded/bin/psql にたどり着く方法

1.vagrant ユーザで下記コマンドを実行

# root へ
su -
# password : vagrant

# PSQLのリンク先確認
readlink -e /bin/gitlab-psql
# 出力結果 : /opt/gitlab/bin/gitlab-psql

# 存在確認
ll /opt/gitlab/bin/gitlab-psql
# 出力結果 : -rwxr-xr-x. 1 root root 629 Dec 15  2017 \
# /opt/gitlab/bin/gitlab-psql

# ファイルの中身を確認
less /opt/gitlab/bin/gitlab-psql


/opt/gitlab/bin/gitlab-psql の内容

#!/bin/sh

error_echo()
{
echo "$1" 2>& 1
}

gitlab_psql_rc='/opt/gitlab/etc/gitlab-psql-rc'


if ! [ -f ${gitlab_psql_rc} ] ; then
error_echo "$0 error: could not load ${gitlab_psql_rc}"
error_echo "Either you are not allowed to read the file, or it does not exist yet."
error_echo "You can generate it with:   sudo gitlab-ctl reconfigure"
exit 1
fi

. ${gitlab_psql_rc}

if [ "$(id -n -u)" = "${psql_user}" ] ; then
privilege_drop=''
else
privilege_drop="-u ${psql_user}"
fi

exec /opt/gitlab/embedded/bin/chpst ${privilege_drop} -U ${psql_user} \
  /opt/gitlab/embedded/bin/psql -p ${psql_port} -h ${psql_host} "$@"

上記ファイルの内容の最終行より以下のコマンドで psql を実行していることがわかる

exec /opt/gitlab/embedded/bin/chpst ${privilege_drop} -U ${psql_user} \
  /opt/gitlab/embedded/bin/psql -p ${psql_port} -h ${psql_host} "$@"

psqlの場所は以下

/opt/gitlab/embedded/bin/psql

2. psql の接続情報の確認を行う

下記の処理で読み込んでいる設定ファイルを確認する

. ${gitlab_psql_rc}

確認する内容は以下(rootユーザのまま実施)

less /opt/gitlab/etc/gitlab-psql-rc


/opt/gitlab/etc/gitlab-psql-rc の内容

psql_user='gitlab-psql'
psql_host='/var/opt/gitlab/postgresql'
psql_port='5432'

3. 確認した情報から psql を実行する

下記のコマンドを実行する

/opt/gitlab/embedded/bin/psql -U gitlab-psql \
  -h /var/opt/gitlab/postgresql -p 5432
# 出力結果 : psql: FATAL:  Peer authentication failed for user \
# "gitlab-psql"
Peer authentication failed for user "gitlab-psql" 

の内容から
postgres の hba (host base authentication) 機能で、peer 認証がオンになっているため、
ユーザ名が Unix のユーザ名と一致していないとエラーになる。
gitlab-psql にユーザを切り替えて、再度実行

su - gitlab-psql
/opt/gitlab/embedded/bin/psql -U gitlab-psql \
  -h /var/opt/gitlab/postgresql -p 5432
# 出力結果 : psql: FATAL:  database "gitlab-psql" does not exist
database "gitlab-psql" does not exist

の内容から gitlab-psql という  database が存在していないため -d パラメータに database を設定する必要があるとわかるが、設定ファイルを調べてもなかなか情報が見つからない...
公式ドキュメント検索してみると GitLab Document に情報がある gitlabhq_production を指定してみる

/opt/gitlab/embedded/bin/psql -U gitlab-psql \
  -h /var/opt/gitlab/postgresql -p 5432 -d gitlabhq_production
# 出力結果 : psql (9.6.5)
# 出力結果 : Type "help" for help.

接続成功!

おまけのおまけ

よーく振り返って下記の内容を理解していなかったことに気づく

if [ "$(id -n -u)" = "${psql_user}" ] ; then
privilege_drop=''
else
privilege_drop="-u ${psql_user}"
fi

exec /opt/gitlab/embedded/bin/chpst ${privilege_drop} -U ${psql_user} \
  /opt/gitlab/embedded/bin/psql -p ${psql_port} -h ${psql_host} "$@"

上記の処理の特に以下の内容

exec /opt/gitlab/embedded/bin/chpst ${privilege_drop} 
/opt/gitlab/embedded/bin/chpst

が何か理解できていなかった
どうやら実行ユーザを gitlab-psql にして実行するみたい

長々書きましたが
Omnibus 版 GitLab の Postgresql へ接続方法
でした

・以下のサイトを参考に実施
One IT Thing
GitLab : 公式Document

この記事が気に入ったらサポートをしてみませんか?