「Jitsi-meet」の版間の差分

提供: ArchWiki
ナビゲーションに移動 検索に移動
(→‎設定: ループバックを翻訳して追加)
 
(同じ利用者による、間の10版が非表示)
129行目: 129行目:
 
}}
 
}}
   
=== git パッケージの設定 ===
+
=== prosody の設定 ===
   
  +
{{Pkg|prosody}} は前提条件であり、Jitsi サービス用の構成をそれに追加する必要があります。prosody サーバーをまだセットアップしていない場合は、今すぐ {{Pkg|prosody}} と {{Pkg|lua52-sec}} をインストールしてください。prosody 設定の残りの部分では、prosody がローカルにインストールされていることを前提としています。
If your server name is {{ic|example.com}} then a common choice for your jitsi will be {{ic|meet.example.com}}. You will need to update DNS record for your server with an entry {{ic|meet}}. The remainder assumes that you have done this.
 
   
  +
パッケージ {{AUR|jitsi-meet-prosody}} は、簡単にカスタマイズできる設定を提供します。
Also you should have SSL/TLS certificates for your {{ic|meet.example.com}} domain, for example see [[certbot]].
 
   
  +
{{bc|<nowiki>
The remaining instructions in {{ic|bash}} to make it clear what needs replacing. Pasting the commands into a bash shell with root permissions should give you a working install.
 
  +
# cd /etc/prosody
  +
# mkdir conf.d
  +
# cp /usr/share/doc/jitsi-meet-prosody/prosody.cfg.lua-jvb.example conf.d/jitsi.cfg.lua
  +
</nowiki>}}
   
  +
次に、これを末尾に追加します:
Replace the domain name with your own:
 
   
  +
{{hc|/etc/prosody/prosody.cfg.lua|2=
export JITSIFQDN=meet.example.com
 
  +
Include "conf.d/*.cfg.lua"
  +
}}
   
  +
設定をカスタマイズします:
Specify correct path to generated certificates:
 
   
  +
{{hc|/etc/prosody/conf.d/jitsi.cfg.lua|2=
export JITSIFQDN_CRT=/etc/letsencrypt/live/meet.example.com/fullchain.pem
 
  +
-- replace all occurences of '''jitmeet.example.com''' by '''JITSIFQDN'''
export JITSIFQDN_KEY=/etc/letsencrypt/live/meet.example.com/privkey.pem
 
  +
-- replace all occurences of '''focusUser''' by '''focus'''
  +
-- then add or update those section
   
  +
VirtualHost "'''JITSIFQDN'''"
Passwords are needed. We set up some shell variables to hold them for later use. You can replace {{ic|$(mktemp XXXXXXX)}} with your own passwords if you want, but the random strings generated by {{ic|mktemp}} should be fine.
 
  +
ssl = {
  +
key = "/etc/prosody/certs/'''JITSIFQDN'''.key";
  +
certificate = "/etc/prosody/certs/'''JITSIFQDN'''.crt";
  +
}
   
  +
VirtualHost "auth.'''JITSIFQDN'''"
export SECRET1=$(mktemp -u XXXXXXXX)
 
  +
ssl = {
export SECRET2=$(mktemp -u XXXXXXXX)
 
  +
key = "/etc/prosody/certs/auth.'''JITSIFQDN'''.key";
export SECRET3=$(mktemp -u XXXXXXXX)
 
  +
certificate = "/etc/prosody/certs/auth.'''JITSIFQDN'''.crt";
  +
}
  +
authentication = "internal_hashed"
  +
}}
   
  +
{{hc|/etc/prosody/conf.d/jitsi.cfg.lua|2=
==== prosody の設定 ====
 
  +
-- Proxy to jicofo's user JID, so that it does not have to register as a component.
  +
Component "focus.'''JITSIFQDN'''" "client_proxy"
  +
target_address = "focus@auth.'''JITSIFQDN'''"
  +
}}
   
  +
ここで、'''JITSIFQDN''' および '''JITSIFQDN''' の証明書を生成する必要があります。
{{Pkg|prosody}} is a prerequisite and you will need to add a configuration to it for your Jitsi services. If you do not already have a prosody server set up, install {{Pkg|prosody}} and {{Pkg|lua52-sec}} now. The rest of the prosody configuration assumes you have a local install of prosody.
 
   
  +
certbot を使用する場合は、次のコマンドを使用して証明書をインポートできます:
First make sure there is a subdirectory to hold custom configurations and that prosody loads it:
 
   
  +
# prosodyctl --root cert import /etc/letsencrypt/live
mkdir -p /etc/prosody/conf.d
 
cat >> /etc/prosody/prosody.cfg.lua <<===
 
Include "conf.d/*.cfg.lua"
 
===
 
   
  +
自己生成した証明書を使用したい場合は、以下を使用できます:
Create the prosody config file for your domain:
 
   
  +
{{bc|1=
cat > /etc/prosody/conf.d/$JITSIFQDN.cfg.lua <<===
 
  +
[prosody]$ prosodyctl cert generate '''JITSIFQDN'''
VirtualHost "${JITSIFQDN}"
 
  +
[prosody]$ prosodyctl cert generate auth.'''JITSIFQDN'''
authentication = "anonymous"
 
  +
# mv /var/lib/prosody/*.{crt,cnf,key} /etc/prosody/certs/
ssl = {
 
key = "/var/lib/prosody/${JITSIFQDN}.key";
+
# trust anchor /etc/prosody/certs/'''JITSIFQDN'''.crt
certificate = "/var/lib/prosody/${JITSIFQDN}.crt";
+
# trust anchor /etc/prosody/certs/auth.'''JITSIFQDN'''.crt
  +
# update-ca-trust
}
 
  +
}}
modules_enabled = {
 
  +
"bosh";
 
  +
ユーザー jvb と focus を登録します:
"pubsub";
 
}
 
c2s_require_encryption = false
 
 
VirtualHost "auth.${JITSIFQDN}"
 
ssl = {
 
key = "/var/lib/prosody/auth.${JITSIFQDN}.key";
 
certificate = "/var/lib/prosody/auth.${JITSIFQDN}.crt";
 
}
 
authentication = "internal_plain"
 
admins = { "focus@auth.${JITSIFQDN}" }
 
 
Component "conference.${JITSIFQDN}" "muc"
 
 
Component "jitsi-videobridge.${JITSIFQDN}"
 
