#!/bin/bash # Установка F7_HPB (signaling, конфиг, systemd). Запускается на сервере HPB. # Использование: ./f7hpb.sh [/path/to/f7cloud-install.env] # Переменные можно передать через env-файл или ввести в диалоге, если не заданы. set -e ROLE="f7hpb" ERROR_LOG="/tmp/install-error-${ROLE}.log" log_error() { echo "[$(date '+%Y-%m-%d %H:%M:%S')] ERROR: $*" >> "$ERROR_LOG"; echo "ERROR: $*" >&2; } log_warn() { echo "[$(date '+%Y-%m-%d %H:%M:%S')] WARN: $*" >> "$ERROR_LOG"; echo "WARN: $*" >&2; } # Два режима: если переменная передана (не пустая) — использовать; иначе — запросить ввод. # Использование: get_var ИМЯ_ПЕРЕМЕННОЙ "Подсказка для пользователя" get_var() { local name="$1" local prompt="$2" local val="${!name}" if [ -z "$val" ]; then read -rp "$prompt: " val [ -z "$val" ] && { log_error "Переменная $name не задана."; exit 1; } printf -v "$name" '%s' "$val" fi } # Путь к env-файлу: аргумент скрипта или запрос ENV_FILE="${1:-}" get_var ENV_FILE "Путь к файлу конфигурации (например /path/to/f7cloud-install.env)" if [ ! -f "$ENV_FILE" ]; then log_error "Файл конфигурации не найден: $ENV_FILE" exit 1 fi # shellcheck source=/dev/null set -a && source "$ENV_FILE" && set +a # Переменные из env или диалог, если не переданы get_var HPB_HASHKEY "HPB hashkey" get_var HPB_BLOCKKEY "HPB blockkey" get_var HPB_INTERNAL_SECRET "HPB internal_secret" get_var HPB_BACKEND_SECRET "HPB backend secret" get_var F7CLOUD_URL "URL F7 Cloud (например https://cloud.example.com)" HPB_DOMAIN="${F7CLOUD_URL}" > "$ERROR_LOG" echo "=== Лог установки F7_HPB ===" >> "$ERROR_LOG" echo "Начало: $(date '+%Y-%m-%d %H:%M:%S')" >> "$ERROR_LOG" if ! command -v git >/dev/null 2>&1; then echo "Установка git..." apt-get update -qq && apt-get install -y git || { log_error "Не удалось установить git"; exit 1; } fi rm -rf /tmp/F7_HPB echo "Клонирование репозитория F7_HPB..." if ! (cd /tmp && git clone https://git.f7cloud.ru/root/F7_HPB.git); then log_error "Не удалось клонировать репозиторий F7_HPB" exit 1 fi sleep 1 if ! [ -d /tmp/F7_HPB ]; then log_error "Директория /tmp/F7_HPB не существует после клонирования" exit 1 fi # Секреты должны быть в env (переданы из главного скрипта) if [ -f /tmp/hpb-secrets.env ]; then # shellcheck source=/dev/null set -a && source /tmp/hpb-secrets.env && set +a fi R=/tmp/F7_HPB mkdir -p /etc/f7cloud-spreed-signaling if [ -f "$R/server.conf.example" ]; then cp "$R/server.conf.example" /etc/f7cloud-spreed-signaling/server.conf sed -i "s|hashkey.*=.*|hashkey = \"${HPB_HASHKEY}\"|i" /etc/f7cloud-spreed-signaling/server.conf sed -i "s|blockkey.*=.*|blockkey = \"${HPB_BLOCKKEY}\"|i" /etc/f7cloud-spreed-signaling/server.conf sed -i "s|internal.*secret.*=.*|internal_secret = \"${HPB_INTERNAL_SECRET}\"|i" /etc/f7cloud-spreed-signaling/server.conf sed -i "s|backend.*secret.*=.*|secret = \"${HPB_BACKEND_SECRET}\"|i" /etc/f7cloud-spreed-signaling/server.conf sed -i "s|https://.*nextcloud|${F7CLOUD_URL}|i" /etc/f7cloud-spreed-signaling/server.conf sed -i "s|https://.*hpb|https://${HPB_DOMAIN}|i" /etc/f7cloud-spreed-signaling/server.conf fi for bin in "$R/signaling-server" "$R/build/signaling-server" "$R/signaling-server-server"; do [ -f "$bin" ] && cp "$bin" /usr/bin/ 2>/dev/null && chmod +x "/usr/bin/$(basename "$bin")" && break done find "$R" -maxdepth 2 -name "*.service" -exec cp {} /etc/systemd/system/ \; # Overlay: файлы и каталоги из репозитория на те же пути в системе if [ -d "$R/overlay" ]; then echo "Установка overlay (nats, janus, coturn, бинарники)..." [ -f "$R/overlay/etc/nats-server.conf" ] && cp "$R/overlay/etc/nats-server.conf" /etc/ [ -d "$R/overlay/etc/janus" ] && cp -a "$R/overlay/etc/janus" /etc/ [ -d "$R/overlay/etc/coturn" ] && cp -a "$R/overlay/etc/coturn" /etc/ [ -f "$R/overlay/usr/sbin/nats-server" ] && cp "$R/overlay/usr/sbin/nats-server" /usr/sbin/ && chmod +x /usr/sbin/nats-server [ -f "$R/overlay/usr/bin/turnserver" ] && cp "$R/overlay/usr/bin/turnserver" /usr/bin/ && chmod +x /usr/bin/turnserver # Права для coturn: пользователь turnserver, каталоги 750 if [ -d /etc/coturn ]; then getent passwd turnserver >/dev/null 2>&1 || (useradd -r -s /usr/sbin/nologin turnserver 2>/dev/null || true) chown -R turnserver:turnserver /etc/coturn find /etc/coturn -type d -exec chmod 750 {} \; find /etc/coturn -type f -exec chmod 640 {} \; fi fi systemctl daemon-reload 2>/dev/null || true systemctl enable f7cloud-spreed-signaling 2>/dev/null || systemctl enable signaling 2>/dev/null || true systemctl start f7cloud-spreed-signaling 2>/dev/null || systemctl start signaling 2>/dev/null || true echo "Конец: $(date '+%Y-%m-%d %H:%M:%S')" >> "$ERROR_LOG" echo "F7_HPB установлен. Лог ошибок: $ERROR_LOG" exit 0