GitLabでのオブジェクトストレージ利用の設定方法

目次

概要

GitLabで、ファイルをオブジェクトストレージへ保存するようにしました。その設定方法について説明します。

環境

  • GitLab 15.8

GitLabのオブジェクトストレージ利用

GitLabでは、LFSでのファイルやCIでのartifactなどのファイルをオブジェクトストレージに保存することができます。

私はVPSにGitLabをインストールして使っているのですが、VPSに割り当てられているストレージのサイズが小さいためオブジェクトストレージを利用しています。

ここでは、GitLabでオブジェクトストレージを使う方法について紹介します。

私が利用しているオブジェクトストレージは、Wasabiです。S3互換のオブジェクトストレージで、今回のGitLabでも使うことができます。

設定

GitLabでオブジェクトストレージを使う場合、/etc/gitlab/gitlab.rbなどの設定ファイルを編集します。

編集時には、オブジェクトストレージのバケット名やアクセスのためのアクセスキーが必要となるので、あらかじめ準備します。

編集する箇所は次です。

gitlab_rails['object_store']['enabled'] = true
gitlab_rails['object_store']['connection'] = {
  'provider' => 'AWS',
  'region' => 'ap-northeast-1',
  'aws_access_key_id' => '<ACCESS_KEY_ID>',
  'aws_secret_access_key' => '<SECRET_ACCESS_KEY>',
  'endpoint' => 'https://s3.ap-northeast-1.wasabisys.com/'
}
gitlab_rails['object_store']['storage_options'] = {}
gitlab_rails['object_store']['proxy_download'] = true
gitlab_rails['object_store']['objects']['artifacts']['bucket'] = '<バケット名>'
gitlab_rails['object_store']['objects']['external_diffs']['bucket'] = '<バケット名>'
gitlab_rails['object_store']['objects']['lfs']['bucket'] = '<バケット名>'
gitlab_rails['object_store']['objects']['uploads']['bucket'] = '<バケット名>'
gitlab_rails['object_store']['objects']['packages']['bucket'] = '<バケット名>'
gitlab_rails['object_store']['objects']['dependency_proxy']['bucket'] = '<バケット名>'
gitlab_rails['object_store']['objects']['terraform_state']['bucket'] = '<バケット名>'
gitlab_rails['object_store']['objects']['ci_secure_files']['bucket'] = '<バケット名>'
gitlab_rails['object_store']['objects']['pages']['bucket'] = '<バケット名>'

<ACCESS_KEY_ID>や<SECRET_ACCESS_KEY>の部分には、それぞれの環境に合ったオブジェクトストレージへのアクセスのための値を記述します。

endpointの部分は私が利用しているWasabiのものを記述しています。それぞれの環境に合わせて書き換える必要があります。

gitlab_rails[‘object_store’][‘objects’]以下には、オブジェクトストレージのバケット名を記入します。それぞれの役割毎にバケットを分けるため、たくさんのバケットを作成する必要があります。私はここの部分ではまりました。バケット名をちゃんと指定していないと、GitLabの起動に失敗するので、ちゃんと設定するようにします。

これで、設定は終わりです。最後に設定を反映させます。

sudo gitlab-ctl reconfigure

もしも、このコマンドを実行したときに、Warningやerrorが発生したときは、オブジェクトストレージのバケットにアクセスできない可能性があります。バケット名が間違っていないか、アクセス可能なIDやKEYを設定しているのか確認します。

さいごに

他にもバックアップを保存したりもできるのですが、これは設定箇所が別にあり、一括で設定できないものになっています。そのため、ここでは設定方法を紹介していません。

私は一部のデータだけオブジェクトストレージに保存しようとしたのですが、エラーが発生してGitLabがダウンしてしまいました。そこで、全てのデータをオブジェクトストレージへ保存するようにしたら正常に動くようになりました。

同じようなことをしたい人の参考になれば嬉しいです。