Talk — это расширение платформы Nextcloud, позволяет совершать защищенные аудио и видеозвонки, а также обмениваться текстовыми сообщениями через веб-интерфейс или мобильное приложение Nextcloud Talk. Для связи собеседников используется WebRTC, а для защиты передаваемой информации — end-to-end шифрование. Все компоненты Nextcloud Talk открыты.
Посты о Nextcloud на Хабре можно пересчитать по пальцам, и в них нет ни слова о Nextcloud Talk, поэтому я решил заполнить этот пробел. Под катом расскажу, как узнал о Nextcloud, Spreed.ME, Spreed и Talk, как тестировал Talk и с какими проблемами столкнулся при установке и настройке Talk.
Как я узнал о Nextcloud
В 2013 году, два друга, Женя и Максим, купили в складчину неттоп и запустили домашнее хранилище на ownCloud. В то время Dropbox предлагал 500 Гбайт дискового пространства за $500 в год, неттоп с точно таким-же объемом диска хоть стоил немного дороже, но приватное хранилище казалось экономически выгоднее и просто интереснее, чем Dropbox Pro. Женя и Максим создали аккаунты для друзей и знакомых. Поначалу я не пользовался этим аккаунтом, но позже проникся идеей приватного хранилища и начал шарить фотоальбомы, да и к тому же всё работало без сбоев. В 2016 году Фрэнк Карлитчек (Frank Karlitschek), основатель ownCloud, покинул проект и создал форк под названием Nextcloud. Женя предположил, что ownCloud ждет стагнация и перенес наше хранилище с ownCloud на Nextcloud. Все файлы при этом остались на месте, а я просто поставил мобильный клиент Nextcloud на смартфон и стал пользоваться Nextcloud.
Что предшествовало Nextcloud Talk
С самого начала в Nextcloud App Store было доступно расширение Spreed.ME, от одноименной команды разработчиков. С помощью этого расширения можно было создать видеоконференцию внутри Nextcloud прямо в браузере, но, к сожалению, не было мобильных приложений для Android и iOS, а ещё для Spreed.ME требовалась установка дополнительного ПО — Spreed WebRTC server. Немного позже разработчики Nextcloud опубликовали в Nextcloud App Store расширение для видеозвонков под названием Spreed. Spreed было лучше интегрировано в Nextcloud, не требовало установки Spreed WebRTC server, но уступало Spreed.ME по функционалу.
В начале 2018 года, разработчики Nextcloud объявили о полной переработке Spreed и опубликовали мобильное приложение Nextcloud Talk в Google Play Store и Apple App Store. Расширение Spreed переименовали в Talk, но при этом идентификатор приложения в Nextcloud App Store остался прежним — Spreed, чтобы облегчить нам миграцию с Nextcloud 12 на 13. В Talk есть групповой текстовый чат, голосовые и видеозвонки с шарингом экрана. Мобильные приложения Nextcloud Talk для Android и iOS пока уступают веб-версии, но реализовано самое нужное — звонки со смартфона на смартфон.
Как я тестировал Nextcloud Talk
Хотелось поскорее опробовать Nextcloud Talk, и не дожидаясь официального релиза Nextcloud 13, Женя обновил Nextcloud до 13.0.0 RC 1 на неттопе. После этого мы установили Nextcloud Talk на смартфоны и созвонились. Соединение прошло, но не было ни звука, ни видео; мы видели только чёрный экран. Я связался с разработчиком приложения для Android по имени Марио (Mario Đanić), и он объяснил, что для общения через Интернет нам не хватает TURN-сервера.
Nextcloud Talk использует WebRTC (peer-to-peer) для организации канала связи между двумя устройствами, и так как у наших смартфонов нет белых IP-адресов, то установка соединения затруднена. В качестве TURN-сервера решили использовать coturn, быстро развернули на неттопе и указали белый IP-адрес неттопа в настройках Talk, в админке Nextcloud. После этого появилось видео и звук, но первое время мы не замечали отсутствие всплывающих уведомлений при звонке. Уведомления появились после установки и активации расширения Notifications в Nextcloud.
Nextcloud Talk: мобильное приложение и веб-интерфейс
В мобильном приложении Nextcloud Talk, на момент написания статьи, реализованы только видеозвонки и список контактов. Мой список контактов в приложении подгружается с сервера Nextcloud на неттопе.
В веб-версии возможностей больше, например, я могу пригласить в конференцию собеседника, у которого нет аккаунта в нашем облачном хранилище. В веб-версии есть чат, но, к сожалению, без смайликов и стикеров.
В будущем, разработчики Nextcloud Talk планируют добавить к чату XMPP совместимое API, чтобы сторонние приложения, поддерживающие протокол XMPP, могли общаться через Nextcloud Talk сервер. Скорее всего, чат появится в мобильном приложении Nexcloud Talk 2.0, но пока неизвестно, когда выйдет 2.0.
Установка Nextcloud 13 и Talk
Сейчас на неттопе запущен Docker-контейнер с Nextcloud 13, а все исходники, необходимые для сборки контейнера, мы опубликовали на GitHub. Это была идея Жени, он собрал Docker-файлы от различных веб-сервисов, которыми мы пользуемся, добавил скрипт, который собирает контейнеры и назвал это всё «Mr. Meeseeks Box» (сокращённо mbb). Если хотите по-быстрому развернуть у себя Nextcloud Talk и пощупать всё это своими руками, но не очень хорошо разбираетесь в Docker, то вам понравится mmb.
Итак, Для начала поставьте Git, Docker и Docker Compose:
sudo apt-get update
sudo apt-get install git, docker, docker-compose
Затем клонируйте репозиторий mmb:
git clone https://github.com/tolstoyevsky/mmb.git
cd mmb
Соберите два контейнера MariaDB и Nextcloud выполнив следующие команды:
sudo ./mmb.sh mariadb amd64
sudo ./mmb.sh nextcloud amd64
Если вы проделываете это на Raspberry Pi, или любом другом устройстве с ARM-процессором, то замените amd64 на armhf.
Теперь запустите оба контейнера, но перед этим убедитесь, что порт 3306 не занят:
cd mariadb
docker-compose up -d
cd ../nextcloud
docker-compose up -d
Откройте в браузере http://[ваш ip-адрес]:8001/nc, и если увидите страницу создания учетной записи администратора, то вы всё сделали правильно. Задайте логин и пароль администратора, затем перейдите в панель управления, и в правом верхнем углу нажмите Настройки → Приложения. В длинном списке приложений найдите Talk и активируйте. Теперь создайте ещё один аккаунт в Nextcloud и попробуйте созвониться через браузер либо через мобильное приложение внутри локальной сети.
Если есть белый IP-адрес, то можете пробросить 8001 порт наружу, чтобы созвониться через интернет, но тогда понадобится поднять TURN-сервер. Это можно сделать с помощью mmb, собрав и запустив контейнер с coturn:
cd ..
sudo ./mmb.sh coturn amd64
cd ../coturn
docker-compose up -d
Если вы проделываете это на Raspberry Pi, или любом другом устройстве с ARM-процессором, то замените amd64 на armhf.
После того, как поднимите TURN-сервер, откройте админку Nextcloud, в меню слева выберите «Разговор» (Talk), впишите свой белый IP-адрес в поле «сервер TURN», а в поле для секрейтной фразы впишите «secret». Если хотите использовать другую секретную фразу, то загляните в файл mmb/coturn/docker-compose.yml, измените значение переменной AUTH_SECRET и перезапустите контейнер с coturn:
cd ../coturn
docker-compose stop
docker-compose rm
docker-compose up -d
После этого можете создать в своём Nextcloud аккаунты для друзей, поставить приложение Nextcloud Talk на смартфон и звонить друг другу.