はじめに
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ボタンをクリックし、ルーム名を入力すると、ブラウザにパソコンのカメラ映像が表示されます。
作成した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ボタンをクリックし、ルーム名を入力すると、ブラウザにパソコンのカメラ映像が表示されます。
##今後の対応
ローカルのDocker環境でJanusのサービスをコンテナ化できたので、次の目標は直接、外部公開で利用できるコンテナイメージを作りたいと考えてます。
追記
記載の手順をDockerfile化しました。Web RTC JanusコンテナをDockerfileで作成 - Qiitaで公開します。