minio のインストール
最近バージョンアップしたので最新版(2021-09-27現在)で起動やり直したのでメモ、
- 管理画面にダッシュボードがついた
- 管理画面のポートが変更になった。
- 管理画面とストレージのポートが別れた。
管理画面とストレージを別々に起動するのは地味に迷惑なので困った。
あと管理画面でユーザー系の機能が追加されて、軽量なストレージではなくなった。
個人では使わない機能が追加されてるが、S3代用として十分に使えるものになった印象。
公式マニュアルがdocker からpodman に変わった。
docker での起動
docker 起動は、公式マニュアルではとてもシンプルに記述しているが、実際に動かすには、ポートとユーザー環境変数と永続化ボリュームが必要であった。
IMAGE=minio/minio
NAME=minio
PORT_EXPOSE=80801
PORT_WEB_EXPOSE=8080
VOLUME_PERSIST=$( realpath ./data )
docker run -d
--rm
--name $NAME
-p $PORT_EXPOSE:9000
-p $PORT_WEB_EXPOSE:9001
-v $VOLUME_PERSIST:/data
-e MINIO_ROOT_PASSWORD=$MINIO_ROOT_PASSWORD
-e MINIO_ROOT_USER=$MINIO_ROOT_USER
$IMAGE server /data --console-address ':9001'
イメージのレポジトリは、dockerhub か redhat の レジストリ quay.io のどちらかを使う。
#dockerhub minio/minio # quay.io quay.io/minio/minio
サクッと停止起動用のスクリプトにしておく。
#!/usr/bin/env bash
# https://takuya-1st.hatenablog.jp/
## : vim
cd $( dirname $( realpath $0 ) )
DIR=$(pwd)
NAME=minio
PORT_WEB_EXPOSE=8080
PORT_EXPOSE=8081
VOLUME_PERSIST=$( realpath ./data )
DOCKER_ID_CMD="docker ps -q --filter name=$NAME"
IMAGE=minio/minio
MINIO_ROOT_USER=xxxxadminxxx
MINIO_ROOT_PASSWORD=xxxxxxpasswordxxxx
function stop(){
if [[ ! -z $( $DOCKER_ID_CMD ) ]] ; then
echo $NAME is already started. stopping...
docker stop $( $DOCKER_ID_CMD )
while [[ ! -z $( $DOCKER_ID_CMD ) ]] ; do
sleep 1
done
echo done
fi
}
function update(){
CMD="docker pull $IMAGE "
echo $CMD
$CMD
}
function start(){
CMD="docker run -d
--rm
--name $NAME
-p $PORT_EXPOSE:9000
-p $PORT_WEB_EXPOSE:9001
-v $VOLUME_PERSIST:/data
-e MINIO_ROOT_PASSWORD=$MINIO_ROOT_PASSWORD
-e MINIO_ROOT_USER=$MINIO_ROOT_USER
$IMAGE server /data --console-address ':9001'
"
echo $CMD
$CMD
}
case $1 in
start)
start
;;
stop)
stop
;;
update)
update
;;
*)
stop
update
start
;;
esac
nginx でプロキシする。
複数ドメインをつけるとめんどくさいので、同一ドメインでサブディレクトリで運用したいが、管理画面をサブディレクトリにするのは面倒だったので。ドメインを別に設定した。
管理画面 http://s3admin.example.com/ ストレージ http://s3.example.com/
nginx の設定を作る
## 2021-09-27 takuya
server {
listen 80;
server_name s3admin.example.com;
server_tokens off;
location / {
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header Host $http_host;
proxy_connect_timeout 300;
# Default is HTTP/1, keepalive is only enabled in HTTP/1.1
proxy_http_version 1.1;
proxy_set_header Connection "";
chunked_transfer_encoding off;
proxy_pass http://docker.lxd:8081;
}
}
server {
listen 80;
server_name s3.example.com;
server_tokens off;
location / {
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header Host $http_host;
##
chunked_transfer_encoding off;
proxy_set_header Connection '';
proxy_http_version 1.1;
proxy_buffering off;
proxy_cache off;
rewrite ^/storage(.*)$ $1 break;
proxy_pass http://docker-host.lxd:8080;
}
}
これで、/storage/へのアクセスがS3アクセスになる。
以前のminio のデータもちゃんとそのまま見える。ただ公開範囲や権限は設定し直しになった。

アップロードとダウンロードをテストする
mc ( minio client )がインストールされたdocker があるのでこれを使ってアップロードしてみる。 これで、取得とテスト実行ができる
docker run --rm minio/mc ls play
実際に使ってみる。
docker run --rm -it --entrypoint=/bin/bash minio/mc
minio S3ホストへの接続設定
endpoint=https://s3.example.com/ accesskey=fuheejuShaogae2gggggggggg secret=ier8Ayaesieghggggggg mc alias set myS3 \ $endpoint $accesskey $secret
バケットの作成
mc mb myS3/aaa
バケットの一覧
mc ls myS3
ファイルのアップロード
mc cp myS3 hello.txt myS3/aaa/
バケットをpublic に
mc policy set public myS3/aaa
あとはブラウザから見てみよう
curl https://s3.example.com/aaa/hello.txt
行けそうですね。