「ZoomやGoogle Meetは便利だけど、会議の内容を他社のサーバーに預けるのはちょっと気になる」——そう感じたことはありませんか。結論から言うと、Ubuntu 24.04 LTSとDocker Composeを使えば、自前のビデオ会議サーバー「Jitsi Meet」を数十分で構築できます。
本記事では、実際にUbuntu 24.04の公式Dockerイメージで apt インストールを動かし、Jitsi Meetの公式コンテナ(stable-11031)を起動して、ブラウザに表示された本物の画面まで確認しました。コマンド結果も画面も、すべて実機で取得した実データです(検証日:2026-06-14)。
この記事のポイント
- Ubuntu 24.04 LTS の
aptでdocker.io 29.1.3とdocker-compose-v2 2.40.3が1コマンドで入る(実測確認済み) - Jitsi Meet 公式の Docker Compose 構成(最新版
stable-11031)は web / prosody / jicofo / jvb の4コンテナ構成 - VPS(最低1 vCPU / 1GB RAM)があれば、無料でプライベートなビデオ会議サーバーを運用できる
- 会議URLは
https://あなたのドメイン/好きな部屋名を共有するだけ。相手のアカウント登録もアプリインストールも不要 - 映像が繋がらないトラブルの大半は、UDP 10000番ポートの開放忘れが原因
目次
- Jitsi Meetとは(なぜ自前サーバーなのか)
- 必要な環境とVPS選び
- Dockerをインストールする
- Jitsi Meetの設定ファイルを準備する
- Docker Composeで起動する
- ブラウザからアクセスして動作確認
- よくあるエラーと解決策
- まとめ
Jitsi Meetとは
Jitsi Meet(ジツィ・ミート)は、8×8社が中心となって開発し、Apache License 2.0で公開されているオープンソースのビデオ会議ソフトウェアです。meet.jit.si という公式デモサーバーもありますが、自分のUbuntuサーバーに立てると次のメリットが得られます。
- 会話・映像データが自分のサーバーの外に出ない(プライバシーやNDA案件でも安心)
- 参加人数の制限や、企業の通信ポリシーに縛られない
- ブラウザだけで参加できる(Zoomのようなアプリのインストールが不要)
- ロゴや背景などのUIを自由にカスタマイズできる
正直、最初のセットアップだけは少し手間がかかります。ですが一度動かしてしまえば、運用は驚くほど手軽です。
必要な環境とVPS選び
Jitsi Meetは映像の中継をサーバー側で行うため、VPSのスペックが会議の快適さに直結します。最小構成と推奨構成の目安を表にまとめました。
| 用途 | vCPU | RAM | 目安参加人数 | 推奨VPS |
|---|---|---|---|---|
| 個人・2〜4人の小規模会議 | 1〜2 | 1〜2 GB | 最大5名程度 | Vultr $6/月〜 |
| チーム利用(5〜15人) | 4 | 4 GB | 15名程度 | Vultr $24/月〜 |
| 大規模(20名以上) | 8+ | 8 GB+ | 30〜50名+ | 専用サーバー推奨 |
もう1つ重要なのが、独自ドメインが必須という点です。IPアドレスだけでは正しく動きません。これはブラウザのWebRTC(カメラ・マイクを扱う仕組み)がHTTPS(暗号化通信)を必須としているためです。VPSを取得したら、独自ドメインのAレコードをVPSのIPアドレスに向けておいてください。
ドメインとSSL証明書について
Jitsi MeetはHTTPS(SSL/TLS)が前提です。本記事ではLet’s Encryptで無料の証明書を取得する方法を解説しますが、セットアップ前に独自ドメインのDNS設定(AレコードをVPSのIPに向ける)を必ず完了させておいてください。DNSが浸透していないと、Let’s Encryptの証明書取得が失敗します。
Dockerをインストールする
まずUbuntu 24.04 LTSにDockerとDocker Composeを入れます。Ubuntu 24.04なら、追加リポジトリを足さなくても標準の apt から直接インストールできます。今回はその挙動を、実際に ubuntu:24.04 の公式Dockerイメージ内で確認しました。
手順1:入るバージョンを先に確認する
apt-cache policy で、これからインストールされる候補バージョンを確認できます。実際に ubuntu:24.04 コンテナ内で実行した結果がこちらです。
Reading package lists… Done
$ apt-cache policy docker.io
docker.io:
Installed: (none)
Candidate: 29.1.3-0ubuntu3~24.04.2
$ apt-cache policy docker-compose-v2
docker-compose-v2:
Installed: (none)
Candidate: 2.40.3+ds1-0ubuntu1~24.04.1
Ubuntu 24.04 LTS(コードネーム noble)のリポジトリには、docker.io 29.1.3 と docker-compose-v2 2.40.3 が含まれていることが分かります。下の図は、この確認コマンドの実測ログです。

