Ubuntu18.04でMinioを使用してオブジェクトストレージサーバーをセットアップする方法
著者は、 Open Internet / Free Speech Fund を選択して、 Write forDOnationsプログラムの一環として寄付を受け取りました。
序章
クラウドベースのバックアップソリューションから高可用性コンテンツ配信ネットワーク(CDN)まで、オブジェクトデータの非構造化ブロブを保存し、オブジェクトストレージと呼ばれるHTTPAPIを介してアクセスできるようにする機能は、現代のテクノロジーランドスケープの不可欠な部分になっています。
Minio は、AmazonS3クラウドストレージサービスと互換性のある人気のオープンソースオブジェクトストレージサーバーです。 Amazon S3と通信するように構成されたアプリケーションは、Minioと通信するように構成することもできます。これにより、オブジェクトストレージサーバーをより細かく制御したい場合に、MinioをS3の実行可能な代替手段にすることができます。 このサービスは、写真、ビデオ、ログファイル、バックアップ、コンテナ/ VMイメージなどの非構造化データを保存し、多数のサーバーにまたがる複数のドライブをプールする単一のオブジェクトストレージサーバーを提供することもできます。
MinioはGoで記述されており、コマンドラインクライアントとブラウザインターフェイスが付属しており、 Advanced Message Queuing Protocol(AMQP)、 Elasticsearch 、
このチュートリアルでは、次のことを行います。
-
MinioサーバーをUbuntu18.04サーバーにインストールし、 systemdserviceとして構成します。
-
Let’s Encryptを使用してSSL/TLS証明書を設定し、サーバーとクライアント間の通信を保護します。
-
HTTPS経由でMinioのブラウザインターフェースにアクセスして、サーバーを使用および管理します。
前提条件
このチュートリアルを完了するには、次のものが必要です。
-
私たちのUbuntu18.04初期サーバーセットアップチュートリアルに従ってセットアップされた1つのUbuntu18.04サーバー。これには、sudo非rootユーザーとファイアウォールが含まれます。
-
完全に登録されたドメイン名。 Namecheap で購入するか、Freenomで無料で入手できます。 このチュートリアルでは、ドメインは
your_domain
として表されます。 -
Minioサーバー用に設定された次のDNSレコード。 DigitalOcean DropletにDNSレコードを追加する方法の詳細については、DNSレコードのドキュメントを参照してください。
-
サーバー名を含むAレコード(例:
minio-server.your_domain
)オブジェクトサーバーのIPv4アドレスを指します。 -
(オプション)サーバーをIPv6経由で到達可能にする場合は、サーバー名がオブジェクトサーバーのIPv6アドレスを指すAAAAレコードが必要です。
-
ステップ1—Minioサーバーのインストールと構成
Minioサーバーは、ソースコードをコンパイルするか、バイナリファイルを介してインストールできます。 ソースからインストールするには、少なくとも Go1.12がシステムにインストールされている必要があります。
このステップでは、プリコンパイルされたバイナリを介してサーバーをインストールし、その後、Minioサーバーを構成します。
まず、サーバーにログインし、sammy
をユーザー名に、your_server_ip
をUbuntu18.04サーバーのIPアドレスに置き換えます。
- ssh sammy@your_server_ip
パッケージデータベースを最近更新していない場合は、今すぐ更新してください。
- sudo apt update
次に、公式WebサイトからMinioサーバーのバイナリファイルをダウンロードします。
- wget https://dl.min.io/server/minio/release/linux-amd64/minio
次のような出力が表示されます。
Output--2019-08-27 15:08:49-- 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: 44511616 (42M) [application/octet-stream]
Saving to: ‘minio’
minio 100%[===================>] 42.45M 21.9MB/s in 1.9s
2019-08-27 15:08:51 (21.9 MB/s) - ‘minio’ saved [44511616/44511616]
ダウンロードが完了すると、minio
という名前のファイルが作業ディレクトリにあります。 次のコマンドを使用して、実行可能にします。
- sudo chmod +x minio
次に、ファイルを/usr/local/bin
ディレクトリに移動します。ここで、Minioのsystemd
起動スクリプトがファイルを検出します。
- sudo mv minio /usr/local/bin
これにより、このチュートリアルの後半でサービスユニットファイルを記述して、起動時にMinioを自動的に実行できるようになります。
セキュリティ上の理由から、Minioサーバーをrootとして実行することは避けるのが最善です。 これにより、侵害された場合にシステムに与える可能性のある損害が制限されます。 手順2で使用するsystemd
スクリプトは、minio-user
という名前のユーザーアカウントとグループを検索するため、次の名前の新しいユーザーを作成します。
- sudo useradd -r minio-user -s /sbin/nologin
このコマンドでは、-s
フラグを使用して、minio-user
のシェルとして/sbin/nologin
を設定しました。 これはユーザーログインを許可しないシェルであり、minio-user
には必要ありません。
次に、Minioバイナリの所有権をminio-user
に変更します。
- sudo chown minio-user:minio-user /usr/local/bin/minio
次に、Minioがファイルを保存するディレクトリを作成します。 これは、後でMinioサーバーに保存するオブジェクトを整理するために使用するバケットの保存場所になります。 このチュートリアルでは、ディレクトリにminio
という名前を付けます。
- sudo mkdir /usr/local/share/minio
そのディレクトリの所有権をminio-user
に付与します。
- sudo chown minio-user:minio-user /usr/local/share/minio
ほとんどのサーバー構成ファイルは/etc
ディレクトリに保存されているため、ここにMinio構成ファイルを作成します。
- sudo mkdir /etc/minio
そのディレクトリの所有権もminio-user
に付与します。
- sudo chown minio-user:minio-user /etc/minio
Nanoまたはお気に入りのテキストエディタを使用して、デフォルト設定を変更するために必要な環境ファイルを作成します。
- sudo nano /etc/default/minio
ファイルが開いたら、次の行を追加して、環境ファイルにいくつかの重要な環境変数を設定します。
MINIO_ACCESS_KEY="minio"
MINIO_VOLUMES="/usr/local/share/minio/"
MINIO_OPTS="-C /etc/minio --address your_server_ip:9000"
MINIO_SECRET_KEY="miniostorage"
これらの変数と設定した値を見てみましょう。
MINIO_ACCESS_KEY
:これは、Minioブラウザのユーザーインターフェイスにアクセスするために使用するアクセスキーを設定します。MINIO_SECRET_KEY
:これは、Minioインターフェースへのログイン資格情報を完成させるために使用する秘密鍵を設定します。 このチュートリアルでは、値をminiostorage
に設定していますが、サーバーを保護するために、別のより複雑なパスワードを選択することをお勧めします。MINIO_VOLUMES
:バケット用に作成したストレージディレクトリを識別します。MINIO_OPTS
:これにより、サーバーがデータを提供する場所と方法が変更されます。-C
フラグは、Minioが使用する構成ディレクトリを指し、--address
フラグは、バインドするIPアドレスとポートをMinioに指示します。 IPアドレスが指定されていない場合、Minioはlocalhost
やDocker関連のIPアドレスなど、サーバーで構成されているすべてのアドレスにバインドするため、ここでIPアドレスを直接指定することをお勧めします。 必要に応じて、デフォルトのポート9000
を変更できます。
最後に、変更が完了したら、環境ファイルを保存して閉じます。
これでMinioがインストールされ、いくつかの重要な環境変数が設定されました。 次に、システムサービスとして実行するようにサーバーを構成します。
ステップ2—MinioSystemdスタートアップスクリプトをインストールする
このステップでは、systemd
サービスとして管理されるようにMinioサーバーを構成します。
まず、次のコマンドを使用して、公式のMinioサービス記述子ファイルをダウンロードします。
- curl -O https://raw.githubusercontent.com/minio/minio-service/master/linux-systemd/minio.service
次のような出力が表示されます。
Output
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
100 835 100 835 0 0 6139 0 --:--:-- --:--:-- --:--:-- 6139
ダウンロードが完了すると、minio.service
という名前のファイルが作業ディレクトリにあります。
適用する前にminio.service
の内容を監査するには、テキストエディタで開いて内容を表示します。
- nano minio.service
これにより、次のように表示されます。
[Unit]
Description=MinIO
Documentation=https://docs.min.io
Wants=network-online.target
After=network-online.target
AssertFileIsExecutable=/usr/local/bin/minio
[Service]
WorkingDirectory=/usr/local/
User=minio-user
Group=minio-user
EnvironmentFile=/etc/default/minio
ExecStartPre=/bin/bash -c "if [ -z \"${MINIO_VOLUMES}\" ]; then echo \"Variable MINIO_VOLUMES not set in /etc/default/minio\"; exit 1; fi"
ExecStart=/usr/local/bin/minio server $MINIO_OPTS $MINIO_VOLUMES
# Let systemd restart this service always
Restart=always
# Specifies the maximum file descriptor number that can be opened by this process
LimitNOFILE=65536
# Disable timeout logic and wait until process is stopped
TimeoutStopSec=infinity
SendSIGKILL=no
[Install]
WantedBy=multi-user.target
# Built for ${project.name}-${project.version} (${project.name})
このサービスユニットファイルは、先ほど作成したminio-user
ユーザーを使用してMinioサーバーを起動します。 また、最後の手順で設定した環境変数を実装し、起動時にサーバーを自動的に実行します。 systemd
ユニットファイルの詳細については、ガイドSystemdユニットとユニットファイルについてを参照してください。
スクリプトの内容を確認したら、テキストエディタを閉じます。
Systemdでは、ユニットファイルをsystemd
構成ディレクトリに保存する必要があるため、minio.service
をそこに移動します。
- sudo mv minio.service /etc/systemd/system
次に、次のコマンドを実行して、すべてのsystemdユニットをリロードします。
- sudo systemctl daemon-reload
最後に、Minioが起動時に起動できるようにします。
- sudo systemctl enable minio
これにより、次の出力が得られます。
OutputCreated symlink from /etc/systemd/system/multi-user.target.wants/minio.service to /etc/systemd/system/minio.service.
systemdスクリプトがインストールおよび構成されたので、サーバーを起動します。
ステップ3—Minioサーバーを起動する
このステップでは、サーバーを起動し、ファイアウォールを変更して、ブラウザーインターフェイスを介したアクセスを許可します。
まず、Minioサーバーを起動します。
- sudo systemctl start minio
次に、次のコマンドを実行して、Minioのステータス、バインドされているIPアドレス、メモリ使用量などを確認します。
- sudo systemctl status minio
次の出力が得られます。
Output● minio.service - MinIO
Loaded: loaded (/etc/systemd/system/minio.service; enabled; vendor preset: enabled)
Active: active (running) since Mon 2019-12-09 21:54:02 UTC; 46s ago
Docs: https://docs.min.io
Process: 3405 ExecStartPre=/bin/bash -c if [ -z "${MINIO_VOLUMES}" ]; then echo "Variable MINIO_VOLUMES not set in /etc/default/minio"; exit 1; fi (code=exited, status=0/SUCCES
Main PID: 3407 (minio)
Tasks: 7 (limit: 1152)
CGroup: /system.slice/minio.service
└─3407 /usr/local/bin/minio server -C /etc/minio --address your_server_IP:9000 /usr/local/share/minio/
Dec 09 21:54:02 cart-Minion-Object-1804-1 systemd[1]: Started MinIO.
Dec 09 21:54:03 cart-Minion-Object-1804-1 minio[3407]: Endpoint: http://your_server_IP:9000
Dec 09 21:54:03 cart-Minion-Object-1804-1 minio[3407]: Browser Access:
Dec 09 21:54:03 cart-Minion-Object-1804-1 minio[3407]: http://your_server_IP:9000
...
次に、ファイアウォールを介して、構成されたポートのMinioサーバーへのアクセスを有効にします。 このチュートリアルでは、それがポート9000
です。
最初にルールを追加します。
- sudo ufw allow 9000
次に、ファイアウォールを有効にします。
- sudo ufw enable
次のプロンプトが表示されます。
OutputCommand may disrupt existing ssh connections. Proceed with operation (y|n)?
y
とENTER
を押して確認してください。 次に、次の出力が得られます。
OutputFirewall is active and enabled on system startup
これでMinioはトラフィックを受け入れる準備ができましたが、サーバーに接続する前に、SSL/TLS証明書をインストールして通信を保護します。
ステップ4—TLS証明書を使用してMinioサーバーへのアクセスを保護する
このステップでは、認証局(CA)から取得した秘密鍵と公開証明書(この場合は Let’s Encrypt )を使用して、Minioサーバーへのアクセスを保護します。 無料のSSL証明書を取得するには、Certbotを使用します。
まず、ファイアウォールを介したHTTPおよびHTTPSアクセスを許可します。 これを行うには、HTTPのポートであるポート80
を開きます。
- sudo ufw allow 80
次に、HTTPS用にポート443
を開きます。
- sudo ufw allow 443
これらのルールを追加したら、次のコマンドを使用してファイアウォールのステータスを確認します。
- sudo ufw status verbose
次のような出力が表示されます。
OutputStatus: active
Logging: on (low)
Default: deny (incoming), allow (outgoing), disabled (routed)
New profiles: skip
To Action From
-- ------ ----
22/tcp (OpenSSH) ALLOW IN Anywhere
9000 ALLOW IN Anywhere
443 ALLOW IN Anywhere
80 ALLOW IN Anywhere
22/tcp (OpenSSH (v6)) ALLOW IN Anywhere (v6)
9000 (v6) ALLOW IN Anywhere (v6)
443 (v6) ALLOW IN Anywhere (v6)
80 (v6) ALLOW IN Anywhere (v6)
これにより、ポート80
および443
が開いていることが確認され、サーバーがインターネットからの要求を確実に受け入れるようになります。
次に、Certbotをインストールします。 Certbotは個別のPPAリポジトリを維持しているため、次のようにCertbotをインストールする前に、まずリポジトリのリストに追加する必要があります。
PPAリポジトリを追加する準備をするには、最初にsoftware-properties-commonをインストールします。これはPPAを管理するためのパッケージです。
- sudo apt install software-properties-common
このパッケージは、手動で行うのではなく、PPAを追加および削除するためのいくつかの便利なスクリプトを提供します。
次に、Universeリポジトリを追加します。
- sudo add-apt-repository universe
このリポジトリには、Ubuntuコミュニティによって維持されている無料のオープンソースソフトウェアが含まれていますが、Ubuntuの開発者であるCanonicalによって公式に維持されていません。 これは、Certbotのリポジトリを見つける場所です。
次に、Certbotリポジトリを追加します。
- sudo add-apt-repository ppa:certbot/certbot
次の出力が表示されます。
OutputThis is the PPA for packages prepared by Debian Let's Encrypt Team and backported for Ubuntu(s).
More info: https://launchpad.net/~certbot/+archive/ubuntu/certbot
Press [ENTER] to continue or ctrl-c to cancel adding it
ENTER
を押して受け入れます。
次に、パッケージリストを更新します。
- sudo apt update
最後に、certbot
をインストールします。
- sudo apt install certbot
次に、certbot
を使用して新しいSSL証明書を生成します。
Ubuntu 18.04はまだ自動インストールをサポートしていないため、certonly
コマンドと--standalone
を使用して証明書を取得します。
- sudo certbot certonly --standalone -d minio-server.your_domain
--standalone
は、この証明書が組み込みのスタンドアロンWebサーバー用であることを意味します。 詳細については、Certbotスタンドアロンモードを使用してUbuntu18.04でSSL証明書を暗号化して取得する方法のチュートリアルを参照してください。
次の出力が表示されます。
OutputSaving debug log to /var/log/letsencrypt/letsencrypt.log
Plugins selected: Authenticator standalone, Installer None
Enter email address (used for urgent renewal and security notices) (Enter 'c' to
cancel):
メールアドレスを追加して、ENTER
を押します。
次に、CertbotはLet’sEncryptに登録するように求めます。
Output- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Please read the Terms of Service at
https://letsencrypt.org/documents/LE-SA-v1.2-November-15-2017.pdf. You must
agree in order to register with the ACME server at
https://acme-v02.api.letsencrypt.org/directory
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
(A)gree/(C)ancel:
A
と入力し、ENTER
を押して同意します。
次に、 Electronic FrontierFoundationとメールを共有するかどうかを尋ねられます。
Output- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Would you be willing to share your email address with the Electronic Frontier
Foundation, a founding partner of the Let's Encrypt project and the non-profit
organization that develops Certbot? We'd like to send you email about our work
encrypting the web, EFF news, campaigns, and ways to support digital freedom.
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
(Y)es/(N)o:
Y
またはN
と答えると、公開鍵と秘密鍵が生成され、/etc/letsencrypt/live/minio-server.your_domain_name
ディレクトリに保存されます。
次に、これら2つのファイル(privkey.pem
とfullchain.pem
)を、Minioのサーバー構成フォルダー(このチュートリアルでは/etc/minio
)の下のcerts
ディレクトリにコピーします。 以下を使用してprivkey.pem
をコピーし、ファイルの名前をprivate.key
に変更します。
- sudo cp /etc/letsencrypt/live/minio-server.your_domain_name/privkey.pem /etc/minio/certs/private.key
次に、fullchain.pem
についても同じことを行い、結果にpublic.crt
という名前を付けます。
- sudo cp /etc/letsencrypt/live/minio-server.your_domain_name/fullchain.pem /etc/minio/certs/public.crt
ここで、ファイルの所有権をminio-user
に変更します。 まず、private.key
に対してこれを行います。
- sudo chown minio-user:minio-user /etc/minio/certs/private.key
次にpublic.crt
:
- sudo chown minio-user:minio-user /etc/minio/certs/public.crt
Minioサーバーを再起動して、証明書を認識し、HTTPSの使用を開始します。
- sudo systemctl restart minio
Let’sEncrypt証明書は90日間のみ有効です。 これは、ユーザーが証明書の更新プロセスを自動化することを奨励するためです。 インストールしたCertbotパッケージは、更新スクリプトを/etc/cron.dに自動的に追加します。 このスクリプトは1日2回実行され、有効期限が30日以内の証明書を自動的に更新します。
これにより、Minioの接続は安全になり、SSL/TLS証明書が自動的に更新されます。 次のステップでは、ブラウザを介してMinioに接続し、サーバーを使用します。
ステップ5—HTTPSを使用してMinioのWebインターフェイスに安全に接続する
このステップでは、HTTPSを介してMinio Webインターフェースに安全に接続し、バケットを作成してオブジェクトをアップロードします。
ブラウザでhttps://minio-server.your_domain:9000
を指定して、Webインターフェイスにアクセスします。
Minioサーバーのログイン画面が表示されます。
次に、資格情報を入力してメインインターフェイスにログインします。 アクセスキーには、手順1で/etc/default/minio
環境ファイルに設定したMINIO_ACCESS_KEY
を入力します。 シークレットキーには、同じファイルに設定したMINIO_SECRET_KEY
と入力します。 クレデンシャルを入力したら、入力フィールドのすぐ下にある矢印の付いた丸いボタンをクリックします。
その後、Minioユーザーインターフェイスが表示されます。 オブジェクトを保存できる新しいバケットを作成するには、メインインターフェイスの右下にある明るい赤の + ボタンをクリックして、さらに2つの黄色のボタンを表示します。
真ん中の黄色のボタンをクリックし、プロンプトに新しいバケットの名前を入力し、ENTER
キーを押して応答を保存します。 これで、新しいバケットをストレージに使用する準備が整いました。
注: Minioバケットに名前を付けるときは、名前に小文字、数字、またはハイフンのみが含まれていることを確認してください。 Minioは、AWS S3標準と互換性を持たせるために、バケットの命名規則を制限しています。
バケットにオブジェクトを追加する場合は、前と同じ明るい赤のボタンをクリックしてから、上部の黄色のボタンをクリックしてファイルのアップロードプロンプトを開きます。
この時点で、バケットの作成とオブジェクトのアップロードという基本的なWebインターフェイス全体を実行しました。
結論
これで、Let’s Encrypt SSL/TLS証明書を使用してWebインターフェイスから安全に接続できる独自のMinioオブジェクトストレージサーバーができました。 オプションで、オブジェクトストレージサーバーを使用および管理するための代替方法として、FreeBSD、Linux、Mac、およびWindows用のMinioデスクトップクライアントを検討することをお勧めします。
さらに、Minioインストールのストレージ容量をサーバーのディスクサイズを超えて増やしたい場合は、 DigitalOceanのブロックストレージサービスを使用してボリュームをサーバーに接続し、ストレージ容量を最大80TB拡張できます。 。
Minioの詳細については、プロジェクトのドキュメントWebサイトを参照してください。 オブジェクトストレージについて詳しく知りたい場合は、オブジェクトストレージチュートリアルを参照してください。