CaddyをVPSに入れようと思ったが、443が既にJitsi Meetで使われていることに気づいた。ネイティブにインストールしており、内部的にはnginxが使われているはずだが、このままだとCaddyとバッティングしてしまう。
ということで、構成を練り直さないとなぁ、としこしこやりなおすことにした。
全体の構成
元々の環境
- ConoHa VPS, Ubuntu 24.04.3, 2GB RAM
- 1.5GBくらい常に使っている頑張り屋
- Jitsi Meet バージョン失念
- docker 29.2.1
全体の構成は以下のようになる見込みだ。Geminiが10秒で描いた。
各役割についてもGeminiが10秒で書いた。
- Caddy (Reverse Proxy)
- SSL/TLS終端: Let's Encrypt等の証明書管理をすべて引き受けます。
- ルーティング: 特定のドメインへのリクエストをJitsiのWebコンテナ(通常はポート8443や8080)へ転送します。
- Jitsi Web (Nginx)
- 静的ファイルの配信: Jitsi MeetのJavaScriptクライアントをブラウザに渡します。
- 内部プロキシ: ブラウザからのAPIリクエストや外部通信(BOSH/WebSocket)を内部のProsodyへ中継します。
- Jitsi Videobridge (JVB)
- メディア通信: 映像・音声データをリアルタイムに中継します。
- 注意点: この通信はオーバーヘッドを避けるため、通常はCaddyを通さず、UDP 10000番ポートでクライアントと直接通信します。ここが疎通しないと「自分は映るが相手が映らない」という現象が起きます。
- Prosody & Jicofo
- シグナリング: 会議室の作成、ユーザーの入室管理、誰がどの映像を見るかといった「制御信号」を処理します。ユーザーが直接意識することはありません。
手順
最悪もう一回パスワード発行したらいいでしょの精神はもちつつ、できればそのまま移行する。
JitsiMeet: 今の設定ファイルの確認
設定を見返すためにコピーしておく。
/etc/prosody/prosody/conf.d/独自ドメイン.cfg.lua: 認証とかの設定。ゲストありとかそういうのauthenticationで認証方式を確認する。今回はinternal_hashedだった。- VirtualHostに
geust.ドメインがある。ここでauthenticationがanonymousになっている。
/var/lib/prosody/ドメイン/accounts/: 作成したアカウントのdatファイルがある。.がURLエンコードの%2eになっている。/etc/jitsi/meet/ドメイン-config.js: 主催者はパスワード必須でOKしたらみんな入れる、みたいな設定
Jitsi Meetの停止
とりあえず停止。
sudo systemctl stop nginx jitsi-videobridge2 jicofo prosodyポート解放の確認。
sudo ss -tulpn | grep -E ':80|:443'Caddyのインストール
インストールコマンド。
sudo apt install -y debian-keyring debian-archive-keyring apt-transport-https curl
curl -1sLf 'https://dl.cloudsmith.io/public/caddy/stable/gpg.key' | sudo gpg --dearmor -o /usr/share/keyrings/caddy-stable-archive-keyring.gpg
curl -1sLf 'https://dl.cloudsmith.io/public/caddy/stable/debian.deb.txt' | sudo tee /etc/apt/sources.list.d/caddy-stable.list
chmod o+r /usr/share/keyrings/caddy-stable-archive-keyring.gpg
chmod o+r /etc/apt/sources.list.d/caddy-stable.list
sudo apt update
sudo apt install caddyその後の動作確認は以前の記事を参照。
Caddyfileの作成
/etc/caddy/Caddyfileを以下のようにする。
ドメイン名 {
# 後のステップで立てるDocker版Jitsiへ転送
reverse_proxy localhost:8000
}設定の反映。
sudo systemctl reload caddyJitsiパッケージの削除
もう後戻りできない。
「Self-Hosting Guide - Debian/Ubuntu server | Jitsi Meet」
sudo apt purge jigasi jitsi-meet jitsi-meet-web-config jitsi-meet-prosody jitsi-meet-turnserver jitsi-meet-web jicofo jitsi-videobridge2
sudo apt autoremoveこれの削除だが、後になってnginxやapacheなどがゾンビのように蘇ってきてCaddyと443を奪い合うなどあった。僕の手順にミスがあったのか……複数回実行してきっちり削除できていることを確認したほうがいいかも。ってか最初AIにきいたんだけど普通に嘘コマンド教えられたので、まぁこのへんの作業はやっぱりちゃんとドキュメントあたらんとどうにもならんね。
この状態でポートがcaddyになっているかを確認。
sudo ss -tulpn | grep -E ':80|:443'結果
udp UNCONN 0 0 *:443 *:* users:(("caddy",pid=91842,fd=10))
tcp LISTEN 0 4096 *:80 *:* users:(("caddy",pid=91842,fd=11))
tcp LISTEN 0 4096 *:443 *:* users:(("caddy",pid=91842,fd=4)) 良さそう。
ちなみにこの時点で1.4-1.5GBくらい使っていたRAMが1.27GBくらいに。もうちょっと減るかと思ったけど……。
Docker版Jitsiのインストール
# 作業ディレクトリ(任意)に移動
cd ~
git clone https://github.com/jitsi/docker-jitsi-meet
cd docker-jitsi-meet
# 設定の雛形をコピー
cp env.example .env.envを編集しよう。編集ポイント
# ドメイン名
PUBLIC_URL=https://meet.wobias.com
# Caddyから受けるためのポート(ホスト側の80/443はCaddyが使っているため、ずらす)
HTTP_PORT=8080
HTTPS_PORT=8443
# 証明書はCaddyが管理するので、Jitsi内蔵のLet's Encryptはオフ
ENABLE_LETSENCRYPT=0
# ホスト認証を有効
ENABLE_AUTH=1
AUTH_TYPE=internal
# ゲスト(URLのみ)を許可
ENABLE_GUESTS=1
# 例: 1.2.3.4 の部分を実際のVPSのIPに書き換える
JVB_ADVERTISE_IPS=あなたのVPSのグローバルIP以下でコンポーネント間の通信パスワードが .env にいくらしい。
./gen-passwords.shうまくいきますように……。
docker compose up -dブラウザで https://ドメイン名でJitsi MeetのUIが開けたら万歳。
アカウントの追加
なんかドメインはどうあれ、内部的には meet.jitsi らしい。
docker compose exec prosody prosodyctl --config /config/prosody.cfg.lua register ユーザー名 meet.jitsi パスワード動作確認
あとはみんなで入ったりなんだりしてOKだったらOK。sudo rebootも試した方がいいと思う。
コメント