🍗

MinIOをローカル環境に展開する

2023/12/17に公開

MinIOとは

S3互換のあるオブジェクトストレージ。
Goで出来ててバイナリを実行するだけで即開始出来る。

読み方

「ミニオ」ではなく「ミンアイオー」らしい。。

導入

AL2023に展開する想定。
公式にコマンド書いてるがやや大胆過ぎるので実行ファイルは以下に移動する。

wget https://dl.min.io/server/minio/release/linux-amd64/minio
mv ./minio /usr/local/bin
chmod +x /usr/local/bin/minio
MINIO_ROOT_USER=admin MINIO_ROOT_PASSWORD=password minio server /mnt/data --console-address ":9001"

コンソールアドレスに9001番を指定しているのでhttp://yourdomain.jp:9001でコンソールへ。
これだとSSLが当たってなかったりWebアプリレイヤーで使えなかったりするので以下へ。

より実践的導入

※マウントパスのチューニングは引き続き調査中

minioユーザを作成

システムアカウントとしてminio-userを作る。

useradd -r minio-user -s /sbin/nologin

設定ファイルを定義する

/etc/default/minio
# ボリュームパス
MINIO_VOLUMES="/home/minio-user/data/"
# 起動時オプション
MINIO_OPTS="--address :9000 --console-address :9001"
# ルートユーザ
MINIO_ROOT_USER="mystorage-root"
# ルートパスワード
MINIO_ROOT_PASSWORD="mystorage-passwd"
# エンドポイントURL
MINIO_SERVER_URL="https://kusamochi-magurodon.jp:9000"

ユニットファイルの作成

こちらを引用

実行時に設定ファイルを適用しつつ起動する形になる。

/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
ProtectProc=invisible

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=1048576

# Specifies the maximum number of threads this process can create
TasksMax=infinity

# 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})

SSLを適用する

既に組み込み先のドメインでLetEncryptを適用済の場合は
ワーキングディレクトリに秘密鍵と公開鍵をコピーするだけでOK
導入の仕方は本題とズレるのでこちらで (Zennでまとめててよかった...)

謎だったのが置き場所。サービス起動オプションに
--certs-dir or -S

とあったので指定してみたが、何故かここに置いても適用されなかった。
正解はマウント先の直下に出来上がる .minioディレクトリっぽかった。
あとファイル名も固定??分からん。
privkey.pemとfullchain.pemをそれぞれ以下の形でコピー

cp -rp  privkey.pem /path/to/.minio/certs/private.key
cp -rp  fullchain.pem /path/to/.minio/certs/public.crt

サービスを再起動

systemctl restart minio

おわり。

Discussion