Init
Build and Push Telemt Panel Docker Image / build-and-push (push) Failing after 38s
Build and Push Telemt Panel Docker Image / create-release (push) Skipped

This commit is contained in:
Denozordec
2026-08-04 18:33:48 +07:00
commit b5f31c1083
227 changed files with 31375 additions and 0 deletions
+110
View File
@@ -0,0 +1,110 @@
# 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
```