以前こんな記事をかいたが、
https://www.blog.slow-fire.net/2020/04/07/synology%e3%81%a7minio%e3%82%92%e4%bd%bf%e3%81%86/
コンソールがついたりして、機能が増えたので少し書き直してみた。だいぶシンプルな記載になった。
まず、利用するSynologyにはDockerが入っている必要がある。Dockerが動かないSynologyは使えない。一説によると、DockerがないSynologyに無理やりDockerを入れちゃう技があるそうだが。その場合は、minioのイメージがレジストリに存在するかどうか。存在すれば動くと思う。
自分の環境は/volume1/dockerにdocker領域がある。
SSHでSynologyにログイン。ログインしたら、以下を行う。ほぼコピペでいける。
<フォルダの作成>
sudoでrootになってdockerのフォルダにMinioが使うフォルダを作成。(ほんとは1つのデータディレクトリでいいのだが、Object Lockを使いたいので4つ作る。)
sudo -i
mkdir -p /volume1/docker/minio/data
mkdir -p /volume1/docker/minio/data{1..4}
mkdir -p /volume1/docker/minio/config/certs
<証明書の作成>
証明書がなくてもhttpsではなく、httpでアクセスができる。
オレオレ証明書のSynologyのホスト名とIPが必要(この例だとsyno-test1と192.168.11.90)
cd /volume1/docker/minio/config/certs
openssl genrsa -out rootCA.key 4096
openssl req -x509 -new -nodes -key rootCA.key -sha256 -days 1825 -out rootCA.pem -subj "/C=JP/ST=Tokyo/L=Shibuya/O=cloudshift.corp/OU=development/CN=exmaple CA"
openssl genrsa -out private.key 2048
openssl req -subj "/CN=${LOCALIPADDRAPI}" -sha256 -new -key private.key -out cert.csr
cat << EOF > extfile.conf
subjectAltName = DNS.1:localhost, DNS.2:syno-test1, IP.1:127.0.0.1, IP.2:192.168.11.90
EOF
openssl x509 -req -days 365 -sha256 -in cert.csr -CA rootCA.pem -CAkey rootCA.key -CAcreateserial -out public.crt -extfile extfile.conf
chmod 600 ./private.key
chmod 600 ./public.crt
chmod 600 ./rootCA.pem
cd /volume1/docker/minio/
SynologyでLets Encryptのキーなどを使っていて公的な証明書を流用するなら
ls /usr/syno/etc/certificate/_archive/$(cat /usr/syno/etc/certificate/_archive/DEFAULT)
cp /usr/syno/etc/certificate/_archive/$(cat /usr/syno/etc/certificate/_archive/DEFAULT)/cert.pem /volume1/docker/minio/config/certs/public.crt
cp /usr/syno/etc/certificate/_archive/$(cat /usr/syno/etc/certificate/_archive/DEFAULT)/privkey.pem /volume1/docker/minio/config/certs/private.key
cd /volume1/docker/minio/
<コンテナの作成>
コマンドラインでMinioコンテナを起動。GUIからやるよりコマンドラインから実行したほうがいい。コマンドラインから起動してもあとでちゃんとGUIに表示される。
docker run -d -p 9000:9000 -p 9001:9001 --name minio --restart=always \
-e "MINIO_ROOT_USER=minioadminuser" \
-e "MINIO_ROOT_PASSWORD=minioadminuser" \
-v /volume1/docker/minio/data:/data \
-v /volume1/docker/minio//data1:/data1 \
-v /volume1/docker/minio/data2:/data2 \
-v /volume1/docker/minio/data3:/data3 \
-v /volume1/docker/minio//data4:/data4 \
-v /volume1/docker/minio/config:/root/.minio \
minio/minio server /data{1...4} --console-address ":9001"
Dockerコンテナの操作は、SynologyのDockerのGUIからでも可能。
MINIO_ROOT_USERとMINIO_ROOT_PASSWORDがログインクレデンシャル (この例の場合ともにminioadminuser)
https://SynologyのIPアドレス:9001へアクセスをすると、ログイン画面が表示される。MINIO_ROOT_USERとMINIO_ROOT_PASSWORDでログインが可能
また、ログイン画面が変わった。watchtowerコンテナを動かしておくと勝手に更新されるからめっちゃ焦る。
Metricsを使いたいなら、Prometheusが必要。となるとDocker-composeであげたほうが楽。幸い、SynologyにはDockerComposeも入っている。ちと古いが。
# docker-compose version
docker-compose version 1.28.5, build 324b023a
docker-py version: 4.4.4
CPython version: 3.7.10
OpenSSL version: OpenSSL 1.1.0l 10 Sep 2019
docker-composeでの起動方法はいずれ。しかし、どこを調べてもMetricsの表示のさせ方がステップバイステップで載っていない。まぁ、Prometheusのポートバッティングに気をつけつつドキュメントの通りにやればできるのだが。デフォルトでもそこそこデータが取れるので、実は不要かもしれない。(入れておいたほうが時系列でAPIコールまで取れるので、デバッグ用途ではいいのかもしれないが。)
以下dockerとPrometheusを別々に動かしてみた図。