🕸️

MinIO と nginx で Web サーバーをつくる

に公開

内容

nginx だけで Web サーバーなのだが?

という気はするが nginx の後ろに MinIO をおいて使うという話。
モチベーションとしてはローカルなど Web の検証環境を立てる時に

scp などでファイルを送ったりするのが面倒だな

となり、何かバックにファイル管理をするものがあると嬉しいとなった。
Samba で共有して Windows にマウントするのも悪くないが検証環境を止めているとエクスプローラーが不安定になったり使い心地が気になる。
そこで AWS S3 のように Web コンソールがあると便利だと思い何か探していた。

最初 Web コンソールも使えるものということで Ceph を検討したが Claude が冗長だのなんだの言って MinIO を推してくる。(うるせーそんなのわかってんだ)
後述するが MinIO は近年少し良くない話題を聞いていた。しかし Ceph の構築には挫折していたのでまあ試してみるかという内容である。

https://github.com/Creanciel/ZennMinioNginx

MinIO とは

MinIO とはオブジェクトストレージシステムである。
ものすごく一般的に説明するなら iCloud や Google Drive などのようなものか。

S3 API 互換なのでローカル環境のモックとしてよく使われている。
s3 ls のような AWS CLI からも AWS SDK からも呼び出せる。

人気のシステムであったが近年では

  • [2025年5月] 管理コンソール機能が削除
  • [2025年10月] 公式 Docker イメージの配布停止

という炎上騒動があった。

公式はメンテナンスが困難だからと言っているが、コミュニティなどでは商用版への誘導だといわれている。

構築

MinIO

公式の Docker イメージが停止されているのであれば自前でビルドするほかあるまい。
ソースコードは AGPL v3 で公開されているので自前でビルドはできる。 go で実装されている。
サンプルでは Go のイメージでビルドをして Debian で動かしている。

https://github.com/Creanciel/ZennMinioNginx/blob/0402ae5d0c972b706d5c9bf1747eddb7807e3e2f/docker/minio.dockerfile#L1-L4

compose.yaml

その他全般は Docker Compose で設定をしている。

ポートは

  • 9000
    • MinIO CLI
  • 9001
    • MinIO Web コンソール
  • 80
    • nginx Web エンドポイント

https://github.com/Creanciel/ZennMinioNginx/blob/0402ae5d0c972b706d5c9bf1747eddb7807e3e2f/docker/compose.yaml#L11-L13

設定

Docker 側で nginx の config も設定したので
あとは MinIO でバケットを作成し、 http://localhost/ にアクセスするだけである。

バケットの作成

ここでは sample1 というバケットを作成
index.html を置く。

アクセス

http://localhost/sample1/index.html にアクセス

したが

原因は MinIO のバケット設定が Access: Private だからの模様。

アクセス権の付与

では設定で変更しますかと Web コンソールを弄るが設定が見当たらない。

  • [2025年5月] 管理コンソール機能が削除

さてはこれのせいか?

では CLI コマンドを使おう

# Install
curl -O https://dl.min.io/client/mc/release/linux-amd64/mc
chmod +x mc

# Set config
./mc alias set local http://localhost:9000 admin password123
./mc anonymous set public local/sample1

これで Access: Public

OK

まとめ

結局最後は CLI コマンドを引っ張ってきたように手軽ではなかった。
こう考えると流石 S3 は便利だという印象を受ける。
しかし検証などでは誤差とはいえコストがかかるのでやはりどうにかローカルで似たような環境を構築したいところ。
次は Ceph で再挑戦してみる。

Discussion