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
行けそうですね。