111 lines
4.4 KiB
Markdown
111 lines
4.4 KiB
Markdown
# 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 <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
|
||
```
|