- Создан скрипт deploy.sh для автоматического развертывания на новом сервере - Добавлена автоматическая загрузка Firefox ESR и Geckodriver в install.sh - Добавлена поддержка переменных окружения для секретов - Обновлена документация (DEPLOY.md, README.md) - Скрипт deploy.sh поддерживает интерактивный ввод секретов
6.1 KiB
F7cloud Talk Recording Server
Сервер записи для F7cloud Talk, который позволяет записывать видеозвонки.
Описание
F7cloud Talk Recording Server предоставляет HTTP API для записи видеозвонков в F7cloud Talk. Сервер работает как клиент Talk и записывает звонки через браузер.
Структура проекта
f7cloud-talk-recording/
├── src/ # Исходный код
│ └── f7cloud/
│ └── talk/
│ └── recording/
│ ├── __init__.py # Инициализация модуля
│ ├── __main__.py # Точка входа CLI
│ ├── Server.py # HTTP сервер (Flask)
│ ├── Service.py # Сервис записи
│ ├── Config.py # Управление конфигурацией
│ ├── Participant.py # Управление участником в браузере
│ ├── BackendNotifier.py # Уведомления бэкенда
│ ├── RecorderArgumentsBuilder.py # Построитель аргументов для ffmpeg
│ └── Benchmark.py # Бенчмарк для тестирования
│
├── dependencies/ # Внешние зависимости
│ ├── firefox-esr/ # Firefox ESR (браузер для записи)
│ └── geckodriver # Geckodriver (Selenium WebDriver для Firefox)
│
├── tests/ # Тесты
│ ├── ServerTest.py # Тесты сервера
│ └── ConfigTest.py # Тесты конфигурации
│
├── server.conf.in # Шаблон конфигурационного файла
├── pyproject.toml # Конфигурация Python проекта
├── install.sh # Скрипт автоматической установки
├── INSTALL.md # Подробная инструкция по установке
└── README.md # Этот файл
Быстрый старт
Автоматическое развертывание на новом сервере
Самый простой способ - использовать скрипт автоматического развертывания:
curl -fsSL https://git.f7cloud.ru/root/F7_recording/raw/branch/main/deploy.sh | bash
Скрипт выполнит все необходимые шаги, включая интерактивный ввод секретов.
Установка из клонированного репозитория
git clone https://git.f7cloud.ru/root/F7_recording.git
cd F7_recording
sudo ./install.sh --hpb-url https://hpb.example.com --hpb-secret your-secret-here
Конфигурация
Отредактируйте /etc/f7cloud-talk-recording/server.conf:
[http]
listen = 127.0.0.1:8000
[backend]
backends = my-backend
secret = your-shared-secret-here
[my-backend]
url = https://your-f7cloud-instance.com
secret = your-shared-secret-here
[recording]
browser = firefox
driverPath = /usr/local/bin/geckodriver
browserPath = /usr/local/bin/firefox-esr
Запуск
sudo systemctl start f7cloud-talk-recording
sudo systemctl enable f7cloud-talk-recording
Зависимости
Системные зависимости
- Python 3.8+
- PulseAudio
- Xvfb (виртуальный дисплей)
- FFmpeg
- Firefox ESR (включен в
dependencies/) - Geckodriver (включен в
dependencies/)
Python зависимости
- flask
- prometheus-client
- psutil
- pulsectl
- pyvirtualdisplay>=2.0
- requests
- requests-toolbelt
- selenium>=4.11.0
- websocket-client
Все зависимости указаны в pyproject.toml и будут установлены автоматически при установке.
Основные компоненты
Server.py
HTTP сервер на Flask, который обрабатывает запросы на начало/конец записи.
Service.py
Управляет процессом записи:
- Создает виртуальный дисплей (Xvfb)
- Создает аудио sink (PulseAudio)
- Запускает браузер в kiosk режиме
- Запускает FFmpeg для записи
- Загружает запись на сервер
Participant.py
Управляет участником в браузере через Selenium WebDriver:
- Открывает страницу записи
- Подключается к signaling серверу
- Управляет медиа потоками
Config.py
Управляет конфигурацией из файла server.conf.
API
Сервер предоставляет HTTP API для управления записями. Подробности см. в документации API.
Развертывание
Для развертывания на новом сервере:
- Скопируйте весь репозиторий на сервер
- Запустите
sudo ./install.sh - Настройте
/etc/f7cloud-talk-recording/server.conf - Запустите сервис:
sudo systemctl start f7cloud-talk-recording
Подробные инструкции см. в INSTALL.md.
Разработка
Установка для разработки
python3 -m venv venv
source venv/bin/activate
pip install -e ".[dev]"
Запуск тестов
pytest tests/
Линтинг
pylint src/
Лицензия
AGPL-3.0-or-later
Поддержка
Для получения помощи см. INSTALL.md или создайте issue в репозитории.