Ubuntu Weekly Recipe

第655回オブジェクトストレージ、MinIOを使用する

今回はGoで書かれたオブジェクトストレージサーバーであるMinIOを使用する方法を紹介します。

オブジェクトストレージサービスとMinIO

オブジェクトストレージという名称を聞くようになって久しいですが、あまり身近でないというケースも多いでしょう。一方オブジェクトストレージを提供するサービスは確実に増加していて、最近ではWasabiが国内でもサービス開始しています。非常に安価なのが特徴で、1TBまでであれば月834円というのはなかなかに魅力的です。また「さくらのクラウド」でもオブジェクトストレージの提供を再開するとのことです。

オブジェクトストレージは従来のストレージとは考え方が違うので、手元に検証環境を作りたい、あわよくばそのまま本運用をしたいと考えるかもしれません。そのような場合には、まずMinIOを使用してみるといいでしょう。

MinIOはオープンソースでマルチプラットフォームなオブジェクトストレージサーバーで、Goで書かれているためファイル1つあれば実行できるという手軽さが魅力的です。もちろんAmazon S3互換APIを採用しているため、クライアントも選び放題です。またドキュメントが豊富なものも魅力的で、おおむね自分がやりたいことはできてしまうでしょう。

今回はDockerを使わずに使用する方法を紹介しますが、Dockerと相性がいいサーバーであることは疑いの余地はないでしょう。

なお、オブジェクトストレージに関する基本的な知識があることを前提としていますが、オブジェクトストレージにはフォルダーという概念がないことと[1]⁠、最初にバケットを作成する必要があることを知っておけばだいたいいいでしょう。

簡単に実行する

MinIOをホームフォルダーで実行するだけであれば、非常に簡単です。次のコマンドを実行してください。

$ mkdir -p ~/minio/obst
$ cd ~/minio
$ wget https://dl.min.io/server/minio/release/linux-amd64/minio
$ chmod +x minio 
$ ./minio server ./obst/

これでインストールは完了です。コンソールの出力を見てみましょう。

Endpoint: http://192.168.12.102:9000  http://10.0.1.1:9000  http://10.171.143.1:9000  http://127.0.0.1:9000         
RootUser: minioadmin 
RootPass: minioadmin 

Browser Access:
   http://192.168.12.102:9000  http://10.0.1.1:9000  http://10.171.143.1:9000  http://127.0.0.1:9000        

Command-line Access: https://docs.min.io/docs/minio-client-quickstart-guide
   $ mc alias set myminio http://192.168.12.102:9000 minioadmin minioadmin

Object API (Amazon S3 compatible):
   Go:         https://docs.min.io/docs/golang-client-quickstart-guide
   Java:       https://docs.min.io/docs/java-client-quickstart-guide
   Python:     https://docs.min.io/docs/python-client-quickstart-guide
   JavaScript: https://docs.min.io/docs/javascript-client-quickstart-guide
   .NET:       https://docs.min.io/docs/dotnet-client-quickstart-guide
Detected default credentials 'minioadmin:minioadmin', please change the credentials immediately using 'MINIO_ROOT_USER' and 'MINIO_ROOT_PASSWORD'

あくまでも筆者の環境での実行例ですが、管理者のユーザー名(アクセスキー)とパスワード(シークレットキー)が共に⁠minioadmin⁠で、変更することが強く推奨されています。また環境変数で指定できることもわかるため、Ctrl+CキーでMinIOサーバーを終了し、次のコマンドを実行してください。

$ export MINIO_ROOT_USER=unique-minioadmin
$ export MINIO_ROOT_PASSWORD=secure-minioadmin-password
$ ./minio server ./obst/

これで管理者のユーザー名とパスワードが変更できました。

またWebブラウザーでアクセスできることもわかります。⁠http://192.168.12.102:9000」にアクセスしてみると、図1のようにアクセスキーとシークレットキーを入力するログイン画面が表示されます。両方とも入力してください。

図1 MinIOのログイン画面
図1

ログイン後右下にある「+」アイコンをクリックし、中央の「Create bucket」図2をクリックした上でバケット名を入力すると、バケットを作成できます。これで初期設定は完了です。

図2 ⁠Create bucket」でバケットを作成できる
図2

MinIOクライアント

MinIOには公式で提供しているMinIOクライアントが存在します。これを使用してみましょう。クライアントOSで次のコマンドを実行してください。もちろんローカル(=サーバーと同じところ)でも構いません。

