114 lines
5.6 KiB
Bash
114 lines
5.6 KiB
Bash
#!/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
|