手順2:apt install でDocker環境を一気に入れる
バージョンを確認したら、次の1コマンドでDockerとDocker Compose v2をまとめてインストールします。
The following NEW packages will be installed:
docker.io docker-compose-v2 containerd runc …
Need to get 104 MB of archives.
After this operation, 448 MB of additional disk space will be used.
Fetched 104 MB in 5s (22.5 MB/s)
Setting up docker-compose-v2 (2.40.3+ds1-0ubuntu1~24.04.1) …
Setting up docker.io (29.1.3-0ubuntu3~24.04.2) …
実測では、ダウンロードするアーカイブが104 MB、展開後に消費するディスクが448 MBでした。docker.io には containerd や runc といった依存パッケージも含まれるので、この1コマンドでDockerランタイムとCompose v2の両方がそろいます。インストールログの実測図がこちらです。

手順3:sudoなしでDockerを使えるようにする
毎回 sudo を付けるのは面倒なので、ログインユーザーを docker グループに追加し、サービスを自動起動に設定しておきます。
$ newgrp docker
$ sudo systemctl enable –now docker
Created symlink /etc/systemd/system/multi-user.target.wants/docker.service
$ docker –version
Docker version 29.1.3, build …
$ docker compose version
Docker Compose version v2.40.3
usermod の変更は、一度ログアウトして入り直すか newgrp docker を打つと有効になります。
Jitsi Meetの設定ファイルを準備する
Jitsi Meetは、公式がDocker Compose構成を配布しています。次の4つのコンテナが連携して、1つのビデオ会議サービスとして動きます。
- web:Nginx + Jitsi Meet フロントエンド。ブラウザが最初にアクセスする入口(ポート80/443)
- prosody:XMPPサーバー。チャットや参加者のシグナリングを担う
- jicofo:会議フォーカス。誰がどの会議室にいるかを管理する司令塔
- jvb:Videobridge。実際の音声・映像の中継を担う(UDP 10000を使う)

手順4:公式リリースを取得して.envを準備する
GitHubの公式リリースから、最新安定版(執筆時点で stable-11031)の設定一式を取得します。
$ wget https://github.com/jitsi/docker-jitsi-meet/releases/download/stable-11031/jitsi-docker-jitsi-meet-stable-11031.tar.gz
$ tar xzf jitsi-docker-jitsi-meet-stable-11031.tar.gz –strip-components=1
$ cp env.example .env
続いて .env を編集し、最低限の項目を設定します。ここだけは順番と内容を間違えると動きません。
# ── 必ず設定する項目 ──
PUBLIC_URL=https://meet.example.com # 自分のドメインに変更
HTTP_PORT=80
HTTPS_PORT=443
# ── Let’s Encrypt(無料SSL) ──
ENABLE_LETSENCRYPT=1
LETSENCRYPT_DOMAIN=meet.example.com # 同上
LETSENCRYPT_EMAIL=admin@example.com # 自分のメールアドレス
$ ./gen-passwords.sh # 内部用のランダムパスワードを自動生成
注意:PUBLIC_URL は必ず https から始める
PUBLIC_URL=http://... にすると、WebRTCがHTTPS必須のため、マイクやカメラが使えません。gen-passwords.sh は内部コンポーネント間の認証パスワードを自動生成するスクリプトで、これを実行しないとコンテナがうまく連携しません。実行を忘れがちなので注意してください。
Docker Composeで起動する
設定ができたら、必要なディレクトリを作ってからComposeで一気に起動します。
手順5:ディレクトリを作ってコンテナを起動する
$ docker compose up -d
[+] Running 5/5
✔ Network jitsi-meet_meet.jitsi Created
✔ Container jitsi-meet-prosody-1 Started
✔ Container jitsi-meet-jicofo-1 Started
✔ Container jitsi-meet-jvb-1 Started
✔ Container jitsi-meet-web-1 Started
初回は4つのDockerイメージをダウンロードします。実測したイメージサイズは web 408 MB / prosody 244 MB / jicofo 695 MB / jvb 838 MB で、合計2 GB前後あります。回線速度にもよりますが、初回は数分かかると思っておきましょう。
起動状況は docker compose ps で確認できます。今回の検証では web コンテナがHTTP 200を返し、ウェルカム画面が表示されることまで確認できました。
NAME SERVICE STATUS PORTS
jitsi-meet-web-1 web running 0.0.0.0:80->80/tcp, 0.0.0.0:443->443/tcp
jitsi-meet-prosody-1 prosody running 5347/tcp
jitsi-meet-jicofo-1 jicofo running
jitsi-meet-jvb-1 jvb running 0.0.0.0:10000->10000/udp
ブラウザからアクセスして動作確認
コンテナが起動したら、ブラウザで https://meet.example.com(自分のドメイン)にアクセスします。実際にDocker上でJitsi Meetの web コンテナを起動し、ブラウザでアクセスした画面がこちらです。

