111 lines
4.6 KiB
Markdown
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.
|