はじめに
ここまで、Docker版Jitsi Meetのインストール手順や、運用しやすくする工夫などを記載してきました。
今回は、Dockerを使用しない、Jitsi Meetのインストール手順を記載します。
Jitsi MeetのURLは https://meet.exmaple.jp/
OSは Ubuntu 24.04 とします。
インストール手順は、Jitsi Meet公式のSelf-Hosting Guideを参考にします。
・Self-Hosting Guide – Debian/Ubuntu server / Jitsi Meet Handbook
https://jitsi.github.io/handbook/docs/devops-guide/devops-guide-quickstart/
※2025年8月時点の手順です。
事前準備
- 公開ホストドメインのDNS設定
- ファイアウォール設定
- 必要なパッケージのインストール
- 必要なリポジトリの追加
- サーバーホスト名の設定
1. 公開ホストドメインのDNS設定
(設定によっては)Jitsi Meetの初回起動時に、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, 映像、音声通信で使用)
- UDP/3478(STUN/TURN, P2P通信で使用)
- TCP/5349(TURN over TLS, UDPが使用できない場合のリレーで使用)
こちらも、Jitsi Meetの初回起動時に、SSL証明書発行の認証処理で使用しますので、インストール前に設定しておきます。
3. 必要なパッケージのインストール
gnupg2, nginx-full, sudo, curl パッケージと、apt-transport-https パッケージをインストールします。
# apt update # apt install gnupg2 nginx-full sudo curl # apt install apt-transport-https
4. 必要なリポジトリの追加
universe, Prosody, Jitsi リポジトリを追加します。
まず、universe リポジトリを追加。
# apt-add-repository universe
Prosody リポジトリを追加し、lua5.2 パッケージを追加。
# curl -sL https://prosody.im/files/prosody-debian-packages.key \
-o /usr/share/keyrings/prosody-debian-packages.key
# echo "deb [signed-by=/usr/share/keyrings/prosody-debian-packages.key] http://packages.prosody.im/debian $(lsb_release -sc) main" | tee /etc/apt/sources.list.d/prosody-debian-packages.list
# apt install lua5.2
続いて、Jitsi リポジトリを追加し、パッケージソースをアップデート。
# curl -sL https://download.jitsi.org/jitsi-key.gpg.key |\
sh -c 'gpg --dearmor > /usr/share/keyrings/jitsi-keyring.gpg'
# echo "deb [signed-by=/usr/share/keyrings/jitsi-keyring.gpg] https://download.jitsi.org stable/" | tee /etc/apt/sources.list.d/jitsi-stable.list
# apt update
5. サーバーホスト名の設定
サーバーホスト名を公開ホストドメインと同じとします。
(Jitsi Meetアプリケーションで、サーバーホスト名を参照する箇所があるから?)
# hostnamectl set-hostname meet.example.jp
# vim /etc/hosts
127.0.0.1 localhost <パブリックIPアドレス> meet.example.jp
pingコマンドで、サーバーホスト名で自サーバーに通信できることを確認します。
$ ping "$(hostname)" PING meet.example.jp (<パブリックIPアドレス>) 56(84) bytes of data. 64 bytes from <パブリックIPアドレス>: icmp_seq=1 ttl=52 time=1.99 ms 64 bytes from <パブリックIPアドレス>: icmp_seq=2 ttl=52 time=1.80 ms 64 bytes from <パブリックIPアドレス>: icmp_seq=3 ttl=52 time=1.88 ms ...
Jitsi Meetのインストール
- Jitsi Meetパッケージのインストール
- インストール後の確認
- 動作確認
1. Jitsi Meetパッケージのインストール
# apt install jitsi-meet
たくさんのパッケージをインストールするため、少し時間がかかります。
インストールの途中で、いくつか尋ねられるので、入力します。
・公開ホストドメイン名
x x x The domain of the current installation (e.g. meet.jitsi.com): x x x x ______________________________________________________________ x x x x <了解> x x x
↑今回の公開ホストドメイン名 meet.example.jp を入力します。
・SSL証明書発行のLet’s Encryptに登録するメールアドレス
lqqqqqqqqqqqqqqqu jitsi-meet-web-config を設 x To successfully issue Let's Encrypt certificates: x x x x You need a working DNS record pointing to this machine(for hostname x x meet.example.jp)" x x x x You need to agree to the ACME server's Subscriber Agreement x x (https://letsencrypt.org/documents/LE-SA-v1.1.1-August-1-2016.pdf) by x x providing an email address for important account notifications. x x x x We will use the email for creating your JaaS (Jitsi as a Service) x x account if that option was selected. x x x x Enter your email: x x x x _______________________________________________________________________
↑メールアドレスを入力します。
※デフォルトでは、Docker版ではZeroSSLの証明書でしたが、こちらはLet’s Encryptの証明書となります。
※Let’s Encryptで、登録したメールアドレスへの有効期限通知は、2025年6月に廃止されました。
・ダイヤルイン機能が必要かどうか
lqqqqqqqqqqqqqqqu jitsi-meet-web-config を設 x x x You can easily add dial-in support to your meetings. To allow this we x x would need your permission to create a free JaaS (Jitsi as a Service) x x account for you. x x x x Add telephony to your Jitsi meetings? x x x x <はい> <いいえ> x x x mqqqqq
↑不要であれば「いいえ」を選択します。
以上で、Jitsi Meetのインストールは完了です。
2. インストール後の確認
Jitsi Meetパッケージのインストールにより、自動設定された内容を確認します。
Nginx の VirtualHost Config が自動的に設定されていました。
必要に応じて修正するとよいでしょう。
# view /etc/nginx/sites-available/meet.example.jp.conf
...
server {
listen 443 ssl http2;
listen [::]:443 ssl http2;
server_name meet.example.jp;
# Mozilla Guideline v5.4, nginx 1.17.7, OpenSSL 1.1.1d, intermediate configuration
ssl_protocols TLSv1.2 TLSv1.3;
ssl_ciphers ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384;
ssl_prefer_server_ciphers off;
ssl_session_timeout 1d;
ssl_session_cache shared:SSL:10m; # about 40000 sessions
ssl_session_tickets off;
add_header Strict-Transport-Security "max-age=63072000" always;
set $prefix "";
set $custom_index "";
set $config_js_location /etc/jitsi/meet/meet.example.jp-config.js;
ssl_certificate /etc/jitsi/meet/meet.example.jp.crt;
ssl_certificate_key /etc/jitsi/meet/meet.example.jp.key;
root /usr/share/jitsi-meet;
...
SSL証明書は、/etc/jitsi/meet 以下に保存されています。
# ls -l /etc/jitsi/meet/ -rw-r--r-- 1 root root 81855 8月 12 12:03 meet.example.jp-config.js -rw-r--r-- 1 root root 2885 8月 12 12:05 meet.example.jp.crt -rw------- 1 root root 227 8月 12 12:05 meet.example.jp.key
cronエントリーに、SSL証明書の自動更新処理が追加されています。
# crontab -l 1 5 * * * "/opt/acmesh/.acme.sh"/acme.sh --cron --home "/opt/acmesh/.acme.sh" > /dev/null
必要に応じて、認証局のSSL証明書に置き換えたり、Let’s Encryptでもcertbotコマンドを使用するなど、お好みで変更するとよいでしょう。
Systemdのサービスとして、jitsi-videobridge2, jicofo, prosody, coturn が追加されています。
# systemctl status jitsi-videobridge2 jicofo prosody coturn
● jitsi-videobridge2.service - Jitsi Videobridge
Loaded: loaded (/usr/lib/systemd/system/jitsi-videobridge2.service; enable>
Active: active (running) since Tue 2025-08-12 12:03:31 JST; 4h 59min ago
Process: 24660 ExecStartPost=/bin/bash -c echo $MAINPID > /var/run/jitsi-vi>
Main PID: 24659 (java)
Tasks: 44 (limit: 65000)
Memory: 370.1M (peak: 377.5M swap: 14.0M swap peak: 18.3M)
CPU: 8min 15.843s
CGroup: /system.slice/jitsi-videobridge2.service
mq24659 java -Xmx3072m -XX:+UseG1GC -XX:+HeapDumpOnOutOfMemoryErro>
8月 12 12:03:31 meet.example.jp systemd[1]: Starting jitsi-videobridg>
8月 12 12:03:31 meet.example.jp (bash)[24659]: jitsi-videobridge2.ser>
8月 12 12:03:31 meet.example.jp systemd[1]: Started jitsi-videobridge
● jicofo.service - LSB: Jitsi conference Focus
Loaded: loaded (/etc/init.d/jicofo; generated)
Active: active (running) since Tue 2025-08-12 12:03:31 JST; 4h 59min ago
Docs: man:systemd-sysv-generator(8)
Process: 24690 ExecStart=/etc/init.d/jicofo start (code=exited, status=0/SU>
Tasks: 22 (limit: 1121)
Memory: 59.6M (peak: 146.5M swap: 66.1M swap peak: 66.2M)
CPU: 17.724s
CGroup: /system.slice/jicofo.service
mq24697 java -Xmx3072m -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDum>
8月 12 12:03:31 meet.example.jp systemd[1]: Starting jicofo.service ->
8月 12 12:03:31 meet.example.jp jicofo[24690]: Starting jicofo: jicof>
8月 12 12:03:31 meet.example.jp systemd[1]: Started jicofo.service -
● prosody.service - Prosody XMPP Server
Loaded: loaded (/usr/lib/systemd/system/prosody.service; enabled; preset: >
Active: active (running) since Tue 2025-08-12 12:03:30 JST; 5h 0min ago
Docs: https://prosody.im/doc
Main PID: 24650 (lua)
Tasks: 1 (limit: 1121)
Memory: 45.4M (peak: 48.7M swap: 1.1M swap peak: 1.1M)
CPU: 9min 57.783s
CGroup: /system.slice/prosody.service
mq24650 lua /usr/bin/prosody -F
8月 12 12:03:30 meet.example.jp systemd[1]: Starting prosody.service >
8月 12 12:03:30 meet.example.jp systemd[1]: Started prosody.service -
● coturn.service - coTURN STUN/TURN Server
Loaded: loaded (/usr/lib/systemd/system/coturn.service; enabled; preset: e>
Active: active (running) since Tue 2025-08-12 12:03:31 JST; 4h 59min ago
Docs: man:coturn(1)
man:turnadmin(1)
man:turnserver(1)
Main PID: 526 (turnserver)
Tasks: 25 (limit: 1121)
Memory: 9.4M (peak: 13.3M swap: 244.0K swap peak: 244.0K)
CPU: 155ms
CGroup: /system.slice/coturn.service
mq526 /usr/bin/turnserver -c /etc/turnserver.conf --pidfile=
8月 12 12:03:31 meet.example.jp turnserver[526]: 1: : IO method (auth>
8月 12 12:03:31 meet.example.jp turnserver[526]: 1: : IO method (auth>
8月 12 12:03:31 meet.example.jp turnserver[526]: 1: : IO method (auth>
8月 12 12:03:31 meet.example.jp turnserver[526]: 1: : IO method (auth>
8月 12 12:03:31 meet.example.jp turnserver[526]: 1: : IO method (auth>
8月 12 12:03:31 meet.example.jp turnserver[526]: 1: : IO method (auth>
8月 12 12:03:31 meet.example.jp turnserver[526]: 1: : IO method (auth>
8月 12 12:03:31 meet.example.jp turnserver[526]: 1: : IO method (admi>
8月 12 12:03:31 meet.example.jp turnserver[526]: 1: : SQLite DB conne>
8月 12 12:03:31 meet.example.jp systemd[1]: Started coturn.service -
3. 動作確認
Jitsi Meetページにアクセスして、会議室を作成し、ミーティング機能を確認します。
https://meet.example.jp/
ホストユーザーの認証設定
以下の記事を参考にしました。
# vim /etc/prosody/conf.avail/meet.example.jp.cfg.lua
認証方式を指定します。
...
VirtualHost "guest.meet.example.jp"
...
authentication = "internal_plain"
...
c2s_require_encryption = false
...
# vim /etc/jitsi/meet/meet.example.jp-config.js
anonymousdomain 行をコメントインします。
hosts: {
// XMPP domain.
domain: 'meet.example.jp',
anonymousdomain: 'guest.meet.example.jp',
# vim /etc/jitsi/jicofo/sip-communicator.properties
org.jitsi.jicofo.auth.URL=XMPP:meet.example.jp
各サービスを再起動して反映します。
(再起動が不要なサービスもあるかもしれませんが。)
# systemctl restart prosody # systemctl restart jicofo # systemctl restart jitsi-videobridge2 # systemctl restart nginx
prosodyctlコマンドで、ホストユーザーを登録します。
ユーザー名やドメイン名は置き換えてください。
# prosodyctl register <user> meet.example.jp Enter new password: Retype new password: usermanager info User account created: <user>@meet.example.jp
おわりに
非Docker版Jitsi Meetのインストール手順を記載しました。
aptコマンドで比較的簡単にインストールできますし、Dockerコンテナとの通信、マウントなどを考慮しなくてもよく、フロントエンドのカスタマイズもホスト上のファイル操作でやりやすいので、Docker版より運用がシンプルになりますね。
Jitsi Meetについて書いた記事まとめ。
