家の目の前は、幹線道路が走っているのだが、子供の頃は横断歩道があるだけで、信号がなかった。近くには、小中学校があり、昔から通学路だった。今はもうその幹線道路に横断歩道だけしかないところは存在しないと思う。ところがある日突然、信号が付いたのでびっくりしたのを記憶している。しかし、近所のご老人と当時のことを話すのだが、こんな幹線道路になんで信号がついていなかったんだろうかと。当時からバスやトラックがビュンビュン走っていたのだが。バスを乗るために何度か信号のない横断歩道を渡ったことがある。
閑話休題
ある日突然、MinioのWeb UIが無くなった。正確には、Web UIというのは言い過ぎで、WebからはConsoleがなくなり、Object Browserしか使えなくなった。昔のminioは、Object Browserしかなく、Consoleは当時は別モジュールだった。ある日、minioにConsoleが同梱されてモジュールをロードする必要がなくなった。実は、昔の状態に戻っただけ。通常の利用ならObject Browserだけで事足りる。
Consoleは、見た目がかっこいいだけかもしれない。また、Consoleがなくなっただけで、別にオブジェクトストレージの機能が制限されたわけではない。Consoleと同等の機能は、mcコマンドで普通に使えるので「あんなの飾りです。偉い人にはそれがわからんのですよ」なので問題はないのだが。
ただし、Prometheus連携している人にはちょっと問題。Minioのパフォーマンスグラフが出てこない。そのためだけにgrafanaを立てるのもめんどくさい。Minioのバージョンを2025-04-22T22-12-26Zで止めておけば問題はないのだが、バグフィックスやセキュリティアップデートも適用できず。さらにいつまで使えるかわからない。どうにかしなければ。
minioのWeb UIをフォークしたものをいくつか発見。
https://github.com/OpenMaxIO/openmaxio-object-browser
バイナリを作れば使えそう。自作しないとコンテナでは使えない。
https://github.com/georgmangold/console
これはバイナリもあるし、コンテナイメージもあった。
https://github.com/georgmangold/consoleのバイナリを使うのが簡単。とはいえ、コマンドラインで立てるのは手間なので、dockerで立てる。
既にDocker composeでminioをたてている場合
Docker composeのcompose.ymlファイルに以下を追加すれば使える。自分は、let’s Encryptの証明書を使っているのでTLSを有効にしてある。TLSを使っていない人は、その設定を削除。
console:
image: ghcr.io/georgmangold/console:latest
container_name: minio-console
restart: always
ports:
- "9002:9090"
- "9003:9443"
environment:
- CONSOLE_MINIO_SERVER=https://minio:9000
- CONSOLE_PORT=9090
- CONSOLE_TLS_PORT=9443
- CONSOLE_PROMETHEUS_URL=http://prometheus:9090
volumes:
- <Cert Path>/fullchain.pem:/.console/certs/public.crt:ro
- <Cert Path>/privkey.pem:/.console/certs/private.key:ro
デフォルトのhttpは、ポート9090。httpsは、9443。ポートは変えた。
過去バージョンでConsoleにアクセスできていて、docker composeでたてている人は、minioのイメージバージョンを最新にして、上記を追加すればhttps://<FQDN>:9003でConsoleにアクセスできるようになる。
スクラッチでminioを構築する場合
自分の環境はたてっぱなしなので、間違いがあるかもしれないが。mcコマンドはダウンロードしてパスが通っている前提(設定は不要)
DNSでminio.example.corp XXX.XXX.XXX.XXXで解決されていて、minio.example.corp の証明書があることを想定
(今はタダで証明書がたてられる時代なので、もういい加減オレオレ証明書は卒業したほうがいいと思う。よって自己証明書で使う場合は省略。)
<Path>に存在するべきファイル
compose.yml
prometheus.yml
id_ed25519 #sftp用のキー ssh-keygenで作っておく。
prometheus/data/ #無ければ作ってくれるはず。
config/CAs/ #CAファイルの置き場だが、Let’s Encryptを使っているのであれば空でいいはず。
data/ #minioのデータ保存先
<Cert Path>
証明書ファイルのパス(Lets’encryptの証明書の場合)
例 /etc/letsencrypt/live/minio.example.corp/
compose.yml
TLSとSFTPを有効にしてある。FQDNの情報は使わないようになっているので、どんなFQDNでも動作するはず。また、Minioのバージョンが2025-04-22T22-12-26Zではなく、2025-07-23T15-54-02Z。記載時最新になっていることに注目!
services:
prometheus:
image: prom/prometheus
restart: always
command: --config.file=/etc/prometheus/prometheus.yml
ports:
- "9090:9090"
volumes:
- <Path>/prometheus:/prometheus
- <Path>/prometheus.yml:/etc/prometheus/prometheus.yml
minio:
image: minio/minio:RELEASE.2025-07-23T15-54-02Z
container_name: minio
restart: always
environment:
- MINIO_ROOT_USER=miniohogehogehoge
- MINIO_ROOT_PASSWORD=miniohogehogehoge
- MINIO_API_ROOT_ACCESS=on
- MINIO_PROMETHEUS_AUTH_TYPE=public
- MINIO_PROMETHEUS_URL=http://prometheus:9090
- MINIO_COMPRESSION_ENABLE=on
- MINIO_COMPRESSION_EXTENSIONS=.txt,.log,.csv,.json,.tar,.xml,.bin
- MINIO_BROWSER=on
command: server /data --sftp="address=:8022" --sftp="ssh-private-key=/root/.ssh/id_ed25519" --console-address ":9001"
ports:
- "9000:9000"
- "9001:9001"
- "8022:8022"
healthcheck:
test: ["CMD", "curl", "-k", "-f", "https://minio:9000/minio/health/live"]
interval: 30s
timeout: 20s
retries: 3
volumes:
- <Path>/data:/data
- <Path>/config:/root/.minio
- <Path>/id_ed25519:/root/.ssh/id_ed25519
- <Cert Path>/fullchain.pem:/root/.minio/certs/public.crt:ro
- <Cert Path>/privkey.pem:/root/.minio/certs/private.key:ro
console:
image: ghcr.io/georgmangold/console:latest
container_name: minio-console
restart: always
ports:
- "9002:9090"
- "9003:9443"
environment:
- CONSOLE_MINIO_SERVER=https://minio:9000
- CONSOLE_PORT=9090
- CONSOLE_TLS_PORT=9443
- CONSOLE_PROMETHEUS_URL=http://prometheus:9090
volumes:
- <Cert Path>/fullchain.pem:/.console/certs/public.crt:ro
- <Cert Path>/privkey.pem:/.console/certs/private.key:ro
prometheus.yml
mc admin prometheus generate local --api-version v2 > prometheus.yml
で作れるが、商用版?だとv3が使えるが、minioは、v2まで。
MINIO_PROMETHEUS_AUTH_TYPE=publicにしているなら認証を削除する。
scrape_configs:
- job_name: minio-job
metrics_path: /minio/v2/metrics/cluster
scheme: https
static_configs:
- targets: ['minio:9000']
docker composeで起動したら、mcコマンドでログインユーザ(consoleユーザ consolepassword)の追加、console adminのポリシーの作成とconsoleユーザに適用をしておく。単純にポリシーの設定をすればいいのだが、起動ユーザを使って一旦、管理者ユーザ(consoleユーザ)を作成して、ポリシーを適用して、起動ユーザの設定を削除してある。この流れは地味に重要。
mc alias set myminio miniohogehogehoge miniohogehogehoge --api S3v4
mc admin info myminio
mc admin policy create myminio consoleAdmin /dev/stdin <<EOF
{
"Version": "2012-10-17",
"Statement": [
{
"Action": ["admin:*"],
"Effect": "Allow",
"Sid": ""
},
{
"Action": ["s3:*"],
"Effect": "Allow",
"Resource": ["arn:aws:s3:::*"],
"Sid": ""
}
]
}
EOF
mc admin policy info myminio consoleAdmin
mc admin user add myminio console consolepassword
mc admin policy attach myminio consoleAdmin --user=console
mc admin user info myminio console
mc alias set local console consolepassword --api S3v4
mc alias rm myminio
mc admin info local
ブラウザで以下にログイン
https://<FQDN>:9003/login
スクラッチで作成した場合は、console / consolepassword でログイン
Prometheusも利用できるようになった。
ちなみにポートは以下になっている。
https://<FQDN>:9000 API
https://<FQDN>:9001 MinioのObject Browser
https://<FQDN>:9003 Console
TCP 8022 Minioへのsftpアクセス (sftp -P 8022 ユーザ名@<FQDN>)
ログインができたら、compose.ymlの
以下を絶対覚えられない文字列にそれぞれ書き換え
– MINIO_ROOT_USER=miniohogehogehoge
– MINIO_ROOT_PASSWORD=miniohogehogehoge
以下をoffにしておく。
– MINIO_API_ROOT_ACCESS=off
これをしておかないとWeb UIやmcコマンドでminiohogehogehogeでログインできてしまう。
さらに動作確認ができたら、MinioのObject Browserを停止させてもいい。
command: server /data –sftp=”address=:8022″ –sftp=”ssh-private-key=/root/.ssh/id_ed25519″ –console-address “:9001”
の
–console-address “:9001”
を削除
– MINIO_BROWSER=off
にして、ポートを閉じてしまってもいい。
設定を変更したら、docker composeを再起動しておく。
結構苦労するかなと思ったがあっけなく完了。ちなみに、Consoleの細かい設定は、以下の環境変数一覧を見ればなんとなく設定できる。
https://github.com/georgmangold/console/blob/main/docs/Environment.md
ドキュメントは揃っていなさそうで最低限揃っている。
これでとりあえず元通り。誰かがDocker Composeの設定を公表してくれるのではと待っていたが、なかったので作ることにした。これでMinioのWeb UI問題はEnd Game!
再度言うが、mcコマンドでアクセスすればフルで使えるので、UIを使う必要がないケースでは入れる必要はない。ほんと見栄えだけ。
ちなみにMinio Operatorだとどうなるんだろうかと調べてみた。
https://www.blog.slow-fire.net/2022/04/23/minio-operator-をkubernetes上で動かす/
あらら、更新されていないのか?2024年のバージョンで起動してきた。あまりメンテナンスされていない様子。(だからConsoleが削除された影響をうけていない。)