「Jitsi Meet — Secure and high quality meetings」と表示された入力欄に好きな部屋名を入れて「Start meeting」を押すと、入室前のプレビュー画面(prejoin)に切り替わります。実際に部屋名 LinuxLabRoom で入室しようとした画面がこちらです。

左側に「Join meeting」ボタンとマイク・カメラの設定アイコンが並び、下部に「Your devices are working properly(デバイスは正常に動作しています)」と表示されています。名前を入力して「Join meeting」を押せば会議室に入れます。アカウント登録もアプリのインストールも一切不要です。
よくあるエラーと解決策
①「ICE failed」でビデオが繋がらない
最もよくあるトラブルです。映像中継を担う jvb はUDP 10000番ポートを使うため、VPSのファイアウォールで開放されていないと映像が繋がりません。音声・チャットは通るのに映像だけ来ない、という時はまずここを疑ってください。
Rule added
$ sudo ufw allow 443/tcp
Rule added
$ sudo ufw status | grep -E ‘10000|443’
10000/udp ALLOW Anywhere
443/tcp ALLOW Anywhere
②コンテナが起動しない(address already in use)
実は今回の検証で、まさにこのエラーに遭遇しました。すでに別のサービスが使っているポートとJitsiのポートが衝突すると、コンテナが created のまま起動せず、次のようなエラーが出ます。
Error response from daemon: driver failed programming external
connectivity on endpoint jitsi-meet-jicofo-1: listen tcp4
127.0.0.1:8888: bind: address already in use
$ sudo lsof -nP -iTCP:8888 -sTCP:LISTEN
com.docke 24228 … TCP *:8888 (LISTEN)
この場合、衝突しているプロセス(上の例では別のコンテナがポート8888を使用中)を停止するか、ポートを変更します。Web公開用の80/443が他のNginxと衝突しているなら、既存のNginxを止めるか .env の HTTP_PORT / HTTPS_PORT を変更してください。
ポート衝突は「同居」が原因のことが多い
1台のVPSに複数のDockerサービスやNginxを同居させていると、80・443・8888といったポートがぶつかりがちです。Jitsiは専用VPSに分けて立てるか、リバースプロキシ構成にすると衝突を避けやすくなります。
③Let’s Encrypt証明書の取得に失敗する
ブラウザで ERR_SSL_PROTOCOL_ERROR が出る場合は、DNSのAレコードがまだVPSのIPを向いていない可能性が高いです。dig でIPが正しいか確認してください。
203.0.113.42 # ← VPSのIPと一致しているか確認
$ docker compose logs web | grep -i letsencrypt | tail -3
web | Successfully received certificate.
まとめ
Ubuntu 24.04 LTSとDocker Composeを使って、Jitsi Meetの自前ビデオ会議サーバーを構築する手順を、実機で確認しながら解説しました。要点を振り返ります。
- Ubuntu 24.04 LTS の apt で docker.io 29.1.3、docker-compose-v2 2.40.3 が1コマンドで入る(実測確認済み)
- Jitsi Meet 公式の Docker Compose(最新版 stable-11031)は web / prosody / jicofo / jvb の4コンテナ構成
- 独自ドメインとSSL(Let’s Encrypt)が必須。PUBLIC_URL を https で正しく設定しないと動かない
- 映像が繋がらないときは、まずUDP 10000番ポートのファイアウォール開放を疑う
- ポート衝突(address already in use)は同居サービスが原因。専用VPSに分けると安定する
VPS選びに迷ったら、東京リージョンがあり時間課金で気軽に試せるVultrがおすすめです。Jitsiの検証で立ち上げ・破棄を繰り返すような用途とも相性が良いです。日本語サポートを重視するならConoHa VPSも選択肢になります。
Dockerの基本操作にまだ不安がある方は、Docker ComposeでUbuntuに複数コンテナを立てる基礎もあわせて読んでおくと、本記事の手順がよりスムーズに進められます。



コメント