Выгрузка F7cloud_HPB: скрипт установки с автогенерацией секретов
This commit is contained in:
parent
43a290149b
commit
81f7f4af95
1
.gitignore
vendored
1
.gitignore
vendored
|
|
@ -1,5 +1,6 @@
|
|||
# Конфиг с секретами — не выгружать в git
|
||||
server.conf
|
||||
.secrets.txt
|
||||
|
||||
# Резервные копии и временные файлы
|
||||
*.bak
|
||||
|
|
|
|||
196
INSTALL.md
Normal file
196
INSTALL.md
Normal file
|
|
@ -0,0 +1,196 @@
|
|||
# Инструкция по установке HPB - Nextcloud Spreed Signaling Stack
|
||||
|
||||
Этот репозиторий содержит все необходимое для развертывания стека Nextcloud Talk на новом сервере.
|
||||
|
||||
## Быстрая установка
|
||||
|
||||
### Требования
|
||||
|
||||
- Linux (Debian/Ubuntu рекомендуется)
|
||||
- Root доступ
|
||||
- Открытые порты:
|
||||
- 8080 (signaling HTTP, можно изменить)
|
||||
- 8188 (Janus WebSocket)
|
||||
- 4222 (NATS)
|
||||
- 3478/5349 (coTURN UDP/TCP/TLS)
|
||||
- 9991 (coTURN для signaling, можно изменить)
|
||||
|
||||
### Автоматическая установка
|
||||
|
||||
```bash
|
||||
# Клонируйте репозиторий
|
||||
git clone https://git.f7cloud.ru/root/F7_HPB.git /tmp/f7cloud-hpb
|
||||
cd /tmp/f7cloud-hpb
|
||||
|
||||
# Запустите скрипт установки (от root)
|
||||
sudo ./install.sh
|
||||
```
|
||||
|
||||
Скрипт автоматически:
|
||||
- ✅ Генерирует все необходимые секреты
|
||||
- ✅ Создает системных пользователей
|
||||
- ✅ Устанавливает бинарники в `/usr/bin` и `/usr/sbin`
|
||||
- ✅ Копирует конфиги с подстановкой секретов
|
||||
- ✅ Настраивает systemd unit файлы
|
||||
- ✅ Сохраняет секреты в `/etc/f7cloud-spreed-signaling/.secrets.txt`
|
||||
|
||||
### После установки
|
||||
|
||||
**ВАЖНО: Обязательно отредактируйте конфиги перед запуском!**
|
||||
|
||||
1. **Signaling server** (`/etc/f7cloud-spreed-signaling/server.conf`):
|
||||
```bash
|
||||
nano /etc/f7cloud-spreed-signaling/server.conf
|
||||
```
|
||||
- Укажите реальные URL бэкендов Nextcloud в секции `[nextcloud-backend-0]`
|
||||
- Проверьте секреты (они уже сгенерированы)
|
||||
|
||||
2. **coTURN** (`/etc/turnserver.conf`):
|
||||
```bash
|
||||
nano /etc/turnserver.conf
|
||||
```
|
||||
- Укажите реальные IP адреса в `listening-ip` и `relay-ip`
|
||||
- Укажите `realm` (домен вашего сервера)
|
||||
- Укажите пути к TLS сертификатам (если используете HTTPS)
|
||||
|
||||
3. **Janus** (`/etc/janus/janus.jcfg`):
|
||||
- Проверьте пути к плагинам и транспортам
|
||||
- Admin secret уже сгенерирован
|
||||
|
||||
### Запуск сервисов
|
||||
|
||||
```bash
|
||||
# Включить автозапуск
|
||||
sudo systemctl enable signaling janus nats-server coturn
|
||||
|
||||
# Запустить сервисы
|
||||
sudo systemctl start signaling janus nats-server coturn
|
||||
|
||||
# Проверить статус
|
||||
sudo systemctl status signaling janus nats-server coturn
|
||||
```
|
||||
|
||||
### Проверка работы
|
||||
|
||||
```bash
|
||||
# Логи signaling
|
||||
sudo journalctl -u signaling -f
|
||||
|
||||
# Логи janus
|
||||
sudo journalctl -u janus -f
|
||||
|
||||
# Логи NATS
|
||||
sudo journalctl -u nats-server -f
|
||||
|
||||
# Логи coTURN
|
||||
sudo journalctl -u coturn -f
|
||||
```
|
||||
|
||||
## Структура установки
|
||||
|
||||
После установки файлы будут находиться:
|
||||
|
||||
```
|
||||
/usr/bin/
|
||||
├── signaling # Signaling server
|
||||
├── janus # Janus WebRTC Gateway
|
||||
└── turnserver # coTURN TURN server
|
||||
|
||||
/usr/sbin/
|
||||
└── nats-server # NATS Server
|
||||
|
||||
/usr/lib/x86_64-linux-gnu/janus/
|
||||
├── plugins/ # Janus плагины
|
||||
├── transports/ # Janus транспорты
|
||||
├── events/ # Janus event handlers
|
||||
└── loggers/ # Janus loggers
|
||||
|
||||
/etc/f7cloud-spreed-signaling/
|
||||
├── server.conf # Конфиг signaling (с секретами!)
|
||||
└── .secrets.txt # Сохраненные секреты
|
||||
|
||||
/etc/janus/ # Конфиги Janus
|
||||
|
||||
/etc/turnserver.conf # Конфиг coTURN
|
||||
|
||||
/etc/nats-server.conf # Конфиг NATS
|
||||
|
||||
/etc/systemd/system/
|
||||
├── signaling.service
|
||||
├── janus.service
|
||||
├── nats-server.service
|
||||
└── coturn.service
|
||||
```
|
||||
|
||||
## Секреты
|
||||
|
||||
Все секреты автоматически генерируются при установке и сохраняются в:
|
||||
```
|
||||
/etc/f7cloud-spreed-signaling/.secrets.txt
|
||||
```
|
||||
|
||||
**ВАЖНО:** Сохраните этот файл в безопасном месте! Он понадобится для:
|
||||
- Настройки Nextcloud (backend secret)
|
||||
- Восстановления конфигурации
|
||||
- Синхронизации секретов между серверами
|
||||
|
||||
## Ручная установка
|
||||
|
||||
Если автоматический скрипт не подходит, можно установить вручную:
|
||||
|
||||
1. Скопируйте бинарники из `signaling-server/` в соответствующие директории
|
||||
2. Скопируйте конфиги из `config/` и `systemd/`
|
||||
3. Сгенерируйте секреты вручную:
|
||||
```bash
|
||||
# Генерация hex секрета (64 символа)
|
||||
openssl rand -hex 32
|
||||
|
||||
# Генерация base64 секрета
|
||||
openssl rand -base64 16
|
||||
```
|
||||
4. Подставьте секреты в конфиги
|
||||
5. Создайте пользователей и настройте права доступа
|
||||
6. Установите systemd unit файлы
|
||||
|
||||
## Обновление
|
||||
|
||||
Для обновления:
|
||||
|
||||
```bash
|
||||
# Остановите сервисы
|
||||
sudo systemctl stop signaling janus nats-server coturn
|
||||
|
||||
# Обновите бинарники из репозитория
|
||||
git pull
|
||||
sudo cp signaling-server/* /usr/bin/ # или соответствующие пути
|
||||
|
||||
# Перезапустите сервисы
|
||||
sudo systemctl start signaling janus nats-server coturn
|
||||
```
|
||||
|
||||
## Удаление
|
||||
|
||||
```bash
|
||||
# Остановите и отключите сервисы
|
||||
sudo systemctl stop signaling janus nats-server coturn
|
||||
sudo systemctl disable signaling janus nats-server coturn
|
||||
|
||||
# Удалите файлы
|
||||
sudo rm -rf /etc/f7cloud-spreed-signaling
|
||||
sudo rm -f /usr/bin/signaling /usr/bin/janus /usr/bin/turnserver
|
||||
sudo rm -f /usr/sbin/nats-server
|
||||
sudo rm -rf /usr/lib/x86_64-linux-gnu/janus
|
||||
sudo rm -f /etc/systemd/system/{signaling,janus,nats-server,coturn}.service
|
||||
sudo systemctl daemon-reload
|
||||
|
||||
# Удалите пользователей (опционально)
|
||||
sudo userdel _signaling nats turnserver
|
||||
```
|
||||
|
||||
## Поддержка
|
||||
|
||||
При возникновении проблем проверьте:
|
||||
- Логи сервисов: `journalctl -u <service-name>`
|
||||
- Права доступа к файлам
|
||||
- Открыты ли необходимые порты
|
||||
- Правильность конфигурации
|
||||
297
install.sh
Executable file
297
install.sh
Executable file
|
|
@ -0,0 +1,297 @@
|
|||
#!/bin/bash
|
||||
# Скрипт установки HPB - Nextcloud Spreed Signaling Stack
|
||||
# Автоматически генерирует секреты и настраивает все сервисы
|
||||
|
||||
set -euo pipefail
|
||||
|
||||
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
||||
INSTALL_DIR="/etc/f7cloud-spreed-signaling"
|
||||
BIN_DIR="/usr/bin"
|
||||
SBIN_DIR="/usr/sbin"
|
||||
LIB_DIR="/usr/lib/x86_64-linux-gnu/janus"
|
||||
CONFIG_DIR="/etc/janus"
|
||||
SYSTEMD_DIR="/etc/systemd/system"
|
||||
|
||||
# Цвета для вывода
|
||||
RED='\033[0;31m'
|
||||
GREEN='\033[0;32m'
|
||||
YELLOW='\033[1;33m'
|
||||
NC='\033[0m' # No Color
|
||||
|
||||
log_info() {
|
||||
echo -e "${GREEN}[INFO]${NC} $1"
|
||||
}
|
||||
|
||||
log_warn() {
|
||||
echo -e "${YELLOW}[WARN]${NC} $1"
|
||||
}
|
||||
|
||||
log_error() {
|
||||
echo -e "${RED}[ERROR]${NC} $1"
|
||||
}
|
||||
|
||||
# Проверка прав root
|
||||
check_root() {
|
||||
if [[ $EUID -ne 0 ]]; then
|
||||
log_error "Этот скрипт должен запускаться от root"
|
||||
exit 1
|
||||
fi
|
||||
}
|
||||
|
||||
# Генерация случайных hex строк
|
||||
generate_hex() {
|
||||
local length=$1
|
||||
openssl rand -hex "$length" | tr -d '\n'
|
||||
}
|
||||
|
||||
# Генерация base64 строки
|
||||
generate_base64() {
|
||||
local length=$1
|
||||
openssl rand -base64 "$length" | tr -d '\n' | tr -d '=' | head -c "$length"
|
||||
}
|
||||
|
||||
# Генерация всех секретов
|
||||
generate_secrets() {
|
||||
log_info "Генерация секретов..."
|
||||
|
||||
# Signaling server секреты
|
||||
SIGNALING_HASHKEY=$(generate_hex 32) # 32 байта = 64 hex символа
|
||||
SIGNALING_BLOCKKEY=$(generate_hex 16) # 16 байт = 32 hex символа
|
||||
SIGNALING_INTERNAL_SECRET=$(generate_hex 32) # 64 hex символа
|
||||
SIGNALING_BACKEND_SECRET=$(generate_hex 32) # 64 hex символа
|
||||
|
||||
# TURN секрет (должен совпадать в signaling и turnserver)
|
||||
TURN_SECRET=$(generate_hex 32) # 64 hex символа
|
||||
TURN_API_KEY=$(generate_base64 16) # ~16 символов base64
|
||||
|
||||
# Janus admin secret
|
||||
JANUS_ADMIN_SECRET=$(generate_base64 16) # ~16 символов
|
||||
|
||||
log_info "Секреты сгенерированы"
|
||||
}
|
||||
|
||||
# Создание пользователей системы
|
||||
create_users() {
|
||||
log_info "Создание системных пользователей..."
|
||||
|
||||
# Пользователь для signaling
|
||||
if ! id "_signaling" &>/dev/null; then
|
||||
useradd --system --no-create-home --shell /usr/sbin/nologin \
|
||||
--comment "Nextcloud Talk signaling server" _signaling || true
|
||||
log_info "Пользователь _signaling создан"
|
||||
else
|
||||
log_warn "Пользователь _signaling уже существует"
|
||||
fi
|
||||
|
||||
# Пользователь для NATS (обычно уже есть)
|
||||
if ! id "nats" &>/dev/null; then
|
||||
useradd --system --no-create-home --shell /usr/sbin/nologin \
|
||||
--comment "NATS Server" nats || true
|
||||
log_info "Пользователь nats создан"
|
||||
else
|
||||
log_warn "Пользователь nats уже существует"
|
||||
fi
|
||||
|
||||
# Пользователь для coturn (обычно уже есть)
|
||||
if ! id "turnserver" &>/dev/null; then
|
||||
useradd --system --no-create-home --shell /usr/sbin/nologin \
|
||||
--comment "coTURN STUN/TURN Server" turnserver || true
|
||||
log_info "Пользователь turnserver создан"
|
||||
else
|
||||
log_warn "Пользователь turnserver уже существует"
|
||||
fi
|
||||
}
|
||||
|
||||
# Копирование бинарников
|
||||
install_binaries() {
|
||||
log_info "Установка бинарников..."
|
||||
|
||||
# Signaling
|
||||
if [[ -f "$SCRIPT_DIR/signaling-server/signaling" ]]; then
|
||||
cp "$SCRIPT_DIR/signaling-server/signaling" "$BIN_DIR/signaling"
|
||||
chmod 755 "$BIN_DIR/signaling"
|
||||
log_info "signaling установлен в $BIN_DIR/signaling"
|
||||
else
|
||||
log_error "Бинарник signaling не найден!"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# Janus
|
||||
if [[ -f "$SCRIPT_DIR/signaling-server/janus/bin/janus" ]]; then
|
||||
cp "$SCRIPT_DIR/signaling-server/janus/bin/janus" "$BIN_DIR/janus"
|
||||
chmod 755 "$BIN_DIR/janus"
|
||||
log_info "janus установлен в $BIN_DIR/janus"
|
||||
|
||||
# Janus библиотеки
|
||||
mkdir -p "$LIB_DIR"
|
||||
cp -r "$SCRIPT_DIR/signaling-server/janus/lib/"* "$LIB_DIR/"
|
||||
log_info "Janus библиотеки установлены в $LIB_DIR"
|
||||
else
|
||||
log_error "Бинарник janus не найден!"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# NATS Server
|
||||
if [[ -f "$SCRIPT_DIR/signaling-server/nats-server" ]]; then
|
||||
cp "$SCRIPT_DIR/signaling-server/nats-server" "$SBIN_DIR/nats-server"
|
||||
chmod 755 "$SBIN_DIR/nats-server"
|
||||
log_info "nats-server установлен в $SBIN_DIR/nats-server"
|
||||
else
|
||||
log_error "Бинарник nats-server не найден!"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# coTURN
|
||||
if [[ -f "$SCRIPT_DIR/signaling-server/turnserver" ]]; then
|
||||
cp "$SCRIPT_DIR/signaling-server/turnserver" "$BIN_DIR/turnserver"
|
||||
chmod 755 "$BIN_DIR/turnserver"
|
||||
# Создаем симлинк coturn -> turnserver
|
||||
ln -sf turnserver "$BIN_DIR/coturn"
|
||||
log_info "turnserver установлен в $BIN_DIR/turnserver"
|
||||
else
|
||||
log_error "Бинарник turnserver не найден!"
|
||||
exit 1
|
||||
fi
|
||||
}
|
||||
|
||||
# Установка конфигов с подстановкой секретов
|
||||
install_configs() {
|
||||
log_info "Установка конфигурационных файлов..."
|
||||
|
||||
# Создаем директории
|
||||
mkdir -p "$INSTALL_DIR"
|
||||
mkdir -p "$CONFIG_DIR"
|
||||
|
||||
# Signaling server.conf
|
||||
if [[ -f "$SCRIPT_DIR/server.conf.example" ]]; then
|
||||
sed -e "s|YOUR_32_OR_64_BYTE_HEX_HASHKEY|$SIGNALING_HASHKEY|g" \
|
||||
-e "s|YOUR_16_24_OR_32_BYTE_HEX_BLOCKKEY|$SIGNALING_BLOCKKEY|g" \
|
||||
-e "s|YOUR_INTERNAL_CLIENT_SECRET|$SIGNALING_INTERNAL_SECRET|g" \
|
||||
-e "s|YOUR_NEXTCLOUD_BACKEND_SECRET|$SIGNALING_BACKEND_SECRET|g" \
|
||||
-e "s|YOUR_TURN_API_KEY|$TURN_API_KEY|g" \
|
||||
-e "s|YOUR_TURN_SHARED_SECRET|$TURN_SECRET|g" \
|
||||
"$SCRIPT_DIR/server.conf.example" > "$INSTALL_DIR/server.conf"
|
||||
chmod 600 "$INSTALL_DIR/server.conf"
|
||||
chown _signaling:_signaling "$INSTALL_DIR/server.conf"
|
||||
log_info "server.conf создан в $INSTALL_DIR/server.conf"
|
||||
log_warn "ВАЖНО: Отредактируйте $INSTALL_DIR/server.conf - укажите реальные URL бэкендов Nextcloud!"
|
||||
else
|
||||
log_error "server.conf.example не найден!"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# Janus конфиги
|
||||
if [[ -d "$SCRIPT_DIR/config/janus" ]]; then
|
||||
cp -r "$SCRIPT_DIR/config/janus/"* "$CONFIG_DIR/"
|
||||
# Подставляем admin_secret в janus.jcfg
|
||||
sed -i "s|admin_secret = \"CHANGE_ME\"|admin_secret = \"$JANUS_ADMIN_SECRET\"|g" \
|
||||
"$CONFIG_DIR/janus.jcfg"
|
||||
chown -R root:root "$CONFIG_DIR"
|
||||
log_info "Janus конфиги установлены в $CONFIG_DIR"
|
||||
else
|
||||
log_error "Janus конфиги не найдены!"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# coTURN turnserver.conf
|
||||
if [[ -f "$SCRIPT_DIR/config/coturn/turnserver.conf.example" ]]; then
|
||||
# Получаем публичный IP (если доступен) или оставляем плейсхолдер
|
||||
PUBLIC_IP=$(curl -s --max-time 2 https://api.ipify.org 2>/dev/null || echo "YOUR_PUBLIC_IP")
|
||||
DOMAIN=$(hostname -f 2>/dev/null || echo "YOUR_DOMAIN")
|
||||
|
||||
sed -e "s|YOUR_TURN_STATIC_AUTH_SECRET|$TURN_SECRET|g" \
|
||||
-e "s|YOUR_PUBLIC_IP|$PUBLIC_IP|g" \
|
||||
-e "s|YOUR_DOMAIN|$DOMAIN|g" \
|
||||
"$SCRIPT_DIR/config/coturn/turnserver.conf.example" > "/etc/turnserver.conf"
|
||||
chmod 640 "/etc/turnserver.conf"
|
||||
chown turnserver:turnserver "/etc/turnserver.conf"
|
||||
log_info "turnserver.conf создан в /etc/turnserver.conf"
|
||||
log_warn "ВАЖНО: Отредактируйте /etc/turnserver.conf - укажите реальные IP адреса и пути к сертификатам!"
|
||||
else
|
||||
log_error "turnserver.conf.example не найден!"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# NATS конфиг
|
||||
if [[ -f "$SCRIPT_DIR/config/nats/nats-server.conf" ]]; then
|
||||
cp "$SCRIPT_DIR/config/nats/nats-server.conf" "/etc/nats-server.conf"
|
||||
chmod 644 "/etc/nats-server.conf"
|
||||
chown nats:nats "/etc/nats-server.conf"
|
||||
log_info "nats-server.conf установлен в /etc/nats-server.conf"
|
||||
else
|
||||
log_error "nats-server.conf не найден!"
|
||||
exit 1
|
||||
fi
|
||||
}
|
||||
|
||||
# Установка systemd unit файлов
|
||||
install_systemd() {
|
||||
log_info "Установка systemd unit файлов..."
|
||||
|
||||
if [[ -d "$SCRIPT_DIR/systemd" ]]; then
|
||||
cp "$SCRIPT_DIR/systemd/"*.service "$SYSTEMD_DIR/"
|
||||
systemctl daemon-reload
|
||||
log_info "Systemd unit файлы установлены"
|
||||
else
|
||||
log_error "Systemd unit файлы не найдены!"
|
||||
exit 1
|
||||
fi
|
||||
}
|
||||
|
||||
# Сохранение секретов в файл (для справки)
|
||||
save_secrets() {
|
||||
SECRETS_FILE="$INSTALL_DIR/.secrets.txt"
|
||||
cat > "$SECRETS_FILE" <<EOF
|
||||
# Сгенерированные секреты при установке $(date)
|
||||
# ВАЖНО: Сохраните этот файл в безопасном месте!
|
||||
|
||||
# Signaling Server
|
||||
hashkey = $SIGNALING_HASHKEY
|
||||
blockkey = $SIGNALING_BLOCKKEY
|
||||
internalsecret = $SIGNALING_INTERNAL_SECRET
|
||||
backend_secret = $SIGNALING_BACKEND_SECRET
|
||||
|
||||
# TURN Server (используется в signaling и turnserver)
|
||||
turn_secret = $TURN_SECRET
|
||||
turn_apikey = $TURN_API_KEY
|
||||
|
||||
# Janus
|
||||
admin_secret = $JANUS_ADMIN_SECRET
|
||||
|
||||
EOF
|
||||
chmod 600 "$SECRETS_FILE"
|
||||
log_warn "Секреты сохранены в $SECRETS_FILE"
|
||||
log_warn "ВАЖНО: Сохраните этот файл в безопасном месте!"
|
||||
}
|
||||
|
||||
# Основная функция установки
|
||||
main() {
|
||||
log_info "Начало установки HPB - Nextcloud Spreed Signaling Stack"
|
||||
|
||||
check_root
|
||||
generate_secrets
|
||||
create_users
|
||||
install_binaries
|
||||
install_configs
|
||||
install_systemd
|
||||
save_secrets
|
||||
|
||||
log_info ""
|
||||
log_info "=========================================="
|
||||
log_info "Установка завершена успешно!"
|
||||
log_info "=========================================="
|
||||
log_info ""
|
||||
log_warn "СЛЕДУЮЩИЕ ШАГИ:"
|
||||
log_warn "1. Отредактируйте $INSTALL_DIR/server.conf - укажите URL бэкендов Nextcloud"
|
||||
log_warn "2. Отредактируйте /etc/turnserver.conf - укажите реальные IP и пути к сертификатам"
|
||||
log_warn "3. Проверьте конфиги в $CONFIG_DIR/janus/"
|
||||
log_warn "4. Секреты сохранены в $INSTALL_DIR/.secrets.txt"
|
||||
log_info ""
|
||||
log_info "Для запуска сервисов выполните:"
|
||||
log_info " systemctl enable signaling janus nats-server coturn"
|
||||
log_info " systemctl start signaling janus nats-server coturn"
|
||||
log_info ""
|
||||
}
|
||||
|
||||
# Запуск
|
||||
main "$@"
|
||||
Loading…
Reference in New Issue
Block a user