CephFSをコンテナで利用していたのだけど、もともとJoplinのバックエンドで利用したかったので、本命はWebDAVの有効化であった。で、いろいろ悩んだのだけど、結局、Cephノード上でVMを動作させることにして、WebDAVとSambaの両方をそのノードで動かすことにした。この作業自体は先月末に行ったので、もう忘れそう。。。nginxをインストールして設定を行った。この辺りは完全にChatGPTと相談しながらやったと思う。
- Cephクライアントの設定
- nginxのインストールとWevDAVの設定
- WebDAVの設定
- 証明書の設定
Cephクライアントの設定
まずは、公開対象となるCephFSをVMにマウントする必要がある。これは、このブログのCeph FSを利用する(Linux Client編)でやった通り。一時的なマウントではないため、fstabを設定しておく。モニターアドレスを入れたりどうのこうのは必要なく、適切に認証ファイル等を用意しておけば、追加の設定は以下だけでよい。(nameは、cephへのアクセスユーザ、このユーザのkeyringファイルを用意しておく)
:/ /mnt/cephfs ceph name=gateway,_netdev 0 2
nginxのインストールとWevDAVの設定
Ubuntu ServerのVMをProxmoxで準備してnginxをインストールした。この辺りはまあ難しいこともないので省略
結論からすると/etc/nginx/sites-available/defaults
設定ファイル内のserverの中で以下のように設定した。ポイントは、ext_methodsの中でLOCKとUNLOCKを設定すること。こうしないとWindowsでエラーになる。認証は、htpasswdの簡易設定とした。
root /mnt/cephfs/webdav; client_max_body_size 0; # ファイルの大きさ制限を無効化 location / { dav_methods PUT DELETE MKCOL COPY MOVE; dav_ext_methods PROPFIND OPTIONS LOCK UNLOCK; create_full_put_path on; dav_access user:rw group:rw all:rw; auth_basic "Restricted Content"; auth_basic_user_file /etc/nginx/htpasswd; }
証明書の設定
proxmoxサーバのGUI用証明書では、各サーバで直接証明書を発行したが、これは、HTTPやHTTPSのデフォルトポートを利用しない設定なので、直接80番を引き込んで、certbotを動作させればよかった。一方で、webdavのように通常のポートを使いたい場合、リバースプロキシ経由にする必要がある。
リバースプロキシ側
proxmox GUI用でも利用していたが、まず、defaultの設定を変更し、通常時は403を返し、HTTP-01チャレンジ用だけ応答できるようにしておく。
server { listen 80 default_server; server_name _; location / { return 403; } location /.well-known/acme-challenge/ { root /var/www/html; allow all; } }
続いて、rproxy.confを用意して、今回のCeph GWサーバ向けのアクセスを中継するように設定する。証明書はrproxyに配置し、後段はHTTPに設定する。
server { listen 443 ssl; server_name gateway.takeh.org; ssl_certificate /etc/letsencrypt/live/domain_name/fullchain.pem; ssl_certificate_key /etc/letsencrypt/live/domain_name/privkey.pem; location / { proxy_pass http://192.168.0.xx; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; } }
また、certbotでは、以下のように証明書情報を転送するスクリプトを用意しておく。
certbot certonly --webroot -w /var/www/html -d domain_name -d gateway.domain_name -d xxxx.domain_name --deploy-hook /usr/local/bin/deploy_script.sh
deploy_script.sh
は、scpで、証明書を/etc/nginx/certs
へコピーして、systemctl reload nginx
するだけの簡単なもの。ただし、これをするためには、コピー用のユーザを作成し、パスフレーズなしの証明書を作成し、scpがパスワードなしでできるように設定する必要がある。まあ、何度もやったことあるとは言えそんなに頻繁に設定するものではないのでChatGPTに下調べさせながら書いた。
Gateway側
ということで、/etc/nginx/certsの下に証明書が準備できたので、無事gateway側のserverセクションでSSLの設定が書ける。
server { listen 80; server_name gateway.takeh.org; # HTTPからHTTPSへのリダイレクト location / { return 301 https://$host$request_uri; } } server { listen 443 ssl; server_name gateway.takeh.org; # SSL設定 ssl_certificate /etc/nginx/certs/fullchain.pem; ssl_certificate_key /etc/nginx/certs/privkey.pem; # 以下はwebdavの設定が続く }
これで証明書有効状態でLANからも接続可能になった。外部からは、一旦、リバースプロキシで終端してから再度HTTPSで接続することになる。
Sambaの設定
このゲートウェイサーバではSambaも公開する。すでにファイルシステムとしてマウントされているため、公開は、通常のSambaサーバの設定と同じ。以前の設定をそのまま利用した。
CephFSのパフォーマンス
これで、CephFSをSamba/WebDAVで利用できるようになった。CephFSの細かいチューニングは一切していないが、パフォーマンスとして以下。もちろんローカルのSSDには勝てるべくもないが、HDD単体よりはかなり高いパフォーマンスのため、(シーケンシャルアクセス用途での)データディスクとしては十分に利用できると思う。

比較のために同じWindows PC上のSATA HDDのデータも貼っておく。すべての数値でCephの方が上回っている。

コメントを残す