はじめに
Jitsi Meetは、オープンソースのオンライン会議・配信用ツールです。
ざっくりいえば、OSS版Zoomです。
・Jitsi (Official)
https://jitsi.org/
今回は、Docker版Jitsi Meetのインストール手順を記載します。
Jitsi Meetは、https://meet.example.jp/ として公開するものとします。
2025年6月時点の、バージョン 10314 の構築手順となります。
インストール方法の選択
Jitsi Meetサーバーの構築については、おおまかに、以下の3つの選択肢があります。
- VPSのJitsi Meetイメージを利用
- 非Docker版Jitsi Meetをインストール
- Docker版Jitsi Meetをインストール
僕は、インストール、カスタマイズ、運用のしやすさを総合的に踏まえて、3の「Docker版Jitsi Meet をインストール」を選択し、で構築しました。
Dockerホストサーバー
DockerホストサーバーのOSはなんでもよいのですが、Jitsi MeetコンテナはDebianベースで提供されているので、Ubuntu を使用します。
Ubuntu のバージョンは、LTSの 24.04 とします。
AppArmor はデフォルト設定のままで問題ありません。
事前準備
- 公開ホストドメインのDNS設定
- ファイアウォール設定
- unzipコマンドのインストール
1. 公開ホストドメインのDNS設定
(設定によっては)Dockerコンテナの初回起動時に、ZeroSSLの無料SSL証明書を取得します。
ZeroSSLは、公開ホストドメインでHTTPアクセスすることにより、SSL証明書発行の認証処理を行うため、インストール前に、公開ホストドメインのDNS Aレコードを設定しておきましょう。
meet.example.jp A <サーバーのIPアドレス>
2. ファイアウォール設定
ファイアウォールで、以下のポートを許可します。
- TCP/80(HTTP, Web UIで使用)
- TCP/443(HTTPS, Web UIで使用)
- UDP/10000(RTP, 映像、音声通信で使用)
こちらも、Dockerコンテナの初回起動時に、SSL証明書発行の認証処理で使用しますので、インストール前に設定しておきます。
3. unzipコマンドのインストール
Jitsi Meetのインストールの際にunzipを使用しますが、Ubuntuのデフォルトではインストールされていないようなので、インストールします。
# apt install unzip
Dockerのインストール
(参考)
・Ubuntu24.04にDockerをインストールする
https://higmasan.com/docker/install/installing-docker-on-ubuntu24-04/
・Ubuntu24.04へDocker Engine 一式をインストール (Compose含む)
https://qiita.com/kujiraza/items/00b9066c49ddfc718fd6
必要なパッケージをインストールします。
# apt update # apt install ca-certificates curl
DockerリポジトリのGPGキーを取得します。
# curl -fsSL https://download.docker.com/linux/ubuntu/gpg -o /etc/apt/keyring/docker.asc
Dockerリポジトリをaptソースに追加します。
# echo \ "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.asc] https://download.docker.com/linux/ubuntu \ $(. /etc/os-release && echo "$VERSION_CODENAME") stable" | \ sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
Dockerをインストールします。
# apt update # apt install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin Start-Date: 2025-06-09 11:03:01 Commandline: /usr/bin/apt-get -y -o Dpkg::Options::=--force-confdef -o Dpkg::Options::=--force-confold install docker-ce=5:28.2.2-1~ubuntu.24.04~noble docker-ce-cli=5:28.2.2-1~ubuntu.24.04~noble containerd.io=1.7.27-1 docker-buildx-plugin=0.24.0-1~ubuntu.24.04~noble docker-compose-plugin=2.36.2-1~ubuntu.24.04~noble Requested-By: ubuntu (1000) Install: containerd.io:amd64 (1.7.27-1), docker-compose-plugin:amd64 (2.36.2-1~ubuntu.24.04~noble), libltdl7:amd64 (2.4.7-7build1, automatic), docker-ce-cli:amd64 (5:28.2.2-1~ubuntu.24.04~noble), pigz:amd64 (2.8-1, automatic), libslirp0:amd64 (4.7.0-1ubuntu3, automatic), docker-buildx-plugin:amd64 (0.24.0-1~ubuntu.24.04~noble), docker-ce:amd64 (5:28.2.2-1~ubuntu.24.04~noble), docker-ce-rootless-extras:amd64 (5:28.2.2-1~ubuntu.24.04~noble, automatic), slirp4netns:amd64 (1.2.1-1build2, automatic) End-Date: 2025-06-09 11:03:07
Dockerのバージョンを確認します。
# docker --version Docker version 28.2.2, build e6534b4
hello-worldコンテナの起動確認を行います。
# docker run hello-world
Unable to find image 'hello-world:latest' locally
latest: Pulling from library/hello-world
e6590344b1a5: Pull complete
Digest: sha256:0b6a027b5cf322f09f6706c754e086a232ec1ddba835c8a15c6cb74ef0d43c29
Status: Downloaded newer image for hello-world:latest
Hello from Docker!
This message shows that your installation appears to be working correctly.
To generate this message, Docker took the following steps:
1. The Docker client contacted the Docker daemon.
2. The Docker daemon pulled the "hello-world" image from the Docker Hub.
(amd64)
3. The Docker daemon created a new container from that image which runs the
executable that produces the output you are currently reading.
4. The Docker daemon streamed that output to the Docker client, which sent it
to your terminal.
To try something more ambitious, you can run an Ubuntu container with:
$ docker run -it ubuntu bash
Share images, automate workflows, and more with a free Docker ID:
https://hub.docker.com/
For more examples and ideas, visit:
https://docs.docker.com/get-started/
↑コンテナが起動し、「Hello from Docker!」と表示されたので、OKです。
docker composeも一緒にインストールされたのでバージョンを確認します。
# docker compose version Docker Compose version v2.36.2
Jitsi Meetコンテナの実行ユーザー設定
Dockerコンテナの実行ユーザーはrootでも問題ないようですが、セキュリティ上は一般ユーザーで起動するほうが好ましいと思います。
※Jitsi Meetのコントリビューターの方も、「rootユーザーでの実行はおすすめしない」と書いていました。
(参考)
・Why doesn’t jibri work? – github jitsi /docker-jitsi-meet issues
https://github.com/jitsi/docker-jitsi-meet/issues/1233
ここでは、実行ユーザー、グループを jitsi とすることにします。
jitsiグループ、ユーザーを作成します。
# groupadd -g 1001 jitsi
# useradd -u 1001 -g jitsi -d /home/jitsi -m \
-s /bin/bash -c 'Jitsi User' jitsi
jitsiユーザーがDockerを実行できるよう、dockerグループに追加します。
(dockerグループは、Dockerのインストール時に自動作成されています。)
# gpasswd -a jitsi docker
Jitsi Meetコンテナのインストール
(参考)
・Self-Hosting Guide – Jitsi Meet Handbook
https://jitsi.github.io/handbook/docs/devops-guide/devops-guide-docker/
- Jitsi Meetのインストール
- Jitsi Meetの基本設定
- Jitsi Meetを起動
- ログ管理設定
1. Jitsi Meetのインストール
先補作成したjitsiユーザーで、jitsiユーザーのディレクトリ配下にDocker版Jitsi Meetをインストールします。
以下、jitsiユーザーのシェルでコマンドを実行します。
最新バージョンをダウンロードします。
$ wget $(curl -s https://api.github.com/repos/jitsi/docker-jitsi-meet/release/latest | grep 'zip' | cut -d\" -f4) $ ls -l -rw-rw-r-- 1 jitsi jitsi 396478 6月 9 11:30 stable-10314
unzipコマンドで解凍します。
$ unzip stable-10314 $ ls -l drwxrwxr-x 15 jitsi jitsi 4096 6月 6 02:05 jitsi-docker-jitsi-meet-fe160b6 -rw-rw-r-- 1 jitsi jitsi 396478 6月 9 11:30 stable-10314
(お好みで)ディレクトリ名が長いのでrenameします。
$ mv jitsi-docker-jitsi-meet-fe160b6 jitsi-meet $ ls -l drwxrwxr-x 15 jitsi jitsi 4096 6月 6 02:05 jitsi-meet -rw-rw-r-- 1 jitsi jitsi 396478 6月 9 11:30 stable-10314
ダウンロードしたzipファイルは不要なので削除します。
$ rm stable-10314
2. Jitsi Meetの基本設定
基本設定のenvファイルをサンプルファイルからコピーします。
$ cd jitsi-meet/ $ cp env.example .env
初期値のパスワードを変更するスクリプトを実行します。
$ ./gen-passwords.sh
Config に相当する .env ファイルを編集します。
ここでは、ひとまず、ほぼデフォルト設定で起動するよう設定します。
- HTTP, HTTPS は公開ポートを設定します。
- JVB_ADVERTISE_IPS は、ユーザーがアクセスするパブリックIPアドレスを設定します。(注1)
- TZ でタイムゾーンを指定します。
- PUBLIC_URL で公開URLを指定します。
- 無料のSSL証明書を取得する場合は、
- ENABLE_LETSENCRYPT=1 とし、
- LETSENCRYPT_DOMAIN で公開ホストドメインを、
- LETSENCRYPT_EMAIL でメールアドレスを指定します。
※パラメータ名は LETSENCRYPT_xxx となっていますが、デフォルトでは、Let’s Encryptではなく、ZeroSSLのSSL証明書を取得します。
以下、変更箇所のみ記載します。
$ vim .env
# Exposed HTTP port (will redirect to HTTPS port)
#HTTP_PORT=8000
HTTP_PORT=80
# Exposed HTTPS port
#HTTPS_PORT=8443
HTTPS_PORT=443
# System time zone
#TZ=UTC
TZ=Asia/Tokyo
#PUBLIC_URL=https://meet.example.com:${HTTPS_PORT}
PUBLIC_URL=https://meet.example.jp
#JVB_ADVERTISE_IPS=192.168.1.1,1.2.3.4
JVB_ADVERTISE_IPS=<サーバーのパブリックIPアドレス>
ENABLE_LETSENCRYPT=1
#LETSENCRYPT_DOMAIN=meet.example.com
LETSENCRYPT_DOMAIN=meet.example.jp
#LETSENCRYPT_EMAIL=alice@atlanta.net
LETSENCRYPT_EMAIL=<メールアドレス>
CONFIG ディレクトリを作成します。
これらのディレクトリは、Dockerコンテナにマウントされます(バインドマウント)。
$ mkdir -p ~/.jitsi-meet-cfg/{web,transcripts,prosody/config,prosody/prosody-plugins-custom,jicofo,jvb,jigasi,jibri}
これにより、コンテナアプリケーションが使用するConfig等のファイルを、ホストサーバー側で直接参照、編集できるようになります。
※バインドマウントのパス設定は、docker-compose.yml に記載されています。
3. Jitsi Meetを起動
jitsiユーザーで、インストールしたJitsi Meetコンテナを起動します。
$ cd ~/jitsi-meet/ $ docker compose -f docker-compose.yml up -d WARN[0000] /home/jitsi/jitsi-meet/docker-compose.yml: the attribute `version` is obsolete, it will be ignored, please remove it to avoid potential confusion WARN[0000] /home/jitsi/jitsi-meet/jibri.yml: the attribute `version` is obsolete, it will be ignored, please remove it to avoid potential confusion [+] Running 23/23 ? jvb Pulled 29.5s ? 0504f5f2534a Pull complete 24.8s ? 7ceaef77d955 Pull complete 26.6s ? ae135ff9a39c Pull complete 26.6s ? prosody Pulled 8.7s ? 57b6fe4c4c7a Pull complete 5.7s ? 8631c276672f Pull complete 5.8s ? 350b57981f72 Pull complete 5.8s ? f47573064bb2 Pull complete 5.8s ? jicofo Pulled 28.6s ? 635c61b4b569 Pull complete 25.6s ? d9b7a92b38e0 Pull complete 25.6s ? jibri Pulled 47.2s ? c1fa832196ea Pull complete 24.7s ? cfaa25aeaf79 Pull complete 44.2s ? web Pulled 8.2s ? 6e909acdb790 Pull complete 1.8s ? 74b7363482e5 Pull complete 1.8s ? 071ea8b9acd2 Pull complete 2.1s ? 4f4fb700ef54 Pull complete 2.1s ? 92193383ef84 Pull complete 2.1s ? 887fa8f3f1e3 Pull complete 2.1s ? 4479d6271813 Pull complete 5.3s [+] Running 6/6 ? Network jitsi-meet_meet.jitsi Crea... 0.0s ? Container jitsi-meet-prosody-1 Sta... 0.4s ? Container jitsi-meet-jicofo-1 Star... 0.4s ? Container jitsi-meet-jvb-1 Started 0.4s ? Container jitsi-meet-jibri-1 Start... 0.5s ? Container jitsi-meet-web-1 Started 0.5s
docker psコマンドで、起動したコンテナを確認します。
$ docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES dac22639aff2 jitsi/web:stable-10314 "/init" 9 minutes ago Up 22 seconds 0.0.0.0:80->80/tcp, [::]:80->80/tcp, 0.0.0.0:443->443/tcp, [::]:443->443/tcp jitsi-meet-web-1 55f64e1bed6d jitsi/jvb:stable-10314 "/init" 9 minutes ago Up 23 seconds 127.0.0.1:8080->8080/tcp, 0.0.0.0:10000->10000/udp, [::]:10000->10000/udp jitsi-meet-jvb-1 7315c7990cbc jitsi/jicofo:stable-10314 "/init" 9 minutes ago Up 23 seconds 127.0.0.1:8888->8888/tcp jitsi-meet-jicofo-1 716edc492acb jitsi/prosody:stable-10314 "/init" 9 minutes ago Up 23 seconds 5222/tcp, 5269/tcp, 5280/tcp, 5347/tcp jitsi-meet-prosody-1
↑web, jvb, jicofo, prosody の4つのコンテナが起動していることがわかります。
各コンテナの役割は、インストール時に参考にした「Self-Hosting Guide」の「Architecture」あたりに説明がありますので、目を通しておくとよいでしょう。
(参考)
・Self-Hosting Guide – Jitsi Meet Handbook > Architecture
https://jitsi.github.io/handbook/docs/devops-guide/devops-guide-docker/#architecture
役割の異なる複数のコンポーネント、アプリケーションで構成されているため、Dockerとの相性がよいと思われます。
また、RDBを使用しないところが、面白いですね。
4. ログ管理設定
※この項は、2025/10/30 に追記しました。
docker-compose.yml を確認すると、ログまわりの設定はありません。
Dockerコンテナのログについては、デフォルトでは json-file ログドライバーを使用し、ローテートはしないようです。
(参考)
・ロギング ドライバの設定 – Docker-docs-ja
https://docs.docker.jp/config/containers/logging/configure.html
上記ドキュメントに記載があるとおり、そのままではログが肥大化してしまうため、Dockerが推奨するログドライバー local に変更し、ローテート設定を追加するとよいでしょう。
以下は、docker-compose.yml で、ログを10MBでローテート、5世代保存、圧縮(デフォルト)とする設定です
$ vim docker-compose.yml
services web, prosody, jicofo, jvb について、labels: の下に以下の logging 設定を追記します。
...
services:
# Frontend
web:
...
logging:
driver: local
options:
max-size: 10m
max-file: 5
...
# XMPP server
prosody:
...
logging:
driver: local
options:
max-size: 10m
max-file: 5
...
# Focus component
jicofo:
...
logging:
driver: local
options:
max-size: 10m
max-file: 5
...
# Video bridge
jvb:
...
logging:
driver: local
options:
max-size: 10m
max-file: 5
...
Dockerコンテナに反映します。
以下で、既存のコンテナを停止、再作成して起動します。
$ docker compose up -d
ログは、docker compose logs <コンテナサービス名> で確認できます。
$ docker compose logs web $ docker compose logs jicofo
Jitsi Meetの動作確認
ブラウザからアクセスしてみます。
https://meet.example.jp/
トップページが表示されればOKです。
ブラウザでSSL証明書の情報を確認すると、ZeroSSLで発行されたことがわかります。
さっそく会議室を作成して、オンライン会議を行い、録画機能などを試してみましょう。
※「録画を開始」メニューは、Chrome系(Chrome, Edgeなど)のブラウザでのみ、表示されるようです。
トップページが表示されなければ、何らかの不具合が生じています。
DNSやファイアウォールが正しく設定されているか、確認しましょう。
ログを確認すると、何かヒントがあるかもしれません。
webコンテナのログを確認してみます。
$ docker compose logs web
.env などのConfigを編集したときは、Dockerの停止、起動が必要です。
削除(down)する必要はなく、停止(stop)で問題ありません。
$ docker compose stop $ docker compose -f docker-compose.yml up -d $ docker ps
Docker版Jitsi Meetの基本インストール手順としては、ここまでとなります。
Jitsi Meetについて書いた記事まとめ。

