F7_recording/install.sh
F7cloud 0b94d1826e Initial commit: F7cloud Talk Recording Server
- Переименовано Nextcloud на F7cloud
- Добавлены зависимости Firefox ESR и Geckodriver
- Создан скрипт установки с поддержкой параметров HPB
- Добавлена документация и инструкции по установке

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-02-17 12:18:51 +00:00

390 lines
14 KiB
Bash
Executable File
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#!/bin/bash
# Скрипт установки F7cloud Talk Recording Server
# Этот скрипт устанавливает все необходимые зависимости и настраивает сервер
#
# Использование:
# sudo ./install.sh [OPTIONS]
#
# Опции:
# --hpb-url URL URL сервера HPB (signaling server)
# --hpb-secret SECRET Секрет для подключения к HPB (internalsecret)
# --f7cloud-url URL URL сервера F7cloud (опционально)
# --f7cloud-secret SECRET Секрет для подключения к F7cloud (опционально)
# --listen ADDRESS:PORT Адрес и порт для прослушивания (по умолчанию: 127.0.0.1:8000)
#
# Пример:
# sudo ./install.sh --hpb-url https://hpb.example.com --hpb-secret your-secret-here
set -e
# Цвета для вывода
RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
NC='\033[0m' # No Color
# Функция для вывода сообщений
info() {
echo -e "${GREEN}[INFO]${NC} $1"
}
warn() {
echo -e "${YELLOW}[WARN]${NC} $1"
}
error() {
echo -e "${RED}[ERROR]${NC} $1"
}
# Функция для вывода справки
show_help() {
echo "Использование: $0 [OPTIONS]"
echo ""
echo "Опции:"
echo " --hpb-url URL URL сервера HPB (signaling server) - ОБЯЗАТЕЛЬНО"
echo " --hpb-secret SECRET Секрет для подключения к HPB (internalsecret) - ОБЯЗАТЕЛЬНО"
echo " --f7cloud-url URL URL сервера F7cloud (опционально)"
echo " --f7cloud-secret SECRET Секрет для подключения к F7cloud (опционально)"
echo " --listen ADDRESS:PORT Адрес и порт для прослушивания (по умолчанию: 127.0.0.1:8000)"
echo " --help Показать эту справку"
echo ""
echo "Пример:"
echo " sudo $0 --hpb-url https://hpb.example.com --hpb-secret your-secret-here"
}
# Парсинг аргументов
HPB_URL=""
HPB_SECRET=""
F7CLOUD_URL=""
F7CLOUD_SECRET=""
LISTEN_ADDRESS="127.0.0.1:8000"
while [[ $# -gt 0 ]]; do
case $1 in
--hpb-url)
HPB_URL="$2"
shift 2
;;
--hpb-secret)
HPB_SECRET="$2"
shift 2
;;
--f7cloud-url)
F7CLOUD_URL="$2"
shift 2
;;
--f7cloud-secret)
F7CLOUD_SECRET="$2"
shift 2
;;
--listen)
LISTEN_ADDRESS="$2"
shift 2
;;
--help)
show_help
exit 0
;;
*)
error "Неизвестный параметр: $1"
show_help
exit 1
;;
esac
done
# Проверка обязательных параметров
if [ -z "$HPB_URL" ] || [ -z "$HPB_SECRET" ]; then
error "Ошибка: --hpb-url и --hpb-secret являются обязательными параметрами"
echo ""
show_help
exit 1
fi
# Проверка прав root
if [ "$EUID" -ne 0 ]; then
error "Пожалуйста, запустите скрипт с правами root (sudo)"
exit 1
fi
info "Начинаем установку F7cloud Talk Recording Server..."
# Определение дистрибутива
if [ -f /etc/debian_version ]; then
DISTRO="debian"
PKG_MANAGER="apt-get"
elif [ -f /etc/redhat-release ]; then
DISTRO="redhat"
PKG_MANAGER="yum"
else
error "Неподдерживаемый дистрибутив Linux"
exit 1
fi
# Получение директории скрипта
SCRIPT_DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"
cd "$SCRIPT_DIR"
# 1. Установка системных зависимостей
info "Установка системных зависимостей..."
if [ "$DISTRO" = "debian" ]; then
$PKG_MANAGER update -y
$PKG_MANAGER install -y \
python3 \
python3-pip \
python3-venv \
pulseaudio \
xvfb \
ffmpeg \
libpulse0 \
libpulse-dev \
libx11-dev \
libxext-dev \
libxrender-dev \
libxtst6 \
libxi6 \
libgconf-2-4 \
libasound2-dev \
curl \
wget
else
error "Установка для RedHat-based дистрибутивов пока не поддерживается автоматически"
exit 1
fi
# 2. Установка Firefox ESR
info "Установка Firefox ESR..."
if [ -d "dependencies/firefox-esr" ]; then
info "Копирование Firefox ESR из dependencies..."
cp -r dependencies/firefox-esr /opt/firefox-esr
if [ -f /opt/firefox-esr/firefox ]; then
ln -sf /opt/firefox-esr/firefox /usr/local/bin/firefox-esr
chmod +x /usr/local/bin/firefox-esr
info "Firefox ESR установлен в /opt/firefox-esr"
else
error "Firefox ESR не найден в dependencies/firefox-esr"
exit 1
fi
else
warn "Firefox ESR не найден в dependencies/, пропускаем..."
fi
# 3. Установка Geckodriver
info "Установка Geckodriver..."
if [ -f "dependencies/geckodriver" ]; then
cp dependencies/geckodriver /usr/local/bin/geckodriver
chmod +x /usr/local/bin/geckodriver
info "Geckodriver установлен в /usr/local/bin/geckodriver"
elif [ -f "dependencies/geckodriver.tar.gz" ]; then
info "Распаковка geckodriver из архива..."
cd dependencies
tar -xzf geckodriver.tar.gz
chmod +x geckodriver
cp geckodriver /usr/local/bin/geckodriver
cd ..
info "Geckodriver установлен в /usr/local/bin/geckodriver"
else
warn "Geckodriver не найден в dependencies/, пропускаем..."
fi
# 4. Создание виртуального окружения Python
info "Создание виртуального окружения Python..."
if [ ! -d "venv" ]; then
python3 -m venv venv
info "Виртуальное окружение создано"
else
warn "Виртуальное окружение уже существует, пропускаем создание..."
fi
# Активация виртуального окружения и установка зависимостей
info "Установка Python-зависимостей..."
source venv/bin/activate
pip install --upgrade pip
pip install -e .
info "Python-зависимости установлены"
# 5. Создание пользователя для запуска сервера
info "Создание пользователя f7cloud-talk-recording..."
if ! id "f7cloud-talk-recording" &>/dev/null; then
useradd -r -s /bin/false -d /var/lib/f7cloud-talk-recording f7cloud-talk-recording
info "Пользователь f7cloud-talk-recording создан"
else
warn "Пользователь f7cloud-talk-recording уже существует"
fi
# Создание директорий для пользователя
mkdir -p /var/lib/f7cloud-talk-recording
chown f7cloud-talk-recording:f7cloud-talk-recording /var/lib/f7cloud-talk-recording
# 6. Настройка конфигурации
info "Настройка конфигурации..."
mkdir -p /etc/f7cloud-talk-recording
CONFIG_FILE="/etc/f7cloud-talk-recording/server.conf"
if [ ! -f "$CONFIG_FILE" ]; then
cp server.conf.in "$CONFIG_FILE"
info "Конфигурационный файл создан в $CONFIG_FILE"
# Настройка параметров конфигурации
info "Настройка параметров конфигурации..."
# Установка адреса прослушивания
sed -i "s|#listen = 127.0.0.1:8000|listen = $LISTEN_ADDRESS|" "$CONFIG_FILE"
# Настройка HPB (signaling server)
if [ -n "$HPB_URL" ] && [ -n "$HPB_SECRET" ]; then
info "Настройка HPB (signaling server)..."
# Создаем ID для signaling сервера из URL
HPB_ID=$(echo "$HPB_URL" | sed 's|https\?://||' | sed 's|/.*||' | sed 's|[^a-zA-Z0-9]|-|g' | sed 's|--*|-|g' | sed 's|^-\||' | sed 's|-$||')
if [ -z "$HPB_ID" ]; then
HPB_ID="hpb-signaling"
fi
# Раскомментируем и настраиваем секцию signaling
sed -i "s|#signalings = signaling-id, another-signaling|signalings = $HPB_ID|" "$CONFIG_FILE"
sed -i "s|#internalsecret = the-shared-secret-for-internal-clients|internalsecret = $HPB_SECRET|" "$CONFIG_FILE"
# Добавляем секцию для конкретного signaling сервера
if ! grep -q "^\[$HPB_ID\]" "$CONFIG_FILE"; then
# Добавляем новую секцию после секции [signaling]
cat >> "$CONFIG_FILE" << EOF
[$HPB_ID]
# URL of the signaling server
url = $HPB_URL
# Shared secret for authenticating as an internal client of signaling servers.
# This must be the same value as configured in the signaling server
# configuration file.
internalsecret = $HPB_SECRET
EOF
else
# Если секция уже существует, обновляем значения
sed -i "/^\[$HPB_ID\]/,/^\[/ {
s|^#url = .*|url = $HPB_URL|
s|^url = .*|url = $HPB_URL|
s|^#internalsecret = .*|internalsecret = $HPB_SECRET|
s|^internalsecret = .*|internalsecret = $HPB_SECRET|
}" "$CONFIG_FILE"
fi
info "HPB настроен: URL=$HPB_URL, ID=$HPB_ID"
fi
# Настройка F7cloud backend (опционально)
if [ -n "$F7CLOUD_URL" ] && [ -n "$F7CLOUD_SECRET" ]; then
info "Настройка F7cloud backend..."
# Создаем ID для backend из URL
BACKEND_ID=$(echo "$F7CLOUD_URL" | sed 's|https\?://||' | sed 's|/.*||' | sed 's|[^a-zA-Z0-9]|-|g' | sed 's|--*|-|g' | sed 's|^-\||' | sed 's|-$||')
if [ -z "$BACKEND_ID" ]; then
BACKEND_ID="f7cloud-backend"
fi
# Раскомментируем и настраиваем секцию backend
sed -i "s|#backends = backend-id, another-backend|backends = $BACKEND_ID|" "$CONFIG_FILE"
# Добавляем секцию для конкретного backend
if ! grep -q "^\[$BACKEND_ID\]" "$CONFIG_FILE"; then
# Добавляем новую секцию после секции [backend]
cat >> "$CONFIG_FILE" << EOF
[$BACKEND_ID]
# URL of the F7cloud instance
url = $F7CLOUD_URL
# Shared secret for requests from and to the backend servers. This must be the
# same value as configured in the F7cloud admin ui.
secret = $F7CLOUD_SECRET
EOF
else
# Если секция уже существует, обновляем значения
sed -i "/^\[$BACKEND_ID\]/,/^\[/ {
s|^#url = .*|url = $F7CLOUD_URL|
s|^url = .*|url = $F7CLOUD_URL|
s|^#secret = .*|secret = $F7CLOUD_SECRET|
s|^secret = .*|secret = $F7CLOUD_SECRET|
}" "$CONFIG_FILE"
fi
info "F7cloud backend настроен: URL=$F7CLOUD_URL, ID=$BACKEND_ID"
fi
# Настройка путей к браузеру и драйверу
sed -i "s|#driverPath =|driverPath = /usr/local/bin/geckodriver|" "$CONFIG_FILE"
sed -i "s|#browserPath =|browserPath = /usr/local/bin/firefox-esr|" "$CONFIG_FILE"
chown f7cloud-talk-recording:f7cloud-talk-recording "$CONFIG_FILE"
chmod 600 "$CONFIG_FILE"
info "Конфигурация настроена автоматически"
else
warn "Конфигурационный файл уже существует, пропускаем создание..."
warn "Если нужно обновить конфигурацию, отредактируйте $CONFIG_FILE вручную"
fi
# 7. Создание systemd service файла
info "Создание systemd service..."
cat > /etc/systemd/system/f7cloud-talk-recording.service << EOF
[Unit]
Description=F7cloud Talk Recording Server
After=network.target
[Service]
Type=simple
User=f7cloud-talk-recording
Group=f7cloud-talk-recording
WorkingDirectory=$SCRIPT_DIR
Environment="PATH=$SCRIPT_DIR/venv/bin:/usr/local/bin:/usr/bin:/bin"
ExecStart=$SCRIPT_DIR/venv/bin/f7cloud-talk-recording --config /etc/f7cloud-talk-recording/server.conf
Restart=always
RestartSec=10
[Install]
WantedBy=multi-user.target
EOF
systemctl daemon-reload
info "Systemd service создан"
# Итоговая информация
info ""
info "=========================================="
info "Установка завершена успешно!"
info "=========================================="
info ""
info "Настроенные параметры:"
info " HPB URL: $HPB_URL"
info " Listen: $LISTEN_ADDRESS"
if [ -n "$F7CLOUD_URL" ]; then
info " F7cloud URL: $F7CLOUD_URL"
fi
info ""
info "Следующие шаги:"
if [ -z "$F7CLOUD_URL" ] || [ -z "$F7CLOUD_SECRET" ]; then
info "1. Настройте F7cloud backend в конфигурации: $CONFIG_FILE"
info " Добавьте секцию [backend-id] с url и secret"
fi
info "2. Проверьте конфигурацию: $CONFIG_FILE"
info "3. Запустите сервис:"
info " sudo systemctl start f7cloud-talk-recording"
info "4. Включите автозапуск:"
info " sudo systemctl enable f7cloud-talk-recording"
info "5. Проверьте статус:"
info " sudo systemctl status f7cloud-talk-recording"
info ""
info "Для получения дополнительной информации см. INSTALL.md"
info ""