新型コロナウィルス対応でビデオ会議の需要が急上昇：Jitsi-meet を Google Compute Engine にインストールする

# 新型コロナウィルス対応でビデオ会議の需要が急上昇

## FAQ

### Q1.ビデオ会議ができますか？
はい。Jitsiは、ビデオ会議のためのソリューションです。

### Q2.無料ですか？
はい。Jitsiは、オープンソースプロジェクトであり、無料で利用できます。

### Q3.ソースコードのライセンスは？
Apache License 2.0 です。
https://github.com/jitsi/jitsi/blob/master/LICENSE

### Q4.今すぐに試せますか？
はい。本家の https://jitsi.org/ から[「START A CALL」](https://meet.jit.si/)ですぐに試せます。

# Google Cloud Platform の無料トライアル($300)を活用する

Google Cloud Platform（GCP）無料枠では、サービスを自分で試して学習できる無料のリソースを提供していますので、これを利用して、ビデオ会議システムを導入・運用してみましょう。

* 12 か月間の無料トライアル（Google Cloud サービスで使用できる $300 相当のクレジット付き）。
* Always Free（使用制限の枠内で数多くの一般的な Google Cloud リソースに無料でアクセス可能）。

https://cloud.google.com/free/docs/gcp-free-tier?hl=ja

# インストール手順

## 1. Google Compute Engine (GCE) に Ubuntu 18.04 LTSを構築する

GCEには、Ubuntu 18.04 LTS のインストールイメージがあらかじめ用意されていますので、それを使って Ubuntu の構築を行います。
https://cloud.google.com/sdk/docs/quickstart-debian-ubuntu?hl=ja

