MCPcopy Index your code
hub / github.com/amirotin/telemt_panel

github.com/amirotin/telemt_panel @v0.6.1

Chat with this repo
repository ↗ · DeepWiki ↗ · release v0.6.1 ↗ · + Follow
509 symbols 1,236 edges 112 files 124 documented · 24%
What it actually does AI analysis from the code graph — generated when you open this
loading…
README

Telemt Panel

CI Release Go React License: MIT Stars

Web-панель управления для Telemt MTProxy. Позволяет мониторить состояние сервера, управлять пользователями, отслеживать безопасность и обновлять бинарник — всё через браузер.

Содержание

Скриншоты

Dashboard Users Runtime
Dashboard Users Runtime

Возможности

  • Dashboard — здоровье сервера, uptime, соединения, общий трафик, статус DC
  • Пользователи — CRUD через API Telemt, сортировка по колонкам, подсветка активных соединений
  • Runtime — соединения, ME pool state, ME quality, upstream quality, NAT/STUN, self-test, события
  • Безопасность — posture (read-only, whitelist, auth header), лимиты, whitelist
  • Upstreams — статус upstream-серверов и пулов
  • Обновления — проверка новой версии на GitHub, обновление бинарника в один клик с откатом при ошибке (Telemt и панель)
  • TLS — поддержка custom-сертификатов и автоматического Let's Encrypt (ACME)
  • GeoIP — определение геолокации по IP через MaxMind GeoLite2
  • WebSocket — реалтайм обновление данных без перезагрузки страницы
  • Base Path — поддержка запуска за reverse proxy на подпути

Требования

  • Linux (x86_64 или aarch64), любой дистрибутив (Debian, Ubuntu, Alpine, CentOS и т.д.)
  • Работающий Telemt-сервер с доступным API

Для сборки из исходников: - Go 1.24+ - Node.js 20+ - Docker (опционально, для кросс-компиляции)

Быстрый старт

Установка скриптом

curl -fsSL https://raw.githubusercontent.com/amirotin/telemt_panel/main/install.sh | bash

Скрипт скачает бинарник, создаст конфиг, настроит systemd-сервис и запустит панель.

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

  1. Скачайте бинарник из Releases (или соберите сами — см. ниже).

  2. Создайте конфиг:

sudo mkdir -p /etc/telemt-panel
sudo cp config.example.toml /etc/telemt-panel/config.toml
sudo chmod 600 /etc/telemt-panel/config.toml
  1. Сгенерируйте хеш пароля и JWT-секрет:
# Хеш пароля
./telemt-panel hash-password

# JWT-секрет
openssl rand -hex 32
  1. Отредактируйте конфиг /etc/telemt-panel/config.toml:
listen = "0.0.0.0:8080"

[telemt]
url = "http://127.0.0.1:2398"
auth_header = ""

[auth]
username = "admin"
password_hash = "$2a$10$..."   # вывод hash-password
jwt_secret = "ваш_секрет"     # вывод openssl rand
session_ttl = "24h"
  1. Запустите:
./telemt-panel --config /etc/telemt-panel/config.toml

Панель будет доступна на http://ваш_сервер:8080.

Docker

cp config.example.toml config.toml
# отредактируйте config.toml

docker compose up -d

Сборка

Простая (локальная)

make            # собрать frontend + backend
make release    # собрать бинарники для x86_64 и aarch64

Через Docker (кросс-компиляция)

# Linux/macOS
./build.sh

# Windows
build.bat

Бинарники появятся в ./release/: - telemt-panel-x86_64-linux - telemt-panel-aarch64-linux - SHA256SUMS

Бинарники статические (CGO_ENABLED=0) — работают на любом Linux без зависимостей.

Переопределение версии

make backend VERSION=1.2.3
# или
go build -ldflags="-s -w -X main.version=1.2.3" -o telemt-panel .

Конфигурация

Полный пример конфигурации — config.example.toml.

Секция Параметр Описание По умолчанию
listen Адрес и порт 0.0.0.0:8080
base_path Подпуть для reverse proxy (например /panel123)
[telemt] url URL API Telemt обязательный
[telemt] auth_header Authorization-заголовок к Telemt API
[telemt] binary_path Путь к бинарнику telemt (для обновлений) /bin/telemt
[telemt] service_name Имя systemd-сервиса telemt
[telemt] github_repo GitHub-репозиторий для проверки обновлений telemt/telemt
[telemt] config_path Путь к конфигу Telemt (для Docker / нестандартных путей) автоматически из API
[telemt] config_edit_mode Режим редактирования конфига Telemt: api (через API, Docker-safe, по умолчанию) или file (правка файла, требует sudoers tee на systemd) api
[panel] binary_path Путь к бинарнику панели (для самообновления) /usr/local/bin/telemt-panel
[panel] service_name Имя systemd-сервиса панели telemt-panel
[panel] github_repo GitHub-репозиторий панели amirotin/telemt_panel
[panel] github_token Personal Access Token для GitHub API. Без токена лимит — 60 запросов/час на IP (shared), с токеном — 5000/час. Нужен если при проверке обновлений появляется ошибка rate limit. Достаточно fine-grained PAT без scopes: создать токен
[panel] max_newer_releases Макс. кол-во новых версий в списке обновлений 10
[panel] max_older_releases Макс. кол-во старых версий в списке обновлений 10
[auth] username Логин администратора обязательный
[auth] password_hash Bcrypt-хеш пароля обязательный
[auth] jwt_secret Секрет для подписи JWT обязательный
[auth] session_ttl Время жизни сессии 24h
[tls] cert_file / key_file Пользовательские TLS-сертификаты
[tls] acme_domain Домен для Let's Encrypt
[tls] acme_cache_dir Директория кеша сертификатов /var/lib/telemt-panel/certs
[geoip] db_path Путь к MaxMind GeoLite2 City (.mmdb)
[geoip] asn_db_path Путь к MaxMind GeoLite2 ASN (.mmdb)

