WebRTCでビデオ通話するためにpeerjs-serverをインストールした時のメモ


## 概要

* サーバーは[ConoHa](https://www.conoha.jp/)を使用。
* OSはUbuntu 14.04 LTS (64bit)

## stun/turnサーバーのインストール

### 依存関係にあるパッケージをインストールする。

```
$ sudo apt-get install libevent-core-2.0-5 libevent-extra-2.0-5 libevent-openssl-2.0-5 libevent-pthreads-2.0-5 libhiredis0.10 libmysqlclient18 libpq5 mysql-common
```

### インストール

[/turnserver](http://coturn.net/turnserver/)で最新のturnサーバーを探す。このエントリを書いているときの最新は[v4.3.3.1](http://coturn.net/turnserver/v4.3.3.1/)だったので、その中からUbuntu用のパッケージを適当なディレクトリにダウンロード。

```
$ wget http://coturn.net/turnserver/v4.3.3.1/turnserver-4.3.3.1-debian-wheezy-ubuntu-mint-x86-64bits.tar.gz
```

解凍してインストール。

```
$ tar xvzf turnserver-4.3.3.1-debian-wheezy-ubuntu-mint-x86-64bits.tar.gz
$ dpkg -i coturn_4.3.3.1-1_amd64.deb
```

### 設定

```/etc/default/coturn ```を編集。

```/etc/default/coturn 
#
# Uncomment it if you want to have the turnserver running as 
# an automatic system service daemon
#
TURNSERVER_ENABLED=1 
```

```TURNSERVER_ENABLED=1``` の行の先頭の```#```を消して有効にします。

```/etc/turnserver.conf``` を設定
ここでConoHaに立てたサーバーのIPアドレスは```1.2.3.4```だとする。

```/etc/turnserver.conf
listening-ip=1.2.3.4
relay-ip=1.2.3.4
fingerprint
lt-cred-mech
realm=hogehoge.co.jp
syslog
```

上記設定にするとログはsyslogに吐き出されるようになる。

### ユーザー管理

ユーザーは下記のようにして追加

```
$ sudo turnadmin -a -u <ユーザ名> -r <realm> -p <パスワード>
```

例

```
$ sudo turnadmin -a -u myname -r hogehoge.co.jp -p mypass
```

### 起動と停止

起動

```
$ sudo /etc/init.d/coturn start
```

停止

```
$ sudo /etc/init.d/coturn stop
```

以上でstun/turnサーバーのセットアップは終了。

## peerjs-serverのインストール

### nodeのインストール

Ubuntuのaptからインストールすると```nodejs```というコマンド名になってしまうので、```node```という別名を持たせる。

```
$ sudo apt-get install nodejs npm
$ sudo update-alternatives --install /usr/bin/node node /usr/bin/nodejs 10
```

### peerjs-serverのインストール

peerjs-serverはnpmでは```peer```という名前らしい。

```
$ sudo npm -g install peer
```

試しに起動してみる。

```
$ /usr/local/bin/peer --port 9000 --key mykey --path /webrtc
```

フォアグラウンドで起動したらおk。一旦```Ctrl-C```で停止

サービスに登録する。以下のファイルを新規作成。

```/etc/init/peerjs.conf
description "PeerJS Server"
author "co-meeting Inc."

# Saves log to /var/log/upstart/peerjs.log
console log

# Starts only after drives are mounted.
start on started mountall

stop on shutdown

# Automatically Respawn. But fail permanently if it respawns 10 times in 5 seconds:
respawn
respawn limit 10 5

script
    exec node /usr/local/bin/peerjs -p 9000 -k mykey --path /webrtc
end script
```

起動オプションに ```-k mykey```と```--path /webrtc```を設定しているので、クライアント側でキーとパスの設定をするときにこれらを設定する。

### 起動と停止

起動

```
$ sudo start peer
```

停止

```
$ sudo stop peer
```

## Webアプリケーションの用意

```peerjs``` にはサンプルのwebアプリがあるので、Webサーバーにnginxをセットアップし、そのサンプルアプリを使えるようにする。

```
$ sudo apt-get install nginx
```

peerjsをclone(gitがはいっていない場合は```apt-get install git```しておく)

```
$ cd ~/src
$ git clone https://github.com/peers/peerjs.git
```

サンプルをnginxの公開ディレクトリにコピーする。

```
$ cd /usr/share/nginx/html
$ sudo cp ~/src/peerjs/examples/videochat ./peerjs
$ sudo cp ~/src/peerjs/dist ./
```

コピーしてきた```peerjs/index.html```を編集。

```/usr/share/nginx/html/peerjs/index.html
// PeerJS object
var peer = new Peer({ host: '1.2.3.4', port: 9000,
                       key: 'mykey', path: '/webrtc', debug: 3,
                       config: {'iceServers': [
                         { url: 'stun:1.2.3.4:3478' },
                         { url: 'turn:myname@1.2.3.4:3478', credential: 'mypass' }]}
                    });
```

以上でブラウザから```http://1.2.3.4/peerjs/index.html```(1.2.3.4は自身のサーバーアドレス)にんアクセスする。

~~ちなみに家にはPC１台なので、この時点でまだ通話試せてない。明日か明後日ためします。~~

動作確認できました！


## 補足：iOSアプリからのアクセス

iOSのSafariはWebRTCをサポートしていませんが、googleからiOS向けのライブラリおよびサンプルアプリが提供されている。
詳しくは[How to get started with WebRTC and iOS without wasting 10 hours of your life](http://ninjanetic.com/how-to-get-started-with-webrtc-and-ios-without-wasting-10-hours-of-your-life/)を参照。

このへんはまた別にまとめる。

## 参考サイト

[オープンソースのWebRTCサーバー「PeerServer」インストール手順](http://qiita.com/atskimura/items/80b2bb8fbc055cd4616f)
[AWS-EC2上に自分用のSTUNサーバを立てる話](http://blog.wnotes.net/blog/article/stun-server-on-aws-ec2)