在Ubuntu20.04上安装和验证JitsiMeet
首先
目标读者
Jitsi Meet をオンプレサーバで使ってみたい方
Jitsi Meet 是什么?
-
- オープンソースの WEB 会議システム
ひとことで言ってしまえば Zoom みたいなもの
人数制限や時間制限みたいなものがない
Zoom や Google Meet などと比べれば、カスタマイズに自由が利きそう
GitHub リポジトリ – jitsi / jitsi-meet
环境
操作系统
- Ubuntu 20.04
规格
-
- ConoHa VPS
CPU 3 Core
メモリ 2 GB
SSD 100 GB
用法
- 社内用 ( 特定の固定 ip からのみのアクセス ) 会議
前提 tí)
- サブドメインの用意
准备工作
更新包
sudo apt update
sudo apt upgrade
从Ubuntu 18.04升级到20.04
-
- 2020/05/31 時点で ConoHa にはまだ Ubuntu 20.04 イメージが存在していないので
-
- 以下記事参照
Ubuntu 18.04(LTS)→20.04(LTS)アップグレード方法
增加内存
-
- このまま進んでいくとメモリ不足でつらいことになりそうなので……
- 物理メモリ/ swap メモリの確認方法
free -m
total used free shared buff/cache available
Mem: 1992 108 1637 5 246 1736
Swap: 2047 0 2047
-
- cd で swapfile 作成するところに移動した後で以下を実行
*** G のところが容量。 5GB 追加したければ、 5G と入力
fallocate -l 5G /swapfile
chmod 600 /swapfile
mkswap /swapfile
swapon /swapfile
- /etc/fstab に下記の1行を追加
/swapfile none swap sw 0 0
- 再起動
shutdown -r now
nginx加上让我们来加密
安装和初始设定
-
- 用意していたサブドメインを入力
- SSL redirect は設定しておいてよし
apt install certbot python3-certbot-nginx
certbot --nginx
确认
- 用意していたサブドメインへブラウザアクセスして nginx 初期画面が表示されれば OK
对nginx进行调优
-
- 以下記事参照
そこそこなスペックのサーバにおけるnginxチューニングの一例
user www-data;
worker_processes auto;
pid /run/nginx.pid;
include /etc/nginx/modules-enabled/*.conf;
events {
worker_connections 4096;
use epoll;
}
http {
charset UTF-8;
sendfile on;
tcp_nopush on;
tcp_nodelay on;
keepalive_timeout 20;
client_header_timeout 20;
client_body_timeout 20;
send_timeout 20;
reset_timedout_connection on;
types_hash_max_size 2048;
server_tokens off;
include /etc/nginx/mime.types;
default_type application/octet-stream;
ssl_protocols TLSv1.2 TLSv1.3;
ssl_prefer_server_ciphers on;
access_log /var/log/nginx/access.log;
error_log /var/log/nginx/error.log;
gzip on;
gzip_vary on;
gzip_disable "MSIE [1-6]\.";
gzip_proxied expired no-cache no-store private auth;
gzip_min_length 1024;
gzip_comp_level 6;
gzip_types text/plain text/css application/json application/javascript text/xml application/xml application/xml+rss text/javascript;
include /etc/nginx/conf.d/*.conf;
include /etc/nginx/sites-enabled/*;
}
UFW可以换成简体中文吗?
设定
- 今回は社内用とするので、許可 ip からのみのアクセスとする
ufw allow from xxx.xxx.xxx.xxx
- 公開するなら以下も指定
ufw allow 'Nginx Full'
ufw allow in 10000:20000/udp
表达
反应
ufw enable
确认
ufw status
开放JDK
安装
apt install openjdk-8-jre-headless
Jitsi Meet 可视化会议平台
安装
GPG 密钥设置
wget https://download.jitsi.org/jitsi-key.gpg.key
apt-key add jitsi-key.gpg.key
rm jitsi-key.gpg.key
添加存储库
- ファイル作成
deb https://download.jitsi.org stable/
安装
- インストール中、サブドメインについて訊かれるので用意していたものを入力
apt update
apt install jitsi-meet
-
- 既に Let’s Encrypt で証明書を用意しているので、証明書については I want to use my own certificate を選択
-
- 鍵の場所は 2 度に分けて訊かれるので、それぞれ以下を指定
結局後で編集するので何入れても良いかも……
/etc/letsencrypt/live/(subdomain_directory_name)/privkey.pem
/etc/letsencrypt/live/(subdomain_directory_name)/fullchain.pem
Nginx配置
-
- このままだとサブドメインの設定が衝突するので以下のように編集
サブドメインの箇所は xxxxxxx.xxx としてあるので自身のものを入力
server {
listen 80 ;
listen [::]:80 ;
server_name xxxxxxx.xxx;
if ($host = xxxxxxx.xxx) {
return 301 https://$host$request_uri;
} # managed by Certbot
location ^~ /.well-known/acme-challenge/ {
default_type "text/plain";
root /usr/share/jitsi-meet;
}
location = /.well-known/acme-challenge/ {
return 404;
}
return 404; # managed by Certbot
}
server {
listen [::]:443 ssl ipv6only=on; # managed by Certbot
listen 443 ssl; # managed by Certbot
server_name xxxxxxx.xxx; # managed by Certbot
add_header Strict-Transport-Security "max-age=31536000";
ssl_certificate /etc/letsencrypt/live/xxxxxxx.xxx/fullchain.pem; # managed by Certbot
ssl_certificate_key /etc/letsencrypt/live/xxxxxxx.xxx/privkey.pem; # managed by Certbot
include /etc/letsencrypt/options-ssl-nginx.conf; # managed by Certbot
ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem; # managed by Certbot
root /usr/share/jitsi-meet;
location / {
try_files $uri $uri/ =404;
}
# ssi on with javascript for multidomain variables in config.js
ssi on;
ssi_types application/x-javascript application/javascript;
index index.html index.htm;
error_page 404 /static/404.html;
location = /config.js {
alias /etc/jitsi/meet/xxxxxxx.xxx-config.js;
}
location = /external_api.js {
alias /usr/share/jitsi-meet/libs/external_api.min.js;
}
# ensure all static content can always be found first
location ~ ^/(libs|css|static|images|fonts|lang|sounds|connection_optimization|.well-known)/(.*)$ {
add_header 'Access-Control-Allow-Origin' '*';
alias /usr/share/jitsi-meet/$1/$2;
}
# 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://127.0.0.1:5280/xmpp-websocket?prefix=$prefix&$args;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
proxy_set_header Host $http_host;
tcp_nodelay on;
}
location ~ ^/([^/?&:'"]+)$ {
try_files $uri @root_path;
}
location @root_path {
rewrite ^/(.*)$ / break;
}
location ~ ^/([^/?&:'"]+)/config.js$ {
set $subdomain "$1.";
set $subdir "$1/";
alias /etc/jitsi/meet/xxxxxxx.xxx-config.js;
}
# Anything that didn't match above, and isn't a real file, assume it's a room name and redirect to /
location ~ ^/([^/?&:'"]+)/(.*)$ {
set $subdomain "$1.";
set $subdir "$1/";
rewrite ^/([^/?&:'"]+)/(.*)$ /$2;
}
# BOSH for subdomains
location ~ ^/([^/?&:'"]+)/http-bind {
set $subdomain "$1.";
set $subdir "$1/";
set $prefix "$1";
rewrite ^/(.*)$ /http-bind;
}
# websockets for subdomains
location ~ ^/([^/?&:'"]+)/xmpp-websocket {
set $subdomain "$1.";
set $subdir "$1/";
set $prefix "$1";
rewrite ^/(.*)$ /xmpp-websocket;
}
}
- 以下削除
rm /etc/nginx/sites-enabled/xxxxxx.xxx.conf
重新加载nginx
- 以下実行でエラーが発生しなければ、ブラウザアクセスして Jitsi Meet の画面が表示されるようになっているはず
nginx -s reload
设定
在有关认证的拼韵配置方面的位置。
- ファイルは指定のサブドメイン名で存在しているので xxxxxx.xxx のところ自身のものに置き換えて読んでください
/etc/prosody/conf.avail/xxxxxx.xxx.cfg.lua
匿名用户的可行性
-
- anonymous のところを internal_hashed にすると匿名ログインできなくなる
- 社内用途であれば anonymous のままで良さそう
-- 前略
-- authentication = "anonymous"
authentication = "internal_hashed"
-- 後略
基本设置的配置文件位置
- 以下にある
/etc/jitsi/meet/xxxxxx.xxx-config.js
-
- 見た目については以下で、次のような項目について設定できる
ウォーターマークの表示
デフォルトのユーザー名
ツールバーボタン
/usr/share/jitsi-meet/interface_config.js
验证操作
从电脑上的访问
五人参加
-
- 各参加者の画質/音質はサーバ依存のところでは特に問題なさそう
クライアント依存でマイクやスピーカーの品質にはもちろん依存する
クライアント側で chrome のメモリ使用量は増えるので、それでカクつくことはある
音質は高音域/低音域のカットが働いていて、人の声に特化させられているのが感じられる
zoom と比較すると、周囲から聞こえてくる雑音カットの処理が弱い
ベータ機能の背景にブラーをかけるものを適用すると、ものすごくカクつく
有9人参加了活动。
-
- シークレットウィンドウを使って二窓してみるなどして、疑似的に参加者を増やしてみた
- 参加者 5 名のときと、動作感としては変わらず
有11人参加。
- 参加者 5 or 9 名のときと、クライアント側の動作感としては変わらず
有30人以上的参与者
-
- クライアント側の動作感として、ものすごいカクついてしまう。音声もしばし途切れる
-
- 基本、参加者のほとんどがビデオ OFF にしておいてもらわないとならなくなる
- たぶん 20 名以上くらいでやろうとすると、もっとスペック上げましょう、ということになると思います
在Prometheus中,对资源的监视
-
- 会議時間は 1 時間 30 分 ほど
-
- 参加者 5 名 → 途中で二窓するなり疑似的に 9 名に増やした
-
- 参加者みんな画質は HD
- 一時間半ほどでメモリ使用量の遷移は以下のように。参加者を増やしても大して増えず
- CPU ロードアベレージ
- ネットワーク受信量
- ネットワーク送信量
通过移动应用程序访问
-
- Android 端末 ( Galaxy S10 ) で動作確認
-
- 大きな問題は感じられない
-
- バッテリ消費はだいぶ激しくなる
- 何かと PC 版と異なる UI というのは、他の会議サービスでも同様なので多くは言及しない
关于其他验证方面
-
- Prometheus でのリソースモニタについてもっと詳細な検証を別記事で書く予定
参加者 11 or xx 名の場合など
音質検証を別記事で書く予定
audio 設定はここ /etc/jitsi/meet/xxxxxx.xxx-config.js にある
カスタマイズ項目として以下を追記する
// add
stereo: true,
// Acoustic Echo Cancellation
disableAEC: true,
// Highpass Filter
disableHPF: true,
// Noise Suppression
disableNS: true,
// Automatic Gain Control
disableAGC: false,
最后
思考
Note: The given word “感想” translates to “impressions” or “thoughts” in English, and it can be paraphrased in various ways depending on the context. However, based on the limited information provided, “思考” was chosen as an alternative, which translates to “reflection” or “contemplation” in English.
-
- 思ったよりも問題なく動作し、メモリ使用が少なくて済んでいたのが驚き
-
- ロードアベレージが最大で 0.35 超になっていたけれど、もう少し人数増えた時どうなるか……?
-
- 少人数限定の運用なら ConoHa のもう一つ下のプランでも耐えられそうなので、コスパは悪くない
-
- Zoom を置き換える場合、バーチャル背景がないというのは、結構なデメリットとして挙げられてしまうだろうなあという印象(ブラー背景が今のところは使いものにならないカクつきなので……)
- 音質設定、結構柔軟に変えられそうなので期待しているところ
下一步
-
- JitsiMeetをセキュアに利用するためホスト/ゲストの認証設定
-
- Prometheus でのリソースモニタについてもっと詳細な検証を別記事で書く予定
- 音質の検証をおこなってみて、結果を別記事に書く予定
相关文章
- JitsiMeetをUbuntu20.04から完全削除する
请参考
来自Jitsi社区
-
- What is the recommend Java version
-
- Configuring audio in meet.jit.si
- Higher audio quality
从其他网站上
-
- How To Install Jitsi Meet on Ubuntu 18.04
- Enable authentication in your instance of Jitsi Meet