動かざることバグの如し

近づきたいよ 君の理想に

minioからRustFS乗り換え勢用のdocker-compose.yml

環境

  • rustfs/rustfs:1.0.0-alpha.81

やりたいこと

minioを使い続けるのが無理になったのでRustFSに乗り換えることにした。

rustfs.com

いままでは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 を永続化領域にする。後述するがパーミッションエラーに注意
  • healthcheck9000 側の /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 || truegitlab バケットを作る。すでに存在してても落としたくないので || true にしている
  • 最後に exit 0 してるので、このコンテナは「一回だけ実行して終わる」使い捨てジョブ扱いってわけ

起動すると無駄に格好いい管理画面UIが登場する。Alpha版で本番投入は不可の状況なのに日本語化もすでにされている。

picture 0

以下詰まったところ

自動でバケット作る機能はRustFS自体にはないの?

ない Issueもちょいちょい経っているがminio同様にコア機能ではなく自前で実装するか外部スクリプトでやるべきというスタンス

github.com

起動時にパーミッションエラーになる

初回起動時に以下のようなエラーが出た

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

を実行して再起動することで解決した。