0.本記事の概要
この記事は、Nextcloudの追加アプリケーションである「Nextcloud Talk」についての紹介と、その高性能バックエンド(Nextcloud Talk HPB)のオープンソース版をインストールする方法を詳細に解説しています。Nextcloud Talkはチャットやビデオ通話機能を提供し、Nextcloudの理念である「データ主権の確保」を実現するツールです。記事では、Talkの基本機能、HPBの役割、そしてUbuntu 24.04上へのインストール手順を紹介しています。
1. Nextcloud Talkとは
Nextcloudで利用できるNextcloud Talkというアプリケーションがあります。このアプリケーションでは、Nextcloudの利用者や外部のゲストとチャットやビデオ通話を行うことができます。

Nextcloud Talkをアプリケーション単体で使用した場合には、チャット機能と、幾つか条件が付きますが小人数でのビデオ通話を利用することができます。
これを超えてNextcloud Talkを使用するために、Nextcloud EnterpriseのTalkサブスクリプションでは、製品のサポートに加えてNextcloud Talk High Performance Backend (Nextcloud Talk HPB)という、Nextcloud Talk用の追加のビデオ通話サーバーのパッケージやリポジトリが提供されます。
2. Nextcloudの掲げる理念とNextcloud Talkのメリット
Nextcloud Talkを使用するメリットは、Nextcloudそのものの理念に沿っています。「Regain control over your data」つまり、データ主権に基づきそれを管理する権限を取り戻すということです。
※データ主権とは: データが生成された国や地域の法律や規制に従ってそのデータを安全に運用する(主権を確保する)という考え方で例えば、提供されたサービスのデータが国外に保存されるようなものについては日本国内の法律が及ばないこともあります
※クラウドサービスでも、国や地域の法律・規制に準拠し、データの主権と管理を特定の国や組織が保持できる、ソブリンクラウドといったものが注目されています
Nextcloudはセルフホスティングのサーバーで利用できるソフトウェアです。そのサーバーを何処に置くか、誰にアクセスさせるか、どのように管理するかは自身で決めることができます。インターネットに接続できないような環境で使用することもできます。
裏を返すと、サービス(SaaS)で提供されるものとは異なり、その導入と管理は自分たちで行う必要があります。しかしながら、自分のデータを自分で管理するという選択肢が、Nextcloudにはあると捉えて頂ければ幸いです。
3. Nextcloud Talkのビデオ通話とNextcloud Talk HPBについて
Nextcloud Talkのビデオ通話は、WebRTCを用いたP2P通信で行われます。端的には通話者同士が、音声やビデオなどを送り合うために必要な通信を直接送り合える必要があります。
例えば、ある単一のLANの中にある通話者同士は、お互いが見える所にあり接続への障壁も無いため容易に通話が行えます。しかしながら、インターネット越しの通話では幾つかのハードルが有り、通話者が相互に通信を行えない場合もあります。
詳しい理由は割愛しますが、ネットワークや利用する端末などの環境により、ビデオ通話事態への影響が有ることがあると頭の片隅に留めていただければと思います。
Nextcloud Talk HPB (High Performance Backend)では、ビデオ通話に関するいくつかのサーバー機能を提供します。ひとつはシグナリング機能であり、通話者同士の接続制御を行います。もうひとつはメディアサーバー機能であり、音声やビデオデータの中継や最適化を行います。
Nextcloud Talk HPBを使用すると、Nextcloud Talkアプリ単体では4人程度に限られていたビデオ通話参加者を、Nextcloudサーバーやクライアントの負荷を下げながら、それを超える人数でも使用することができます。
また通話者同士の接続性を上げるためにはNextcloud Talk HPBに併せて、通話者自身のアドレス情報を調べるためのSTUNや、音声やビデオをネットワークを超えて中継するためのTURNといった、他のサーバーを組み合わせて使用します。
4. Nextcloud Talk HPB (OSS) のインストール
Nextcloud Talk HPBのOSS版を利用した導入例をご紹介差し上げます。こちらでは製品のサポートは行えませんので、自己責任で導入と利用いただく事にご留意ください。
是非この記事をご覧の方々が、Nextcloud Talkに触れられてみるきっかけになればと思います。製品のサポートやNextcloud Talk HPBのパッケージをお求めの場合には、弊社までお問合せください。
なお、前記の通り通話者同士のネットワークや利用する端末などの環境により、ビデオ通話事態への影響が有る場合があります。Nextcloud Talkの利用に際しては、お客様が主体となり弊社がサポートを行うことができますが、問題が発生した時に弊社のみで必ず解決できるものではないことはお知り置きください。導入をされる際には、PoCなどで事前の検証を行われることをお勧めいたします。
まずは今回インストールするサーバーについて、OSはUbuntu24.04を使用し、台数は1台を用意します。このサーバーの上に、Nextcloud Talk用にTalk HPBサーバーを導入します。また今回は併せて、同じサーバーの上にSTUN/TURNとしてCoturnを導入します。Talk HPBとSTUN/TURNを他のサーバーとして分けてインストールすることもできますが、今回はミニマムの構成として同じサーバー上にインストールを行います。Nextcloudサーバーは既存であるものを利用します。
Nextcloud Talkのドキュメントや各アプリケーションのGitHubリポジトリについては、以下を参照ください。
・Nextcloud Talk Documentation
https://nextcloud-talk.readthedocs.io/en/latest
・Nextcloud Talk GitHub Repository
https://github.com/nextcloud/spreed
・Nextcloud Spreed Signaling GitHub Repository
https://github.com/strukturag/nextcloud-spreed-signaling
それでは、必要なサーバーOSのセットアップが完了している前提にて、各ミドルウェアのインストールを順に行っていきます。サーバーのFQDNやIPアドレスについては、ご自身の環境に読み替えて設定ください。
■coTurnのインストール
$ sudo apt -y install coturn
$ sudo sed -i.bak '/TURNSERVER_ENABLED/c\TURNSERVER_ENABLED=1' /etc/default/coturn
$ openssl rand -hex 32
353e0ebd7a32430dd6ca6381bf64a8fec452bce50d785ccde7b12b40c3aadc7a
※得られた乱数を「①Turn-Key」として使用します
</etc/tunserver.conf(以下内容に編集)>
----
listening-port = 3478
external-ip = 1.2.3.4 #GlobalIP(NAT)
# Lower and upper bounds of the UDP relay endpoints:
#min-port = 49152
#max-port = 65535
# Uncomment to run TURN server in 'normal' 'moderate' verbose mode.
#verbose
fingerprint
#lt-cred-mech # Only on coTURN below v4.5.0.8!
use-auth-secret
static-auth-secret = 353e0ebd7a32430dd6ca6381bf64a8fec452bce50d785ccde7b12b40c3aadc7a #①Turn-Key
realm = nextcloud.biz #←talk(turn user)のrelm
total-quota = 0
bps-capacity = 0
stale-nonce = 600
log-file = /var/log/turnserver/turn.log
#syslog
simple-log
new-log-timestamp
#no-loopback-peers # Only on coTURN below v4.5.1.0!
no-multicast-peers
pidfile="/var/run/turnserver/turnserver.pid"
no-cli
----
$ sudo mkdir /var/log/turnserver
$ sudo chown turnserver:turnserver /var/log/turnserver
$ systemctl is-enabled coturn
$ sudo systemctl restart coturn
$ systemctl status coturn
■janusのインストール
$ sudo apt -y install janus
$ openssl rand -base64 16
MGy5EkSwy3vquSxUmHbOaA==
※得られた乱数を「②API-Key」として使用します
</etc/janus/janus.jcfg(以下部分をコメントアウトor修正)>
----
general: {
log_to_file = "/var/log/janus/janus.log"
debug_timestamps = true
}
nat: {
stun_server = "hpb.nextcloud.biz"
stun_port = 3478
nat_1_1_mapping = "1.2.3.4" #GlobalIP(NAT)
turn_rest_api_key = "MGy5EkSwy3vquSxUmHbOaA==" #②API-Key
}
plugins: {
disable = "libjanus_audiobridge.so, libjanus_duktape.so, libjanus_echotest.so, libjanus_lua.so, libjanus_nosip.so, libjanus_recordplay.so, libjanus_sip.so, libjanus_sipre.so, libjanus_streaming.so, libjanus_textroom.so, libjanus_videocall.so, libjanus_voicemail.so"
}
transports: {
#disable = "libjanus_nanomsg.so, libjanus_pfunix.so, libjanus_rabbitmq.so"
disable = "libjanus_http.so, libjanus_mqtt.so, libjanus_nanomsg.so, libjanus_pfunix.so, libjanus_rabbitmq.so"
}
events: {
disable = "libjanus_gelfevh.so, libjanus_mqttevh.so, libjanus_nanomsgevh.so, libjanus_rabbitmqevh.so, libjanus_sampleevh.so, libjanus_wsevh.so"
}
----
$ sudo mkdir /var/log/janus
</etc/janus/janus.plugin.videoroom.jcfg(以下部分をコメントアウト)>
----
#room-1234: {
# description = "Demo Room"
# secret = "adminpwd"
# publishers = 6
# bitrate = 128000
# fir_freq = 10
# #audiocodec = "opus"
# #videocodec = "vp8"
# record = false
# #rec_dir = "/path/to/recordings-folder"
#}
#room-5678: {
# description = "VP9-SVC Demo Room"
# secret = "adminpwd"
# publishers = 6
# bitrate = 512000
# fir_freq = 10
# videocodec = "vp9"
# video_svc = true
#}
----
</etc/janus/janus.transport.websockets.jcfg(以下部分をコメントアウトor修正)>
----
ws_ip = "127.0.0.1"
#cert_pem = "/etc/ssl/certs/ssl-cert-snakeoil.pem"
#cert_key = "/etc/ssl/private/ssl-cert-snakeoil.key"
----
$ sudo systemctl edit --full janus.service
</etc/systemd/system/janus.service(以下該当部分を編集)> *coturn.serviceを追加する
----
[Unit]
After=network.target coturn.service
----
$ systemctl is-enabled janus
$ sudo systemctl restart janus
$ systemctl status janus
■natsのインストール
$ sudo apt install -y nats-server
$ systemctl is-enabled nats-server
$ systemctl status nats-server
■signalingのインストール
$ sudo apt -y install git golang make
$ cd /opt
$ sudo git clone https://github.com/strukturag/nextcloud-spreed-signaling.git
$ cd nextcloud-spreed-signaling/
$ sudo make build
$ sudo cp /opt/nextcloud-spreed-signaling/bin/signaling /usr/bin/
$ sudo mkdir /etc/signaling/
$ sudo cp /opt/nextcloud-spreed-signaling/server.conf.in /etc/signaling/server.conf
$ sudo cp /opt/nextcloud-spreed-signaling/dist/init/systemd/signaling.service /etc/systemd/system/signaling.service
$ openssl rand -hex 32
3fa3554b98e46e24f83bea0a1cf33b7b3f983781168a8efd657a3582d220fe47
※得られた乱数を「③Hash-Key」として使用します
$ openssl rand -hex 16
bd0b4ea249efb8649a4b8e067e3fa8f6
※得られた乱数を「④Block-Key」として使用します
$ openssl rand -hex 32
bf314d5fa7aee25d7ff6e9e6042ed00ea65b823b9c30ecbc50f6c6dcb8f91b22
※得られた乱数を「⑤Nextcloud-Secret-Key」として使用します
/etc/signaling/server.conf(以下部分をコメントアウトor修正)>
----
[http]
listen = 127.0.0.1:8080
[sessions]
hashkey = 3fa3554b98e46e24f83bea0a1cf33b7b3f983781168a8efd657a3582d220fe47 #③Hash-Key
blockkey = bd0b4ea249efb8649a4b8e067e3fa8f6 #④Block-Key
[backend]
backends = backend-1
[backend-1]
url = https://nextcloud.nextcloud.biz #talkを実行するNextcloud URL
secret = bf314d5fa7aee25d7ff6e9e6042ed00ea65b823b9c30ecbc50f6c6dcb8f91b22 #⑤Nextcloud-Secret-Key
[nats]
url = nats://127.0.0.1:4222
[mcu]
type = janus
url = ws://127.0.0.1:8188
[turn]
apikey = MGy5EkSwy3vquSxUmHbOaA== #②API-Key(/etc/janus/janus.jcfg)
secret = 353e0ebd7a32430dd6ca6381bf64a8fec452bce50d785ccde7b12b40c3aadc7a #①Turn-Key(/etc/tunserver.conf)
servers = turn:hpb.nextcloud.biz:3478?transport=udp,turn:hpb.nextcloud.biz:3478?transport=tcp #Turnの接続先
----
</etc/systemd/system/signaling.service(追記)>
----
[Unit]
After=network.target
WantedBy=multi-user.target
----
$ sudo groupadd signaling
$ sudo useradd --system --gid signaling --shell /usr/sbin/nologin signaling
$ sudo sh -c "systemctl daemon-reload && systemctl start signaling"
$ systemctl status signaling
$ sudo systemctl enable signaling
$ systemctl is-enabled signaling
■NGINXのインストール
$ sudo apt -y install nginx certbot python3-certbot-nginx
$ systemctl is-enabled nginx
$ systemctl status nginx
$ sudo certbot certonly --nginx -d hpb.nextcloud.biz --email myaddresss@stylez.co.jp --post-hook "systemctl reload nginx" --agree-tos --noninteractive
</etc/nginx/sites-available/http.conf>
----
server {
listen 80;
location /.well-known/acme-challenge/ {
root /var/www/html;
}
# Enforce HTTPS
return 301 https://$server_name$request_uri;
}
----
</etc/nginx/sites-available/signaling.conf>
----
upstream signaling {
server 127.0.0.1:8080;
}
server {
listen 443 ssl http2;
server_name hpb.nextcloud.biz;
ssl_certificate /etc/letsencrypt/live/hpb.nextcloud.biz/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/hpb.nextcloud.biz/privkey.pem;
include /etc/letsencrypt/options-ssl-nginx.conf;
ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem;
add_header Strict-Transport-Security "max-age=63072000; includeSubdomains; preload";
location /standalone-signaling/ {
proxy_pass http://signaling/;
proxy_http_version 1.1;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
location /standalone-signaling/spreed {
proxy_pass http://signaling/spreed;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "Upgrade";
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
}
----
$ sudo rm /etc/nginx/sites-enabled/default
$ sudo ln -s /etc/nginx/sites-available/http.conf /etc/nginx/sites-enabled/http.conf
$ sudo ln -s /etc/nginx/sites-available/signaling.conf /etc/nginx/sites-enabled/signaling.conf
$ sudo nginx -t
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful
$ sudo systemctl reload nginx
■Nextcloud Talk HPB (+STUN/TURN)サーバーで開けておくFWポート
http(tcp/80) Let's Encript用
https(tcp/443) NGINX/Signaling
STUN/TURN(tcp/3478, udp/3478)
TURN(udp/49152-65535)
janus(udp/20000-40000)
5. NextcloudへのTalkアプリのインストールと設定
Nextcloud Talk HPBサーバーのインストールが終わった後に、NextcloudにTalkアプリのインストールと設定を行います。

Nextcloudに管理者でログインし、Talkアプリをインストールしてください。終わりましたら、管理者設定に「トーク」という設定画面が追加されています。

インストールしたNextcloud Talk HPBサーバーとSTUN/TURNを使用するように、設定画面より以下の設定をを行っていきます。FQDNなどは、ご自身の環境に読み替えて設定ください。
■STUNサーバー | |
STUN server URL | hpb.nextcloud.biz:3478 |
■TURNサーバー | |
TURNプロトコル | turn: のみ |
TURN server URL | hpb.nextcloud.biz:3478 |
TURNサーバーシークレット | 「①Turn-Key」に設定したもの |
UPDとTCPプロトコル | UDPとTCP |
■高性能バックエンド | |
高性能バックエンドURL | wss://hpb.nextcloud.biz/standalone-signaling |
SSL証明書を検証する | チェック |
共有秘密鍵 | 「⑤Nextcloud-Secret-Key」に設定したもの |

Nextcloud Talkアプリは、ブラウザからはTalkアイコンよりアクセスできます。任意のTalk Roomを作成し、参加者を招待することによりNextcloud Talkを使用することができます。
Nextcloud Talkの基本的な使用方法については、以下のマニュアルを参照ください。
https://docs.nextcloud.com/server/latest/user_manual/en/talk/talk_basics.html