以下の記事を参考に、WSLにDockerをインストールしてjanus-gatewayを構築します。
WSLの設定はこちらを参照
bit数は以下の通り(srtp関連のコンパイルで影響するため明示)
bash-4.2# uname -a Linux fa82f46217c5 5.10.102.1-microsoft-standard-WSL2 #1 SMP Wed Mar 2 00:30:59 UTC 2022 x86_64 x86_64 x86_64 GNU/Linux
目次
Dockerをインストール
こちらの記事を参考に進める
(参考) UbuntuにDockerをインストールする手順
https://qiita.com/ryome/items/4b6b934b1b2021acfa26
sudo apt-get update
# 必要なパッケージをインストール
sudo apt-get install apt-transport-https ca-certificates curl gnupg-agent software-properties-common
# keyを登録
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
# ダウンロードサイトをaptリポジトリに登録
sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable"
# インストール
sudo apt-get install -y docker-ce docker-ce-cli containerd.io
# sudoなしでdockerコマンドを利用するため、dockerグループにユーザーを追加する
sudo gpasswd -a ユーザ名 docker
# エラーが発生したので、サービス再起動したところ正常に動作した
sudo service docker stop
sudo service docker start
Dockerの操作メモ
# docker起動
sudo service docker start
# コンテナの一覧
sudo docker ps -a
# コンテナの起動
docker start <CONTAINER ID>
# コンテナにシェルで入る
docker exec -it <CONTAINER ID> bash
# コンテナ停止
docker stop <CONTAINER ID>
# コンテナ削除
docker rm <CONTAINER ID>
# コンテナイメージの削除
docker rmi <CONTAINER ID>
Amazon Linux 2のコンテナを作成する
最終的にEC2で動作させたいので、Amazon Linux2のイメージを以下の記事を参考につくります。
(参考) Docker上のAmazonLinux2でLaravelの環境構築
https://qiita.com/skyknsk/items/c9710bb952a854a32cfd
# Amazon Linux 2のイメージをpullする
sudo docker pull amazonlinux:2
# コンテナを作成・起動する
docker run -it -d --privileged --name test_amazonlinux -p 8081:80 amazonlinux:2 /bin/bash
# dockerに入る
docker exec -it test_amazonlinux /bin/bash
Janusをインストールする
(参考) WebRTC JanusをDockerコンテナで構築
https://qiita.com/pyuta/items/fb209de51140b6188e29
(参考) janus-gateway 公式
https://github.com/meetecho/janus-gateway
(参考) AmazonLinux2のDockerコンテナにPython3を入れる
https://qiita.com/k_hoso/items/bcd773bbfd260656e621
Amazon Linux2にaptが入っていないので、yumを使う
必要なライブラリのインストール
yum update
yum install -y jansson-devel \
openssl-devel libsrtp-devel glib2-devel \
opus-devel libogg-devel libcurl-devel pkgconfig \
libconfig-devel libtool autoconf automake texi2html texinfo
⇒「sofia-sip-devel」が必要だが現状パッケージがインストールできないかつsipは使わないので、ひとまずスルーする
# libmicrohttpdが古いとjanusのRESTが有効にできないので、cloneしてビルドする((at least v0.9.59)
git clone https://git.gnunet.org/libmicrohttpd.git
mkdir build
cd build
../bootstrap
../configure --prefix=/usr
⇒「HTTPS support: no (lacking libgnutls)」が気になるが、ひとまず進める
⇒「libgnutls」をyumでinstallできない
https://www.gnutls.org/
make
make install
インストールに必要なパッケージのインストール
yum install -y wget vim git curl make procps-ng
libniceのインストール
# python関係のインストール
yum -y install python3-pip
# python3以上をインストールする
amazon-linux-extras install python3.8 -y
yum install -y python38-devel
pip3.8 install --upgrade pip
pip install setuptools --upgrade
# ビルド関連をインストール
pip3 install meson
pip3 install ninja
# cmakeが入っていないとwarningが出るのでインストールする
yum install -y gcc gcc-c++
cd /opt/
mkdir janus
cd ./janus/
wget https://github.com/Kitware/CMake/releases/download/v3.23.4/cmake-3.23.4.tar.gz
tar xvf cmake-3.23.4.tar.gz
cd cmake-3.23.4
mkdir build
cd build
../configure --prefix=/path/to/install/cmake/3.23.4
make
make install
PATH="/opt/janus/cmake-3.23.4/build/bin:$PATH"
# 本体をインストール
cd /opt/janus/
git clone https://gitlab.freedesktop.org/libnice/libnice
cd libnice
meson --prefix=/usr build && ninja -C build && ninja -C build install
gstreamer: NO Neither a subproject directory nor a gstreamer.wrap file was found.
⇒gstreamerが見つからないエラーが出てsubprojectの生成に失敗するが、ひとまずスルー
libsrtpのインストール
cd /opt/janus/
wget https://github.com/cisco/libsrtp/archive/v2.3.0.tar.gz
tar xfv v2.3.0.tar.gz
cd libsrtp-2.3.0
./configure --prefix=/usr --enable-openssl --libdir=/usr/lib64
make shared_library && make install
usrsctpのインストール
cd /opt/janus/
git clone https://github.com/sctplab/usrsctp
cd usrsctp
./bootstrap
./configure --prefix=/usr --disable-programs --disable-inet --disable-inet6 --libdir=/usr/lib64
make && make install
念のためドキュメント生成ツールもインストール
yum install -y doxygen graphviz
Janus本体をインストール
cd /opt/janus/
git clone https://github.com/meetecho/janus-gateway.git
cd janus-gateway
# configureファイルを生成する
sh autogen.sh
# 動的ライブラリ(libmicrohttpdなど)を参照できるようにする
export PKG_CONFIG_PATH="/usr/lib/pkgconfig:/usr/local/lib/pkgconfig"
./configure --prefix=/opt/janus --enable-rest --disable-plugin-streaming
make
make install
make configs
Janusの動作確認
プロセスを起動し、httpリクエストに応答することを確認
# 共有ライブラリへのpathを設定する
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/lib
# サービス起動
/opt/janus/bin/janus&
# 応答確認
curl http://localhost:8088/janus/info
# janusのプロセスを終了
ps aux | grep janus | grep -v grep | awk '{ print "kill -9", $2 }' | sh
Janusのデモクライアントを設定
# libuvのバージョンがデフォルトだと古くてnodejsのinstallに失敗するため切り替える
yum remove libuv -y
yum install libuv --disableplugin=priorities
yum install -y nodejs npm
# webサーバーをインストール
npm install -g local-web-server
Janusの起動シェルを設定
cd /opt/janus/janus-gateway
touch run_janus.sh
echo "/opt/janus/bin/janus &" >>run_janus.sh
echo "cd /opt/janus/janus-gateway/html" >>run_janus.sh
echo "ws&" >>run_janus.sh
chmod 755 run_janus.sh
起動シェルを用いて動作確認
./run_janus.sh
curl http://localhost:8000
curl http://localhost:8088/janus/info
exit
コンテナイメージの作成
docker ps -a
docker stop <CONTAINER ID>
docker commit <CONTAINER ID> <コンテナ名>
コンテナイメージからコンテナを作成
# 基本のフォーマット
docker run -itd -p 8088:8088 -p 8000:8000 --name <元にコンテナ名> <作成するコンテナ名>
# 例
docker run -itd -p 8088:8088 -p 8000:8000 --name janus-latest janus-latest /bin/bash -c "/opt/janus/janus-gateway/run_janus.sh;/bin/sh"
ホストから動作確認
# 「c:\Users\<ユーザ名>\.wslconfig」ファイルを作成し、「localhostForwarding=True」とすることで、ホストからWSLのlocalhostにアクセスできる
http://127.0.0.1:8000/videoroomtest.html
Docker HubにPUSH
docker login
# hobにあげるためのイメージ例
docker commit janus-latest murahiro987/janus-on-amzlinux2
Dockerfileを作成する
Dockerfileの内容
ファイル名「Dockerfile」で以下を記述する
# Base Image Amazon Linux2
FROM amazonlinux:2
# OS Update
RUN yum update
# Required library installation
RUN yum install -y jansson-devel \
openssl-devel libsrtp-devel glib2-devel \
opus-devel libogg-devel libcurl-devel pkgconfig \
libconfig-devel libtool autoconf automake texi2html texinfo
# Install the command used for installation
RUN yum install -y wget vim git curl make procps-ng
# libmicrohttpd
RUN cd /opt/ && mkdir janus
RUN cd /opt/janus/ && git clone https://git.gnunet.org/libmicrohttpd.git && \
cd libmicrohttpd && \
mkdir build && \
cd build && \
../bootstrap && \
../configure --prefix=/usr && \
make && \
make install
# libnice
RUN yum -y install python3-pip
RUN amazon-linux-extras install python3.8 -y
RUN yum install -y python38-devel
RUN yes | pip3.8 install --upgrade pip
RUN yes | pip install setuptools --upgrade
RUN yes | pip3 install meson
RUN yes | pip3 install ninja
RUN yum install -y gcc gcc-c++
RUN cd /opt/janus/ && wget https://github.com/Kitware/CMake/releases/download/v3.23.4/cmake-3.23.4.tar.gz && \
tar xvf cmake-3.23.4.tar.gz && cd cmake-3.23.4 && mkdir build && cd build && ../configure --prefix=/opt/janus/cmake/3.23.4 && \
make && make install
RUN PATH="/opt/janus/cmake-3.23.4/build/bin:$PATH"
RUN cd /opt/janus/ && \
git clone https://gitlab.freedesktop.org/libnice/libnice && \
cd ./libnice && \
meson --prefix=/usr build && ninja -C build && ninja -C build install
# libsrtp
RUN cd /opt/janus/ && \
wget https://github.com/cisco/libsrtp/archive/v2.3.0.tar.gz && \
tar xfv v2.3.0.tar.gz && \
cd libsrtp-2.3.0 && \
./configure --prefix=/usr --enable-openssl --libdir=/usr/lib64 && \
make shared_library && make install
# usrsctp
RUN cd /opt/janus/&& \
git clone https://github.com/sctplab/usrsctp && \
cd ./usrsctp && \
./bootstrap && \
./configure --prefix=/usr --disable-programs --disable-inet --disable-inet6 --libdir=/usr/lib64 && \
make && make install
# document
RUN yum install -y doxygen graphviz
# env
# 動的ライブラリ(libmicrohttpdなど)を参照できるようにする
RUN export PKG_CONFIG_PATH="/usr/lib/pkgconfig:/usr/local/lib/pkgconfig"
# 共有ライブラリへのpathを設定する
RUN export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/lib
# Install the Janus server itself
RUN export PKG_CONFIG_PATH="/usr/lib/pkgconfig:/usr/local/lib/pkgconfig" && \
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/lib && \
cd /opt/janus/ && \
git clone https://github.com/meetecho/janus-gateway.git && \
cd janus-gateway && \
sh autogen.sh && \
./configure --prefix=/opt/janus --enable-rest --disable-plugin-streaming && \
make && \
make install && \
make configs
# Set up Janus Demo client
# node,npm
RUN amazon-linux-extras install -y epel
RUN yum install -y libuv --disableplugin=priorities
RUN yum install -y nodejs npm
# Simple WEB server (local-web-server) installation
RUN npm install -g local-web-server -y
# Set Janus launch shell
RUN cd /opt/janus/janus-gateway/ && \
touch run_janus.sh && \
echo "#!/bin/sh" >>run_janus.sh && \
echo "/opt/janus/bin/janus &" >>run_janus.sh && \
echo "cd /opt/janus/janus-gateway/html" >>run_janus.sh && \
echo "ws" >>run_janus.sh && \
chmod 755 run_janus.sh
EXPOSE 8000 8088
USER root
CMD ["/opt/janus/janus-gateway/run_janus.sh"]
コンテナイメージの作成・実行
「Dockerfile」が存在するディレクトリで以下のコマンドを実行する
# コンテナイメージの作成
docker build -t <image-name> .
# コンテナ実行
docker run -itd -p 8088:8088 -p 8000:8000 --name <コンテナの名称> -d <image-name>
VSCodeからコンテナに接続しファイルを編集する
コマンドパレッド>Attach to Running Container
コメントを残す