6
10

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

WebRTC JanusをDockerコンテナで構築

Last updated at Posted at 2020-12-30

はじめに

WebRTCのJanusのDockerコンテナイメージを構築する手順記録です。
構築したDockerコンテナイメージはDockerHubで公開します。
この手順で作成したDockerコンテナイメージを、すぐに試したい場合は、Docker Hubの公開イメージからJanusのサービスをコンテナ起動の手順で実施します。

前提事項

  • ローカル環境で試しにJanusのWebRTCを試すことを目的とした手順です。
  • ローカルだけでなくWEBに全体公開や他PC・スマホに外部公開するには、別途、SSL化の対応が必要です。

実施環境

MacBook Air (M1, 2020)
Mac OS Big Sur 11.0.1
Docker Desktop シリコンMAC向けPREVIEW版
コンテナのベースイメージ:Debian

コンテナ初期設定

#コンテナイメージ取得
$docker pull debian

#コンテナ起動
$docker run -itd debian /bin/sh

#コンテナID確認
$docker ps -a

#コンテナにshellで入る
$docker exec -it コンテナID bash

#アップデート
$apt-get update

#必要ライブラリインストール
$apt 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 gtk-doc-tools doxygen \
 graphviz libnanomsg-dev cmake -y --fix-missing
#インストールに使うコマンドをインストール
$apt-get install -y wget && \
 apt-get install vim -y && \
 apt-get install git -y && \
 apt-get install -y curl

必要ライブラリインストール

#libnice
$PATH="/usr/local/bin:$PATH"
$apt install python3-pip
$pip3 install meson
$pip3 install ninja
$cd ~
$git clone https://gitlab.freedesktop.org/libnice/libnice
$cd libnice
$meson --prefix=/usr build && ninja -C build && ninja -C build install

#libsrtp
$cd ~
$wget https://github.com/cisco/libsrtp/archive/v2.2.0.tar.gz
$tar xfv v2.2.0.tar.gz
$cd libsrtp-2.2.0
$./configure --prefix=/usr --enable-openssl
$make shared_library && make install

#usrsctp
$cd ~
$git clone https://github.com/sctplab/usrsctp
$cd usrsctp
$./bootstrap
$./configure --prefix=/usr --disable-programs --disable-inet --disable-inet6
$make && make install

#libwebsockets
$cd ~
$git clone https://libwebsockets.org/repo/libwebsockets
$cd libwebsockets
$mkdir build
$cd build
$cmake -DLWS_MAX_SMP=1 -DLWS_WITHOUT_EXTENSIONS=0 \
  -DCMAKE_INSTALL_PREFIX:PATH=/usr -DCMAKE_C_FLAGS="-fpic" ..
$make && make install

Janusサーバ本体をインストール

$cd ~
$git clone https://github.com/meetecho/janus-gateway.git
$cd janus-gateway
$sh autogen.sh
$./configure --prefix=/opt/janus
$make
$make install
$make configs

Janusサーバ本体の動作確認

#サービス起動
$/opt/janus/bin/janus&

#curlコマンドでJanusサーバのJson応答があることを確認する
$curl http://localhost:8088/janus/info

#janusプロセスを終了
$ps aux | grep janus | grep -v grep | awk '{ print "kill -9", $2 }' | sh

Janusのデモクライアントを設定

#node,npmインストール
$apt-get install nodejs npm

#npmのバージョンが古いので、バージョン管理で最新版をインストール
$npm install n -g
$n stable

#古いnodejs npmバージョン削除
$apt purge -y nodejs npm

#シェルを再起動
$exec $SHELL -l

#バージョンを確認
$node -v

#シンプルWEBサーバ(local-web-server)インストール
$npm install -g local-web-server

Janusの起動シェルを設定

$cd ~/janus-gateway
$touch run_janus.sh
$echo "/opt/janus/bin/janus &" >>run_janus.sh
$echo "cd /root/janus-gateway/html" >>run_janus.sh
$echo "ws&" >>run_janus.sh
$chmod 755 run_janus.sh

Janusの起動シェルを実行し動作確認

#Janusサーバ、デモ起動
$~/janus-gateway/run_janus.sh

#Janusサーバ、デモの動作確認
$curl http://localhost:8000
$curl http://localhost:8088/janus/info

#コンテナをexitで抜けてホスト側のコンソールに戻る
$exit

コンテナイメージ作成

ホスト側でコンテナイメージを作成します。

#作業していたコンテナID確認
$docker ps -a

#イメージ作成のためコンテナ停止
$docker stop コンテナID

#コンテナイメージ作成
$docker commit コンテナID janus

#作業していたコンテナを削除
$docker rm コンテナID

作成したコンテナイメージからコンテナを作成

$docker run -itd -p 8088:8088 -p 8000:8000 --name janus janus \
  /bin/bash -c "/root/janus-gateway/run_janus.sh;/bin/sh"

ローカル環境のブラウザからJanusのサーバ、クライアントのサービスにアクセスできる様に「-p 8088:8088 -p 8000:8000 」で、ポートフォーワードしてます。
コンテナ起動時にJanusのサーバ、クライアントを起動する様に「/bin/bash -c」で起動シェルを実行してます。

ブラウザからJanusデモを動作確認

ブラウザからデモページ(http://127.0.0.1:8000/videoroomtest.html)にアクセスし、Janusのビデオルーム等が利用できることを確認する。
右上のSTARTボタンをクリックし、ルーム名を入力すると、ブラウザにパソコンのカメラ映像が表示されます。
01.jpg
02.jpg
03.jpg

作成したDockerイメージをDockerHUBに公開

#作業していたコンテナID確認
$docker ps -a

#イメージ作成のためコンテナ停止
$docker stop コンテナID

#DockerHubにログイン(ユーザー、パスワードを入力)
$docker login

#Dockerイメージ作成
$docker commit コンテナID pyuta/janus-local-run:latest

#DockerイメージのイメージID確認
$docker images

#DockerHubにPush
$docker push pyuta/janus-local-run:latest

#DockerHUBの公開イメージからJanusのサービスをコンテナ起動

$docker run -itd -p 8088:8088 -p 8000:8000 --name janus \
  pyuta/janus-local-run:latest \
  /bin/bash -c "/root/janus-gateway/run_janus.sh;/bin/sh"

ブラウザからデモページ(http://127.0.0.1:8000/videoroomtest.html)にアクセスし、Janusのビデオルーム等が利用できることを確認する。
右上のSTARTボタンをクリックし、ルーム名を入力すると、ブラウザにパソコンのカメラ映像が表示されます。
01.jpg

##今後の対応
ローカルのDocker環境でJanusのサービスをコンテナ化できたので、次の目標は直接、外部公開で利用できるコンテナイメージを作りたいと考えてます。

追記
記載の手順をDockerfile化しました。Web RTC JanusコンテナをDockerfileで作成 - Qiitaで公開します。

6
10
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
6
10

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?