Замена install.sh на f7recording.sh: удалён install.sh, обновлена документация и deploy.sh
This commit is contained in:
parent
1bc3a63d93
commit
01bb3e29fc
21
DEPLOY.md
21
DEPLOY.md
|
|
@ -36,11 +36,8 @@ cd f7cloud-talk-recording
|
|||
#### 2. Запуск установки с параметрами
|
||||
|
||||
```bash
|
||||
sudo ./install.sh \
|
||||
--hpb-url https://hpb.example.com \
|
||||
--hpb-secret your-hpb-secret-here \
|
||||
--f7cloud-url https://f7cloud.example.com \
|
||||
--f7cloud-secret your-f7cloud-secret-here
|
||||
# Подготовьте файл f7cloud-install.env с переменными, затем:
|
||||
sudo ./f7recording.sh /path/to/f7cloud-install.env
|
||||
```
|
||||
|
||||
#### 3. Запуск сервиса
|
||||
|
|
@ -79,7 +76,7 @@ internalsecret = your-hpb-secret-here
|
|||
|
||||
## Автоматическая загрузка зависимостей
|
||||
|
||||
Скрипт `install.sh` автоматически загружает зависимости, если они отсутствуют:
|
||||
Скрипт `f7recording.sh` использует системные пакеты (firefox-esr и др.), если они отсутствуют:
|
||||
|
||||
- **Firefox ESR** - скачивается с официального сайта Mozilla
|
||||
- **Geckodriver** - скачивается с GitHub releases
|
||||
|
|
@ -91,16 +88,8 @@ internalsecret = your-hpb-secret-here
|
|||
Вы также можете использовать переменные окружения вместо интерактивного ввода:
|
||||
|
||||
```bash
|
||||
export HPB_URL="https://hpb.example.com"
|
||||
export HPB_SECRET="your-hpb-secret"
|
||||
export F7CLOUD_URL="https://f7cloud.example.com"
|
||||
export F7CLOUD_SECRET="your-f7cloud-secret"
|
||||
|
||||
sudo ./install.sh \
|
||||
--hpb-url "$HPB_URL" \
|
||||
--hpb-secret "$HPB_SECRET" \
|
||||
--f7cloud-url "$F7CLOUD_URL" \
|
||||
--f7cloud-secret "$F7CLOUD_SECRET"
|
||||
# Создайте файл f7cloud-install.env с переменными HPB_DOMAIN, HPB_INTERNAL_SECRET, DOMAIN, HPB_BACKEND_SECRET
|
||||
sudo ./f7recording.sh /path/to/f7cloud-install.env
|
||||
```
|
||||
|
||||
## Проверка установки
|
||||
|
|
|
|||
16
INSTALL.md
16
INSTALL.md
|
|
@ -50,7 +50,7 @@ Firefox ESR и Geckodriver уже включены в репозиторий в
|
|||
Используйте скрипт установки с обязательными параметрами для HPB:
|
||||
|
||||
```bash
|
||||
sudo ./install.sh --hpb-url https://hpb.example.com --hpb-secret your-hpb-secret-here
|
||||
sudo ./f7recording.sh /path/to/f7cloud-install.env
|
||||
```
|
||||
|
||||
**Обязательные параметры:**
|
||||
|
|
@ -65,18 +65,14 @@ sudo ./install.sh --hpb-url https://hpb.example.com --hpb-secret your-hpb-secret
|
|||
**Пример полной установки:**
|
||||
|
||||
```bash
|
||||
sudo ./install.sh \
|
||||
--hpb-url https://hpb.example.com \
|
||||
--hpb-secret your-hpb-secret-here \
|
||||
--f7cloud-url https://f7cloud.example.com \
|
||||
--f7cloud-secret your-f7cloud-secret-here \
|
||||
--listen 127.0.0.1:8000
|
||||
# Подготовьте .env с HPB_DOMAIN, HPB_INTERNAL_SECRET, DOMAIN, HPB_BACKEND_SECRET:
|
||||
sudo ./f7recording.sh /path/to/f7cloud-install.env
|
||||
```
|
||||
|
||||
**Просмотр справки:**
|
||||
|
||||
```bash
|
||||
sudo ./install.sh --help
|
||||
# Использование: ./f7recording.sh /path/to/f7cloud-install.env
|
||||
```
|
||||
|
||||
Скрипт выполнит:
|
||||
|
|
@ -141,7 +137,7 @@ sudo chmod 600 /etc/f7cloud-talk-recording/server.conf
|
|||
|
||||
Отредактируйте `/etc/f7cloud-talk-recording/server.conf` согласно вашим настройкам.
|
||||
|
||||
**Примечание:** При использовании скрипта `install.sh` с параметрами `--hpb-url` и `--hpb-secret`, конфигурация будет настроена автоматически. Вам нужно будет только добавить секцию для F7cloud backend, если она не была указана при установке.
|
||||
**Примечание:** При использовании скрипта `f7recording.sh` с файлом .env конфигурация создаётся автоматически. Вам нужно будет только добавить секцию для F7cloud backend, если она не была указана при установке.
|
||||
|
||||
## Конфигурация
|
||||
|
||||
|
|
@ -251,7 +247,7 @@ f7cloud-talk-recording/
|
|||
├── tests/ # Тесты
|
||||
├── server.conf.in # Шаблон конфигурации
|
||||
├── pyproject.toml # Конфигурация Python проекта
|
||||
├── install.sh # Скрипт установки
|
||||
├── f7recording.sh # Скрипт установки
|
||||
├── INSTALL.md # Данная инструкция
|
||||
└── README.md # Основная документация
|
||||
```
|
||||
|
|
|
|||
|
|
@ -5,9 +5,7 @@
|
|||
Минимальная установка с обязательными параметрами для HPB:
|
||||
|
||||
```bash
|
||||
sudo ./install.sh \
|
||||
--hpb-url https://hpb.example.com \
|
||||
--hpb-secret your-hpb-secret-here
|
||||
sudo ./f7recording.sh /path/to/f7cloud-install.env
|
||||
```
|
||||
|
||||
## Полная установка (HPB + F7cloud)
|
||||
|
|
@ -15,26 +13,20 @@ sudo ./install.sh \
|
|||
Установка с настройкой как HPB, так и F7cloud backend:
|
||||
|
||||
```bash
|
||||
sudo ./install.sh \
|
||||
--hpb-url https://hpb.example.com \
|
||||
--hpb-secret your-hpb-secret-here \
|
||||
--f7cloud-url https://f7cloud.example.com \
|
||||
--f7cloud-secret your-f7cloud-secret-here
|
||||
# В файле .env задайте HPB_DOMAIN, HPB_INTERNAL_SECRET, DOMAIN, HPB_BACKEND_SECRET, затем:
|
||||
sudo ./f7recording.sh /path/to/f7cloud-install.env
|
||||
```
|
||||
|
||||
## Установка с кастомным адресом прослушивания
|
||||
|
||||
```bash
|
||||
sudo ./install.sh \
|
||||
--hpb-url https://hpb.example.com \
|
||||
--hpb-secret your-hpb-secret-here \
|
||||
--listen 0.0.0.0:8080
|
||||
sudo ./f7recording.sh /path/to/f7cloud-install.env
|
||||
```
|
||||
|
||||
## Просмотр справки
|
||||
|
||||
```bash
|
||||
sudo ./install.sh --help
|
||||
# Справка: ./f7recording.sh /path/to/f7cloud-install.env
|
||||
```
|
||||
|
||||
## Что делает скрипт
|
||||
|
|
|
|||
|
|
@ -39,7 +39,7 @@ f7cloud-talk-recording/
|
|||
├── pyproject.toml # Конфигурация Python проекта
|
||||
│ # Содержит зависимости, метаданные, скрипты
|
||||
│
|
||||
├── install.sh # Скрипт автоматической установки
|
||||
├── f7recording.sh # Скрипт установки (запуск с .env)
|
||||
│ # Устанавливает все зависимости и настраивает систему
|
||||
│
|
||||
├── INSTALL.md # Подробная инструкция по установке
|
||||
|
|
@ -137,8 +137,8 @@ Firefox ESR (Extended Support Release) - стабильная версия Firef
|
|||
|
||||
### Скрипты
|
||||
|
||||
#### install.sh
|
||||
Автоматический скрипт установки:
|
||||
#### f7recording.sh
|
||||
Скрипт установки (принимает путь к .env-файлу):
|
||||
1. Устанавливает системные зависимости
|
||||
2. Устанавливает Firefox ESR и Geckodriver
|
||||
3. Создает виртуальное окружение Python
|
||||
|
|
@ -181,7 +181,7 @@ HTTP Request → Server.py
|
|||
### Автоматическая установка
|
||||
|
||||
```bash
|
||||
sudo ./install.sh
|
||||
sudo ./f7recording.sh /path/to/f7cloud-install.env
|
||||
```
|
||||
|
||||
### Ручная установка
|
||||
|
|
|
|||
|
|
@ -34,7 +34,7 @@ f7cloud-talk-recording/
|
|||
│
|
||||
├── server.conf.in # Шаблон конфигурационного файла
|
||||
├── pyproject.toml # Конфигурация Python проекта
|
||||
├── install.sh # Скрипт автоматической установки
|
||||
├── f7recording.sh # Скрипт установки (запуск с .env-файлом)
|
||||
├── INSTALL.md # Подробная инструкция по установке
|
||||
└── README.md # Этот файл
|
||||
```
|
||||
|
|
@ -56,7 +56,7 @@ 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
|
||||
sudo ./f7recording.sh /path/to/f7cloud-install.env
|
||||
```
|
||||
|
||||
### Конфигурация
|
||||
|
|
@ -148,7 +148,7 @@ HTTP сервер на Flask, который обрабатывает запро
|
|||
Для развертывания на новом сервере:
|
||||
|
||||
1. Скопируйте весь репозиторий на сервер
|
||||
2. Запустите `sudo ./install.sh`
|
||||
2. Запустите `sudo ./f7recording.sh /path/to/f7cloud-install.env`
|
||||
3. Настройте `/etc/f7cloud-talk-recording/server.conf`
|
||||
4. Запустите сервис: `sudo systemctl start f7cloud-talk-recording`
|
||||
|
||||
|
|
|
|||
2
dependencies/README.md
vendored
2
dependencies/README.md
vendored
|
|
@ -47,4 +47,4 @@ cp /usr/local/bin/geckodriver dependencies/
|
|||
|
||||
Эти файлы не включены в git репозиторий из-за их большого размера. Они должны быть установлены отдельно на каждом сервере или включены в процесс развертывания.
|
||||
|
||||
Скрипт `install.sh` ожидает, что эти зависимости уже находятся в папке `dependencies/` при запуске установки.
|
||||
Скрипт `f7recording.sh` устанавливает зависимости через системные пакеты (apt-get install firefox-esr и т.д.).
|
||||
|
|
|
|||
16
deploy.sh
16
deploy.sh
|
|
@ -178,13 +178,17 @@ cd "$INSTALL_DIR"
|
|||
# Запуск скрипта установки
|
||||
info "Запуск скрипта установки..."
|
||||
|
||||
INSTALL_CMD="./install.sh --hpb-url \"$HPB_URL\" --hpb-secret \"$HPB_SECRET\" --listen \"$LISTEN_ADDRESS\""
|
||||
# Создаём временный .env для f7recording.sh
|
||||
ENV_FILE="/tmp/f7cloud-install-$$.env"
|
||||
cat > "$ENV_FILE" << ENVEOF
|
||||
HPB_DOMAIN=$(echo "$HPB_URL" | sed 's|https\?://||' | sed 's|/.*||')
|
||||
HPB_INTERNAL_SECRET=$HPB_SECRET
|
||||
DOMAIN=$(echo "${F7CLOUD_URL:-$HPB_URL}" | sed 's|https\?://||' | sed 's|/.*||')
|
||||
HPB_BACKEND_SECRET=${F7CLOUD_SECRET:-$HPB_SECRET}
|
||||
ENVEOF
|
||||
|
||||
if [ -n "$F7CLOUD_URL" ] && [ -n "$F7CLOUD_SECRET" ]; then
|
||||
INSTALL_CMD="$INSTALL_CMD --f7cloud-url \"$F7CLOUD_URL\" --f7cloud-secret \"$F7CLOUD_SECRET\""
|
||||
fi
|
||||
|
||||
eval "$INSTALL_CMD"
|
||||
./f7recording.sh "$ENV_FILE"
|
||||
rm -f "$ENV_FILE"
|
||||
|
||||
info ""
|
||||
info "=========================================="
|
||||
|
|
|
|||
769
install.sh
769
install.sh
|
|
@ -1,769 +0,0 @@
|
|||
#!/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"
|
||||
}
|
||||
|
||||
# Функция для безопасного копирования с проверками
|
||||
safe_copy() {
|
||||
local source="$1"
|
||||
local dest="$2"
|
||||
|
||||
if [ ! -e "$source" ]; then
|
||||
error "Источник не существует: $source"
|
||||
return 1
|
||||
fi
|
||||
|
||||
# Создаем целевую директорию, если её нет
|
||||
local target_dir=$(dirname "$dest")
|
||||
if [ ! -d "$target_dir" ]; then
|
||||
mkdir -p "$target_dir"
|
||||
fi
|
||||
|
||||
cp -a "$source" "$dest"
|
||||
|
||||
# Проверяем успешность копирования
|
||||
if [ ! -e "$dest" ]; then
|
||||
error "Не удалось скопировать $source в $dest"
|
||||
return 1
|
||||
fi
|
||||
|
||||
return 0
|
||||
}
|
||||
|
||||
# Функция для вывода справки
|
||||
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" ]; then
|
||||
# Пробуем получить из переменной окружения
|
||||
HPB_URL="${HPB_URL_ENV:-}"
|
||||
fi
|
||||
|
||||
if [ -z "$HPB_SECRET" ]; then
|
||||
# Пробуем получить из переменной окружения
|
||||
HPB_SECRET="${HPB_SECRET_ENV:-}"
|
||||
fi
|
||||
|
||||
if [ -z "$F7CLOUD_URL" ]; then
|
||||
# Пробуем получить из переменной окружения
|
||||
F7CLOUD_URL="${F7CLOUD_URL_ENV:-}"
|
||||
fi
|
||||
|
||||
if [ -z "$F7CLOUD_SECRET" ]; then
|
||||
# Пробуем получить из переменной окружения
|
||||
F7CLOUD_SECRET="${F7CLOUD_SECRET_ENV:-}"
|
||||
fi
|
||||
|
||||
if [ -z "$LISTEN_ADDRESS" ] || [ "$LISTEN_ADDRESS" = "127.0.0.1:8000" ]; then
|
||||
# Пробуем получить из переменной окружения, если не задано явно
|
||||
if [ -n "${LISTEN_ADDRESS_ENV:-}" ]; then
|
||||
LISTEN_ADDRESS="${LISTEN_ADDRESS_ENV}"
|
||||
fi
|
||||
fi
|
||||
|
||||
if [ -z "$HPB_URL" ] || [ -z "$HPB_SECRET" ]; then
|
||||
error "Ошибка: --hpb-url и --hpb-secret являются обязательными параметрами"
|
||||
error ""
|
||||
error "Использование:"
|
||||
error " $0 --hpb-url URL --hpb-secret SECRET [OPTIONS]"
|
||||
error ""
|
||||
error "Или используйте переменные окружения:"
|
||||
error " export HPB_URL_ENV='https://hpb.example.com'"
|
||||
error " export HPB_SECRET_ENV='your-secret'"
|
||||
error " $0"
|
||||
echo ""
|
||||
show_help
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# Вывод используемых параметров
|
||||
info "Используемые параметры:"
|
||||
info " HPB URL: $HPB_URL"
|
||||
info " HPB Secret: [скрыт]"
|
||||
if [ -n "$F7CLOUD_URL" ]; then
|
||||
info " F7cloud URL: $F7CLOUD_URL"
|
||||
if [ -n "$F7CLOUD_SECRET" ]; then
|
||||
info " F7cloud Secret: [скрыт]"
|
||||
fi
|
||||
fi
|
||||
info " Listen: $LISTEN_ADDRESS"
|
||||
info ""
|
||||
|
||||
# Проверка прав 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 \
|
||||
git \
|
||||
bzip2 \
|
||||
tar
|
||||
|
||||
if [ $? -ne 0 ]; then
|
||||
error "Ошибка при установке системных зависимостей"
|
||||
exit 1
|
||||
fi
|
||||
else
|
||||
error "Установка для RedHat-based дистрибутивов пока не поддерживается автоматически"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# 2. Установка Firefox ESR
|
||||
info "Установка Firefox ESR..."
|
||||
|
||||
if [ -d "dependencies/firefox-esr" ] && [ -f "dependencies/firefox-esr/firefox" ]; then
|
||||
info "Использование Firefox ESR из dependencies..."
|
||||
|
||||
# Проверяем существование директории перед копированием
|
||||
if [ ! -d "dependencies/firefox-esr" ]; then
|
||||
error "Директория dependencies/firefox-esr не найдена"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
if [ ! -f "dependencies/firefox-esr/firefox" ]; then
|
||||
error "Исполняемый файл Firefox не найден в dependencies/firefox-esr/firefox"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# Создаем целевую директорию, если её нет
|
||||
if [ ! -d "/opt/firefox-esr" ]; then
|
||||
mkdir -p /opt/firefox-esr
|
||||
fi
|
||||
|
||||
# Копируем с проверкой
|
||||
if ! safe_copy "dependencies/firefox-esr" "/opt/firefox-esr"; then
|
||||
error "Не удалось скопировать Firefox ESR"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
ln -sf /opt/firefox-esr/firefox /usr/local/bin/firefox-esr
|
||||
chmod +x /usr/local/bin/firefox-esr
|
||||
|
||||
# Проверяем успешность установки
|
||||
if [ ! -f "/usr/local/bin/firefox-esr" ] || [ ! -L "/usr/local/bin/firefox-esr" ]; then
|
||||
error "Не удалось создать символьную ссылку на Firefox ESR"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
info "Firefox ESR установлен в /opt/firefox-esr"
|
||||
else
|
||||
warn "Firefox ESR не найден в dependencies/, пытаемся скачать..."
|
||||
|
||||
# Определяем архитектуру
|
||||
ARCH=$(uname -m)
|
||||
if [ "$ARCH" = "x86_64" ]; then
|
||||
FIREFOX_ARCH="linux64"
|
||||
elif [ "$ARCH" = "aarch64" ] || [ "$ARCH" = "arm64" ]; then
|
||||
FIREFOX_ARCH="linux-aarch64"
|
||||
else
|
||||
error "Неподдерживаемая архитектура: $ARCH"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
info "Скачивание Firefox ESR для $FIREFOX_ARCH..."
|
||||
mkdir -p dependencies
|
||||
cd dependencies
|
||||
|
||||
# Скачиваем последнюю версию Firefox ESR
|
||||
FIREFOX_URL="https://download.mozilla.org/?product=firefox-esr-latest-ssl&os=${FIREFOX_ARCH}&lang=en-US"
|
||||
|
||||
if command -v wget &> /dev/null; then
|
||||
wget -q --show-progress -O firefox-esr.tar.bz2 "$FIREFOX_URL"
|
||||
elif command -v curl &> /dev/null; then
|
||||
curl -L -o firefox-esr.tar.bz2 "$FIREFOX_URL"
|
||||
else
|
||||
error "Не найден wget или curl для скачивания Firefox ESR"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
if [ -f firefox-esr.tar.bz2 ]; then
|
||||
info "Распаковка Firefox ESR..."
|
||||
if ! tar -xjf firefox-esr.tar.bz2; then
|
||||
error "Не удалось распаковать Firefox ESR"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
if [ ! -d firefox ]; then
|
||||
error "Директория firefox не найдена после распаковки"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
mv firefox firefox-esr
|
||||
rm firefox-esr.tar.bz2
|
||||
|
||||
if [ ! -f firefox-esr/firefox ]; then
|
||||
error "Исполняемый файл Firefox не найден после распаковки"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
if ! safe_copy "firefox-esr" "/opt/firefox-esr"; then
|
||||
error "Не удалось скопировать Firefox ESR в /opt"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
ln -sf /opt/firefox-esr/firefox /usr/local/bin/firefox-esr
|
||||
chmod +x /usr/local/bin/firefox-esr
|
||||
|
||||
# Проверяем успешность установки
|
||||
if [ ! -f "/usr/local/bin/firefox-esr" ] || [ ! -L "/usr/local/bin/firefox-esr" ]; then
|
||||
error "Не удалось создать символьную ссылку на Firefox ESR"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
info "Firefox ESR установлен в /opt/firefox-esr"
|
||||
else
|
||||
error "Не удалось скачать Firefox ESR"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
cd ..
|
||||
fi
|
||||
|
||||
# 3. Установка Geckodriver
|
||||
info "Установка Geckodriver..."
|
||||
|
||||
if [ -f "dependencies/geckodriver" ]; then
|
||||
if [ ! -f "dependencies/geckodriver" ]; then
|
||||
error "Файл dependencies/geckodriver не найден"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
if ! safe_copy "dependencies/geckodriver" "/usr/local/bin/geckodriver"; then
|
||||
error "Не удалось скопировать Geckodriver"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
chmod +x /usr/local/bin/geckodriver
|
||||
|
||||
# Проверяем успешность установки
|
||||
if [ ! -f "/usr/local/bin/geckodriver" ]; then
|
||||
error "Geckodriver не найден после установки"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
info "Geckodriver установлен в /usr/local/bin/geckodriver"
|
||||
elif [ -f "dependencies/geckodriver.tar.gz" ]; then
|
||||
info "Распаковка geckodriver из архива..."
|
||||
cd dependencies
|
||||
|
||||
if ! tar -xzf geckodriver.tar.gz; then
|
||||
error "Не удалось распаковать Geckodriver"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
if [ ! -f geckodriver ]; then
|
||||
error "Файл geckodriver не найден после распаковки"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
chmod +x geckodriver
|
||||
|
||||
if ! safe_copy "geckodriver" "/usr/local/bin/geckodriver"; then
|
||||
error "Не удалось скопировать Geckodriver"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
cd ..
|
||||
|
||||
# Проверяем успешность установки
|
||||
if [ ! -f "/usr/local/bin/geckodriver" ]; then
|
||||
error "Geckodriver не найден после установки"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
info "Geckodriver установлен в /usr/local/bin/geckodriver"
|
||||
else
|
||||
warn "Geckodriver не найден в dependencies/, пытаемся скачать..."
|
||||
|
||||
# Определяем архитектуру
|
||||
ARCH=$(uname -m)
|
||||
if [ "$ARCH" = "x86_64" ]; then
|
||||
GECKODRIVER_ARCH="linux64"
|
||||
elif [ "$ARCH" = "aarch64" ] || [ "$ARCH" = "arm64" ]; then
|
||||
GECKODRIVER_ARCH="linux-aarch64"
|
||||
else
|
||||
error "Неподдерживаемая архитектура: $ARCH"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
info "Скачивание Geckodriver для $GECKODRIVER_ARCH..."
|
||||
mkdir -p dependencies
|
||||
cd dependencies
|
||||
|
||||
# Получаем последнюю версию geckodriver из GitHub releases
|
||||
GECKODRIVER_VERSION=$(curl -s https://api.github.com/repos/mozilla/geckodriver/releases/latest | grep '"tag_name":' | sed -E 's/.*"([^"]+)".*/\1/' | sed 's/v//')
|
||||
|
||||
if [ -z "$GECKODRIVER_VERSION" ]; then
|
||||
# Fallback на известную версию
|
||||
GECKODRIVER_VERSION="0.34.0"
|
||||
warn "Не удалось определить версию, используем $GECKODRIVER_VERSION"
|
||||
fi
|
||||
|
||||
GECKODRIVER_URL="https://github.com/mozilla/geckodriver/releases/download/v${GECKODRIVER_VERSION}/geckodriver-v${GECKODRIVER_VERSION}-${GECKODRIVER_ARCH}.tar.gz"
|
||||
|
||||
if command -v wget &> /dev/null; then
|
||||
wget -q --show-progress -O geckodriver.tar.gz "$GECKODRIVER_URL"
|
||||
elif command -v curl &> /dev/null; then
|
||||
curl -L -o geckodriver.tar.gz "$GECKODRIVER_URL"
|
||||
else
|
||||
error "Не найден wget или curl для скачивания Geckodriver"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
if [ -f geckodriver.tar.gz ]; then
|
||||
info "Распаковка Geckodriver..."
|
||||
if ! tar -xzf geckodriver.tar.gz; then
|
||||
error "Не удалось распаковать Geckodriver"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
if [ ! -f geckodriver ]; then
|
||||
error "Файл geckodriver не найден после распаковки"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
chmod +x geckodriver
|
||||
|
||||
if ! safe_copy "geckodriver" "/usr/local/bin/geckodriver"; then
|
||||
error "Не удалось скопировать Geckodriver в /usr/local/bin"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
rm geckodriver.tar.gz
|
||||
|
||||
# Проверяем успешность установки
|
||||
if [ ! -f "/usr/local/bin/geckodriver" ]; then
|
||||
error "Geckodriver не найден после установки"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
info "Geckodriver установлен в /usr/local/bin/geckodriver"
|
||||
else
|
||||
error "Не удалось скачать Geckodriver"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
cd ..
|
||||
fi
|
||||
|
||||
# 4. Создание виртуального окружения Python
|
||||
info "Создание виртуального окружения Python..."
|
||||
|
||||
if [ ! -d "venv" ]; then
|
||||
if ! python3 -m venv venv; then
|
||||
error "Не удалось создать виртуальное окружение Python"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# Проверяем успешность создания
|
||||
if [ ! -d "venv" ] || [ ! -f "venv/bin/activate" ]; then
|
||||
error "Виртуальное окружение создано некорректно"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
info "Виртуальное окружение создано"
|
||||
else
|
||||
warn "Виртуальное окружение уже существует, пропускаем создание..."
|
||||
|
||||
# Проверяем, что существующее окружение валидно
|
||||
if [ ! -f "venv/bin/activate" ]; then
|
||||
error "Существующее виртуальное окружение повреждено"
|
||||
exit 1
|
||||
fi
|
||||
fi
|
||||
|
||||
# Активация виртуального окружения и установка зависимостей
|
||||
info "Установка Python-зависимостей..."
|
||||
|
||||
source venv/bin/activate
|
||||
|
||||
if ! pip install --upgrade pip; then
|
||||
error "Не удалось обновить pip"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
if ! pip install -e .; then
|
||||
error "Не удалось установить Python-зависимости"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# Проверяем успешность установки
|
||||
if ! python3 -c "import f7cloud.talk.recording" 2>/dev/null; then
|
||||
error "Модуль f7cloud.talk.recording не найден после установки"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
info "Python-зависимости установлены"
|
||||
|
||||
# 5. Создание пользователя для запуска сервера
|
||||
info "Создание пользователя f7cloud-talk-recording..."
|
||||
|
||||
if ! id "f7cloud-talk-recording" &>/dev/null; then
|
||||
if ! useradd -r -s /bin/false -d /var/lib/f7cloud-talk-recording f7cloud-talk-recording; then
|
||||
error "Не удалось создать пользователя f7cloud-talk-recording"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# Проверяем успешность создания
|
||||
if ! id "f7cloud-talk-recording" &>/dev/null; then
|
||||
error "Пользователь f7cloud-talk-recording не найден после создания"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
info "Пользователь f7cloud-talk-recording создан"
|
||||
else
|
||||
warn "Пользователь f7cloud-talk-recording уже существует"
|
||||
fi
|
||||
|
||||
# Создание директорий для пользователя
|
||||
if ! mkdir -p /var/lib/f7cloud-talk-recording; then
|
||||
error "Не удалось создать директорию /var/lib/f7cloud-talk-recording"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
if ! chown f7cloud-talk-recording:f7cloud-talk-recording /var/lib/f7cloud-talk-recording; then
|
||||
error "Не удалось установить права на /var/lib/f7cloud-talk-recording"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# Проверяем успешность создания директории
|
||||
if [ ! -d "/var/lib/f7cloud-talk-recording" ]; then
|
||||
error "Директория /var/lib/f7cloud-talk-recording не найдена после создания"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# 6. Настройка конфигурации
|
||||
info "Настройка конфигурации..."
|
||||
|
||||
mkdir -p /etc/f7cloud-talk-recording
|
||||
|
||||
CONFIG_FILE="/etc/f7cloud-talk-recording/server.conf"
|
||||
|
||||
if [ ! -f "$CONFIG_FILE" ]; then
|
||||
if [ ! -f "server.conf.in" ]; then
|
||||
error "Шаблон конфигурации server.conf.in не найден"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
if ! safe_copy "server.conf.in" "$CONFIG_FILE"; then
|
||||
error "Не удалось создать конфигурационный файл"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# Проверяем успешность создания
|
||||
if [ ! -f "$CONFIG_FILE" ]; then
|
||||
error "Конфигурационный файл не найден после создания"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
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 "Установленные компоненты:"
|
||||
[ -f "/usr/local/bin/firefox-esr" ] && info " ✓ Firefox ESR"
|
||||
[ -f "/usr/local/bin/geckodriver" ] && info " ✓ Geckodriver"
|
||||
[ -d "venv" ] && [ -f "venv/bin/activate" ] && info " ✓ Виртуальное окружение Python"
|
||||
[ -d "/var/lib/f7cloud-talk-recording" ] && info " ✓ Директория пользователя"
|
||||
[ -f "$CONFIG_FILE" ] && info " ✓ Конфигурационный файл"
|
||||
[ -f "/etc/systemd/system/f7cloud-talk-recording.service" ] && info " ✓ Systemd service"
|
||||
|
||||
info ""
|
||||
info "Настроенные параметры:"
|
||||
info " HPB URL: $HPB_URL"
|
||||
info " Listen: $LISTEN_ADDRESS"
|
||||
if [ -n "$F7CLOUD_URL" ]; then
|
||||
info " F7cloud URL: $F7CLOUD_URL"
|
||||
fi
|
||||
info ""
|
||||
|
||||
# Проверяем статус сервиса
|
||||
if systemctl list-unit-files | grep -q "f7cloud-talk-recording.service"; then
|
||||
if systemctl is-enabled --quiet f7cloud-talk-recording 2>/dev/null; then
|
||||
info "✓ Сервис f7cloud-talk-recording включен для автозапуска"
|
||||
else
|
||||
warn "⚠ Сервис f7cloud-talk-recording не включен для автозапуска"
|
||||
fi
|
||||
|
||||
if systemctl is-active --quiet f7cloud-talk-recording 2>/dev/null; then
|
||||
info "✓ Сервис f7cloud-talk-recording запущен"
|
||||
else
|
||||
warn "⚠ Сервис f7cloud-talk-recording не запущен"
|
||||
fi
|
||||
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 ""
|
||||
Loading…
Reference in New Issue
Block a user