広告

Open WebUI でローカルLLMを作ってみよう③

LLM

前回まで作成したものは、iphone などで接続すると、マイクが利用できないと思います。

※ マイクの利用は https 接続が前提になるはず(セキュリティの制限のよるもの)

そのため、今回はリバースプロキシを作ってみます。

証明書の準備

  1. Powershell を起動し、作業フォルダーに移動します。

    # 証明書や設定ファイルを保存する予定のディレクトリへ移動する(フォルダーは事前に用意してください。)
    cd c:\openwebui\nginx-https
    
    # Docker コンテナを使って、現在のフォルダーに証明書を作成
    # -x509:X.509形式の証明書を作成する(自己証明の証明書)
    # -nodes:No DES(秘密鍵にパスワードを設定しません)
    # -newkey rsa:2048:新しい RSA 鍵を生成、鍵長 2048bit(推奨)→ key.pem が生成される
    # -keyout key.pem:key.pem(秘密鍵)ファイルとして出力する
    # -out cert.pem:cert.pem(証明書 - 公開キーとして利用)ファイルとして証明書を出力する
    # -days 3650:有効期限が 3650 日
    # -subj "/CN=localhost":https でアクセスする際のホスト名。アドレスでアクセスする場合、IP アドレスでもいい
    # -v "${PWD}:/work":現在の Windows の作業フォルダーをコンテナの /work フォルダーとしてマウントする(-v でマウントしたファイルを触ったら、そのままコンテナに反映されます)
    docker run --rm -v "${PWD}:/work" alpine/openssl req -x509 -nodes -newkey rsa:2048 -keyout /work/key.pem -out /work/cert.pem -days 3650 -subj "/CN=hostname"
    
    # ホスト名を IP アドレスを利用する場合、-addext を使えば、設定ファイルなしで 1 line で IP アドレス入りの証明書が作成可能
    # docker run --rm -v "${PWD}:/work" alpine/openssl req -x509 -nodes -newkey rsa:2048 -keyout /work/key.pem -out /work/cert.pem -days 3650 -subj "/CN=192.168.0.8" -addext "subjectAltName = IP:192.168.0.8"
  2. 以下の内容で、nginx.conf ファイルを作成します。(openwebui のポートが 3000 なら、このままで問題ないが、他のポートを使っている場合、3000 を編集してください)

    events {}
    
    http {
    
       server {
           listen 80;
           server_name _;
    
           return 301 https://$host$request_uri;
       }
    
       server {
           listen 443 ssl;
    
           ssl_certificate     /etc/nginx/certs/cert.pem;
           ssl_certificate_key /etc/nginx/certs/key.pem;
    
           location / {
               proxy_pass http://host.docker.internal:3000;
    
               proxy_http_version 1.1;
    
               proxy_set_header Host $host;
               proxy_set_header X-Forwarded-Proto https;
               proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    
               proxy_set_header Upgrade $http_upgrade;
               proxy_set_header Connection "upgrade";
    
               proxy_buffering off;
               proxy_cache off;
    
               chunked_transfer_encoding off;
           }
       }
    }
  3. 証明書と nginx.conf を配置したフォルダで、下記のコマンドを実行し、Nginx を起動します。
    # リバースプロキシのコンテナを作成する
    # .conf ファイルを更新した場合、再起動してください。
    docker run -d --name nginx-https -p 80:80 -p 443:443 -v ${PWD}\nginx.conf:/etc/nginx/nginx.conf -v ${PWD}\cert.pem:/etc/nginx/certs/cert.pem -v ${PWD}\key.pem:/etc/nginx/certs/key.pem nginx
  4. これで https://hostname を使って、https 経由で Open WebUI へアクセスすることができるようになります。

※ 通常の openssl req は CSR (Certificate Signing Request: 証明書署名要求) を作成しますが、-x509 を付けると CSR を作らずに、その場で証明書を発行 します。
※ 証明書の中には公開鍵が含まれているので、公開キーとして利用される(公開鍵、サーバー名(CN)、有効期限、発行者(CA)、電子署名 が含まれる)

コメント

タイトルとURLをコピーしました