minio はバージョンアップして使い方が変わった
次を参照のこと。
s3互換ストレージminio をインストール(2021版) - それマグで!
Aws の S3 の代替サーバーを使う。
s3 の設定をいちいちするのはめんどくさいので、使い捨ての s3 が欲しくなる。
minio オブジェクトストレージ
minio というS3と同様のオブジェクトストレージが使えるサーバを使って、開発コスト(時間設定金銭)を下げてしまえ。
Docker で手軽に起動する
MASTER_KEY=$( cat /dev/urandom | tr -dc 'a-zA-Z0-9' | fold -w 32 | head -n 1 ):$(openssl rand -hex 32) docker run -it -e MINIO_SSE_MASTER_KEY=$MASTER_KEY restart=always -p 127.0.0.1:4569:9000 minio/minio server /data
ちなみに 4569 は fakes3 と合わせてある。
docker-compose に含めて、オブジェクトストレージ使い捨てのエミュレーションならdockerで十分
ローカルにオレオレS3としてサービスするんだったら。
オブジェクトストレージを自分で運営しようとすると、docker でもいいけど、フロント側でサーバー起動したほうが楽かもしれない。
サーバーのバイナリをとってきて、起動するのがいい。
/usr/bin/curl -LJO https://dl.min.io/server/minio/release/linux-amd64/minio chmod +x ./minio MASTER_KEY=$( cat /dev/urandom | tr -dc 'a-zA-Z0-9' | fold -w 32 | head -n 1 ):$(openssl rand -hex 32) export MINIO_SSE_MASTER_KEY=$MASTER_KEY ./minio server /var/www/virtualhosts/path/storage --address 127.0.0.1:4569
こうしておけば、サービスとして動かせるので、S3の代わりにデータをどんどん放り込んでいける。
ただしmino にs3の完璧は互換性は無いし、ファイルのバージョニングなどの機能はないから注意が必要。
起動したら、次のような画面になる。
ここで AccessKey と Secret Keyを取得しておく
ブラウザで( 今回は 127.0.0.1:4569:9000) にアクセスすると、なんとWebUIが使える。
これは評価高い。
nginx でプロキシして、公開サーバとして使ってもいいと思う。
systemd でサービス化してみる。
systemd 起動する minio.service
[Unit] Description=minio サーバーのインスタンス [Service] WorkingDirectory=/var/www/minio ExecStartPre=/bin/bash update-minio.sh ExecStart=/var/www/minio/minio server /var/www/minio/storage --address 127.0.0.1:4569 ## 定期的に再起動して最新版を取得する Restart=always RuntimeMaxSec=864000 [Install] WantedBy=network-online.target
systemd で起動しておく
sudo systemctl daemon-reload sudo systemctl start minio sudo systemctl status minio
サーバーバイナリの更新をどうするか
systemdで起動しても、もともとがwget で取得したバイナリなので、定期的にアップデートする必要がある。 apt で更新できる *.debが公開されてればよかったんだけどね。提供されてないようなので、自分で更新チェックをすることにした。どうせ1ファイルだし。
定期的に再起動しつつ、定期的にminio のサーバーバイナリを取得する
#!/usr/bin/env bash cd /var/www/minio server_shas=$(curl -s https://dl.min.io/server/minio/release/linux-amd64/minio.shasum | cut -d' ' -f 1 ) local_sha=$( sha1sum minio | cut -d' ' -f 1 ) if [[ ! -e minio ]] || [[ $server_shas != $local_sha ]] || (( $(( $(date +%s) - $(date -r minio +%s) )) > $(( 60*60*24*30 )) )); then /usr/bin/curl -LJO https://dl.min.io/server/minio/release/linux-amd64/minio chmod +x ./minio fi
s3cmd からの動作チェック
s3 互換ということなので、s3cmd のような s3 管理ツールからオブジェクトストレージとして使ってみる。
brew install s3cmd
~/.config/minio
設定ファイルを作っておく
[default] host_base = 127.0.0.1:4569 host_bucket = 127.0.0.1:4569/%(bucket)s bucket_location = us-east-1 use_https = True access_key = HEDXXXXXXXXXXXXXXXXXXXXX secret_key = cenXXXXXXXXX+XXXXXXXXXIkKe7LrqA signature_v2 = True
minio を s3cmd で試してみます。
takuya@.config$ s3cmd -c ~/.config/minio mb s3://sample Bucket 's3://sample/' created
ファイルをアップロードする
takuya@.config$ s3cmd -c ~/.config/minio put -r /Users/takuya/Pictures/EAWBB3YUEAEmkOl-1.jpg s3://sample upload: '/Users/takuya/Pictures/EAWBB3YUEAEmkOl-1.jpg' -> 's3://sample/EAWBB3YUEAEmkOl-1.jpg' [1 of 1] 53125 of 53125 100% in 0s 388.63 kB/s done
バケットの中身を確認する。
takuya@~$ s3cmd -c ~/.config/minio ls s3://sample 2019-08-29 03:27 53125 s3://sample/EAWBB3YUEAEmkOl-1.jpg
バケットの閲覧
サイトにURLとして埋め込んで、アクセスキーなしにバケットを閲覧(HTTP/GET)しようとするには、管理画面でバケットのポリシーを設定するか,
公開ポリシーをs3cmd などで設定する必要がある。
まとめ
minio でAWS S3 にいちいちクレジットカードを登録しなくても、Amazon S3を使ったサーバーアプリケーションを使ったり、開発ができる。
クレジットカードの登録を経理通すとかめんどくさいし、ぱぱっと試せてるのは強いと思う。
今回は、試すというより、S3なくてminioでもういいじゃんってこと思ったので、S3をエミュレーションして永続ストレージとして使うような感じにした。
バージョニングとかgracier のようなバックアップなどは使えないが、分散ストレージは出来たりするので結構面白いソフトウェアなんじゃないかな
開発中のモックアップとしてはminioは大きすぎるのでfakes3のほうがいいかなと思った