# チュートリアル

## 概要

このチュートリアルでは、Sora に組み込まれている開発ツールを動かして、ひととおり使ってみるところまでを説明します。

## チュートリアルの注意点

> **注意**
>
> 繋がらないという問い合わせのほとんどは UDP のポート開放忘れです。必ずポートを開放してください。

- このチュートリアルでは、リバースプロキシとしての NGINX や HTTPS の知識を必要とします
- Sora は TCP と UDP の両方を利用します- TCP はデフォルトであれば 3000 番と 5000 番を利用します
  - UDP はデフォルトであればエフェメラルポートの範囲を利用します
- Sora のシグナリングは WebSocket over TLS 非対応のため、nginx をリバースプロキシとして利用して、 TLS 終端を行い Sora のシグナリングへ繋ぐ必要があります

## Sora の展開

tar.gz で圧縮されていますので、展開して下さい。

```console
$ tar xfz sora-<version>-<os>-<arch>.tar.gz
```

## ライセンスファイルの配置

ライセンスファイルを etc/ において、cp コマンドを利用して `license.json` に変更して下さい。

## 起動

設定が終わったらサーバーを起動します。

```bash
$ sora-<version>/bin/sora daemon
```

### 停止

以下で停止できます。

```bash
$ sora-<version>/bin/sora stop
```

## シグナリングへの HTTPS の適用

**HTTPS (WebSocket over TLS を含む) の適用は必ず行ってください。HTTPS への接続以外はサポート対象外となります**

ブラウザで WebRTC の機能の一つである getUserMedia を利用する場合は HTTPS が必須となります。
ただし、Sora 自体は HTTPS 非対応のため、Sora の前段にリバースプロキシとして NGINX を設置して TLS 終端を行ってください。

NGINX の location ディレクティブの設定については [nginx](NGINX.html) を参考にして設定をお願いします。

> **注意**
>
> NGINX の設定に関する質問については Sora のサポート範囲外となりますのでご了承下さい。

