概要

私的に利用しているGitLabのデータベースをGitLabに同梱されているPostgreSQLから、外部のPostgreSQLへ移行したので、その方法について書きます。

環境

  • GitLab ee 13.4.4
  • PostgreSQL 12

GitLabのデータベース

GitLabは、インストールの際にPostgreSQLを一緒にインストールします。ここでインストールされるPostgreSQLは、GitLabやGitLabに関連するものだけで使われるものになっています。

しかし、場合によっては、GitLabに同梱されるPostgreSQLではなく、外部に別に用意したPostgreSQLを使用したいということもあります。

実際、私の場合はGitLabを動かすサーバーのメモリ使用量を減らすために、PostgreSQLを外に移したいと思うようになりました。

データベースの移行

データベースを移す場合の基本的な方法としては、データベースの情報をダンプして、そのダンプデータを外部のデータベースで読み込むという方法があります。

今回私が使用したのはこの方法となっています。

まず最初に、何か不具合があってもすぐ戻せるようにバックアップを取っておきます。

$ gitlab-backup create

バックアップを取得したら、データベースのダンプをします。

GitLabの場合、データベースを操作するのはgitlab-psqlというユーザーから行います。

$ su - gitlab-psql

私が今回ダンプするデータベースは、gitlabhq_productionという名前のデータベースです。ダンプするデータベースは、psqlコマンド等でデータベースにアクセスして確認しました。mattermostなどのサービスも使用している場合は、それらもダンプする必要があります。

ダンプは次のコマンドを実行しました。

$ /opt/gitlab/embedded/bin/pg_dump -h /var/opt/gitlab/postgresql gitlabhq_production > gitlabhq_production.sql

変わった点としては、ホストの設定でPostgreSQLのファイルまでのパスを設定するということがあります。

この後は、移行先のデータベースの操作を行います。

移行先のデータベースでは、gitlabのような適当な名前で、データベースにアクセスするユーザーを作成します。また、データベースも作成します。私は、データベースの名前を元のものと同じ名前で作成しました。

ユーザーやデータベースの作成後は、ダンプしたデータを読み込みます。

$ psql -U gitlab gitlabhq_production <  gitlabhq_production.sql

最後は、GitLabの設定ファイルであるgitlab.rbを書き換えて、外部のPostgreSQLを参照するようにします。

gitlab_rails['db_adapter'] = "postgresql"
gitlab_rails['db_encoding'] = "unicode"
gitlab_rails['db_database'] = "gitlabhq_production"
gitlab_rails['db_username'] = "gitlab"
gitlab_rails['db_password'] = ""
gitlab_rails['db_host'] = "host"
gitlab_rails['db_port'] = 5432

また、GitLabのPostgreSQLを起動しないようにするための設定も追加します。

postgresql['enable'] = false

次のコマンドで設定の反映をして、再起動すれば移行は終わりです。

$ gitlab-ctl reconfigure
$ gitlab-ctl restart

私の場合は、これで移行ができました。

さいごに

当初の目的であったメモリ使用量の削減ですが、私の環境ではGitLab全体のメモリ使用量から600MBほど使用量が減っていました。