Omnibusで入れたPostgreSQLは、
- Unix Domainソケットで接続待機
- Peer認証で認証
していて外部からの接続は出来ないことが前回分かりました。
今回はOmnibus版でいれたPostgreSQLに外部から接続出来るように設定していきます。
社内LANでの利用を想定しているのでセキュリティリスクはあまり考えず、TCPでソケット起動してPostgreSQLを外部に公開してしまいます。
目次
設定手順
gitlab.rb設定
GitLabの設定は主に/etc/gitlab/gitlab.rbというRubyファイルで行います。
GitLab公式サイトを参照しながら設定していきます。
外部からPostgreSQLに接続出来るようにする
Unix Domainソケット起動をTCPソケット起動に変え、自ホストIPで公開。
# postgresql['listen_address'] = nil
postgresql['listen_address'] = "0.0.0.0"
外部からのリクエストをパスワード認証出来るようにする
JDBC接続時にパスワード認証して貰えるようにしておく。
# postgresql['md5_auth_cidr_addresses'] = ["127.0.0.1/32"]
postgresql['md5_auth_cidr_addresses'] = ["0.0.0.0/0"]
TCPポートを変更(任意)
GitLabと同じホスト内で別のPostgreSQLが起動しているとポートがバッティングしてしまいます。任意で変更しておきます。
# gitlab_rails['db_port'] = 5432
gitlab_rails['db_port'] = 6543
# postgresql['port'] = 5432
postgresql['port'] = 6543
ポートを変更した場合はファイアウォールを開けておきます。
# firewall-cmd --add-port=6543/tcp --zone=public --permanent
success
# firewall-cmd --reload
success
設定変更をGitLabに反映
「gitlab-ctl reconfigure」コマンドで反映します。
GitLabが起動していないと失敗するので起動したままで。
# gitlab-ctl reconfigure
(snip)
Recipe: <Dynamically Defined Resource>
* service[unicorn] action restart
- restart service service[unicorn]
* service[sidekiq] action restart
- restart service service[sidekiq]
* service[gitlab-monitor] action restart
- restart service service[gitlab-monitor]
* service[postgres-exporter] action restart
- restart service service[postgres-exporter]
Running handlers:
Running handlers complete
Chef Client finished, 17/768 resources updated in 46 seconds
gitlab Reconfigured!
PostgreSQL設定
接続ユーザにパスワードをつける
gitlab.rbからSQLを流す用のユーザが「gitlab」ユーザとして用意されていることが分かります。
# postgresql['sql_user'] = "gitlab"
デフォルトではPeer認証だったのでパスワードが付いていません。
gitlabユーザのパスワードを作ってパスワード認証出来るようにします。
# su gitlab-psql
-sh-4.2$ gitlab-psql -d gitlabhq_production
psql (10.9)
Type "help" for help.
// ユーザ一覧を確認
gitlabhq_production=# \du
List of roles
Role name | Attributes | Member of
-------------------+------------------------------------------------------------+-----------
gitlab | <-- このユーザのパスワードを設定 | {}
gitlab-psql | Superuser, Create role, Create DB, Replication, Bypass RLS | {}
gitlab_mattermost | | {}
gitlab_replicator | Replication | {}
// gitlabユーザのパスワードを設定
gitlabhq_production=# \password gitlab
Enter new password: ここでは"gitlab"と入力
Enter it again:
gitlabhq_production=#
同じ手順でmattermost_productionデータベースに繋ぎ、gitlab_mattermostユーザにパスワードを付けておくと、MattermostのDBにもJDBC接続出来るようになります。
-sh-4.2$ gitlab-psql -d mattermost_production
mattermost_production=# \password gitlab_mattermost
外部ホストからJDBC接続する為の準備が完了しました。
外部ホストからの接続動作確認
DBクライアント「jailer」で接続してみます。(jailerについては以下参照)
設定してきた下記のパラメータで接続設定。
(Mattermostデータベースに繋ぐ場合は読み替えてください)
- URL : jdbc:postgresql://GitLabのIP:6543/gitlabhq_production
- User : gitlab
- Password : gitlab
GitLab Omuniub版のPostgreSQLに外部ホストからJDBCで接続出来ました。
まとめ
Omnibus版GitLab、Mattermostのデータベースに外部から接続出来ました。
データベース内容をMetabaseで分析して、「mattermostのナレッジ共有チャンネルで誰が一番知識共有に貢献しているか」とか見える化し、月間トップはご褒美、とかの催しを運営するとチームモチベーションも上がって面白いです。