# F7cloud Talk Recording — сборка для развёртывания В репозитории собраны **все компоненты для работы сервиса, кроме системных пакетов Python/xvfb/ffmpeg**. Firefox ESR и GeckoDriver скопированы с машины сборки в `vendor/` и при развёртывании на другом сервере просто копируются из репо в `/opt/firefox-esr` и `/usr/local/bin/geckodriver`. А вот **python3.12**, **python3.12-venv**, **xvfb** и **ffmpeg** ставятся на целевой машине через `apt-get` (скрипт `install.sh` сначала проверяет их наличие и, если нужно, пытается установить командой `apt-get install python3.12 python3.12-venv xvfb ffmpeg`). ## Структура ``` 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) скопируйте эту папку и выполните: ```bash 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 его нет). Пример: ```bash 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_*` на нужные значения) и выполните: ```bash systemctl start f7cloud-talk-recording.service ``` ## Что делает install.sh 1. Ставит через apt только: **Python 3.12**, python3.12-venv, xvfb, ffmpeg (остальное — из репо). 2. Копирует **Firefox ESR** и **GeckoDriver** из `vendor/` в `/opt/firefox-esr` и `/usr/local/bin` (в репо они уже есть, скопированы с машины сборки). 3. Создаёт пользователя и группу `f7cloud-talk-recording`, каталоги `/var/lib/f7cloud-talk-recording` и `/var/lib/f7cloud-recordings`. 4. Копирует systemd unit в `/etc/systemd/system/`. 5. Создаёт конфиг из `server.conf.template` в `/etc/f7cloud-talk-recording/server.conf`. 6. Копирует исходники в `/opt/f7cloud-talk-recording-src/`, создаёт venv в `/opt/f7cloud-talk-recording/venv` и ставит зависимости. 7. Включает сервис; при заданных секретах — сразу запускает его. 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, каталог записей при необходимости поправьте).