component_secret = "${SECRET1}"
 
 
 
  +
{{bc|1=
Component "focus.${JITSIFQDN}"
 
  +
# prosodyctl register jvb auth.'''JITSIFQDN''' '''SECRET_JVB_USER'''
component_secret = "${SECRET2}"
 
  +
# prosodyctl register focus auth.'''JITSIFQDN''' '''SECRET_FOCUS_USER'''
===
 
  +
# prosodyctl mod_roster_command subscribe focus.'''JITSIFQDN''' focus@auth.'''JITSIFQDN'''
  +
}}
   
  +
次に、{{ic|prosody.service}} を [[再起動]] (または、インストールしたばかりの場合は [[起動/有効化]]) します。
Generate the certificates that prosody needs. This is interactive:
 
   
  +
=== jitsi-videobridge の設定 ===
prosodyctl cert generate $JITSIFQDN
 
   
  +
jitsi-videobridge の設定。'''nightly''' および '''git''' バージョンの場合は、'''-nightly''' または '''-git''' を '''/etc/jitsi-videobridge''' に追加します。
prosodyctl cert generate auth.$JITSIFQDN
 
   
  +
MUC_NICKNAME の場合は、'''uuidgen''' コマンドを使用します。
Register the focus user:
 
 
prosodyctl register focus auth.$JITSIFQDN $SECRET3
 
   
  +
{{hc|/etc/jitsi-videobridge/sip-communicator.properties|2=
Trust the certificate:
 
  +
org.jitsi.videobridge.xmpp.user.shard.DOMAIN=auth.'''JITSIFQDN'''
 
  +
org.jitsi.videobridge.xmpp.user.shard.PASSWORD='''SECRET_JVB_USER'''
trust anchor /var/lib/prosody/auth.$JITSIFQDN.crt
 
  +
org.jitsi.videobridge.xmpp.user.shard.MUC_JIDS=JvbBrewery@internal.auth.'''JITSIFQDN'''
  +
org.jitsi.videobridge.xmpp.user.shard.MUC_NICKNAME='''UUIDGEN_RESULT'''
  +
}}
   
{{ic|prosody}} サービスを[[起動]]してください。
+
{{ic|jitsi-videobridge.service}} を [[起動/有効化]] してください。
   
==== jitsi-videobridge の設定 ====
+
=== jicofo の設定 ===
   
  +
jicofo の設定。nightly および git バージョンの場合は、/etc/jitsi-videobridge に -nightly または -git を追加します。
jitsi-videobridge の設定:
 
   
cat > /etc/jitsi-videobridge/jitsi-videobridge.conf <<===
+
{{hc|/etc/jicofo/jicofo.conf|2=
  +
jicofo {
flags="--host=localhost --domain=${JITSIFQDN} --port=5347 --secret=${SECRET1}"
 
  +
xmpp: {
===
 
  +
client: {
  +
client-proxy: "focus.'''JITSIFQDN'''"
  +
xmpp-domain: "'''JITSIFQDN'''"
  +
domain: "auth.'''JITSIFQDN'''"
  +
username: "focus"
  +
password: "'''SECRET_FOCUS_USER'''"
  +
conference-muc-jid = conference.'''JITSIFQDN'''
  +
}
  +
trusted-domains: [ "recorder.'''JITSIFQDN'''" ]
  +
}
  +
bridge: {
  +
brewery-jid: "JvbBrewery@internal.auth.'''JITSIFQDN'''"
  +
}
  +
}
  +
}}
   
  +
{{ic|jicofo}} サービスを[[起動|起動・有効化]]してください。
ログや SIP コミュニケータの設定を同じフォルダに保持したい場合、以下のように行うことができます。
 
   
  +
=== jitsi-meet の設定 ===
cat >> /etc/jitsi-videobridge/jitsi-videobridge.conf <<===
 
VIDEOBRIDGE_DEBUG_OPTIONS="-Djava.util.logging.config.file=/etc/jitsi-videobridge/logging.properties -Dnet.java.sip.communicator.SC_HOME_DIR_NAME=jitsi-videobridge -Dnet.java.sip.communicator.SC_HOME_DIR_LOCATION=/etc
 
===
 
   
  +
jitsi-meet Web アプリの設定。'''nightly''' および '''git''' バージョンの場合は、'''-nightly''' または '''-git''' を '''/etc/jitsi-videobridge''' に追加します。
cp /opt/jitsi-videobridge/lib/logging.properties /etc/jitsi-videobridge/logging.properties
 
 
cat > /etc/jitsi-videobridge/sip-communicator.properties <<===
 
org.jitsi.videobridge.AUTHORIZED_SOURCE_REGEXP=focus@auth.${JITSIFQDN}/.*
 
org.jitsi.impl.neomedia.transform.srtp.SRTPCryptoContext.checkReplay=false
 
org.jitsi.videobridge.TCP_HARVESTER_PORT=4443
 