### 1-1. Google Cloud Platform プロジェクトの作成
[Google Cloud Platform プロジェクトを作成](https://console.cloud.google.com/cloud-resource-manager?hl=ja)のページを表示し、「CREATE PROJECT」で、新しいプロジェクトを作成します。

1. プロジェクト名：jitsi-meet
2. プロジェクトID：（デフォルトのまま）
3. 場所：（組織なし）

プロジェクト名に「jitsi-meet」と入力し、「作成」します。

### 1-2. Google Compute Engine の作成（プリエンプティブル VM）
プロジェクトが作成されたら、左上のナビゲーションメニュー（三本線のアイコン）から、「Compute Engine」を選択します。VMインスタンスの課金を有効にし、支払い用のクレジットカード情報を入力しますが、$300の枠内であれば、課金されることはありません。

1. インスタンスを作成します。
2. 「名前」を入力します。**例：jitsi**
3. 「リージョン」を選択します。**例：asia-northeast1（東京）**
4. 「ゾーン」を選択します。**例：asia-northeast1-a**
5. マシン構成の「マシンタイプ」を選択します。**例：n1-standard-1（1 vcpu、3.75 GBメモリ）**
6. ブートディスクを「変更」し、「オペレーティングシステム」と「バージョン」を変更します。**例：Ubuntu、Ubuntu 18.04 LTS**
7. ファイアーウォールの設定で、「HTTP トラフィックを許可する」と「HTTPS トラフィックを許可する」の両方をチェックします。
8. 「管理、セキュリティ、ディスク、ネットワーク、単一テナンシー」をクリックして展開します。
9. 「管理」タグの[「プリエンプティブ」](https://cloud.google.com/compute/docs/instances/create-start-preemptible-instance?hl=ja)を**「オン」**にします（作成後は変更できません）。※「プリエンプティブ」を**「オン」**にすると24時間以内に強制的にシャットダウンされるという制約がありますが、利用料金が大幅に値引きされます。
10. 「ネットワーキング」タグの「ネットワークインターフェース」で、"default"の右の鉛筆アイコンをクリックします。
11. 「外部IP」で、「IPアドレスを作成」を選択し、名前を入力し、「予約」します。**例：jitsi-ip**
12. 「ネットワークインターフェース」で「完了」をクリックし、編集内容を確定します。
13. もう一度、設定内容を確認し、「作成」で、インスタンスの作成を完了します。

インスタンスが作成され、自動的に起動状態となっています。課金対象は、作成したインスタンスと予約した外部 IP アドレスです。無料トライアルの$300枠を超えないように注意しましょう。

## 2. DNSの準備

作成したインスタンスの外部IPアドレスをDNSに登録します。Google Domainsで、独自ドメインの登録とDNS設定が可能です（有償）。
無料で試したい場合は、[no-ip.com](https://www.noip.com/)等のDynamicDNS無料サービスをご利用ください。

Jitsi Meetのインストール時に入力しますので、登録したホスト名（Hostname）を控えておいてください。
**例：node1.example.com**

## 3. Jitsi-meetをインストールする

作成したGCEインスタンスには、SSHでリモート接続できますので、ブラウザーからSSH接続し、Jitsi-meetをインストールします。

### 3-1. SSH接続

構築した Ubuntu サーバーには、ブラウザ上でSSH接続することが可能です。

1. 左上のナビゲーションメニュー（三本線のアイコン）から、「Compute Engine」を選択し、「VMインスタンス」の一覧ページを開く。
2. 作成したサーバー jitsi の**SSH**をクリックする。
3. 別ウィンドウが開き、しばらくすると Ubuntu のコンソール画面にログインされた状態になる。
 
### 3-2. Jitsi Meetのインストール

Jitsi Meetをインストールするには、OpenJDK JRE 8とNginxが必要ですので、順にインストールしていきます。
[公式ページのインストール方法](https://github.com/jitsi/jitsi-meet/blob/master/doc/quick-install.md)と[このページの解説](https://vitux.com/how-to-install-jitsi-meet-video-conference-platform-on-ubuntu/)の通りにインストールするだけです。

#### 1) Ubuntuのupdateとupgradeを行います。

```
sudo apt-get update -y
sudo apt-get upgrade -y
``` 

#### 2) hostnameとFQDNを設定します。

```
sudo hostnamectl set-hostname node1
```
※ "node1"は、DNS登録したホスト名（ドメイン名を除く）

次のコマンドで、hostsファイルを開き、127.0.1.1の行を追加します。

```
sudo nano /etc/hosts
```
※ nanoエディタの保存終了方法は、[Ctrl]+X、Y、[Enter]です。

```
127.0.1.1 node1.example.com node1
```
※ "node1.example.com"は、DNS登録したホスト名（ドメイン名を含む）
※ "node1"は、DNS登録したホスト名（ドメイン名を除く）


次のコマンドで、設定されたことを確認できます。

```
hostname
hostname -f
```

#### 3) Javaをインストールします。

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

バージョンを確認します。

```
java -version
```

このようなバージョン情報を確認できます。

```
$ java -version
openjdk version "1.8.0_242"
OpenJDK Runtime Environment (build 1.8.0_242-8u242-b08-0ubuntu3~18.04-b08)
OpenJDK 64-Bit Server VM (build 25.242-b08, mixed mode)
```

#### 4) Nginxをインストールします。

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

インストール後、Nginxが動作していることを確認できます。

```
sudo systemctl status nginx
```

```
● nginx.service - A high performance web server and a reverse proxy server
   Loaded: loaded (/lib/systemd/system/nginx.service; enabled; vendor preset: enabled)
   Active: active (running) since Tue 2020-03-03 00:27:21 UTC; 13s ago
     Docs: man:nginx(8)
 Main PID: 16579 (nginx)
    Tasks: 2 (limit: 4394)
   CGroup: /system.slice/nginx.service
           ├─16579 nginx: master process /usr/sbin/nginx -g daemon on; master_process on;
           └─16584 nginx: worker process
Mar 03 00:27:21 node1 systemd[1]: Starting A high performance web server and a reverse proxy server...
Mar 03 00:27:21 node1 systemd[1]: nginx.service: Failed to parse PID from file /run/nginx.pid: Invalid argument
Mar 03 00:27:21 node1 systemd[1]: Started A high performance web server and a reverse proxy server.
```

#### 5) Jitsi Meetパッケージのリポジトリを登録します。

Jitsi Meetは、ubuntuのリポジトリには標準で含まれていませんので、追加登録が必要です。

```
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.list"
```

```
sudo apt-get update -y
```

#### 6) Jitsi Meetをインストールします。

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

jitsi-videobridgeの構成で、ホスト名（hostname）を入力し、[Enter]キーでOKします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/252891/dfdbf600-598a-0020-617f-db772ed684d7.png)


後で、Let's encrypt 証明書を取得設定しますので、そのまま、[Enter]キーでOKします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/252891/b4bb7c8f-3cfe-171b-dc7a-58e8d9c27c8d.png)

#### 7) Jitsi Meetのページを開いて、動作確認します。

Chromeブラウザで、DNS登録したサーバーへアクセスすると、インストールしたJitsi Meetのページを開くことができます（保護されていない通信と表示されます）。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/252891/b0a37397-d083-2904-3f08-2466703829f9.png)
また、右上の歯車アイコンで、日本語への切り替えやプロファイルの変更等ができます。

## 4. ファイアーウォールを許可し、JitsiとLet’s Encryptの設定をする

ファイアーウォールとJitsiの追加設定を行います。

### 4-1. ファイアーウォールの許可

httpとhttpsはGCEの作成時に許可していますので、ポート番号10000/UDPの許可をします。

#### 1) ファイアーウォールルールの作成

1. GCPの「VPCネットワーク」で「ファイアーウォールルール」を選択します。
2. 「ファイアーウォールルールの作成」をクリックします。
3. 名前を入力します。**例：allow-jitsi-meet**
4. ターゲットタグを入力します。**例：jitsi-meet-server**
5. ソースIPの範囲をを入力します。**例：0.0.0.0/0**
6. プロトコルとポートで、**「UDP」**をチェックし、UDPの右の入力エリアに、**10000**と入力します。
7. 「作成」をクリックし、ファイアーウォールルールを作成します。

#### 2) サーバーインスタンスにファイアーウォールルールを適用

1. 「Compute Engine」の「VMインスタンス」を表示し、名前をクリックします。
2. VM インスタンスの詳細で、「編集」をクリックします。
3. 「ネットワークタグ」にファイアーウォールルールの作成で指定したターゲットタグを追加入力します。**例：jitsi-meet-server**
4. 「保存」をクリックし、編集内容を保存します。


### 4-2. Jitsiの追加設定

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

次の２行を追加し、サーバーの内部IPと外部IPを指定します。

```
org.ice4j.ice.harvest.NAT_HARVESTER_LOCAL_ADDRESS=<内部 IP>
org.ice4j.ice.harvest.NAT_HARVESTER_PUBLIC_ADDRESS=<外部 IP>
```

### 4-3. フリーの認証局 Let’s Encrypt の設定をする

Jitsi-meetサーバーへは、httpsでセキュアに接続します。SSLの認証局としてフリーのLet’s Encryptを利用します。

#### 1) Jitsi Meetのインストールツールを起動します。

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

#### 2) 管理者のメールアドレスを入力します。

```
You need to agree to the ACME server's Subscriber Agreement (https://letsencrypt.org/documents/LE-SA-v1.1.1-August-1-2016.pdf
) 
by providing an email address for important account notifications
Enter your email and press [ENTER]: 
```

インストールが開始され、Let’s Encrypt の設定も完了します。一般的には、cronなどの設定も手動で行わなければなりませんが、すべて、自動設定されるようです（楽ちん）。

### 4-4. サーバーの再起動

「Compute Engine」の「VMインスタンス」を表示し、対象のサーバーにチェックを入れ、「リセット」でサーバーを再起動します。
再起動後、外部 IPにアクセスして、表示されたページの「Go」ボタンでビデオ会議を始められます。

# クリーンアップ
このチュートリアルで使用したリソースについて GCP アカウントに課金されないようにするには、GCP プロジェクトを次の手順で削除することです。

* GCP Console で プロジェクト ページに移動します。→[プロジェクト ページに移動](https://console.cloud.google.com/cloud-resource-manager)
* プロジェクト リストで、削除するプロジェクトを選択し、[削除] をクリックします。
* ダイアログでプロジェクト ID を入力し、[シャットダウン] をクリックしてプロジェクトを削除します。