# 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 ## Быстрый старт: 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 \ --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) | | `TELEMT_AUTH_HEADER` | Опциональный `Authorization` к Telemt | | `JWT_SECRET` | Секрет JWT операторов | | `BOOTSTRAP_USERNAME` / `BOOTSTRAP_PASSWORD` | Первый admin при пустой БД | | `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 ```