Janus Gateway に関する記事はいくつかあるものの、インターネット上で公開してどこからでもアクセスできるようにするところまでについて書かれものがあまりなかったので、自分のメモ代わりとして記事に残します。
ここでは、新規に確保したGCP(Google Cloud Platform)インスタンス上にJanusをインストールしてNginxでデモサーバを構築し、インターネットからアクセスできるようにします。ブラウザはChromeを使用しました。
※ お試しで動くようにできたところまでのメモなので、セキュリティ面については全く考慮されていません。
以下のサイトの情報が大いに参考になりました。
[How to run Janus on a Google Cloud Compute instance and build your own WebRTC streaming server]
(https://medium.com/good-robot/how-to-run-janus-on-a-google-cloud-compute-instance-and-build-your-own-webrtc-streaming-server-14144f9efb8)
全体の流れ
- GCPインスタンスの構築
- GCPインスタンス上にJanusビルド環境をインストール
- Janusビルド・インストール
- サーバ証明書の取得・インストール
- 設定ファイルの修正
- Janus起動
なお、SSL接続でないとJanusのWebRTCが動作しないため、GCPインスタンスに割り当て可能なドメイン名が必要になります。
テスト目的ならIPアドレスの自己証明書とかでも構わないと思います。
GCPインスタンスの構築
インスタンス作成
一番安い範囲(無料枠?)で構築します。
ただし、動くことは動くのですが、メモリ614MBでは実用上は厳しいかもしれません。
構築したインスタンスの内容は以下になります。GCPのインスタンス構築方法の詳細は割愛します。
項目 | 設定値 | デフォルトからの変更の有無 |
---|---|---|
シリーズ | N1 | 無 |
マシンタイプ | f1-micro (1 vCPU, 614MBメモリ) | 有 (無料枠を狙う) |
永続ディスク容量 | 30GB | 有 (30GBまでは無料枠で使えるらしい) |
オペレーティングシステム | Debian 10 (buster) | 有 (特に理由はない。Ubuntuとかでも大丈夫だと思う) |

ドメイン名の割り当て
作成したGCPインスタンスに独自ドメインを割り当てます。
まず、GCPインスタンスのIPアドレスを静的アドレスに設定します。
GCPのコントロールパネルから、VCPネットワーク → 外部IPアドレス で設定します。
※静的アドレスにすると無料枠から外れるかもしれません。
予約した静的IPアドレスに、新しくドメイン名を割り当てておきます。
GCPインスタンス上にJanusビルド環境をインストール
作成したGCPインスタンスにSSHログインします。
必要に応じて、アカウントなどの初期設定をします。
apt-get初期化
$ sudo apt-get update
$ sudo apt-get upgrade
必要なパッケージのインストール
基本的には、GitHubのJanus READMEに説明されている通りですが、若干違う箇所があります。
$ sudo apt-get install libmicrohttpd-dev libjansson-dev \
libssl-dev libsofia-sip-ua-dev libglib2.0-dev \
libopus-dev libogg-dev libcurl4-openssl-dev liblua5.3-dev \
libconfig-dev pkg-config gengetopt libtool automake
ビルドで必要になる開発関連ツールを追加でインストールします。
$ sudo apt-get install make git
WEB Serverのインストール
WEB ServerはNginxです。
証明書はLet's Encryptを使用します。
certbotのインストールで固まったことがあったので最初にインストールしておきます。
とりあえずインストールしておくだけです。
どうしてもcertbotをapt-getでインストールできず、パッケージDBを壊してしまって、
GCPインスタンス作成からやり直したことがありました。原因不明。
$ sudo apt-get install nginx certbot
libnice
そのままビルドすると ./autogen.sh: 26: ./autogen.sh: gtkdocize: not found
のエラーが出るので、追加パッケージ gtk-doc-tools をインストールしてからビルドします。
$ sudo apt-get install gtk-doc-tools
$ git clone https://github.com/libnice/libnice.git
$ cd libnice
$ ./autogen.sh
$ ./configure --prefix=/usr
$ make && sudo make install
libsrtp2
$ git clone https://github.com/cisco/libsrtp.git
$ cd libsrtp
$ ./configure --prefix=/usr --enable-openssl
$ make shared_library && sudo make install
その他
フォーラムの記事によると、Data Channelを有効にするには、usrsctpだけでなくBoringSSLも必要らしいです。実際、usrsctpをインストールしただけではData Channelは有効になりませんでした。というわけで、面倒なのでData Channelは試していません。
Janusビルド・インストール
ビルド・インストール
$ git clone https://github.com/meetecho/janus-gateway.git
$ cd janus-gateway
$ ./autogen.sh
$ ./configure --prefix=/opt/janus
$ make
$ sudo make install
$ sudo make configs
www
NginxのホームディレクトリにJanusデモサイトをコピーします。
$ sudo cp -r html /var/www
お試し起動
$ sudo /opt/janus/bin/janus
エラーが出なければOK。ワーニングは無視。
GCPインスタンスに割り当てたドメイン名がjanus.example.comとして、http://janus.example.com/
のようなURLでアクセスすると、Janusのデモサイトが表示されるはず。
ただし、この時点では、エコーテストなどしようとしても、次のようなエラーが出ます。
WebRTC error... "getUserMedia not available"
これは、SSLではないために起こるようです。
この原因が分からず困っていましたが、同様のトラブルがフォーラムに書かれていました。
サーバ証明書の取得・インストール
Let's Encrypt
まず、Nginxを動作停止します。
$ sudo systemctl stop nginx
証明書を取得します。
$ sudo certbot certonly --standalone -d janus.example.com -m webmaster@example.com --agree-tos -n
成功していれば、/etc/letsencrypt/live/janus.example.com に証明書ができているはずです。
設定ファイルの修正
Nginx設定
SSLとリバースプロキシの設定をします。
server {
listen 80 default_server;
listen [::]:80 default_server;
server_name janus.example.com;
return 301 https://$host$request_uri;
}
server {
server_name janus.example.com;
root /var/www/html;
# SSL
listen 443 ssl default_server;
listen [::]:443 ssl default_server;
ssl_certificate /etc/letsencrypt/live/janus.example.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/janus.example.com/privkey.pem;
# Reverse Proxy
location /janusbase/ {
proxy_pass http://127.0.0.1:8088/;
}
}
STUNサーバ設定
STUNサーバを設定しないとNAT越えができません。
Googleのサーバを使用します。
nat: {
stun_server = "stun.l.google.com"
stun_port = 19302
nice_debug = false
#full_trickle = true
#ice_lite = true
#ice_tcp = true
}
リバースプロキシ設定
/var/www/html/janus.js
の447行目を次のように変更します。
// line 447
// var server = gatewayCallbacks.server;
var server = "/janusbase/janus";
Janus起動
$ sudo /opt/janus/bin/janus
これで、インターネットからアクセスしてEcho TestやVideo Roomなどが動作するはずです。
※Chromeでのみ確認しました。