★★★ Twitterやってます。フォローして頂けると嬉しいです(*^^*) ★★★

【簡単】MinIOでファイル送受信用サービスを立ち上げる

IT

MinIOってなに?

一言で言ってしまうと、Googleドライブの簡易版のようなオンラインストレージを自前で構築できてしまうツールです。左がログイン画面、右がファイル一覧画面です。

MinIOでファイル送受信用サービスを作るメリット
  • プログラミング不要なので、簡単にサービスが立ち上げられる
  • 一般のクラウドストレージサービスのようにWebブラウザでアクセスできる
  • Webサーバのように一方通行ではなく、相手とファイルの送受信ができる
  • AWSのS3と互換性があるので、S3連携するシステムのローカル動作時に利用できる
  • 公開したファイルリンクの有効期限が設定できる
スポンサーリンク

とりあえずサービスを起動する

MinIOの公式サイトからMinIOを入手する

まずは公式サイトからMinIOを入手します。

MinIO | High Performance, Kubernetes Native Object Storage
MinIO's High Performance Object Storage is Open Source, Amazon S3 compatible, Kubernetes Native and is designed for cloud native workloads like AI.

ここから動かしたい環境を選択できます。

今回はAWSEC2外部公開ファイルストレージとしてサービスを立ち上げてみので、Linuxを選択しました。

Dockerにしようか迷ったんですが、EC2の無料枠マシンt2.microで試すので、Docker本体入れると重くなりそうなのでダイレクトに入れます。

Linux版をインストールする方は、この後、細かく説明するのでブラウザ上でダウンロードする必要はありません。先に進んでください。

MinIOAWSS3互換性がありますので、WindowsやMacのパソコンでAWSのS3に接続するようなシステムを開発している場合は、それぞれのOSのMinIOをインストールすると、S3に接続する処理部分の接続先をMinIOにすることでS3に接続できなくても開発ができます。

LinuxサーバにMinIOをインストール

MinIO専用ユーザを作成

名前はなんでもよいです。私の場合はわかりやすく、minio にしました。

$ sudo adduser minio
Adding user `minio' ...
Adding new group `minio' (1001) ...
Adding new user `minio' (1001) with group `minio' ...
Creating home directory `/home/minio' ...
Copying files from `/etc/skel' ...
New password:
Retype new password:
passwd: password updated successfully
Changing the user information for minio
Enter the new value, or press ENTER for the default
        Full Name []:
        Room Number []:
        Work Phone []:
        Home Phone []:
        Other []:
Is the information correct? [Y/n] y

minioユーザを作成したら、minioユーザにスイッチしておきましょう。

$ su - minio

公式サイトからのダウンロード

さきほどの公式サイトにコマンドが掲載されているので、それを実行するだけです。

minio:~$ wget https://dl.min.io/server/minio/release/linux-amd64/minio

--2021-03-06 16:46:27--  https://dl.min.io/server/minio/release/linux-amd64/minio
Resolving dl.min.io (dl.min.io)... 178.128.69.202
Connecting to dl.min.io (dl.min.io)|178.128.69.202|:443... connected.
HTTP request sent, awaiting response... 200 OK
Length: 50556928 (48M) [application/octet-stream]
Saving to: ‘minio’

minio                  100%[============================>]  48.21M  4.36MB/s    in 18s

2021-03-06 16:46:45 (2.72 MB/s) - ‘minio’ saved [50556928/50556928]

minio:~$

ダウンロードしたファイルに実行権限を付与します。
chmod +x minio

minio:~$ ls -l
total 49372
-rw-rw-r-- 1 minio minio 50556928 Mar  4 09:57 minio
minio@ip-172-31-0-205:~$ chmod +x minio
minio@ip-172-31-0-205:~$
minio@ip-172-31-0-205:~$ ls -l
total 49372
-rwxrwxr-x 1 minio minio 50556928 Mar  4 09:57 minio
minio:~$

MinIO起動

起動方法も簡単です。次のコマンドを実行すればOKです。

minio:~$ MINIO_ROOT_USER=admin MINIO_ROOT_PASSWORD=minio123 ./minio server ./data01
  • MINIO_ROOT_USER には、ブラウザでログインする時のアクセスキーを指定します
  • MINIO_ROOT_PASSWORD には、ブラウザでログインする時のシークレットキーを指定します

一番最後には、実際にファイルが保存される場所を指定します。minioユーザのホームディレクトリ直下のdata01にしました。

こんな感じで表示されれば、起動完了です。

MinIOをバックグラウンド起動する方法

コマンドで起動すると、このターミナルセッションが切れるとMinIOも終了してしまいます。そのうちサービス化して記事を書きたいと思いますので、今回は一旦バックグラウンド起動して回避しましょう。

バックグラウンドで起動する場合は、最後に & をつければOKです。