証明書については [Let's Encrypt - Free SSL/TLS Certificates](https://letsencrypt.org/) の利用をおすすめします。

> **注意**
>
> Let's Encrypt に関する質問については Sora のサポート範囲外となりますのでご了承下さい。

リバースプロキシとしての NGINX の役割:

```
// 開発者ツールの静的ファイルの場合
クライアント -> <HTTPS:443> -> NGINX -> <HTTP:5000> -> Sora

// シグナリングの場合
クライアント -> <WebSocket over TLS:443> -> NGINX -> <WebSocket:5000> -> Sora
```

## 開発者ツールを利用してみる

Sora では開発ツールを利用して、Sora の機能を試すことができます。まずはオンライン版の利用をお勧めします。

### オンライン版を利用する

オンライン版の開発ツールは  から利用することができます。
Sora のシグナリング URL を指定する必要があります。

Sora のシグナリング URL を `signalingUrlCandidates` に指定してください。

シグナリング URL は `wss://sora.example.com/signaling` のように `wss://` で始まる WebSocket over TLS の URL を指定してください。

![image](https://i.gyazo.com/a97220d4ec14bc1107041a45a0a78bb0.png)

### オンライン版を NGINX でリバースプロキシ経由で利用する

オンライン版の開発ツールに対してリバースプロキシを設定することで、Sora のシグナリング URL を指定せずに利用することができます。

NGINX の `location` `/` ディレクティブで
`https://sora-devtools.shiguredo.app` へリバースプロキシしてください。

```nginx
location / {
  proxy_http_version 1.1;
  proxy_pass https://sora-devtools.shiguredo.app;
  proxy_set_header Host sora-devtools.shiguredo.app;
  proxy_set_header X-Real-IP $remote_addr;
  proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
  proxy_set_header X-Forwarded-Proto $scheme;

  proxy_ssl_server_name on;
  proxy_ssl_name sora-devtools.shiguredo.app;
  proxy_ssl_protocols TLSv1.2 TLSv1.3;        
}
```

`https://example.com/` のように NGINX のホスト名でアクセスしてください。

### オフライン版を NGINX で利用する

開発ツールのオフライン版を NGINX でホストして利用することができます。

 から
Latest の `sora-devtools-<version>.tar.gz` をダウンロードして展開してください。

展開したディレクトリを NGINX の `root` ディレクティブに指定してください。

```nginx
location / {
  root /path/to/sora-devtools-<version>;
  index index.html;
  try_files $uri $uri/ /index.html;
}
```

`https://example.com/` のように NGINX のホスト名でアクセスしてください。

### 開発者ツールが動作するブラウザ一覧

以下の最新のブラウザで動作します。

- Google Chrome
- Mozilla Firefox
- Apple Safari
- Microsoft Edge

ただし一部の機能は特定のブラウザでのみ動作します。

### 動作確認

> **警告**
>
> ハウリングする可能性があります。

ビデオ会議システムなどで利用されるような双方向での配信機能です。
受信だけ、送信だけでの利用もできます。

`connect` を押して、その後、別のブラウザやタブで同じ URL を開いて、 `connect` を押して下さい。

![image](https://i.gyazo.com/b79590e2493ec49fed8f9dc0e0470a26.png)

追加でタブを開いて `connect` していけば参加者を増やせます。

開発ツールでは気軽にいろいろな設定を試せるようになっています。触ってみてください。

## 次のステップ

[本番稼働に向けて](PRODUCTION.html) で Sora の本番稼働向けの設定を行ってください。

Sora はいろいろな機能を持っていますので、一通りドキュメントをご確認下さい。
ドキュメントで不明な点がありましたら、お気軽にお問い合わせください。

> **注釈**
>
> [アプリケーション連携チュートリアル](APP_INTEGRATE_TUTORIAL.html) は Sora を利用したアプリケーション連携用のチュートリアルを Python にて説明しています。

## トラブルシューティング

### タイムアウトが起きてつながらない場合

> **重要**
>
> OS の設定やファイアウォールで UDP の通信ができない場合は接続に失敗します。

Sora が利用する UDP のポートの範囲は通常 32768 から 60999 です。この範囲の通信を許可にしてみてください。

### それでもうまく繫がらない場合

サーバーの IPv4 アドレスを `ipv4_address` に指定して、 `ipv6` を `false` にしてみてください。

```ini
## https://sora-doc.shiguredo.jp/SORA_CONF#sora-conf-ipv4-address
ipv4_address = 192.0.2.10
```

> **注釈**
>
> Amazon EC2 インスタンス等のようなパブリック IP アドレスとプライベート IP アドレスが異なる環境では
> ブラウザからアクセスできる IP アドレス（パブリック IP アドレス）を ipv4_address に設定してください。

### よくある問題

ここでは利用しているドメインを仮に `example.com` としています。

- `https://example.com/` にアクセスできない- NGINX の設定が間違っている可能性があります。nginx の設定を見直して下さい
- `https://example.com/` にアクセスしても 404 になる- Sora の組み込みの開発者ツールが有効になっていない可能性があります- `sora.conf` の設定で開発者ツールが有効になっているか確認して下さい
    - `http://example.com:5000/` にアクセスして開発者ツールが有効になっているかを確認して下さい
  - Sora が利用するポートを他のプロセスが利用していないかを確認してください- Sora が利用したいポートを他のプロセスが既に利用しているために、Sora が起動していない可能性があります

### それでも繋がらない場合

**お問い合わせ前に以下を確認してください**

- チュートリアル以外のことはやっていないかどうかを確認して下さい
- **ファイアウォールの設定をすべて無効にして確認してください**
- IPv6 アドレスを無効にして確認してください
- Sora では基本的にロードバランサーを利用することはできませんので、ロードバランサーなしで確認してください

すべてを確認しても繋がらない場合はお問い合わせください。

その際に以下の情報を **必ず** お送りください。

- どんな環境でチュートリアルを実行しているか
- Sora のバージョン
- Sora の設定ファイルである `sora.conf`
- log ディレクトリ以下すべてを tar.gz にて圧縮してお送りください- 容量が 1 メガバイトを超える場合は事前にご連絡ください。アップローダーをご提供します
- 繋がらなかった開発者ツール- たとえば `sendonly` など
- 繋がらなかったブラウザを利用している OS とバージョン- たとえば `macOS Sonoma 14.5` や `Windows 10 2004` など
- 繋がらなかったブラウザの種類とバージョン- たとえば `Chrome 125.0.6422.142` など

それ以外にも可能な限り、こちらがサポートをするために必要そうな情報をお送りください。
