jitsi meet の構築記録

jitsi サーバを GCP 上に立てました.
その記録です.
`jitsi-videobridge` の設定に気づかず, しばらく音と映像がでない状態でハマっていました.

# jitsi meet とは
- zoom のような多人数ビデオチャットアプリケーションです.
- [github](https://github.com/jitsi/jitsi-meet)
- [公式ページ jitsi.org](https://jitsi.org/)

2020年3月の [東京エリアDebian勉強会](https://debianjp.connpass.com/event/163542/)で使用されていて, 気になったので自前で構築してみました.



# VM インスタンスの準備
- [GCP](https://cloud.google.com/) にアクセスし Compute Engine を選択します.
<img src='https://i.gyazo.com/4248c86d1359a2f808e3ec83618e1d3c.png'>

- VM インスタンス を選択します
<img src='https://i.gyazo.com/05fbd6dd7370e172e22ebc3987c690f2.png'>


- `Create` を選択し, インスタンスの作成に入ります
<img src='https://i.gyazo.com/64e5d6f0767f2a24771780513ce7293d.png'>

- インスタンスの名前や, リージョンを適宜選択します
<img src='https://i.gyazo.com/879905c8d198e08c80570f8a24d87df4.png'>


- image に `Ubuntu 18.04 LTS` を選択します. また, `http`, `https` の接続を許可します.
<img src='https://i.gyazo.com/2b8cb17728728b0f2501f5024c6abb82.png'>

- 必要であれば, プリエンプティブを `on` にします.
<img src='https://i.gyazo.com/7dbd753ddee20a9022a14e4313e006ef.png'>

- 後ほど設定する firewall rule を適用するため, 'Network tag' を設定します
<img src='https://i.gyazo.com/523ee77298eaccec0d823544c44c0ddd.png'>

- 外部向けIPアドレスを予約します.
<img src='https://i.gyazo.com/8e5c2f99ea622ec582322d716eb19e19.png'>


<img src='https://i.gyazo.com/87961488b50a0bc48f458fc5f8daac86.png'>

- 内容を確認し, インスタンスを作成します.

# Firewall ルールの設定
- VPC network > Firewall rule を選択します.
<img src='https://i.gyazo.com/3178706587b6879f1af3a2b5237a98f8.png'>

- create firewall rule を選択します.
<img src='https://i.gyazo.com/ee1558422f2a2513545a9375aebfefac.png'>

- `Target tags` には先程のインスタンスに指定したタグ名を, `Source IP ranges` には下記の内容を指定します.
<img src='https://i.gyazo.com/083979e2d4089bf57878f457dbdeabda.png'>

- 許可するプロトコルは udp, 範囲は 10000-20000 を指定します.
<img src='https://i.gyazo.com/cc3a32038248c389f601756fb8e65768.png'>

- すべてが整っていれば, ネットワークの確認で次のように表示されます.
<img src='https://i.gyazo.com/dfc8cdc083679c81fa309c574171ee76.png'>

# Domain の準備
- 適宜ドメインを取得して, 先程のインスタンスの外部IPにポイントします.
- e.g. meet.hogefuga.com

# VM インスタンスへのログイン
- VM インスタンスのメニューより SSH 接続が可能です
<img src='https://i.gyazo.com/e734560b3ec36af953a4b861132a96b2.png'>

# OpenJDK のインストール
- OpenJDK のリポジトリを追加します.

```
sudo add-apt-repository ppa:openjdk-r/ppa
```

- OpenJDK をインストールします.

```
sudo apt install openjdk-8-jre-headless -y
```

- インストール後に確認します.

```
java -version
```


# Nginx のインストール
- Nginx をインストールします.

```
sudo apt install nginx -y
```

- Nginx をサービスに登録し, ブート時に起動するよう設定します.

```
sudo systemctl start nginx
sudo systemctl enable nginx
```

# jitsi のインストール
- jitsi のリポジトリを apt に登録します.

```
sudo wget -qO - https://download.jitsi.org/jitsi-key.gpg.key | sudo apt-key add - 
sudo sh -c "echo 'deb https://download.jitsi.org stable/' >> /etc/apt/sources.list.d/jitsi-stable.list"
```

- jitsi をインストールします.

```
sudo apt update
sudo apt install jitsi-meet -y
```

- 途中, ダイアログが発生します. 最初のダイアログは, jitsi サーバのドメイン名を入力します.
- e.g. meet.hogefuga.com
- 次のダイアログは, 証明書に関するダイアログです Let's encrypt を使うため, 上段の選択肢を選択します.

<img src='https://i.gyazo.com/0b72ce1cdbe21940029bbc2576ab98c7.png'>

# ufw の設定
- ufw を設定します

```
sudo ufw allow ssh
sudo ufw allow http
sudo ufw allow https
sudo ufw allow in 10000:20000/udp
```

# hostname の設定
- hostname を設定します

```
sudo hostnamectl set-hostname hoge
```

- `/etc/hosts` をひらきます

```
sudo vim /etc/hosts
```

- 取得したドメイン名, 設定したホスト名を2行目に追記します

```
127.0.1.1 meet.hogefuga.com hoge
```

# jitsi-videobridge の設定
- 映像, 音声が配信されない場合, この設定を行います.
- 次のファイルを開きます

```
sudo vim /etc/jitsi/videobridge/sip-communicator.properties
```

- VM インスタンスの外部IP, 内部IPをそれぞれ設定し, 追記します.

```
org.ice4j.ice.harvest.NAT_HARVESTER_LOCAL_ADDRESS=[VMインスタンスの内部IP]
org.ice4j.ice.harvest.NAT_HARVESTER_PUBLIC_ADDRESS=[VMインスタンスの外部IP]
```

# Let's encrypt のスクリプト実行
- jitsi meet に付属する let's encrypt の証明書を取得するスクリプトを実行します
- メールアドレスを質問されるので, 入力します.

```
sudo /usr/share/jitsi-meet/scripts/install-letsencrypt-cert.sh
```

# 動作確認
- 取得したドメインにアクセスし, 動作を確認します.

# 参考資料
- ありがとうございます
- [jitsi quick install](https://github.com/jitsi/jitsi-meet/blob/master/doc/quick-install.md)
- [How to Create Your Own Video Conference Server using Jitsi Meet on Ubuntu 18.04 LTS](https://www.howtoforge.com/tutorial/how-to-create-your-own-video-conference-using-jitsi-meet-on-ubuntu-1804/)
- [オープンソースなWeb会議システム Jitsi server インストール](https://rohhie.net/an-open-source-web-conferencing-system-jitsi-server-installation/#InstallUbuntu1804withoutHostName)
- [新型コロナウィルス対応でビデオ会議の需要が急上昇：Jitsi-meet を Google Compute Engine にインストールする](https://qiita.com/jp-96/items/2fed6bbb6b86117ce5ac)