minio:~$ MINIO_ROOT_USER=admin MINIO_ROOT_PASSWORD=minio123 ./minio server ./data01 &

止める方法は、プロセスをkillしてください。こんな感じで停止できると思います。

minio:~$ kill -TERM `ps -ef | grep minio | grep server | awk '{print $2}'`

はい、これでMinIO起動完了です!!

スポンサーリンク

WebブラウザでMinIOにアクセス

ログイン画面

MinIOが起動したら、ブラウザでアクセスしてみましょう

URLは、MinIOを起動したサーバのホスト名、またはIPアドレスの9000番ポートです。

ローカルのパソコンで起動した場合は、http://localhost:9000 で表示できます。

今回、私はAWSのEC2上に作ったので、ちょっと長いURLになってしまいました。

さて、このようにログイン画面が表示されれば無事に接続完了です。

アクセスキーとシークレットキーは、MinIO起動時に指定したものです。

ログイン画面が表示されない場合

接続できない場合は、9000番ポートが開放されていないかもしれません。MinIOを立ち上げたEC2のセキュリティグループのインバウンドルールを確認して、9000番を通過させるようにしてください。

トップ画面

よくあるオンラインストレージっぽい画面が表示されました。

オンラインストレージ(GoogleドライブやOneDrive)を使ったことのある方なら直感的に使えると思います。ただ、MinIOはAWSのS3と互換性を保つため、少し制限があります。

次の章で説明します。

スポンサーリンク

MinIOの使い方

右下の+ボタン

ファイルのアップロードとバケットの作成ができます。

このバケットというのが通常のオンラインストレージとちょっと違います。

オンライストレージで例えると最上位のフォルダと同じなのですが、MinIOではバケットと呼びます。AWSのS3のバケットと互換性を保つため、最上位フォルダをバケットとし、S3の命名規則と同じにしています。

最上位階層以外は、通常のフォルダと同じ扱いになります。よってAWSのS3を意識せずに使うなら、バケットを1つ作って、その中を自由を使うとよいと思います。

ファイル操作

フォルダ作成

バケット配下は、自由にフォルダを作成できます。このマークをクリックすると新しいフォルダ名を入力できます。

ファイルアップロード

ドラックアンドドロップでファイルを投入するだけです。複数ファイルの一括アップロードもでき、アップロード状況も表示されます。

ファイル一覧

ファイル一覧画面もよくあるオンラインストレージと同じ感じです。

但し、S3のバケットと同じ操作感覚になっており、一度アップロードしたファイルを別のフォルダへの移動はできませんので、アップロードする時は注意が必要です。

ファイルメニュー

  1. ファイル共有(公開リンク作成)
  2. プレビュー
  3. ダウンロード
  4. 削除

①のファイル共有は細かい設定ができたので、このあと紹介します。

②プレビューはこのような感じでポップアップで画像ファイルなどは表示ができます。

ファイル共有

ファイル共有機能が意外と高性能だったのは予想外でした。公開期限付きのファイル公開ができます。

試しに5分間に設定して公開リンクを作成してみます。公開したい時間をセットしてCopy Linkボタンをクリックすると、公開用URLがクリップボードにコピーされます。

MinIOにログインしていない状態にするため、Chromeのシークレットモードに切り替えてからURLにアクセスしてみます。おお、写真ファイルが共有されています。

そして、5分後にブラウザのリロードボタンを押すと、アクセス権限無しになりました。この辺のレスポンスデータもS3と同じです。

もちろん、外部からアクセスする専用のURLが無効になっただけですので、元のファイル自体は残っています。試しに同じファイルを再度公開すると、URLはこのようになりました。緑の部分のパラメータで制御しているようです。

◆最初に公開した時のURL
http://ec2-54-238-164-118.ap-northeast-1.compute.amazonaws.com:9000/my-data/%E5%86%99%E7%9C%9F/%E9%89%84%E5%A1%94/P1020625.JPG?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=admin%2F20210306%2F%2Fs3%2Faws4_request&X-Amz-Date=20210306T092940Z&X-Amz-Expires=300&X-Amz-SignedHeaders=host&X-Amz-Signature=26fa10f1467787cb69417f61aeb5e08f69e233ff39da3d63b06f96926247e017

◆同じファイルを再度公開した時のURL
http://ec2-54-238-164-118.ap-northeast-1.compute.amazonaws.com:9000/my-data/%E5%86%99%E7%9C%9F/%E9%89%84%E5%A1%94/P1020625.JPG?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=admin%2F20210306%2F%2Fs3%2Faws4_request&X-Amz-Date=20210306T093550Z&X-Amz-Expires=300&X-Amz-SignedHeaders=host&X-Amz-Signature=ebfeaae26401e8759e0ec9fe977ad9a40d477aef6a0752276be6b3868e2944d6

