環境
- rustfs/rustfs:1.0.0-alpha.81
やりたいこと
minioを使い続けるのが無理になったのでRustFSに乗り換えることにした。
いままではminioをDockerで動かしていたのでRustFSもDockerで動かしたい。
RustFSのdocker-compose.yml紹介するぜ
公式サイトのdocker-compose.ymlサンプルコードを参考に自分用にシンプルに作成した。
rustfs: image: rustfs/rustfs:latest environment: RUSTFS_ACCESS_KEY: myuser RUSTFS_SECRET_KEY: mypassword RUSTFS_CONSOLE_ENABLE: "true" command: /data --console-enable --address ":9000" ports: - "9000:9000" - "9001:9001" volumes: - ./data:/data healthcheck: test: [ "CMD", "sh", "-c", "curl -f http://127.0.0.1:9000/health && curl -f http://127.0.0.1:9001/rustfs/console/health" ] interval: 30s timeout: 10s retries: 3 start_period: 10s createbuckets: image: minio/mc:latest depends_on: - rustfs entrypoint: > /bin/sh -c " mc alias set myrustfs http://rustfs:9000 myuser mypassword; mc mb myrustfs/gitlab || true; exit 0; "
やってることはほぼ「minio + mcで初期バケットを作る」構成そのままだ。
rustfsサービスがS3互換の本体。/dataをデータディレクトリとして起動して、S3 APIを:9000で待ち受けるRUSTFS_ACCESS_KEY/RUSTFS_SECRET_KEYはMinIOでいうところのMINIO_ROOT_USER/MINIO_ROOT_PASSWORD相当の管理者キーRUSTFS_CONSOLE_ENABLE: "true"と9001:9001はWebコンソール用。UIにアクセスするポート。volumes: ./data:/dataはホストの./dataを永続化領域にする。後述するがパーミッションエラーに注意healthcheckは9000側の/healthと、9001側のコンソールヘルスを叩いて死活監視している。
で、MinIOでよくある「起動したら最初にバケット作っとく」問題は、RustFS本体にそういう機能がないので createbuckets を別コンテナでやっている。
- 使ってるのは
minio/mc(MinIO Client)で、RustFSのS3互換APIに対して普通に操作できる mc alias set myrustfs http://rustfs:9000 myuser mypasswordで接続先を登録している。docker-composeの同一ネットワーク内なのでrustfs:9000で届くmc mb myrustfs/gitlab || trueでgitlabバケットを作る。すでに存在してても落としたくないので|| trueにしている- 最後に
exit 0してるので、このコンテナは「一回だけ実行して終わる」使い捨てジョブ扱いってわけ
起動すると無駄に格好いい管理画面UIが登場する。Alpha版で本番投入は不可の状況なのに日本語化もすでにされている。

以下詰まったところ
自動でバケット作る機能はRustFS自体にはないの?
ない Issueもちょいちょい経っているがminio同様にコア機能ではなく自前で実装するか外部スクリプトでやるべきというスタンス
起動時にパーミッションエラーになる
初回起動時に以下のようなエラーが出た
Server encountered an error and is shutting down: Io error: Permission denied (os error 13)
公式Dockerfileのソースコードを確認すると、
RUN addgroup -g 10001 -S rustfs && \ adduser -u 10001 -G rustfs -S rustfs -D && \ mkdir -p /data /logs && \ chown -R rustfs:rustfs /data /logs && \ chmod 0750 /data /logs
となっていた。そこでホスト側で
chown -R 10001:10001 ./data
を実行して再起動することで解決した。