在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
image.png

设定

在有关认证的拼韵配置方面的位置。

    ファイルは指定のサブドメイン名で存在しているので 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

 

    一時間半ほどでメモリ使用量の遷移は以下のように。参加者を増やしても大して増えず
image.png
    CPU ロードアベレージ
image.png
    ネットワーク受信量
image.png
    ネットワーク送信量
image.png

通过移动应用程序访问

    • 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
广告
将在 10 秒后关闭
bannerAds