- Переименовано Nextcloud на F7cloud - Добавлены зависимости Firefox ESR и Geckodriver - Создан скрипт установки с поддержкой параметров HPB - Добавлена документация и инструкции по установке Co-authored-by: Cursor <cursoragent@cursor.com>
390 lines
14 KiB
Bash
Executable File
390 lines
14 KiB
Bash
Executable File
#!/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 ""
|