LoginSignup
5
3

More than 1 year has passed since last update.

Nodejs で利用できる WebRTC SFU ライブラリの mediasoup の デモを AWS で動かしてみる

Posted at

経緯

  • 音声通話の技術検証として、WebRTC SFUに着目
  • リモート勤務の人にもデモを触ってもらうため AWS 上で構築

mediasoup-demo

構築

  1. EC2で Ubuntu を起動し、必要モジュールをインストール
  2. GitHub から mediasoup-demo を clone する
  3. ドメインの取得及び証明書の取得を行う
  4. mediasoup-demoを起動する

EC2で Ubuntu を起動し、必要モジュールをインストール

  • Ubuntu 20.04 LTS を利用
  • t3.medium / SSD 10GBで起動
  • Google Chrome で動作確認
  • UDPを解放する必要があるので、AWSのセキュリティグループに注意
  • 必要なモジュールは以下の通り (https://mediasoup.org/documentation/v3/mediasoup/installation/)
    • nodejs 12.0 以降
    • python 3.6 以降 & python3-pip
    • build-essential (make 及び gcc)
    • yarn (npm で install)
    • nginx
    • certbot-nginx
sudo apt update
# npm install
sudo apt install npm -y
# nvm install
curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.0/install.sh | bash
source ~/.bashrc
# node 14.x install
nvm list-remote | grep v14
# v14.x latest
nvm install v14.18.2
nvm use v14.18.2
# 確認
node -v

# python3
sudo apt install python3 python3-pip -y

# build-essential
sudo apt install build-essential -y

# yarn
sudo npm -g install yarn

# nginx
sudo apt install nginx -y

# certbot
sudo apt install certbot python3-certbot-nginx -y

セッション落として再接続

GitHub から mediasoup-demo を clone する

cd ~
git clone https://github.com/versatica/mediasoup-demo

ドメインの取得及び証明書の取得を行う

  • セキュリティグループの設定でTCP/UDPを解放する
    • TCP/80, TCP443
    • TCPとUDPの well-known ポート以外(1024-65535)を解放 (こんなに開けなくても良い)
  • AWS で Elastic IP を取得。起動した EC2に割り当て
  • 自由に利用できるドメインがあれば A レコードで 取得した Elastic IP を追加。
    • 手頃なドメインが無ければ freenom とかで取得
  • nginx の設定を変更
    • /etc/nginx/sites-available/default を変更
    • TCP/3000 がクライアントアプリ待ち受けになるので、ポートフォワードしたいひとはしてください

sudo vim /etc/nginx/sites-available/default

### ここを変更
server_name xxx.example.com
  • certbot で証明書を取得
    • 対話は良い感じに設定してください。省略します
sudo certbot --nginx
  • certbot で取得した証明書を mediasoup-demo/server/certs にコピー
# certbot で取得した証明書のパスはドメインで変わります
mkdir ~/mediasoup-demo/server/certs
sudo cp /etc/letsencrypt/live/xxx.example.com/fullchain.pem ~/mediasoup-demo/server/certs/fullchain.pem
sudo cp /etc/letsencrypt/live/xxx.example.com/privkey.pem ~/mediasoup-demo/server/certs/privkey.pem
sudo chown ubuntu:ubuntu ~/mediasoup-demo/server/certs/fullchain.pem
sudo chown ubuntu:ubuntu ~/mediasoup-demo/server/certs/privkey.pem

mediasoup-demoを起動する

  • server と app (クライアント) の両方を起動する必要がある
    • セッション2つ開くなりしてください
# サーバ
cd ~/mediasoup-demo/server
cp config.example.js config.js
yarn install
  • サーバ側はconfig.jsの書き換えが必要
    • domain を 自分のドメインに変更
    • listenIp を 0.0.0.0 に変更
    • 以下のような箇所が二つあるので両方変更
listenIps : [
  {
    ip          : process.env.MEDIASOUP_LISTEN_IP || '0.0.0.0',
    announcedIp : '1.2.3.4' // ここをelastic ip に変更
  }
]
  • サーバ側の起動
yarn start
  • クライアント側の起動
# クライアント
cd ~/mediasoup-demo/server
yarn install
yarn start
  • エラーで怒られた場合は、モジュールが足りてない可能性が高いので追加でインストール
  • 起動確認
    • https://あなたのドメイン:3000 で https://v3demo.mediasoup.org/ と同じ画面が出てくれば OK
    • 左上が CONNECTになっていればOK
5
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
5
3