Systemd

Установка скриптом (рекомендуется)

Скрипт автоматически создаёт системного пользователя telemt-panel, устанавливает бинарник панели в /usr/local/bin, конфиг в /etc/telemt-panel, данные в /var/lib/telemt-panel, настраивает узкий sudoers-drop-in для обновлений и генерирует hardened systemd-юнит:

curl -fsSL https://raw.githubusercontent.com/amirotin/telemt_panel/main/install.sh | bash
Компонент Путь
Бинарник панели /usr/local/bin/telemt-panel
Конфиг панели /etc/telemt-panel/config.toml
Данные (кэш сертификатов и т.д.) /var/lib/telemt-panel/
Systemd-юнит /etc/systemd/system/telemt-panel.service
Sudoers drop-in /etc/sudoers.d/telemt-panel

Сгенерированный юнит включает:

[Service]
User=telemt-panel
ProtectHome=true
PrivateTmp=true
ReadWritePaths=/etc/telemt-panel /var/lib/telemt-panel

NoNewPrivileges не включается, потому что сервис использует sudo для строго ограниченных операций обновления.

sudoers-drop-in позволяет пользователю telemt-panel выполнять только нужные обновлению команды: замену бинарника, очистку staging-файлов и перезапуск telemt.service и telemt-panel.service.

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

sudo useradd --system --shell /usr/sbin/nologin --home /nonexistent telemt-panel
sudo cp telemt-panel.service /etc/systemd/system/
sudo systemctl daemon-reload
sudo systemctl enable --now telemt-panel

Важно: этот unit-файл запускает панель от пользователя telemt-panel. Если вы устанавливаете вручную, создайте пользователя и настройте права, эквивалентные installer-managed sudoers-drop-in, или отредактируйте unit под свою модель запуска.

Удаление

# Только сервис и бинарник (конфиг и данные сохраняются)
./install.sh uninstall

# Полное удаление (включая пользователя telemt-panel)
./install.sh purge

Логи:

sudo journalctl -u telemt-panel -f

CLI

telemt-panel --config config.toml    # запуск сервера
telemt-panel hash-password           # сгенерировать bcrypt-хеш
telemt-panel version                 # показать версию

Стек

  • Backend: Go 1.24, стандартная библиотека + gorilla/websocket, golang-jwt, BurntSushi/toml
  • Frontend: React 18, TypeScript, Tailwind CSS, Vite
  • Сборка: Multi-stage Docker, статическая линковка

Лицензия

MIT

Extension points exported contracts — how you extend this code

LogSource (Interface)
LogSource provides access to service logs. [2 implementers]
internal/logs/source.go
AssetMatcher (FuncType)
AssetMatcher finds the binary and checksum assets from a release's asset list.
internal/github/types.go
EventEntry (Interface)
(no doc)
frontend/src/types/runtime.ts
EventsData (Interface)
(no doc)
frontend/src/types/runtime.ts
DcRttEntry (Interface)
(no doc)
frontend/src/types/runtime.ts
MeQualityData (Interface)
(no doc)
frontend/src/types/runtime.ts
UpstreamDc (Interface)
(no doc)
frontend/src/types/runtime.ts

Core symbols most depended-on inside this repo

cn
called by 59
frontend/src/lib/utils.ts
Close
called by 47
internal/geoip/geoip.go
Error
called by 29
internal/proxy/telemt_config_api.go
appendLog
called by 26
internal/updater/updater.go
writeError
called by 26
internal/server/server.go
writeJSON
called by 22
internal/server/server.go
RequireAuth
called by 21
internal/auth/middleware.go
useEndpoint
called by 20
frontend/src/hooks/useWebSocket.ts

Shape

Function 287
Interface 102
Method 63
Struct 52
Class 2
TypeAlias 2
FuncType 1

Languages

Go55%
TypeScript45%

Modules by API surface

frontend/src/pages/UpdatePage.tsx26 symbols
frontend/src/types/runtime.ts20 symbols
internal/auto_update/auto_update.go17 symbols
internal/panel_updater/updater.go16 symbols
internal/updater/updater.go15 symbols
internal/sysutil/sysutil.go14 symbols
internal/server/server.go14 symbols
internal/logs/docker.go14 symbols
internal/updater/system.go12 symbols
internal/panel_updater/system.go12 symbols
internal/config/config.go12 symbols
internal/telemt_config/config.go11 symbols

For agents

$ claude mcp add telemt_panel \
  -- python -m otcore.mcp_server <graph>

⬇ download graph artifact

Ask about this repo answers extend the page