Docker版Jitsi Meetのインストール手順

はじめに

Jitsi Meetは、オープンソースのオンライン会議・配信用ツールです。
ざっくりいえば、OSS版Zoomです。

・Jitsi (Official)
https://jitsi.org/

今回は、Docker版Jitsi Meetのインストール手順を記載します。
Jitsi Meetは、https://meet.example.jp/ として公開するものとします。

2025年6月時点の、バージョン 10314 の構築手順となります。

インストール方法の選択

Jitsi Meetサーバーの構築については、おおまかに、以下の3つの選択肢があります。

  1. VPSのJitsi Meetイメージを利用
  2. 非Docker版Jitsi Meetをインストール
  3. Docker版Jitsi Meetをインストール

僕は、インストール、カスタマイズ、運用のしやすさを総合的に踏まえて、3の「Docker版Jitsi Meet をインストール」を選択し、で構築しました。

Dockerホストサーバー

DockerホストサーバーのOSはなんでもよいのですが、Jitsi MeetコンテナはDebianベースで提供されているので、Ubuntu を使用します。
Ubuntu のバージョンは、LTSの 24.04 とします。

AppArmor はデフォルト設定のままで問題ありません。

事前準備

  1. 公開ホストドメインのDNS設定
  2. ファイアウォール設定
  3. 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/

  1. Jitsi Meetのインストール
  2. Jitsi Meetの基本設定
  3. Jitsi Meetを起動
  4. ログ管理設定

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 でメールアドレスを指定します。

(注1)
https://jitsi.github.io/handbook/docs/devops-guide/devops-guide-docker#running-behind-nat-or-on-a-lan-environment

※パラメータ名は 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について書いた記事まとめ。

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