TIPS

ここでは、Sora を利用してシステムを開発する際の TIPS を紹介しています。

用語

システム
ウェブフック通知先サーバ

認証の戻り値を活用する

認証ウェブフックは Sora に接続してきたクライアントをシステム側で認証できる仕組みですが、それ以外にも戻り値を使うことで、システム側の実装負担を減らすことができます。

event_metadta

event_metadata は認証時に Sora にシステムからレスポンス時に返せる値の一つです。

この event_metadata はクライアントには一切通知されません。そのため、Sora とシステム間のみで共有される値です。

例えば event_metadata にシステム側のプライマリキーを含めておくことで、イベントウェブフック通知時の処理を簡易化することが可能です。

また、 event_metadata は ListChannelClients API にも含まれます。そのためシステム側のユーザ名を event_metadata に含めることで、 ListChannelClients API を叩くだけで、そのチャネルに参加しているシステム側のユーザ名一覧が取得可能になります。

TURN-TCP で 80 番ポート、TURN-TLS で 443 ポートを利用する

この設定はある程度の Nginx や証明書の知識が必要になります

Sora は現時点で UDP 側のポートが固定できないため、ファイアーウォール関連の問題が発生する可能性があります。

そのため TURN-TCP のポート番号を 80 番に、TURN-TLS のポート番号を 443 番にすることを推奨しています。

これらのポート番号は HTTP/HTTPS であれば空いていることが多いです。

Nginx のストリーム機能と SNI 機能を利用する

Nginx の機能を利用して、同一ポートの待受で複数のプロトコルを扱えるようにします。

詳細は以下をご覧ください。

Nginx を利用して同一ポートの待ち受けで複数のプロトコルを扱う - Qiita

その機能を利用した Nginx の参考設定です。証明書には Let's Encrypt を利用している想定です。

利用する証明書はマルチドメイン (SANs) またはワイルドカード証明書が前提となります。

Nginx のバージョンにご注意下さい

この設定では stream モジュールの proxy_pass ディレクティブで変数($ssl_server_name)を用います。 この機能は Nginx のバージョン 1.11.3 で導入されました。 2018-08-31 時点で、Ubuntu 16.04 の公式リポジトリ、CentOS 6 と CentOS 7 の EPEL リポジトリでは より古いバージョンになっています。この設定が必要な場合は、ソースからのビルドや nginx.org のリポジトリ利用をご検討下さい。

nginx.conf:

stream {
    upstream sora-turns.example.com {
        # Sora の TURN-TCP へ
        # ここの IP アドレスは Sora の ipv4_address に指定した値を指定してください
        # ここの 127.0.0.1 にすると Firefox で繋がらなくなることを確認しています
        server 192.0.2.1:3478;
    }

    upstream sora.example.com {
        server 127.0.0.1:8080;
    }

    server {
        # TURN-TCP を 80 番で受け取ります
        listen 80;
        proxy_pass sora-turns.example.com;
    }

    server {
        # TURN-TLS と WebSecureSocket を 443 で受け取ります
        listen 443 ssl;

        # SNI を利用して転送先を振り分けます
        proxy_pass $ssl_server_name;

        ssl_certificate /etc/letsencrypt/live/sora.example.com/fullchain.pem;
        ssl_certificate_key /etc/letsencrypt/live/sora.example.com/privkey.pem;

        ssl_protocols TLSv1.2;
        ssl_prefer_server_ciphers on;

        ssl_handshake_timeout 10s;

        ssl_session_cache off;
        ssl_session_tickets off;
    }
}

http {
    include mime.types;
    default_type application/octet-stream;
    sendfile on;
    keepalive_timeout 65;
    gzip on;

    server {
        listen 127.0.0.1:8080;

        root /var/www/html;

        index index.html index.htm index.nginx-debian.html;

        server_name sora.example.com;

        location = /signaling {
                proxy_http_version 1.1;
                proxy_set_header Upgrade $http_upgrade;
                proxy_set_header Connection "upgrade";
                proxy_pass http://127.0.0.1:5000/signaling;
        }

        location /api {
                proxy_http_version 1.1;
                proxy_pass http://127.0.0.1:3000/;
        }

        location / {
                proxy_http_version 1.1;
                proxy_pass http://127.0.0.1:5000;
        }
    }
}

TURN-TCP を 80 番、 TURN-TLS を 443 番で利用する場合の sys.config の設定は以下になります。

sys.config:

%% TURN 機能を有効にするかどうかを指定してください
{turn, true},

%% TURN 機能で利用するレルムを指定してください
{turn_realm, "sora.example.com"},

%% TURN 機能で TURN-TCP を有効にするかどうかを指定してください
{turn_tcp, true},

%% TURN 機能で TURN-TCP を有効にした際に利用するポート番号を指定してください
{turn_tcp_listen_port, 3478},

%% TURN 機能で TURN-TCP URL 払い出し時のポート番号を指定してください
{turn_tcp_port, 80},

%% TURN 機能で TURN-TLS URL 払い出し機能を有効にするかどうかを指定してください
{turn_tls, true},

%% TURN 機能の URL 払い出し機能で利用する FQDN (最後の . なし)を指定してください
{turn_fqdn, "sora.example.com"},

%% TURN 機能で TURN-TLS URL 払い出し機能で利用する FQDN (最後の . なし)を指定してください
{turn_tls_fqdn, "sora-turns.example.com"},

%% TURN 機能で TURN-TLS URL 払い出し機能を有効にした際に利用するポート番号を指定してください
{turn_tls_port, 443},

この設定がうまくいかないなどありましたら、サポートまでお問い合わせください。

その歳は Nginx のバージョンや設定ファイルなどもお送りいただければと思います。