LoginSignup
1
0

More than 3 years have passed since last update.

[Oracle Cloud]GitLabのバックアップをObject Storageにとる

Last updated at Posted at 2021-01-24

概要

OCI Object StorageのS3互換APIを利用して、GitLabのバックアップをObject Storageに取得します。
Object StorageはOCIが展開するストレージサービスで、AWSにおけるS3、AzureにおけるBlob Storageに相当します。
Object StorageをS3のように利用するための互換APIが利用できるため、本記事ではこれを利用してGitLabのバックアップを取得します。

構成

構成図

以下のような構成で実施しています。
GitLabサーバやObject Storageなどの下図に記載のリソースは作成済みという前提で、赤い部分を実現する方法を本記事では記載しています。
スクリーンショット 2021-01-24 13.04.56.png

パッケージ一覧

項目
OS Oracle Linux 8.3
GitLab 13.8.0

手順

手順一覧

  1. IAM設定
  2. シークレット作成
  3. Object Storageネームスペースの確認
  4. gitlab.rbの設定
  5. GitLab再起動
  6. バックアップ取得&確認
  7. 定期バックアップ取得の設定

IAM設定

S3互換APIを利用するためにはシークレットキーが必要となるため、シークレットキー発行用のユーザを発行して権限を割り当てます。
権限分離のために専用ユーザを作成するのが良いと思います。
ここでは以下の名前で作成していますが、お好きな名前で問題ありません。

分類 名前 内容
ユーザ gitlab-user -
グループ gitlab-group -
ポリシー gitlab-policy Allow group gitlab-group to manage buckets in tenancy
Allow group gitlab-group to manage objects in tenancy

gitlab-userはシークレットキーを保持させる以外に用途はないので、他の権限は除いておきましょう。

スクリーンショット 2021-01-24 12.13.15.png

シークレット作成

ユーザ詳細画面のCustomer Secret KeysからGenerate Secret Keyをクリックしてシークレットキーを作成します。

スクリーンショット 2021-01-24 12.13.30.png

このときシークレットキーが表示されるので手元にメモしておきましょう。
(画面をクローズすると二度と表示できません)
スクリーンショット 2021-01-24 12.13.44.png

作成が完了すると一覧にシークレットキーが表示されます。
Access Keyの値もメモしておきます。後ほどキーIDとして利用します。

gitlab.rbの設定

gitlab.rbのバックアップに関する項目を以下のように設定します。
[]の部分は環境に合わせて入力してください。

gitlab_rails['backup_upload_connection'] = {
  'provider' => 'AWS',
  'region' => '[region]',
  'aws_access_key_id' => '[your_key_id]',
  'aws_secret_access_key' => '[your_secret_key]',
  'host' => '[namespace].compat.objectstorage.[region].oraclecloud.com',
  'path_style' => 'true',
  'enable_signature_v4_streaming' => false
}
gitlab_rails['backup_upload_remote_directory'] = '[bucket_name]'

ポイントはenable_signature_v4_streamingとpath_styleの設定です。
enable_signature_v4_streamingについては、S3互換APIではSTREAMING-AWS4-HMAC-SHA256-PAYLOADがサポートされてないため無効化しておく必要があります。
path_styleについては、これを有効にすることで「host/bucket_name/object」形式のパスを利用することができるのですが、S3互換APIではこちらの形式にする必要があります。

項目
region バックアップ先のリージョン名 ap-tokyo-1
your_key_id シークレット作成時にメモしたキーID -
your_secret_key シークレット作成時にメモしたシークレットキー -
namespace Object Storageのネームスペース(テナンシー固有) -
bucket_name バックアップ先のバケット名 gitlab-backup

GitLab再起動

バックアップ設定を反映させるためにGitLabを再起動します。

$ sudo gitlab-ctl reconfigure

バックアップ取得&確認

バックアップを取得コマンドを実行します。

$ sudo gitlab-backup create

()
Backup task is done.

Object Storageにバックアップが出力されているか確認します。
正常にバックアップが取れていれば、下図のようにバックアップファイルが生成されます。
スクリーンショット 2021-01-24 12.29.26.png

定期バックアップ取得の設定

定期的にバックアップを取れるようにOSにCronの設定をします。
ここでは毎日2:00AMにバックアップを取得するように設定します。

sudo su -
crontab -e
0 2 * * * /opt/gitlab/bin/gitlab-backup create CRON=1

注意点としては、ローカルにバックアップを取る場合はgitlab_rails['backup_keep_time']の値を設定することで自動的に古いバックアップを削除できますが、Object Storageにバックアップを取得する場合は自動削除設定が効かないようです。
自動削除をしたい場合は、Object StorageのLifecycle Policyを利用して削除する運用にしてください。

まとめ

OCI Object StorageのS3互換APIを利用して、GitLabのバックアップをObject Storageに取得しました。
GitLabとOCIを連携してTerrafromコードを実行する機能もあるので、OCI上でGitLabを利用したいという機会はあるかなと思います。
こちらの記事が役に立てば幸いです。

参考

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0