オンライン勉強会を支える技術: 鹿児島らぐの事例
はじめに
鹿児島らぐというLinux User Groupでは、月に一度のペースで勉強会を行っています。現在は主にオンラインで活動しており、オープンソースのソフトウェアをさくらインターネットから提供されたVPSにセルフホストして、それを利用してオンライン勉強会を開催しています。ここでは、利用しているビデオカンファレンスサーバーとリアルタイムオンラインテキストエディターを紹介します。
オープンソースのビデオカンファレンスサーバーについて
これまで、オープンソースのビデオミーティングソフトウェアとしてJitsi Meet1やNextcloud Talkなどをセルフホストして試したこともありますが、安価なVPSなどではスペックが足りず失敗して、プロプライエタリのDiscordなどのサービスを利用していました。 Discordもウェブブラウザだけで利用できて便利ですが、いつまで無料利用ができるか分からず、また、アカウントを作らないといけないので、初めて利用する方へ説明する時が面倒でした。
音声だけならMumbleを利用したことが何度かあります。Mumbleはサーバー、クライアント共に軽量です。しかし、専用クライアントが必要であったり、最近はスライドなどを画面共有して進めることが多いので、それができないことが不満です。
そんな折、Galèneというオープンソースのビデオカンファレンスサーバーを知りました。 GalèneはGo製MITライセンスのソフトウェアでLinux/amd64、Linux/arm64、Linux/armv7、Linux/mipsと各種Linuxや、macOS、Windowsでも動作するようです。利用者はウェブブラウザで接続することで利用可能です。 サーバーのスペックについてFAQを見ると、256MBのRAMで動作するとなっています(知ったときは128MBでした)。自分の場合、自宅のテスト環境はRaspberry Pi 3 model B(RAM 512MB)で、本番環境はさくらのVPS 1G(RAM 1GB)で実行しており、問題なく動作しています。さくらのVPSの最低スペックの512MBでも動作すると思います。 GalèneはWebRTC2のSFU3を利用しており、これによりサーバーではクライアント間でのデータの中継だけを行い、サーバーの負荷がこれまで試したMCUを利用したソフトウェアに比べ軽量になっているようです。
Galèneを導入する
GalèneはGo製なので、Go言語のコンパイラを導入してビルドします。今回はDebian/Raspberry Pi OSでパッケージから導入しました。 その後、Galèneのソースを入手してビルドします。
$ sudo apt install golang
$ git clone https://github.com/jech/galene
$ cd galene
$ CGO_ENABLED=0 go build -ldflags='-s -w'
次にGalèneグループの設定ファイルを作成して起動します。
$ mkdir groups
$ echo '{"users": {"bob":{"password":"secret", "permissions":"op"}}}' > groups/example.json
$ ./galene &
https://localhost:8443/group/example/に接続し、 Usernameに「bob」、Passwordに「secret」を入力することで利用できます。 TLS証明書がない場合、自己署名証明書が自動生成されます。設定については、READMEやINSTALLファイルを参照してください。
本番運用する際はTLS証明書を設置しましょう。
以下は、Let's Encryptの証明書をコピーして利用するときの例です。
$ cp /etc/letsencrypt/live/server.example.org/fullchain.pem data/cert.pem
$ sudo cp /etc/letsencrypt/live/server.example.org/privkey.pem data/key.pem
$ sudo chown galene:galene data/*.pem
$ sudo chmod go-rw data/key.pem
設定の詳細は公式のドキュメントを参照してください。
リアルタイムオンラインテキストエディター
リアルタイムオンラインテキストエディターは、利用者全員が同じドキュメントを同時に編集できるツールです。これまでオープンソースのCollabora OnlineやGobbyを試したことがありました。 Collabora Onlineはウェブブラウザで動作するため便利ですが、動作が重いのが難点でした。Gobbyは軽量で動作も問題ないのですが、専用クライアントが必要なのがネックでした。 そこで現在はEtherpad-liteを利用しています。Etherpad-liteはオリジナルのEtherPadをJavaScriptとNode.jsで書き直したもので、Apache License 2.0のオープンソースソフトウェアです。Gobbyよりは重いですが、ウェブブラウザから利用できるので手軽に利用できます。
Etherpad-liteの導入
Etherpad-liteの導入は、以前はNode.jsのパッケージマネージャーで導入していましたが、依存関係が壊れて動かなくなることが何度かあったので、サーバ移行のタイミングでDockerの中で動かすようにしました。
$ docker pull etherpad/etherpad
起動例です。 プラグインも色々ありますが、ほぼデフォルトで利用しています。
$ docker run -v etherpad_data:/opt/etherpad-lite/var -p 9001:9001 etherpad/etherpad
起動すると、 http://localhost:9001 で利用できます。
詳細はドキュメントを参照してください。
実際の勉強会の参加者や発表の管理に使っています。参加者の方に発表タイトルなどを書いてもらい、それをもとに進行しています。後で振り返るときにも便利です。
おわりに
今回は、ビデオカンファレンスサーバーのGalèneと、リアルタイムオンラインテキストエディターのEtherpad-liteを紹介しました。プロプライエタリなソフトウェアを使う方が慣れている人が多く、便利なことも多いですが、Linuxの勉強会ということもあり、なるべくLinux上でオープンソースソフトウェアを自分たちの管理下で使いたいと考え、このようなソフトウェアを利用しています。今回紹介したソフトウェアはさくらのVPS 1G 1台の上で、他のウェブサーバーなどと一緒に動作しており、コストもあまりかかりません。ソフトウェアのアップデートやバックアップなどの手間はかかりますが、興味のある方は試してみてはいかがでしょうか。この記事を見て興味を持ってもらえたら嬉しく思います。
- 8x8がスポンサーをしているJitsi Meetを使ったり、高性能なサーバを時間単位で借りている勉強会もあります ↩︎
- 【基礎知識】WebRTCとは?仕組みやサーバー構成を解説|画像変換・ライブ配信クラウドサービスImageFl ↩︎
- SFU (Selective Forwarding Unit) ↩︎