Files

111 lines
4.6 KiB
Markdown

# telemt-bot
Лёгкий Telegram-бот для админ-доступа к Telemt Control API.
## Что умеет
- `/health` -> `GET /v1/health`
- `/summary` -> `GET /v1/stats/summary`
- `/users` -> `GET /v1/stats/users` (первые 20 строк)
- `/create_user <username>` -> `POST /v1/users` (создание пользователя + ссылки на подключение)
Команды обрабатываются только от одного админ-чата (`TELEGRAM_ADMIN_CHAT_ID`).
## Переменные окружения
- `TELEGRAM_BOT_TOKEN` - токен Telegram-бота.
- `TELEGRAM_ADMIN_CHAT_ID` - chat id администратора, которому разрешены команды.
- `TELEMT_API_BASE_URL` - базовый URL API, например `http://host.docker.internal:9091`.
- `TELEMT_API_AUTH_HEADER` - значение заголовка `Authorization` для Telemt API (если включён `auth_header`).
- `TELEGRAM_HTTP_TIMEOUT_SECONDS` - timeout запросов к Telegram (по умолчанию `60`).
- `TELEMT_HTTP_TIMEOUT_SECONDS` - timeout запросов к Telemt API (по умолчанию `5`).
- `TELEMT_LINK_HOST` - хост для генерации `tg://proxy` ссылок, если API их не вернуло.
- `TELEMT_LINK_PORT` - порт для ссылок (по умолчанию `9443`).
- `TELEMT_TLS_DOMAIN` - TLS-домен для генерации `EE-TLS` ссылки (опционально).
- `ALL_PROXY`, `HTTPS_PROXY`, `HTTP_PROXY` - прокси для исходящих запросов (Telegram API, Telemt API). Поддерживаются `socks5://`, `socks5h://`, `http://`, `https://`. Приоритет: ALL_PROXY → HTTPS_PROXY → HTTP_PROXY.
## Быстрый старт (локально, Linux/bash)
```bash
cp .env.example .env
# отредактируй .env под свой Telemt и Telegram
docker compose up --build -d
docker compose logs -f
```
## Запуск из Docker Registry
### Через docker compose
Пример `docker-compose.yml`, который использует уже собранный образ из Gitea Registry:
```yaml
services:
telemt-bot:
image: git.shts.su/denozord/telemt-bot:latest
restart: unless-stopped
environment:
TELEGRAM_BOT_TOKEN: ${TELEGRAM_BOT_TOKEN}
TELEGRAM_ADMIN_CHAT_ID: ${TELEGRAM_ADMIN_CHAT_ID}
TELEMT_API_BASE_URL: ${TELEMT_API_BASE_URL}
TELEMT_API_AUTH_HEADER: ${TELEMT_API_AUTH_HEADER}
TELEGRAM_HTTP_TIMEOUT_SECONDS: ${TELEGRAM_HTTP_TIMEOUT_SECONDS:-60}
TELEMT_HTTP_TIMEOUT_SECONDS: ${TELEMT_HTTP_TIMEOUT_SECONDS:-5}
TELEMT_LINK_HOST: ${TELEMT_LINK_HOST}
TELEMT_LINK_PORT: ${TELEMT_LINK_PORT:-9443}
TELEMT_TLS_DOMAIN: ${TELEMT_TLS_DOMAIN:-}
```
Запуск (Linux/bash):
```bash
export TELEGRAM_BOT_TOKEN="xxx:telegram_bot_token"
export TELEGRAM_ADMIN_CHAT_ID="123456789"
export TELEMT_API_BASE_URL="http://host.docker.internal:9091"
export TELEMT_API_AUTH_HEADER="Bearer secret"
export TELEMT_LINK_HOST="172.20.0.3"
export TELEMT_LINK_PORT="9443"
export TELEMT_TLS_DOMAIN="tf.ivx.su"
docker compose up -d
docker compose logs -f
```
### Через docker CLI (Linux/bash)
```bash
docker run -d \
--name telemt-bot \
--restart unless-stopped \
-e TELEGRAM_BOT_TOKEN="xxx:telegram_bot_token" \
-e TELEGRAM_ADMIN_CHAT_ID="123456789" \
-e TELEMT_API_BASE_URL="http://host.docker.internal:9091" \
-e TELEMT_API_AUTH_HEADER="Bearer secret" \
-e TELEGRAM_HTTP_TIMEOUT_SECONDS="60" \
-e TELEMT_HTTP_TIMEOUT_SECONDS="5" \
-e TELEMT_LINK_HOST="172.20.0.3" \
-e TELEMT_LINK_PORT="9443" \
-e TELEMT_TLS_DOMAIN="tf.ivx.su" \
git.shts.su/denozord/telemt-bot:latest
```
## Почему решение экономное по ресурсам
- Go-бинарник без рантайма и с нулевым CGO.
- Long polling (`getUpdates`) вместо частых коротких запросов.
- Один переиспользуемый `http.Client` и keep-alive соединения.
- Multi-stage сборка и минимальный образ `distroless`.
## CI/CD для Gitea Registry
Добавлен workflow: `.gitea/workflows/docker-publish.yml`.
Что делает:
- при `push` в `main`, `master`, `v*` и при `git tag v*`;
- собирает образ из `Dockerfile`;
- пушит в registry `git.shts.su/${REPO}`;
- выставляет теги: `latest`, `<branch-or-tag>`, `sha-<12-symbols>`.
Нужно создать secret в Gitea репозитории:
- `ACTIONS_PAT` - токен с правами на push в package/container registry.