Minio

2016/05/05更新

対応バージョン: 2016-04-17T22:09:24Z

Amazon S3互換のオブジェクトストレージMinioの導入手順を示す。

MinioはGo言語で記述されておりサーバモジュールもクライアントモジュールも単一のバイナリなので簡単に導入できる。

また各種言語用のSDKも用意されているのでプログラムからの制御も容易である。

インストール

ここではサーバモジュール・クライアントモジュールをそれぞれ~/binにインストールする。

~/binにはコマンド実行パスが通っているものとする。

% cd ~/bin

% curl https://dl.minio.io/server/minio/release/linux-amd64/minio > minio
% chmod +x minio

% curl https://dl.minio.io/client/mc/release/linux-amd64/mc > mc
% chmod +x mc

サーバ起動

サーバ起動時にMinioオブジェクトの格納場所を指定するが、ここでは~/minioとする。

% mkdir ~/minio
% minio server ~/minio
AccessKey: ************  SecretKey: ************************  Region: us-east-1

Minio Object Storage:
    http://127.0.0.1:9000
    http://xxx.xxx.xxx.xxx:9000

Minio Browser:
    http://127.0.0.1:9000
    http://xxx.xxx.xxx.xxx:9000

To configure Minio Client:
    $ wget https://dl.minio.io/client/mc/release/linux-amd64/mc
    $ chmod 755 mc
    $ ./mc config host add myminio http://localhost:9000 ************ ************************

サーバを起動するとMinioオブジェクトへのアクセス方法が示される。

API経由、ブラウザ経由、クライアント(CLI)経由の3種類があるが、ブラウザとクライアント(CLI)からのアクセス手順を示す。

ブラウザからのアクセス

ここではバケット(フォルダのようなもの)を1つ作成し、その中に画像ファイルを1つアップロードしてみる。

まずhttp://127.0.0.1:9000にアクセスするとアクセスキーとシークレットキーの入力を促されるのでサーバ起動時に示された値をそれぞれ入力する。

ログインするとまだオブジェクトが何も存在していない状態が表示される。

ここで右下の「+」ボタンをクリックし「Create bucket」ボタンをクリックする。

バケット名に「test」と入力してEnterを押しバケットを作成する。

次に「Upload file」ボタンをクリックして画像ファイルをアップロードしてみる。

ファイルがアップロードされたのが確認できる。

実際のバケットとファイルはサーバ起動時に指定したディレクトリ配下に以下のように作成される。

% cd ~/minio
% ls -lR
.:
合計 4
drwx------ 2 neo neo 4096  5月  5 17:32 test/

./test:
合計 24
-rw------- 1 neo neo 21893  5月  5 17:32 logo.png

尚、サーバの設定は~/.minio/config.jsonに保存される。

% cat ~/.minio/config.json
{
	"version": "4",
	"credential": {
		"accessKey": "************",
		"secretKey": "************************"
	},
	"region": "us-east-1",
	"logger": {
		"console": {
			"enable": true,
			"level": "fatal"
		},
		"file": {
			"enable": false,
			"fileName": "",
			"level": ""
		},
		"syslog": {
			"enable": false,
			"address": "",
			"level": ""
		}
	}
}

クライアント(CLI)からのアクセス

上記で作成したオブジェクトにコマンドラインからアクセスしてみる。

まず初期設定としてサーバへのアクセスキーとシークレットキーを指定する。

% mc config host add local http://localhost:9000 ************ ************************

クライアントの設定は~/.mc/config.jsonに保存される。

% cat ~/.mc/config.json
{
	"version": "8",
	"hosts": {
		"gcs": {
			"url": "https://storage.googleapis.com",
			"accessKey": "YOUR-ACCESS-KEY-HERE",
			"secretKey": "YOUR-SECRET-KEY-HERE",
			"api": "S3v2"
		},
		"local": {
			"url": "http://localhost:9000",
			"accessKey": "************",
			"secretKey": "************************",
			"api": "S3v4"
		},
		"play": {
			"url": "https://play.minio.io:9000",
			"accessKey": "xxxxxxxxxxxx",
			"secretKey": "xxxxxxxxxxxxxxxxxxxxxxxx",
			"api": "S3v4"
		},
		"s3": {
			"url": "https://s3.amazonaws.com",
			"accessKey": "YOUR-ACCESS-KEY-HERE",
			"secretKey": "YOUR-SECRET-KEY-HERE",
			"api": "S3v4"
		}
	}
}

アクセス先はlocal以外に以下の3箇所も定義されている。

gcs

Google Cloud Storage

play

Minioのテスト用クラウドストレージ

s3

Amazon S3

コマンドラインからはls、rmといった馴染みのある方法でオブジェクトにアクセスできる。

オブジェクトリスト出力
% mc ls
[2016-05-05 17:32:30 JST] 4.0KiB test/
オブジェクトリスト出力(再帰)
% mc ls --recursive
[2016-05-05 17:32:30 JST] 4.0KiB test/
[2016-05-05 17:32:30 JST]  21KiB test/logo.png
バケット作成
% mc mb test2
Bucket created successfully ‘test2’.

% mc ls
[2016-05-05 17:32:30 JST] 4.0KiB test/
[2016-05-05 17:33:42 JST] 4.0KiB test2/
オブジェクトコピー
% mc cp test/logo.png test/logo2.png
test/logo.png: 21.38 KB / 21.38 KB ┃▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓┃ 100.00 % 6.21 MB0% 

% mc ls test/
[2016-05-05 17:32:30 JST]  21KiB logo.png
[2016-05-05 17:34:19 JST]  21KiB logo2.png
バケット比較
% mc diff test test2
‘test/logo.png’ and ‘test2/logo.png’ - only in first.
‘test/logo2.png’ and ‘test2/logo2.png’ - only in first.
バケットミラーリング
% mc mirror test test2
.../logo2.png: 42.76 KB / 42.76 KB ┃▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓┃ 100.00 % 2.77 MB0% 

% mc ls --recursive
[2016-05-05 17:34:19 JST] 4.0KiB test/
[2016-05-05 17:32:30 JST]  21KiB test/logo.png
[2016-05-05 17:34:19 JST]  21KiB test/logo2.png
[2016-05-05 17:42:02 JST] 4.0KiB test2/
[2016-05-05 17:42:02 JST]  21KiB test2/logo.png
[2016-05-05 17:42:02 JST]  21KiB test2/logo2.png
オブジェクト削除
% mc rm test2/logo*
Removed ‘test2/logo.png’.
Removed ‘test2/logo2.png’.

% mc rm test2
Removed ‘test2’.

% mc ls --recursive
[2016-05-05 17:34:19 JST] 4.0KiB test/
[2016-05-05 17:32:30 JST]  21KiB test/logo.png
[2016-05-05 17:34:19 JST]  21KiB test/logo2.png

他にもオブジェクトの共有などができるがここでは割愛する。

参考サイト