メディアファイルはどうなるのでしょうか。MP3ファイルで試してみます。本当はMP4で試したかったんですが回線が細すぎるのかアップロードが遅すぎたのでMP3にしました。

MP3ファイルを共有したら、ブラウザ上にコントローラーが表示され、普通に再生されました。

そして、公開期間が終了すると、ダウンロードできなくなります。ちなみに公開期間内なら右の︙ボタンからダウンロードできます。

スポンサーリンク

サーバー側はどうなってる?

このような形で、そのままLinuxサーバ上にディレクトリとフォルダで保管されています。データベースは使っていないようなので、バックアップもここをそのままTARボールで固めておけば良さそうです。

minio:~$ ls -lR
.:
total 49376
drwxrwxr-x 4 minio minio     4096 Mar  6 18:08 data01
-rwxrwxr-x 1 minio minio 50556928 Mar  4 09:57 minio

./data01:
total 4
drwxrwxr-x 5 minio minio 4096 Mar  6 18:25 my-data

./data01/my-data:
total 12
drwxrwxr-x 3 minio minio 4096 Mar  6 18:13 mp3
drwxrwxr-x 4 minio minio 4096 Mar  6 20:01 写真
drwxrwxr-x 2 minio minio 4096 Mar  6 18:22 画像ファイル

./data01/my-data/mp3:
total 4
drwxrwxr-x 2 minio minio 4096 Mar  6 18:40 YOASOBI

./data01/my-data/mp3/YOASOBI:
total 22112
-rw-rw-r-- 1 minio minio 6340209 Mar  6 18:13 'YOASOBI - ハルジオン.mp3'
-rw-rw-r-- 1 minio minio 8356444 Mar  6 18:40 'YOASOBI - 夜に駆ける.mp3'
-rw-rw-r-- 1 minio minio 7940147 Mar  6 18:39 'YOASOBI - 群青.mp3'

./data01/my-data/写真:
total 8
drwxrwxr-x 2 minio minio 4096 Mar  6 20:02 花
drwxrwxr-x 3 minio minio 4096 Mar  6 18:45 鉄塔

./data01/my-data/写真/花:
total 484
-rw-rw-r-- 1 minio minio 263283 Mar  6 20:01 P0030473.JPG
-rw-rw-r-- 1 minio minio 228161 Mar  6 20:02 P0030486.JPG

./data01/my-data/写真/鉄塔:
total 404
drwxrwxr-x 2 minio minio   4096 Mar  6 18:45 20210301-撮影分
-rw-rw-r-- 1 minio minio 225528 Mar  6 18:25 P1020625.JPG
-rw-rw-r-- 1 minio minio 172684 Mar  6 18:25 P1020627.JPG
-rw-rw-r-- 1 minio minio     68 Mar  6 18:40 鉄塔写真メモ.txt

./data01/my-data/写真/鉄塔/20210301-撮影分:
total 160
-rw-rw-r-- 1 minio minio 161749 Mar  6 18:45 P1020713.JPG

./data01/my-data/画像ファイル:
total 376
-rw-rw-r-- 1 minio minio 131812 Mar  6 18:22 1500x500.jpg
-rw-rw-r-- 1 minio minio  11413 Mar  6 18:22 2Y1x2Lvt_400x400.jpg
-rw-rw-r-- 1 minio minio 154250 Mar  6 18:22 battan-header-summer.jfif
-rw-rw-r-- 1 minio minio  37661 Mar  6 18:22 battan.png
-rw-rw-r-- 1 minio minio  38377 Mar  6 18:22 battan_techblog_logo.png
minio:~$
オマケ:こんな使い方もできる
minio:~$ sudo MINIO_ROOT_USER=linux MINIO_ROOT_PASSWORD=linux123 ./minio server /var

Linuxのファイルシステムで管理するなら、例えば表示先を/varとかにすると、ログファイルとかダウンロードするのに便利です。

スポンサーリンク

まとめ

いかがでしたか?

簡単にファイル送受信サービスが立ち上げることができました。

オンラインストレージとしての利便性はちょっと微妙なところはありましたが、AWSS3互換を重視しているのでやむ無しといったところでしょうか。開発者視点だととても嬉しいツールです。

相手にメールに添付して送れないようなちょっと大きなファイルを送付したい、またはお互いやりとりしたいといったシーンで、さくっとクラウド上にMinIOを立ち上げてやりとりする場を作る、という使い方もできるので便利です。

個人的には、次のあたりが気になっています。

  • ポートが9000番なのが微妙。80番で動かしてポート番号非表示にしたい
  • コマンド起動しているので、自動起動できるようにしたい
  • ファイルを共有したい人がたくさんいる場合にどう設定する?
  • 保護されていない通信となってしまうので、ビジネスでは使いづらい

次回、設定をいろいろ変更して、この辺解決したいと思います。ではまた。

コメント

タイトルとURLをコピーしました