著者は、 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 Redis[のシンプルなキューサービスをサポートしています。 X207X]、 NATS 、およびPostgreSQLターゲット。 これらすべての理由から、Minioオブジェクトストレージサーバーのセットアップを学ぶことで、プロジェクトに幅広い柔軟性と有用性を追加できます。

このチュートリアルでは、次のことを行います。

  • 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アドレスに置き換えます。

  1. ssh sammy@your_server_ip

パッケージデータベースを最近更新していない場合は、今すぐ更新してください。

  1. sudo apt update

次に、公式WebサイトからMinioサーバーのバイナリファイルをダウンロードします。

  1. 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という名前のファイルが作業ディレクトリにあります。 次のコマンドを使用して、実行可能にします。

  1. sudo chmod +x minio

次に、ファイルを/usr/local/binディレクトリに移動します。ここで、Minioのsystemd起動スクリプトがファイルを検出します。

  1. sudo mv minio /usr/local/bin

これにより、このチュートリアルの後半でサービスユニットファイルを記述して、起動時にMinioを自動的に実行できるようになります。

セキュリティ上の理由から、Minioサーバーをrootとして実行することは避けるのが最善です。 これにより、侵害された場合にシステムに与える可能性のある損害が制限されます。 手順2で使用するsystemdスクリプトは、minio-userという名前のユーザーアカウントとグループを検索するため、次の名前の新しいユーザーを作成します。

  1. sudo useradd -r minio-user -s /sbin/nologin

このコマンドでは、-sフラグを使用して、minio-userのシェルとして/sbin/nologinを設定しました。 これはユーザーログインを許可しないシェルであり、minio-userには必要ありません。

次に、Minioバイナリの所有権をminio-userに変更します。

  1. sudo chown minio-user:minio-user /usr/local/bin/minio

次に、Minioがファイルを保存するディレクトリを作成します。 これは、後でMinioサーバーに保存するオブジェクトを整理するために使用するバケットの保存場所になります。 このチュートリアルでは、ディレクトリにminioという名前を付けます。

  1. sudo mkdir /usr/local/share/minio

そのディレクトリの所有権をminio-userに付与します。

  1. sudo chown minio-user:minio-user /usr/local/share/minio

ほとんどのサーバー構成ファイルは/etcディレクトリに保存されているため、ここにMinio構成ファイルを作成します。

  1. sudo mkdir /etc/minio

そのディレクトリの所有権もminio-userに付与します。

  1. sudo chown minio-user:minio-user /etc/minio

Nanoまたはお気に入りのテキストエディタを使用して、デフォルト設定を変更するために必要な環境ファイルを作成します。

  1. sudo nano /etc/default/minio

ファイルが開いたら、次の行を追加して、環境ファイルにいくつかの重要な環境変数を設定します。

/ 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サービス記述子ファイルをダウンロードします。

  1. 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の内容を監査するには、テキストエディタで開いて内容を表示します。

  1. nano minio.service

これにより、次のように表示されます。

/etc/systemd/system/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をそこに移動します。

  1. sudo mv minio.service /etc/systemd/system

次に、次のコマンドを実行して、すべてのsystemdユニットをリロードします。

  1. sudo systemctl daemon-reload

最後に、Minioが起動時に起動できるようにします。

  1. sudo systemctl enable minio

これにより、次の出力が得られます。

Output
Created symlink from /etc/systemd/system/multi-user.target.wants/minio.service to /etc/systemd/system/minio.service.

systemdスクリプトがインストールおよび構成されたので、サーバーを起動します。

ステップ3—Minioサーバーを起動する

このステップでは、サーバーを起動し、ファイアウォールを変更して、ブラウザーインターフェイスを介したアクセスを許可します。

まず、Minioサーバーを起動します。

  1. sudo systemctl start minio

次に、次のコマンドを実行して、Minioのステータス、バインドされているIPアドレス、メモリ使用量などを確認します。

  1. 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です。

最初にルールを追加します。

  1. sudo ufw allow 9000

次に、ファイアウォールを有効にします。

  1. sudo ufw enable

次のプロンプトが表示されます。

Output
Command may disrupt existing ssh connections. Proceed with operation (y|n)?

yENTERを押して確認してください。 次に、次の出力が得られます。

Output
Firewall is active and enabled on system startup

これでMinioはトラフィックを受け入れる準備ができましたが、サーバーに接続する前に、SSL/TLS証明書をインストールして通信を保護します。

ステップ4—TLS証明書を使用してMinioサーバーへのアクセスを保護する

このステップでは、認証局(CA)から取得した秘密鍵と公開証明書(この場合は Let’s Encrypt )を使用して、Minioサーバーへのアクセスを保護します。 無料のSSL証明書を取得するには、Certbotを使用します。

まず、ファイアウォールを介したHTTPおよびHTTPSアクセスを許可します。 これを行うには、HTTPのポートであるポート80を開きます。

  1. sudo ufw allow 80

