# Инструкция по установке 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, можно изменить)

### Автоматическая установка

#### Вариант 1: Автогенерация секретов (по умолчанию)

```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-talk-signaling/.secrets.txt`

#### Вариант 2: Использование переменных окружения

Если нужно использовать существующие секреты (например, при миграции или синхронизации между серверами):

```bash
export HPB_HASHKEY="your_64_char_hex_string"
export HPB_BLOCKKEY="your_32_char_hex_string"
export HPB_INTERNAL_SECRET="your_64_char_hex_string"
export HPB_BACKEND_SECRET="your_64_char_hex_string"
export TURN_SECRET="your_64_char_hex_string"
export TURN_API_KEY="your_base64_string"
export JANUS_ADMIN_SECRET="your_base64_string"
export F7CLOUD_URL="https://cloud.example.com"

sudo ./install.sh
```

#### Вариант 3: Использование файла секретов

Создайте файл `/tmp/hpb-secrets.env`:

```bash
cat > /tmp/hpb-secrets.env <<EOF
HPB_HASHKEY="your_64_char_hex_string"
HPB_BLOCKKEY="your_32_char_hex_string"
HPB_INTERNAL_SECRET="your_64_char_hex_string"
HPB_BACKEND_SECRET="your_64_char_hex_string"
TURN_SECRET="your_64_char_hex_string"
TURN_API_KEY="your_base64_string"
JANUS_ADMIN_SECRET="your_base64_string"
F7CLOUD_URL="https://cloud.example.com"
EOF

chmod 600 /tmp/hpb-secrets.env
sudo ./install.sh
```

**Приоритет загрузки секретов:**
1. Файл `/tmp/hpb-secrets.env` (наивысший приоритет)
2. Переменные окружения
3. Автогенерация (если ничего не задано)

### После установки

**ВАЖНО: Обязательно отредактируйте конфиги перед запуском!**

1. **Signaling server** (`/etc/f7cloud-talk-signaling/server.conf`):
   ```bash
   nano /etc/f7cloud-talk-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-talk-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-talk-signaling/.secrets.txt
```

**ВАЖНО:** Сохраните этот файл в безопасном месте! Он понадобится для:
- Настройки Nextcloud (backend secret)
- Восстановления конфигурации
- Синхронизации секретов между серверами

## Ручная установка

Если автоматический скрипт не подходит, можно установить вручную:

1. Скопируйте бинарники из `overlay/usr/bin/` и `overlay/usr/sbin/` в `/usr/bin/` и `/usr/sbin/`
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 overlay/usr/bin/signaling overlay/usr/bin/turnserver /usr/bin/
sudo cp overlay/usr/sbin/nats-server /usr/sbin/

# Перезапустите сервисы
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>`
- Права доступа к файлам
- Открыты ли необходимые порты
- Правильность конфигурации
