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 のサーバーバイナリを取得する
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 で試してみます。
バケットの作成 mb:make bucket する。
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のほうがいいかなと思った
参考資料