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