RudolfsでGit LFSサーバを構築してバイナリをS3にアップロードするようにした

目次
  1. やりたかったこと
  2. システム構成
  3. 手順
  4. 任意のサーバ上でGit LFSサーバ(Rudolfs)を起動する
  5. 任意のサーバのGit LFSサーバ用のポートを解放する
  6. ローカルのgitリポジトリでGit LFSサーバへの接続設定をする
  7. pushする

UnityのプロジェクトをGit管理する場合、必然的にサイズの大きいバイナリも管理対象とする必要が出てきます。しかしGitHubにはpushするファイルの容量制限が設けられておりバイナリをそのままpushできないケースがよくあります。

File size limits

…

GitHub blocks files larger than 100 MiB.

https://docs.github.com/en/repositories/working-with-files/managing-large-files/about-large-files-on-github#file-size-limits

そういう場合、Git LFSを利用するのですがGitHubのLFSも決して安くはないのでGitHubの代わりにS3を利用できないか調べてみました。

やりたかったこと

  • GitHubのLFSの代わりにS3を使いたい
  • Git LFSサーバはローカルではなくリモート(さくらのVPS)で稼働させたい

システム構成

手順

任意のサーバ上でGit LFSサーバ(Rudolfs)を起動する

まずは任意のサーバ上に↓のリポジトリをgit cloneします

https://github.com/jasonwhite/rudolfs/

以降は https://github.com/jasonwhite/rudolfs/tree/master?tab=readme-ov-file#production の手順に従ってdockerでLFSサーバを立ち上げます。

予めRudolfs側からS3にアクセスするための認証情報として、AWS_ACCESS_KEY_ID, AWS_SECRET_ACCESS_KEYの発行が必要ですので、まだであればAWS IAMで発行します。

デフォルトだと8081番ポートでリクエストを受け付けるようになっていますが、変更したい場合は適宜docker-compose.ymlを編集すると良いでしょう。

任意のサーバのGit LFSサーバ用のポートを解放する

設定方法は環境により異なるのでよしなに設定します。

さくらのVPSだとブラウザ上から専用のコンソール画面を開いてポチポチ入力するだけでアクセス許可するIPとポートの組み合わせを指定できるので、必要最低限の解放をしました。

ローカルのgitリポジトリでGit LFSサーバへの接続設定をする

ルートディレクトリで.lfsconfig を作成し以下の追記をします。

[lfs]
url = "http://{ホスト名}/api/{GitHubのユーザ名}/{GitHubのリモートリポジトリ名}"

.gitattributesが存在しており、Git LFSで管理対象となるファイルの設定がされていることを確認します。

↓設定方法は公式サイトを参照。

https://git-lfs.com

pushする

git push origin {ブランチ名}でpushするとバイナリがS3にアップロードされたことが確認できるはずです!