8.9 KiB
F7cloud Talk Recording — сборка для развёртывания
В репозитории собраны все компоненты для работы сервиса. Firefox ESR и GeckoDriver скопированы с машины сборки в vendor/ и при развёртывании на другом сервере просто копируются из репо в /opt/firefox-esr и /usr/local/bin/geckodriver. Пакеты xvfb, ffmpeg, python3.12 и python3.12-venv также включены в репозиторий в виде .deb (для Debian/Ubuntu) и при установке, при их отсутствии в системе, ставятся скриптом install.sh из vendor/debs/ через dpkg -i (без доступа к внешним репозиториям).
Структура
f7-recording/
├── README.md
├── install.sh # скрипт установки (запуск: sudo ./install.sh)
├── scripts/
│ └── download-vendor.sh # скачать Firefox ESR и GeckoDriver в vendor/ (обновление репо)
├── vendor/ # Firefox ESR и GeckoDriver (скопированы с машины сборки)
│ ├── README.md
│ ├── firefox-esr/ # каталог Firefox ESR — при деплое копируется в /opt/firefox-esr
│ └── geckodriver/geckodriver # бинарь GeckoDriver — при деплое копируется в /usr/local/bin
├── systemd/
│ └── f7cloud-talk-recording.service
├── etc/
│ └── f7cloud-talk-recording/
│ └── server.conf.template
└── opt/
├── f7cloud-talk-recording-src/ # исходники пакета (editable install)
└── f7cloud-talk-recording/
├── requirements.txt
└── venv/ # на цели venv создаётся заново
Развёртывание одной командой
На целевой машине (Debian/Ubuntu) скопируйте эту папку и выполните:
sudo ./install.sh
Скрипт проверяет наличие Python 3.12, xvfb и ffmpeg; если чего-то не хватает — выводит список недостающих пакетов и завершает установку с подсказкой, что их нужно доставить вручную. Firefox ESR и GeckoDriver скопирует из vendor/ в /opt/firefox-esr и /usr/local/bin; создаст пользователя и каталоги, разложит файлы, соберёт venv и включит systemd-сервис. Конфиг создаётся из шаблона; если не заданы переменные окружения (см. ниже), в конфиг попадут плейсхолдеры — их нужно заменить вручную в /etc/f7cloud-talk-recording/server.conf и затем запустить сервис.
Секреты и адреса (HPB и Nextcloud)
Задайте переменные окружения до запуска install.sh, чтобы конфиг заполнился автоматически:
| Переменная | Описание |
|---|---|
F7CLOUD_NEXTCLOUD_URL |
URL сервера Nextcloud (например https://forbion.f7cloud.ru) |
F7CLOUD_SECRET |
Общий секрет (backend + nextcloud) |
F7CLOUD_TALK_URL |
URL signaling (HPB), например https://hpb-prod.f7cloud.ru/standalone-signaling |
F7CLOUD_TALK_INTERNALSECRET |
internalsecret для доступа к signaling-серверу |
Где какой секрет брать
| Параметр | Где взять |
|---|---|
| F7CLOUD_NEXTCLOUD_URL | Публичный URL вашего сервера Nextcloud/F7cloud (тот же, что открывают в браузере), например https://forbion.f7cloud.ru. Без слэша в конце. |
| F7CLOUD_SECRET | Общий секрет между Nextcloud и сервером записи. Задаётся в двух местах и должен совпадать: (1) в конфиге записи — секции [backend] и [nextcloud]; (2) в админке Nextcloud: Настройки → Talk → Recording backend — поле «Secret» (или «Секрет»). Можно сгенерировать: openssl rand -hex 32. Используется для проверки запросов от Talk к серверу записи. |
| F7CLOUD_TALK_URL | URL signaling-сервера (HPB). Тот же URL, что указан в админке Talk для signaling (например https://hpb-prod.f7cloud.ru/standalone-signaling). Должен быть доступен с машины, где крутится сервер записи. |
| F7CLOUD_TALK_INTERNALSECRET | Секрет между signaling (HPB) и сервером записи — это не тот же секрет, что для Nextcloud. Берётся из конфига signaling-сервера: параметр clients->internalsecret в файле конфигурации HPB (часто /etc/nextcloud-spreed-signaling/server.conf или аналог на вашем стенде). Значение должно быть одинаковым в конфиге HPB и в конфиге сервера записи. Если на HPB internalsecret не задан, запросы от сервера записи будут отклоняться. |
Кратко: F7CLOUD_SECRET — в админке Talk (Recording backend) и в нашем конфиге; F7CLOUD_TALK_INTERNALSECRET — только в конфиге HPB и в нашем конфиге (в админке Talk его нет).
Пример:
export F7CLOUD_NEXTCLOUD_URL="https://forbion.f7cloud.ru"
export F7CLOUD_SECRET="ваш_секрет_hex"
export F7CLOUD_TALK_URL="https://hpb-prod.f7cloud.ru/standalone-signaling"
export F7CLOUD_TALK_INTERNALSECRET="ваш_internalsecret_hex"
sudo -E ./install.sh
Если переменные не заданы, после деплоя отредактируйте /etc/f7cloud-talk-recording/server.conf (замените строки F7CLOUD_* на нужные значения) и выполните:
systemctl start f7cloud-talk-recording.service
Что делает install.sh
- Ставит через apt только: Python 3.12, python3.12-venv, xvfb, ffmpeg (остальное — из репо).
- Копирует Firefox ESR и GeckoDriver из
vendor/в/opt/firefox-esrи/usr/local/bin(в репо они уже есть, скопированы с машины сборки). - Создаёт пользователя и группу
f7cloud-talk-recording, каталоги/var/lib/f7cloud-talk-recordingи/var/lib/f7cloud-recordings. - Копирует systemd unit в
/etc/systemd/system/. - Создаёт конфиг из
server.conf.templateв/etc/f7cloud-talk-recording/server.conf. - Копирует исходники в
/opt/f7cloud-talk-recording-src/, создаёт venv в/opt/f7cloud-talk-recording/venvи ставит зависимости. - Включает сервис; при заданных секретах — сразу запускает его.
Firefox ESR и GeckoDriver уже включены в репо (скопированы с этой машины в vendor/). При клонировании репо на другой сервер и запуске install.sh они копируются на место без доступа в интернет. Обновить или заново положить их в репо — см. vendor/README.md.
Ручное развёртывание (без install.sh)
Если нужно развернуть вручную: установите Python 3.12, xvfb, ffmpeg; установите Firefox ESR и GeckoDriver из vendor/ или скачайте (см. vendor/README.md); создайте пользователя и каталоги (как в install.sh); скопируйте systemd/, etc/, opt/ в целевые пути; создайте venv; заполните конфиг из шаблона; выполните systemctl daemon-reload, systemctl enable f7cloud-talk-recording.service, systemctl start f7cloud-talk-recording.service.
Проверка
- Логи:
journalctl -u f7cloud-talk-recording.service -f - Конфиг:
/etc/f7cloud-talk-recording/server.conf(пути браузера, ffmpeg, каталог записей при необходимости поправьте).