One IT Thing

IT業界を楽しむ為の学習系雑記

GitLab mattermost PostgreSQL

Omnibus版のGitLab、Mattermostデータベースに外部ホストからJDBCで接続

投稿日:2019年9月1日 更新日:

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のナレッジ共有チャンネルで誰が一番知識共有に貢献しているか」とか見える化し、月間トップはご褒美、とかの催しを運営するとチームモチベーションも上がるし面白いですよ。

-GitLab, mattermost, PostgreSQL

執筆者:

関連記事

無料で自由に使える日本全国の企業データベースをPostgreSQLで作る

開発するシステムよっては一覧から企業を選択する機能があるかも知れません。「企業データベース」でググると沢山の商用企業データベースが出てきます。 「でも・・・お高いんでしょう?」 はい。下手をすると家が …

GitLabのリポジトリを複製して引っ越しする

目次1 はじめに2 環境3 引っ越し開始3.1 ①GitLabで引っ越し先リポジトリを作っておく3.2 ②旧リポジトリのミラーリポジトリを開発用PCに作る3.3 ③ミラーリポジトリに入って内容物を確認 …

PostgreSQL エポックタイムカラムを今月初~今月末で範囲検索

エポックタイムは1970年1月1日 0時0分0秒から現在までの秒数。 PostgreSQLではこれを人間に読みやすいTIMESTAMP型(’2019-09-04 00:00:00&#821 …

pgcryptoで公開鍵暗号の動作確認

共通鍵暗号で暗号化されたデータはパスワードが漏洩すると復号される危険が高まるのに対し、公開鍵暗号で暗号化されたデータは秘密鍵とパスワードの二つが漏洩しないと復号できません。 APサーバとDBサーバ通信 …

Nodeアプリが依存するnpmモジュールライセンスをlicense-checker & Jenkinsで自動チェック(1)

目次1 目的2 使用するnpmモジュール3 ライセンスを表示してみる3.1 サマリで出す3.2 CSVファイルで出す4 まとめ 目的 ionicやNode.jsアプリが依存するライブラリにライセンス違 …


shingo nakanishi。東京で消耗中の職歴20年越え中年ITエンジニアです。「生涯現役プログラマを楽しむ」ことができる働き方探しをライフワークにしています。

19歳(1996年)から書き始めた個人日記が5,000日を超え、残りの人生は発信をして行きたいと思い、令和元日からこのサイトを開始しました。勉強と試行錯誤をしながら、自分が経験したIT関連情報を投稿しています。