===
 
   
  +
{{hc|/etc/webapps/jitsi-meet/config.js|2=
{{ic|jitsi-videobridge}} サービスを[[起動|起動・有効化]]してください。
 
  +
var config = {
  +
hosts: {
  +
domain: ''''JITSIFQDN'''',
  +
// ...
  +
muc: 'conference.'''JITSIFQDN''''
  +
},
  +
bosh: '//'''JITSIFQDN'''/http-bind',
  +
// ...
  +
}
  +
}}
   
==== jicofo の設定 ====
+
=== nginx の設定 ===
   
  +
[[nginx#TLS]] の説明に従って、TLS を使用して [[nginx]] を設定します。
cat > /etc/jicofo/jicofo.conf <<===
 
flags="--host=localhost --domain=${JITSIFQDN} --secret=${SECRET2} --user_domain=auth.${JITSIFQDN} --user_name=focus --user_password=${SECRET3}"
 
===
 
   
  +
提供された例をコピーしてみましょう。
{{ic|jicofo}} サービスを[[起動|起動・有効化]]してください。
 
   
  +
{{bc|1=
==== jitsi-meet の設定 ====
 
  +
# cd /etc/nginx
  +
# mkdir sites
  +
# cp /usr/share/doc/jitsi-meet/jitsi-meet.example sites/jitsi.conf
  +
}}
   
  +
次に、それをメイン設定に含めます:
cp /opt/jitsi-meet/config.js /opt/jitsi-meet/config.js.orig
 
  +
{{hc|/etc/nginx/nginx.conf|2=
cat > /opt/jitsi-meet/config.js <<===
 
  +
http {
var domainroot = "${JITSIFQDN}"
 
  +
// ...
var config = {
 
  +
// this should be placed near to the close bracket of the http block
hosts: {
 
  +
include sites/*.conf;
domain: domainroot,
 
  +
}
muc: 'conference.'+domainroot,
 
  +
}}
bridge: 'jitsi-videobridge.'+domainroot,
 
focus: 'focus.'+domainroot
 
},
 
useNicks: false,
 
bosh: '//'+domainroot+'/http-bind',
 
}
 
===
 
   
  +
次に、jitsi 設定を自分の設定に変更します:
==== nginx の設定 ====
 
  +
{{hc|/etc/nginx/sites/jitsi.conf|2=
  +
server {
  +
# ...
  +
server_name '''JITSIFQDN''';
   
  +
# ...
こちらは最小限の nginx 設定ですが、これは https://ssl-config.mozilla.org/#server=nginx&version=1.16.1&config=intermediate&openssl=1.1.1f&guideline=5.4 からの推奨 HTTPS 設定と Jitsi-meet ドキュメントで推奨される最小設定を単純にマージしたものです。この設定は十分に動作しますが、自分自身のサーバーに適応させることをお勧めします。
 
  +
# use prosody path directly
  +
ssl_certificate /etc/prosody/certs/'''JITSIFQDN'''.crt;
  +
ssl_certificate_key /etc/prosody/certs/'''JITSIFQDN'''.key;
  +
# or use letencrypt path
  +
ssl_certificate /etc/letsencrypt/live/'''JITSIFQDN'''/fullchain.pem;
  +
ssl_certificate_key /etc/letsencrypt/live/'''JITSIFQDN'''/privkey.pem;
   
  +
# set the config path
sed -i "/^http.*{/a include /etc/nginx/${JITSIFQDN}.conf;" /etc/nginx/nginx.conf
 
  +
# replace alias /etc/jitsi/meet/jitmeet.example.com-config.js by
  +
location = /config.js {
  +
alias /etc/webapps/jitsi-meet/config.js;
  +
}
  +
# ...
  +
location ~ ^/([^/?&:'"]+)/config.js$
  +
{
  +
set $subdomain "$1.";
  +
set $subdir "$1/";
  +
alias /etc/webapps/jitsi-meet/config.js;
  +
}
  +
}
  +
}}
   
  +
それから {{ic|nginx.service}} を [[再起動]] してください。
#WARNING - The config file text uses bash escapes. If copying for hand editing, each '\$' needs to be replaced with '$'
 
# and each '${VARIABLE}' needs to be replaced.
 
cat > /etc/nginx/${JITSIFQDN}.conf <<===
 
# Redirect http to https
 
server {
 
listen 80;
 
listen [::]:80;
 
server_name call.mechadept.nz;
 
 
return 301 https://\$host\$request_uri;
 
}
 
 
# Mozilla intermediate config
 
server {
 
listen 443 ssl http2;
 
listen [::]:443 ssl http2;
 
 
#ssl_certificate /path/to/signed_cert_plus_intermediates;
 
#ssl_certificate_key /path/to/private_key;
 
ssl_session_timeout 1d;
 
ssl_session_cache shared:MozSSL:10m; # about 40000 sessions
 
ssl_session_tickets off;
 
 
# curl https://ssl-config.mozilla.org/ffdhe2048.txt > /path/to/dhparam
 
# ssl_dhparam /path/to/dhparam;
 
 
# 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;
 
 
# HSTS (ngx_http_headers_module is required) (63072000 seconds)
 
add_header Strict-Transport-Security "max-age=63072000" always;
 
#} #Merge mozilla config with jitsi recommended one
 
 
ssl_certificate /etc/letsencrypt/live/${JITSIFQDN}/fullchain.pem;
 
ssl_certificate_key /etc/letsencrypt/live/${JITSIFQDN}/privkey.pem;
 
 
error_page 404 /static/404.html;
 
 
# Jitsi recommended settings below
 
 
#server {
 
# listen 80;
 
 
server_name ${JITSIFQDN};
 
# set the root
 
root /opt/jitsi-meet;
 
index index.html;
 
 
location ~ ^/([a-zA-Z0-9=\?]+)\$ {
 
rewrite ^/(.*)\$ / break;
 
}
 
 
location / {
 
ssi on;
 
}
 
 
# BOSH
 
location /http-bind {
 
proxy_pass http://localhost:5280/http-bind;
 
proxy_set_header X-Forwarded-For \$remote_addr;
 
proxy_set_header Host \$http_host;
 
}
 
 
# xmpp websockets
 
location /xmpp-websocket {
 
proxy_pass http://localhost:5280/xmpp-websocket;
 
proxy_http_version 1.1;
 
proxy_set_header Upgrade \$http_upgrade;
 
proxy_set_header Connection "upgrade";
 
proxy_set_header Host \$host;
 
tcp_nodelay on;
 
}
 
}
 
===
 
 
それから {{ic|nginx}} サービスを[[再起動]]してください。
 
   
 
== ヒントとテクニック ==
 
== ヒントとテクニック ==
359行目: 323行目:
 
*TCP/4443
 
*TCP/4443
 
*UDP/10000
 
*UDP/10000
  +
  +
=== SIP への Jitsi ゲートウェイ (Jigasi) ===
  +
  +
Jitsi-meet ミーティングを従来の SIP とインターフェースするには、{{AUR|jigasi}} または {{AUR|jigasi-git}} をインストールし、prosody 設定を編集します:
  +
  +
{{hc|/etc/prosody/prosody.cfg.lua|2=
  +
Component "callcontrol.'''JITSIFQDN'''"
  +
component_secret = "'''SECRET_JIGASI_USER'''"
  +
}}
  +
  +
SIP アクセス認証情報を入力します ({{ic|SIPUSER}} {{ic|SIPSERVER}} および {{ic|SIPPASSWORD}})
  +
  +
{{hc|/opt/jigasi/jigasi-home/sip-communicator.properties|2=
  +
net.java.sip.communicator.impl.protocol.sip.acc1403273890647.ACCOUNT_UID=SIP\:"SIPUSER@SIPSERVER"
  +
net.java.sip.communicator.impl.protocol.sip.acc1403273890647.PASSWORD=SIPPASSWORD
  +
net.java.sip.communicator.impl.protocol.sip.acc1403273890647.SERVER_ADDRESS=SIPSERVER
  +
net.java.sip.communicator.impl.protocol.sip.acc1403273890647.USER_ID=SIPUSER
  +
}}
  +
  +
SIP が接続しているデフォルトのルーム名を変更するには、上記の設定の {{ic|org.jitsi.jigasi.DEFAULT_JVB_ROOM_NAME}} を変更します。
  +
  +
次に、jigasi 設定を編集します
  +
  +
{{hc|/etc/jitsi/jigasi/config|2=
  +
JIGASI_HOST=callcontrol.'''JITSIFQDN'''
  +
JIGASI_HOSTNAME=jitsi-videobridge.'''JITSIFQDN'''
  +
JIGASI_SECRET='''SECRET_JIGASI_USER'''
  +
JIGASI_OPTS=""
  +
LOGFILE=/var/log/jitsi/jigasi.log
  +
}}
  +
  +
{{hc|/opt/jitsi-meet/config.js|2=
  +
hosts.call_control = 'callcontrol.meet.jit.si'
  +
}}
  +
  +
次に、{{ic|jigasi.service}} を [[起動/有効化]] します。
  +
  +
=== ルーム作成時のアクセス制限 ===
  +
  +
ビデオ会議室の '''作成''' を認証されたユーザーに制限するには、次の手順を実行します。会議への参加者はまだ認証されていないことに注意してください。
  +
  +
prosody の jitsi ドメインに認証を追加し、ゲスト用の新しい仮想ホストを追加します:
  +
  +
{{hc|/etc/prosody/conf.d/jitsi.cfg.lua|2=
  +
-- change authentification of your domain
  +
VirtualHost "'''JITSIFQDN'''"
  +
authentification = "internal_plain"
  +
  +
-- add guest virtual host to allow anonymous user to join your room
  +
VirtualHost "guest.'''JITSIFQDN'''"
  +
authentication = "jitsi-anonymous"
  +
c2s_require_encryption = false
  +
modules_enabled = {
  +
-- copy the content of the modules_enabled
  +
-- of the VirtualHost "'''JITSIFQDN'''"
  +
-- remove only the module "muc_lobby_rooms" of the list
  +
-- example:
  +
"bosh";
  +
"pubsub";
  +
"ping"; -- Enable mod_ping
  +
"speakerstats";
  +
"external_services";
  +
"conference_duration";
  +
}
  +
}}
  +
  +
{{ic|jitsi-meet}} の設定ファイルを編集します。
  +
  +
{{hc|/etc/webapps/jitsi-meet/config.js|2=
  +
var config = {
  +
host: {
  +
// anonymous users need to use a dedicated muc without authentication
  +
anonymousdomain: 'guest.'''JITSIFQDN'''',
  +
},
  +
}
  +
}}
  +
  +
{{ic|jicofo}} の認証を追加します:
  +
  +
{{hc|/etc/jicofo/jicofo.conf|2=
  +
jicofo {
  +
authentication {
  +
enabled = true
  +
type = XMPP
  +
login-url = '''JITSIFQDN'''
  +
enable-auto-login = true
  +
}
  +
}
  +
}}
  +
  +
次に、目的のユーザーを作成します。
  +
  +
{{bc|1=
  +
# prosodyctl register <username> '''JITSIFQDN''' <password>
  +
}}
  +
  +
{{ic|jigasi}} を使用している場合のみ (知らない場合は編集しません)、匿名認証を許可しないように SIP インターフェースを編集します:
  +
  +
{{hc|/etc/jitsi/jigasi/sip-communicator.properties|2=
  +
org.jitsi.jigasi.xmpp.acc.ANONYMOUS_AUTH=false
  +
}}
  +
  +
これらの手順は [https://github.com/jitsi/jicofo#secure-domain このガイド] から引用されています。
  +
  +
=== JWTトークンによるアクセス制限 ===
  +
  +
ビデオ会議室の '''作成''' を JWT トークン (認証用の外部サービス) で認証するユーザーに制限するには、次の手順を実行します。会議への参加者はまだ認証されていないことに注意してください。
  +
  +
これらの依存関係をインストールします:
  +
  +
* {{AUR|lua52-base64}}
  +
* {{Pkg|lua52-basexx}}
  +
* {{AUR|lua52-cjson}}
  +
* {{AUR|lua52-jwtjitsi}}
  +
* {{Pkg|lua52-luaossl}}
  +
  +
prosody の jitsi ドメインに認証を追加し、ゲスト用の新しい仮想ホストを追加します:
  +
  +
{{hc|/etc/prosody/conf.d/jitsi.cfg.lua|2=
  +
-- change authentification of your domain
  +
VirtualHost "'''JITSIFQDN'''"
  +
authentification = "token"
  +
app_id = "APP_ID"
  +
app_secret = "APP_SECRET"
  +
allow_empty_token = false
  +
modules_enabled = {
  +
-- keep existing modules and add
  +
"presence_identity";
  +
}
  +
c2s_require_encryption = false
  +
  +
-- add guest virtual host to allow anonymous user to join your room
  +
VirtualHost "guest.'''JITSIFQDN'''"
  +
authentication = "jitsi-anonymous"
  +
c2s_require_encryption = false
  +
modules_enabled = {
  +
-- copy the content of the modules_enabled
  +
-- of the VirtualHost "'''JITSIFQDN'''"
  +
-- remove only the module "muc_lobby_rooms" of the list
  +
-- example:
  +
"bosh";
  +
"pubsub";
  +
"ping"; -- Enable mod_ping
  +
"speakerstats";
  +
"external_services";
  +
"conference_duration";
  +
"presence_identity";
  +
}
  +
  +
Component "conference.'''JITSIFQDN'''" "muc"
  +
modules_enabled = {
  +
-- add this to the modules_enabled
  +
"token_verification";
  +
}
  +
}}
  +
  +
{{ic|jitsi-meet}} の設定ファイルを編集します:
  +
  +
{{hc|/etc/webapps/jitsi-meet/config.js|2=
  +
var config = {
  +
host: {
  +
// anonymous users need to use a dedicated muc without authentication
  +
anonymousdomain: 'guest.'''JITSIFQDN'''',
  +
},
  +
}
  +
}}
  +
  +
{{ic|jicofo}} の認証を追加します:
  +
  +
{{hc|/etc/jicofo/jicofo.conf|2=
  +
jicofo {
  +
authentication {
  +
enabled = true
  +
type = JWT
  +
login-url = '''JITSIFQDN'''
  +
enable-auto-login = true
  +
}
  +
}
  +
}}
  +
  +
次に、{{ic|prosody.service}} と {{ic|jicofo.service}} を [[再起動]] (または、インストールしたばかりの場合は [[起動/有効化]]) します。
  +
  +
これで、JWT トークンを使用してユーザーを認証できるようになりました。
  +
  +
仕様はここで読むことができます: [https://github.com/jitsi/lib-jitsi-meet/blob/master/doc/tokens.md Jitsi Meet Tokens]
  +
  +
ここでは、nodejs での簡単な例を示します:
  +
  +
{{bc|<nowiki>
  +
const jwt = require('jsonwebtoken')
  +
const crypto = require('crypto');
  +
const words = require('random-words')
  +
const yourDomain = "JITSIFQDN"
  +
const appId = "APP_ID"
  +
const appSecret = "APP_SECRET"
  +
const userName = "YOUR_USERNAME"
  +
const userEmail = "YOUR_EMAIL"
  +
  +
function getBody(domain, appId, name, email, room) {
  +
const md5Email = crypto.createHash('md5').update(email).digest("hex");
  +
const id = crypto.createHash('sha1').update(`${name}:${email}`).digest("hex")
  +
  +
return {
  +
context: {
  +
user: {
  +
avatar: `https:/gravatar.com/avatar/${md5Email}`,
  +
name,
  +
email,
  +
id,
  +
},
  +
group: 'users'
  +
},
  +
"aud": "jitsi",
  +
"iss": appId,
  +
"sub": domain,
  +
room,
  +
}
  +
}
  +
  +
const room = process.argv[2] || words({exactly: 3, join: '-'})
  +
  +
const data = getBody(
  +
yourDomain,
  +
appId,
  +
userName,
  +
userEmail,
  +
room,
  +
)
  +
  +
const options = {
  +
algorithm: 'HS256',
  +
expiresIn: '2h',
  +
}
  +
  +
const jwtToken = jwt.sign(data, appSecret, options)
  +
  +
console.log(`https://${yourDomain}/${room}?jwt=${jwtToken}`)
  +
</nowiki>}}
  +
  +
=== ログの評価 ===
  +
  +
パブリックに利用可能な IP アドレスの場合、上記の設定はパブリックビデオ会議サーバーにつながります。サーバーの使用を監視するには、[[journalctl]] を使用して、少なくとも漠然とした使用法を把握できます:
  +
  +
# journalctl --unit=jicofo.service --grep="created new conference" --output cat
  +
  +
新しいチャットルーム作成のすべてのイベントを表示し、
  +
  +
# journalctl --unit=jicofo.service --grep="Stopped" --output cat
  +
  +
チャットルームの破壊に関するすべてのイベントを表示します。
  +
  +
'member' を grep すると、参加者に関する (匿名の) 情報も得られます。
  +
  +
=== 独自の STUN サーバーを実行する ===
  +
  +
デフォルトでは、Jitsi Meet は jitsi.org の STUN サーバーを使用します。{{Pkg|coturn}} を使用し、jitsi-meet の設定で設定することで、独自の STUN サーバーを簡単に実行できます。
  +
  +
== トラブルシューティング ==
  +
  +
=== ログを確認してください ===
  +
  +
すべてのサービスユニット (つまり、{{ic|prosody.service}}、{{ic|jitsi-videobridge.service}}、{{ic|jicofo.service}}) を [[停止]] し、一度に 1 つずつ [[起動]] して各サービスユニットの [[systemd/ジャーナル|ジャーナル]] 内の新しいメッセージをたどって、何か問題があるかどうかを確認します。ほとんどの問題は、パスワードまたは設定の問題が原因です。
  +
  +
まったく異なるバージョンからアップグレードした場合、または構成に問題があった場合は、他のバージョンを開始してください。どの部分が間違っているかを探すよりも早いでしょう。
  +
  +
=== Matrix のルームでヘルプを求める ===
  +
  +
matrix ルームに参加して、そこで助けを求めることができます:
  +
  +
* [https://matrix.to/#/#jitsimeet:matrix.org?via=matrix.org Jitsi Meet help and testing]
   
 
== 参照 ==
 
== 参照 ==
   
  +
* [https://jitsi.org/ プロジェクトのホームページ]
*[https://haste.rys.pw/uzisosiram.bash Notes by C0rn3j]
 
  +
* [https://community.jitsi.org/ ヘルプコミュニティ]
*[https://gitlab.com/C0rn3j/configs/-/tree/master/ansible/serverPlaybooks/roles/meet/files Configurations used in the article]
 
  +
* [https://github.com/jitsi/jitsi-meet/blob/master/doc/README.md 公式ドキュメント]
  +
* [https://tutorials.celogeek.com/books/jitsi-meet-on-arch-linux Arch Linux チュートリアルの詳細]

2024年1月10日 (水) 18:45時点における最新版

Jitsi はセキュアなビデオ会議ソリューションを簡単に構築・デプロイすることができるオープンソースプロジェクトのセットです。Jitsi の中心は Jitsi Videobridge と Jitsi Meet で、インターネット上で会議を行うことができます。コミュニティの他のプロジェクトを使うことでオーディオ会議やダイアルイン、録音、サイマルキャストなどの機能を有効化できます。

インストール

Jitsi-meet はいくつかのコンポーネントで設定されています。

  • jitsi-meet: Web インターフェイス用のファイル。Web サーバーによって提供されるファイル経由でアクセスされます。
  • jitsi-meet-prosody: jitsi の韻律プラグイン
  • jitsi-meet-turnserver: スタン/ターンサーバーを実行する設定の例
  • jitsi-videobridge: すべての参加者にビデオストリームを提供するビデオブリッジングサービス
  • jicofo: Jitsi カンファレンスの焦点は誰が話すかを決定すること
  • Prosody: セットアップのベースとなる無料の XMPP サーバー

ユーザー間のインターフェースのグラフィカルな概要は、こちら に示されています。

git バージョン、nightly バージョン、または安定バージョンのいずれかを使用できます。

これらを同時にインストールすることは可能ですが、別のポートと韻律の複数のインスタンスを使用する必要があります (プラグインを仮想ホストごとにスコープすることはできません)

通常バージョンか bin バージョンを選択する必要があります。bin 1 は通常のバージョンと競合します (つまり、nightly と nightly-bin は同時にインストールできませんが、stable と nightly は可能です)

1 つだけを使用するようにしてください:

一部のパッケージでは、設定例が /usr/share/doc にインストールされます。必ず /etc/pacman.conf でこの行をコメント化してください:

#NoExtract = usr/share/gtk-doc/html/* usr/share/doc/*

スタンドアロンサーバーを実行するには、これらのオプションパッケージが必要です:

設定

ノート: この設定により、誰もが接続できるオープンなサーバーが得られます。理論的根拠については、Jitsi 哲学 を参照してください。認証については ヒントとテクニック を参照してください。

サーバー名が example.com の場合、jitsi の一般的な選択は meet.example.com になりますが、自由に選択できます。ただし、セキュリティの観点から、独自のサブドメインで Web アプリをホストすることが強く推奨されます。 選択したサブドメインのエントリでサーバーの DNS レコードを更新する必要があります (上記の例では meet) 残りの部分では、これが完了していることを前提としています。

また、meet.example.com ドメインの SSL/TLS 証明書も必要です。無料の証明書を取得する方法については、certbot を参照してください。

以下では、次のプレースホルダーが使用されます:

  • JITSIFQDN: jitsi-meet ドメイン、例: meet.example.com
  • SECRET_JVB_USER: ビデオブリッジのパスワード
  • SECRET_FOCUS_USER: 認証者のパスワード

パスワードは、mktemp -u XXXXXXXX または pwgen などの安全な方法で取得する必要があります。必ず別の安全なパスワードを使用してください。

設定パス

パッケージ 設定パス
Stable
jitsi-meetAUR
jitsi-meet-binAUR
/etc/webapps/jitsi-meet
jitsi-meet-prosodyAUR
jitsi-meet-prosody-binAUR
/usr/lib/jitsi-meet-prosody
jitsi-meet-turnserverAUR
jitsi-meet-turnserver-binAUR
/usr/share/doc/jitsi-meet-turnserver
jicofoAUR
jicofo-binAUR
/etc/jicofo
jitsi-videobridgeAUR
jitsi-videobridge-binAUR
/etc/jitsi-videobridge
Nightly
jitsi-meet-nightlyAUR
jitsi-meet-nightly-binAUR
/etc/webapps/jitsi-meet-nightly
jitsi-meet-prosody-nightlyAUR
jitsi-meet-prosody-nightly-binAUR
/usr/lib/jitsi-meet-prosody-nightly
jitsi-meet-turnserver-nightlyAUR
jitsi-meet-turnserver-nightly-binAUR
/usr/share/doc/jitsi-meet-turnserver-nightly
jicofo-nightlyAUR
jicofo-nightly-binAUR
/etc/jicofo-nightly
jitsi-videobridge-nightlyAUR
jitsi-videobridge-nightly-binAUR
/etc/jitsi-videobridge-nightly
Git
jitsi-meet-gitAUR /etc/webapps/jitsi-meet-git
jitsi-meet-prosody-gitAUR /usr/lib/jitsi-meet-prosody-git
jitsi-meet-turnserver-gitAUR /usr/share/doc/jitsi-meet-turnserver-git
jicofo-gitAUR /etc/jicofo-git
jitsi-videobridge-gitAUR /etc/jitsi-videobridge-git

ループバック

jitsi-meet コンポーネントがローカル IP を使用して相互に到達できるようにします。ドメインがサーバーの実際の IP を返さない Cloudflare のようなプロキシの背後にある場合でも機能します。

/etc/hosts 内:

127.0.0.1 JITSIFQDN auth.JITSIFQDN
::1 JITSIFQDN auth.JITSIFQDN

prosody の設定

prosody は前提条件であり、Jitsi サービス用の構成をそれに追加する必要があります。prosody サーバーをまだセットアップしていない場合は、今すぐ prosodylua52-sec をインストールしてください。prosody 設定の残りの部分では、prosody がローカルにインストールされていることを前提としています。

パッケージ jitsi-meet-prosodyAUR は、簡単にカスタマイズできる設定を提供します。

# cd /etc/prosody
# mkdir conf.d
# cp /usr/share/doc/jitsi-meet-prosody/prosody.cfg.lua-jvb.example conf.d/jitsi.cfg.lua

次に、これを末尾に追加します:

/etc/prosody/prosody.cfg.lua
Include "conf.d/*.cfg.lua"

設定をカスタマイズします:

/etc/prosody/conf.d/jitsi.cfg.lua
-- replace all occurences of jitmeet.example.com by JITSIFQDN
-- replace all occurences of focusUser by focus
-- then add or update those section

VirtualHost "JITSIFQDN"
    ssl = {
        key = "/etc/prosody/certs/JITSIFQDN.key";
        certificate = "/etc/prosody/certs/JITSIFQDN.crt";
    }

VirtualHost "auth.JITSIFQDN"
    ssl = {
        key = "/etc/prosody/certs/auth.JITSIFQDN.key";
        certificate = "/etc/prosody/certs/auth.JITSIFQDN.crt";
    }
    authentication = "internal_hashed"
/etc/prosody/conf.d/jitsi.cfg.lua
-- Proxy to jicofo's user JID, so that it does not have to register as a component.
Component "focus.JITSIFQDN" "client_proxy"
    target_address = "focus@auth.JITSIFQDN"

ここで、JITSIFQDN および JITSIFQDN の証明書を生成する必要があります。

certbot を使用する場合は、次のコマンドを使用して証明書をインポートできます:

# prosodyctl --root cert import /etc/letsencrypt/live

自己生成した証明書を使用したい場合は、以下を使用できます:

[prosody]$ prosodyctl cert generate JITSIFQDN
[prosody]$ prosodyctl cert generate auth.JITSIFQDN
# mv /var/lib/prosody/*.{crt,cnf,key} /etc/prosody/certs/
# trust anchor /etc/prosody/certs/JITSIFQDN.crt
# trust anchor /etc/prosody/certs/auth.JITSIFQDN.crt
# update-ca-trust

ユーザー jvb と focus を登録します:

# prosodyctl register jvb auth.JITSIFQDN SECRET_JVB_USER
# prosodyctl register focus auth.JITSIFQDN SECRET_FOCUS_USER
# prosodyctl mod_roster_command subscribe focus.JITSIFQDN focus@auth.JITSIFQDN

次に、prosody.service再起動 (または、インストールしたばかりの場合は 起動/有効化) します。

jitsi-videobridge の設定

jitsi-videobridge の設定。nightly および git バージョンの場合は、-nightly または -git/etc/jitsi-videobridge に追加します。

MUC_NICKNAME の場合は、uuidgen コマンドを使用します。

/etc/jitsi-videobridge/sip-communicator.properties
org.jitsi.videobridge.xmpp.user.shard.DOMAIN=auth.JITSIFQDN
org.jitsi.videobridge.xmpp.user.shard.PASSWORD=SECRET_JVB_USER
org.jitsi.videobridge.xmpp.user.shard.MUC_JIDS=JvbBrewery@internal.auth.JITSIFQDN
org.jitsi.videobridge.xmpp.user.shard.MUC_NICKNAME=UUIDGEN_RESULT

jitsi-videobridge.service起動/有効化 してください。

jicofo の設定

jicofo の設定。nightly および git バージョンの場合は、/etc/jitsi-videobridge に -nightly または -git を追加します。

/etc/jicofo/jicofo.conf
jicofo {
  xmpp: {
    client: {
      client-proxy: "focus.JITSIFQDN"
      xmpp-domain: "JITSIFQDN"
      domain: "auth.JITSIFQDN"
      username: "focus"
      password: "SECRET_FOCUS_USER"
      conference-muc-jid = conference.JITSIFQDN
    }
    trusted-domains: [ "recorder.JITSIFQDN" ]
  }
  bridge: {
    brewery-jid: "JvbBrewery@internal.auth.JITSIFQDN"
  }
}

jicofo サービスを起動・有効化してください。

jitsi-meet の設定

jitsi-meet Web アプリの設定。nightly および git バージョンの場合は、-nightly または -git/etc/jitsi-videobridge に追加します。

/etc/webapps/jitsi-meet/config.js
var config = {
  hosts: {
    domain: 'JITSIFQDN',
    // ...
    muc: 'conference.JITSIFQDN'
  },
  bosh: '//JITSIFQDN/http-bind',
  // ...
}

nginx の設定

nginx#TLS の説明に従って、TLS を使用して nginx を設定します。

提供された例をコピーしてみましょう。

# cd /etc/nginx
# mkdir sites
# cp /usr/share/doc/jitsi-meet/jitsi-meet.example sites/jitsi.conf

次に、それをメイン設定に含めます:

/etc/nginx/nginx.conf
http {
    // ...
    // this should be placed near to the close bracket of the http block
    include sites/*.conf;
}

次に、jitsi 設定を自分の設定に変更します:

/etc/nginx/sites/jitsi.conf
server {
  # ...
  server_name JITSIFQDN;

  # ...
  # use prosody path directly
  ssl_certificate /etc/prosody/certs/JITSIFQDN.crt;
  ssl_certificate_key /etc/prosody/certs/JITSIFQDN.key;
  # or use letencrypt path
  ssl_certificate /etc/letsencrypt/live/JITSIFQDN/fullchain.pem;
  ssl_certificate_key /etc/letsencrypt/live/JITSIFQDN/privkey.pem;

  # set the config path
  # replace alias /etc/jitsi/meet/jitmeet.example.com-config.js by
  location = /config.js {
    alias /etc/webapps/jitsi-meet/config.js;
  }
  # ...
  location ~ ^/([^/?&:'"]+)/config.js$
  {
    set $subdomain "$1.";
    set $subdir "$1/";
    alias /etc/webapps/jitsi-meet/config.js;
  }
}

それから nginx.service再起動 してください。

ヒントとテクニック

NAT 経由で実行

以下のポートをサーバーに転送する必要があります:

HTTPS:

  • TCP/443

Jitsi Videobridge:

  • TCP/4443
  • UDP/10000

SIP への Jitsi ゲートウェイ (Jigasi)

Jitsi-meet ミーティングを従来の SIP とインターフェースするには、jigasiAUR または jigasi-gitAUR をインストールし、prosody 設定を編集します:

/etc/prosody/prosody.cfg.lua
Component "callcontrol.JITSIFQDN"
    component_secret = "SECRET_JIGASI_USER"

SIP アクセス認証情報を入力します (SIPUSER SIPSERVER および SIPPASSWORD)

/opt/jigasi/jigasi-home/sip-communicator.properties
net.java.sip.communicator.impl.protocol.sip.acc1403273890647.ACCOUNT_UID=SIP\:"SIPUSER@SIPSERVER"
net.java.sip.communicator.impl.protocol.sip.acc1403273890647.PASSWORD=SIPPASSWORD
net.java.sip.communicator.impl.protocol.sip.acc1403273890647.SERVER_ADDRESS=SIPSERVER
net.java.sip.communicator.impl.protocol.sip.acc1403273890647.USER_ID=SIPUSER

SIP が接続しているデフォルトのルーム名を変更するには、上記の設定の org.jitsi.jigasi.DEFAULT_JVB_ROOM_NAME を変更します。

次に、jigasi 設定を編集します

/etc/jitsi/jigasi/config
JIGASI_HOST=callcontrol.JITSIFQDN
JIGASI_HOSTNAME=jitsi-videobridge.JITSIFQDN
JIGASI_SECRET=SECRET_JIGASI_USER
JIGASI_OPTS=""
LOGFILE=/var/log/jitsi/jigasi.log
/opt/jitsi-meet/config.js
hosts.call_control = 'callcontrol.meet.jit.si'

次に、jigasi.service起動/有効化 します。

ルーム作成時のアクセス制限

ビデオ会議室の 作成 を認証されたユーザーに制限するには、次の手順を実行します。会議への参加者はまだ認証されていないことに注意してください。

prosody の jitsi ドメインに認証を追加し、ゲスト用の新しい仮想ホストを追加します:

/etc/prosody/conf.d/jitsi.cfg.lua
-- change authentification of your domain
VirtualHost "JITSIFQDN"
    authentification = "internal_plain"

-- add guest virtual host to allow anonymous user to join your room
VirtualHost "guest.JITSIFQDN"
    authentication = "jitsi-anonymous"
    c2s_require_encryption = false
    modules_enabled = {
        -- copy the content of the modules_enabled
        -- of the VirtualHost "JITSIFQDN"
        -- remove only the module "muc_lobby_rooms" of the list
        -- example:
        "bosh";
        "pubsub";
        "ping"; -- Enable mod_ping
        "speakerstats";
        "external_services";
        "conference_duration";
    }

jitsi-meet の設定ファイルを編集します。

/etc/webapps/jitsi-meet/config.js
var config = {
  host: {
    // anonymous users need to use a dedicated muc without authentication
    anonymousdomain: 'guest.JITSIFQDN',
  },
}

jicofo の認証を追加します:

/etc/jicofo/jicofo.conf
jicofo {
  authentication {
    enabled = true
    type = XMPP
    login-url = JITSIFQDN
    enable-auto-login = true
  }
}

次に、目的のユーザーを作成します。

# prosodyctl register <username> JITSIFQDN <password>

jigasi を使用している場合のみ (知らない場合は編集しません)、匿名認証を許可しないように SIP インターフェースを編集します:

/etc/jitsi/jigasi/sip-communicator.properties
org.jitsi.jigasi.xmpp.acc.ANONYMOUS_AUTH=false

これらの手順は このガイド から引用されています。

JWTトークンによるアクセス制限

ビデオ会議室の 作成 を JWT トークン (認証用の外部サービス) で認証するユーザーに制限するには、次の手順を実行します。会議への参加者はまだ認証されていないことに注意してください。

これらの依存関係をインストールします:

prosody の jitsi ドメインに認証を追加し、ゲスト用の新しい仮想ホストを追加します:

/etc/prosody/conf.d/jitsi.cfg.lua
-- change authentification of your domain
VirtualHost "JITSIFQDN"
    authentification = "token"
    app_id = "APP_ID"
    app_secret = "APP_SECRET"
    allow_empty_token = false
    modules_enabled = {
        -- keep existing modules and add
        "presence_identity";
    }
    c2s_require_encryption = false

-- add guest virtual host to allow anonymous user to join your room
VirtualHost "guest.JITSIFQDN"
    authentication = "jitsi-anonymous"
    c2s_require_encryption = false
    modules_enabled = {
        -- copy the content of the modules_enabled
        -- of the VirtualHost "JITSIFQDN"
        -- remove only the module "muc_lobby_rooms" of the list
        -- example:
        "bosh";
        "pubsub";
        "ping"; -- Enable mod_ping
        "speakerstats";
        "external_services";
        "conference_duration";
        "presence_identity";
    }

Component "conference.JITSIFQDN" "muc"
    modules_enabled = {
        -- add this to the modules_enabled
        "token_verification";
    }

jitsi-meet の設定ファイルを編集します:

/etc/webapps/jitsi-meet/config.js
var config = {
  host: {
    // anonymous users need to use a dedicated muc without authentication
    anonymousdomain: 'guest.JITSIFQDN',
  },
}

jicofo の認証を追加します:

/etc/jicofo/jicofo.conf
jicofo {
  authentication {
    enabled = true
    type = JWT
    login-url = JITSIFQDN
    enable-auto-login = true
  }
}

次に、prosody.servicejicofo.service再起動 (または、インストールしたばかりの場合は 起動/有効化) します。

これで、JWT トークンを使用してユーザーを認証できるようになりました。

仕様はここで読むことができます: Jitsi Meet Tokens

ここでは、nodejs での簡単な例を示します:

const jwt = require('jsonwebtoken')
const crypto = require('crypto');
const words = require('random-words')
const yourDomain = "JITSIFQDN"
const appId = "APP_ID"
const appSecret = "APP_SECRET"
const userName = "YOUR_USERNAME"
const userEmail = "YOUR_EMAIL"

function getBody(domain, appId, name, email, room) {
    const md5Email = crypto.createHash('md5').update(email).digest("hex");
    const id = crypto.createHash('sha1').update(`${name}:${email}`).digest("hex")

    return {
        context: {
            user: {
                avatar: `https:/gravatar.com/avatar/${md5Email}`,
                name,
                email,
                id,
            },
            group: 'users'
        },
        "aud": "jitsi",
        "iss": appId,
        "sub": domain,
        room,
    }
}

const room = process.argv[2] || words({exactly: 3, join: '-'})

const data = getBody(
    yourDomain,
    appId,
    userName,
    userEmail,
    room,
)

const options = {
    algorithm: 'HS256',
    expiresIn: '2h',
}

const jwtToken = jwt.sign(data, appSecret, options)

console.log(`https://${yourDomain}/${room}?jwt=${jwtToken}`)

ログの評価

パブリックに利用可能な IP アドレスの場合、上記の設定はパブリックビデオ会議サーバーにつながります。サーバーの使用を監視するには、journalctl を使用して、少なくとも漠然とした使用法を把握できます:

# journalctl --unit=jicofo.service --grep="created new conference" --output cat

新しいチャットルーム作成のすべてのイベントを表示し、

# journalctl --unit=jicofo.service --grep="Stopped" --output cat

チャットルームの破壊に関するすべてのイベントを表示します。

'member' を grep すると、参加者に関する (匿名の) 情報も得られます。

独自の STUN サーバーを実行する

デフォルトでは、Jitsi Meet は jitsi.org の STUN サーバーを使用します。coturn を使用し、jitsi-meet の設定で設定することで、独自の STUN サーバーを簡単に実行できます。

トラブルシューティング

ログを確認してください

すべてのサービスユニット (つまり、prosody.servicejitsi-videobridge.servicejicofo.service) を 停止 し、一度に 1 つずつ 起動 して各サービスユニットの ジャーナル 内の新しいメッセージをたどって、何か問題があるかどうかを確認します。ほとんどの問題は、パスワードまたは設定の問題が原因です。

まったく異なるバージョンからアップグレードした場合、または構成に問題があった場合は、他のバージョンを開始してください。どの部分が間違っているかを探すよりも早いでしょう。

Matrix のルームでヘルプを求める

matrix ルームに参加して、そこで助けを求めることができます:

参照