F7_HPB/f7hpb.sh

114 lines
5.6 KiB
Bash
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
# Установка 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