次に、HTTPS用にポート443を開きます。

  1. sudo ufw allow 443

これらのルールを追加したら、次のコマンドを使用してファイアウォールのステータスを確認します。

  1. sudo ufw status verbose

次のような出力が表示されます。

Output
Status: 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を管理するためのパッケージです。

  1. sudo apt install software-properties-common

このパッケージは、手動で行うのではなく、PPAを追加および削除するためのいくつかの便利なスクリプトを提供します。

次に、Universeリポジトリを追加します。

  1. sudo add-apt-repository universe

このリポジトリには、Ubuntuコミュニティによって維持されている無料のオープンソースソフトウェアが含まれていますが、Ubuntuの開発者であるCanonicalによって公式に維持されていません。 これは、Certbotのリポジトリを見つける場所です。

次に、Certbotリポジトリを追加します。

  1. sudo add-apt-repository ppa:certbot/certbot

次の出力が表示されます。

Output
This 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を押して受け入れます。

次に、パッケージリストを更新します。

  1. sudo apt update

最後に、certbotをインストールします。

  1. sudo apt install certbot

次に、certbotを使用して新しいSSL証明書を生成します。

Ubuntu 18.04はまだ自動インストールをサポートしていないため、certonlyコマンドと--standaloneを使用して証明書を取得します。

  1. sudo certbot certonly --standalone -d minio-server.your_domain

--standaloneは、この証明書が組み込みのスタンドアロンWebサーバー用であることを意味します。 詳細については、Certbotスタンドアロンモードを使用してUbuntu18.04でSSL証明書を暗号化して取得する方法のチュートリアルを参照してください。

次の出力が表示されます。

Output
Saving 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.pemfullchain.pem)を、Minioのサーバー構成フォルダー(このチュートリアルでは/etc/minio)の下のcertsディレクトリにコピーします。 以下を使用してprivkey.pemをコピーし、ファイルの名前をprivate.keyに変更します。

  1. sudo cp /etc/letsencrypt/live/minio-server.your_domain_name/privkey.pem /etc/minio/certs/private.key

次に、fullchain.pemについても同じことを行い、結果にpublic.crtという名前を付けます。

  1. sudo cp /etc/letsencrypt/live/minio-server.your_domain_name/fullchain.pem /etc/minio/certs/public.crt

ここで、ファイルの所有権をminio-userに変更します。 まず、private.keyに対してこれを行います。

  1. sudo chown minio-user:minio-user /etc/minio/certs/private.key

次にpublic.crt

  1. sudo chown minio-user:minio-user /etc/minio/certs/public.crt

Minioサーバーを再起動して、証明書を認識し、HTTPSの使用を開始します。

  1. 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サーバーのログイン画面が表示されます。

Minio login screen

次に、資格情報を入力してメインインターフェイスにログインします。 アクセスキーには、手順1/etc/default/minio環境ファイルに設定したMINIO_ACCESS_KEYを入力します。 シークレットキーには、同じファイルに設定したMINIO_SECRET_KEYと入力します。 クレデンシャルを入力したら、入力フィールドのすぐ下にある矢印の付いた丸いボタンをクリックします。

その後、Minioユーザーインターフェイスが表示されます。 オブジェクトを保存できる新しいバケットを作成するには、メインインターフェイスの右下にある明るい赤の + ボタンをクリックして、さらに2つの黄色のボタンを表示します。

Minio's main interface

真ん中の黄色のボタンをクリックし、プロンプトに新しいバケットの名前を入力し、ENTERキーを押して応答を保存します。 これで、新しいバケットをストレージに使用する準備が整いました。

注: Minioバケットに名前を付けるときは、名前に小文字、数字、またはハイフンのみが含まれていることを確認してください。 Minioは、AWS S3標準と互換性を持たせるために、バケットの命名規則を制限しています。

バケットにオブジェクトを追加する場合は、前と同じ明るい赤のボタンをクリックしてから、上部の黄色のボタンをクリックしてファイルのアップロードプロンプトを開きます。

この時点で、バケットの作成とオブジェクトのアップロードという基本的なWebインターフェイス全体を実行しました。

結論

これで、Let’s Encrypt SSL/TLS証明書を使用してWebインターフェイスから安全に接続できる独自のMinioオブジェクトストレージサーバーができました。 オプションで、オブジェクトストレージサーバーを使用および管理するための代替方法として、FreeBSD、Linux、Mac、およびWindows用のMinioデスクトップクライアントを検討することをお勧めします。

さらに、Minioインストールのストレージ容量をサーバーのディスクサイズを超えて増やしたい場合は、 DigitalOceanのブロックストレージサービスを使用してボリュームをサーバーに接続し、ストレージ容量を最大80TB拡張できます。 。

Minioの詳細については、プロジェクトのドキュメントWebサイトを参照してください。 オブジェクトストレージについて詳しく知りたい場合は、オブジェクトストレージチュートリアルを参照してください。