$ mkdir ~/minio-client
$ cd ~/minio-client/
$ wget https://dl.min.io/client/mc/release/linux-amd64/mc
$ chmod +x ./mc

MinIOに簡単アクセスするために、エイリアスを作成します。コンソールの出力を元にすると、次のようになります。

$ ./mc alias set test http://192.168.12.102:9000 unique-minioadmin secure-minioadmin-password

testというエイリアスを作成し、サーバーは「http://192.168.12.102:9000⁠⁠、ユーザー名は「unique-minioadmin⁠⁠、パスワードは「secure-minioadmin-password」です。

次のコマンドを実行し、バケットを確認してみましょう。

$  ./mc ls test

バケットが作成されている場合は、それが表示されます。表示されない場合はバケットがないということなので、作成してみましょう。

$ ./mc mb test/firstbucket

testというエリアスに対してfirstbucketというバケットを作成しています。

systemdでデーモンとして管理する

MinIOを少し使うくらいであればホームフォルダーで動作するくらいでもいいでしょうが、本格的に使用する場合はデーモンとして動作したほうが都合がいいでしょう。というわけでその方法を紹介しますが、おおむねドキュメント化されています。これを可能な限り活かしつつアレンジして設定します。

minioの配置場所

前出の例では~/minio/以下にMinIOの実行ファイル(minio)を配置しました。それを自動起動することもできますが、ここではそうはしません。今回は/opt/minio以下に実行ファイルを配置し、minio-userユーザー(とグループ)で動作することにします。実際のデータは/var/minio/に置きます。次のコマンドを実行してください。

$ sudo useradd --system minio-user
$ sudo mkdir /opt/minio/

~/minio/に実行ファイルをダウンロードしている場合は次のコマンドを実行してください。

$ sudo cp ~/minio/minio /opt/minio/

~/minio/に実行ファイルをダウンロードしていない場合は次のコマンドを実行してください。

$ wget https://dl.min.io/server/minio/release/linux-amd64/minio
$ chmod +x minio

続けて次のコマンドを実行してください。

$ sudo chown -R minio-user:minio-user /opt/minio/
$ sudo mkdir /var/minio
$ sudo chown -R minio-user:minio-user /var/minio/

これで実行ファイルやフォルダーを作成できました。続いて基本的な設定ファイルを編集します。次のコマンドを実行してください。

$ sudo editor /etc/default/minio

ファイルの中身は次のようにしてください。

# Volume to be used for MinIO server.
MINIO_VOLUMES="/var/minio/"
# Use if you want to run MinIO on a custom port.
# MINIO_OPTS="--address :9199"
# Root user for the server.
MINIO_ROOT_USER=unique-minioadmin
# Root secret for the server.
MINIO_ROOT_PASSWORD=secure-minioadmin-password

systemdのサービスユニットファイルを準備します。

$ sudo bash -c "cd /etc/systemd/system/; curl -O https://raw.githubusercontent.com/minio/minio-service/master/linux-systemd/minio.service"
$ sudo sed -i -e "s|/usr/local/bin/|/opt/minio/|g" -e "s|/usr/local/|/opt/minio/|" /etc/systemd/system/minio.service

MinIOを実行し、さらに自動起動するように設定します。

$ sudo systemctl daemon-reload 
$ sudo systemctl start minio.service 
$ sudo systemctl enable minio.service

これで完了です。

MinIOクライアントからMinIOのアップデート

MinIOはMinIOクライアントからアップデートすることができます。MinIOはアップデートが頻繁に行われているため(具体的には数日おき⁠⁠、極力最新のものを使用したほうがいいのですが、Dockerを使用しないとやや面倒ではあります。しかしクライアントからアップデートできるとなると話は別で、非常に簡単になります。

クライアントからのアップデートはコマンド1つです。次のコマンドを実行してください。

$ ./mc admin update test

アップデートが完了すると、例として次のようなコンソール出力があります。

Server `test` updated successfully from 2021-01-08T21:18:21Z to 2021-02-19T04-38-02Z

バージョン「2021-01-08T21:18:21Z」から「2021-02-19T04-38-02Z」になったことがわかります。

なおMinIOの実行ファイルを/usr/local/bin/に置かず/opt/minio/に置いたのは、このアップデートを成功させるためです。/usr/local/bin/に置くとパーミッションの関係でアップデートがうまく行きませんでした。

おすすめ記事

記事・ニュース一覧