CephFSを利用する(WebDAV編とひとまずの結論)

CephFSをコンテナで利用していたのだけど、もともとJoplinのバックエンドで利用したかったので、本命はWebDAVの有効化であった。で、いろいろ悩んだのだけど、結局、Cephノード上でVMを動作させることにして、WebDAVとSambaの両方をそのノードで動かすことにした。この作業自体は先月末に行ったので、もう忘れそう。。。nginxをインストールして設定を行った。この辺りは完全にChatGPTと相談しながらやったと思う。

  1. Cephクライアントの設定
  2. nginxのインストールとWevDAVの設定
  3. WebDAVの設定
  4. 証明書の設定

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の方が上回っている。


投稿日

カテゴリー:

投稿者:

タグ:

コメント

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です