Files

121 lines
5.2 KiB
Markdown
Raw Permalink 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.
# Telemt Panel — установка (RU)
Один Docker-образ: `git.shts.su/denozord/telemtpanel`. Режим задаётся `PANEL_MODE`.
| Режим | Когда | Агент |
|-------|--------|--------|
| `standalone` | Telemt на том же хосте | **не нужен** — панель ходит в Control API `/v1` напрямую |
| `fleet` | Несколько нод | Go-агент на каждой ноде |
UI: ReUI PRO Frame. Previews: [app-shell-12](https://reui.io/preview/base/app-shell-12), [auth-4](https://reui.io/preview/base/auth-4), [stats-12](https://reui.io/preview/base/stats-12). Docs: [frame](https://reui.io/docs/components/base/frame), [blocks](https://reui.io/blocks).
## Требования
- Docker 24+
- Telemt с включённым Control API (`[server.api]`) для standalone
- Открытый порт панели (8080) или Traefik
### Обязательные переменные (production)
| Переменная | Требование |
|------------|------------|
| **`JWT_SECRET`** | **Обязателен.** ≥ 8 символов. Без него контейнер не стартует. Пример: `openssl rand -hex 32` |
| `BOOTSTRAP_PASSWORD` | Пароль первого admin (создаётся при пустой БД) |
| `TELEMT_API_URL` | URL Telemt Control API в режиме `standalone` |
Сохраните `JWT_SECRET` — смена секрета инвалидирует все сессии операторов.
## Быстрый старт: standalone (рекомендуется на Linux)
```bash
docker pull git.shts.su/denozord/telemtpanel:latest
docker run -d --name telemt-panel --network host \
-e PANEL_MODE=standalone \
-e TELEMT_API_URL=http://127.0.0.1:9091 \
-e JWT_SECRET="$(openssl rand -hex 32)" \
-e BOOTSTRAP_USERNAME=admin \
-e BOOTSTRAP_PASSWORD='change-me' \
-v /var/lib/telemt-panel:/data \
git.shts.su/denozord/telemtpanel:latest
```
Откройте `http://127.0.0.1:8080`, войдите `admin` / пароль из `BOOTSTRAP_PASSWORD`.
Compose:
```bash
cp .env.example .env # заполните JWT_SECRET и BOOTSTRAP_PASSWORD
docker compose up -d
```
### Три сетевых рецепта (standalone)
1. **`network_mode: host`** (Linux, prod) — контейнер видит `127.0.0.1` хоста, где слушает Telemt.
2. **Sidecar** — Telemt и панель в одном compose-network; `TELEMT_API_URL=http://telemt:9091`.
3. **Docker Desktop**`extra_hosts: host.docker.internal:host-gateway`, `TELEMT_API_URL=http://host.docker.internal:9091`. В whitelist Telemt разрешите IP контейнера или lab-only `0.0.0.0/0`.
## Fleet
```bash
docker compose -f docker-compose.fleet.yml up -d
```
Обязательно:
- `PANEL_MODE=fleet`
- `PANEL_PUBLIC_URL` — публичный URL панели (для enroll / install script)
- `PANEL_ENCRYPTION_KEY`, `JWT_SECRET`
В UI: **Серверы** → создать enrollment-токен → на ноде:
```bash
curl -fsSL https://panel.example.com/install-agent.sh | sudo bash -s -- \
--panel-url https://panel.example.com \
--token <TOKEN> \
--telemt-url http://127.0.0.1:9091
```
Бинарник агента: соберите `apps/agent` (`go build -o telemt-panel-agent .`) и положите в `/usr/local/bin/telemt-panel-agent`, либо опубликуйте в releases.
## Traefik (prod)
См. `deploy/docker-compose.traefik.yml` и `deploy/env.traefik.example`. Каталог на сервере: `/opt/telemt-panel`.
## Переменные окружения
| Переменная | Описание |
|------------|----------|
| `PANEL_MODE` | `standalone` \| `fleet` |
| `TELEMT_API_URL` | Base URL Control API (standalone), напр. `http://127.0.0.1:9091` |
| `TELEMT_AUTH_HEADER` | Опциональный `Authorization` к Telemt |
| **`JWT_SECRET`** | **Обязателен в production.** Секрет подписи JWT операторов, **минимум 8 символов**. `openssl rand -hex 32` |
| `BOOTSTRAP_USERNAME` / `BOOTSTRAP_PASSWORD` | Первый admin при пустой БД (`BOOTSTRAP_PASSWORD` рекомендуется задать при первом запуске) |
| `PANEL_PUBLIC_URL` | Публичный URL (fleet) |
| `PANEL_ENCRYPTION_KEY` | Ключ для чувствительных данных (обязателен в fleet) |
| `DATABASE_URL` | По умолчанию `sqlite:/data/app.db` |
| `SERVER_PORT` | По умолчанию `8080` |
Bootstrap без env (после старта):
```bash
docker exec -it telemt-panel node -e "console.log('use BOOTSTRAP_PASSWORD on first boot')"
# или локально: pnpm bootstrap-admin -- --username admin --password '...'
```
## Telemt `[server.api]`
Включите Control API и whitelist IP панели. Документация API: [Telemt Control API](https://github.com/telemt/telemt/blob/main/docs/Architecture/API/API.md). Локальные заметки: `docs/telemt-control-api.md`.
## Health
- `GET /health` — панель + SQLite
- `GET /ready` — в standalone также ping Telemt `/v1/health`
## Скрипт установщика
```bash
chmod +x deploy/install.sh
./deploy/install.sh --mode standalone
```