Refactor Docker setup to unify CLI and HTTP API under a single image. Update entrypoint to use a script for dynamic behavior based on arguments. Revise documentation to clarify usage and service distinctions.
This commit is contained in:
@@ -94,7 +94,7 @@ jobs:
|
||||
tags: ${{ steps.prep.outputs.tags }}
|
||||
labels: |
|
||||
org.opencontainers.image.title=mtproxy_checker
|
||||
org.opencontainers.image.description=CLI probe for MTProxy (ee Fake-TLS + dd), Telegram-style ClientHello
|
||||
org.opencontainers.image.description=MTProxy checker: CLI one-shot (with args) or HTTP API daemon (no args); ee/dd, Telegram-style ClientHello
|
||||
org.opencontainers.image.revision=${{ gitea.sha }}
|
||||
org.opencontainers.image.source=${{ gitea.server_url }}/${{ gitea.repository }}
|
||||
provenance: false
|
||||
|
||||
+3
-1
@@ -13,5 +13,7 @@ FROM alpine:3.20
|
||||
RUN apk add --no-cache ca-certificates
|
||||
COPY --from=build /mtproxy_checker /usr/local/bin/mtproxy_checker
|
||||
COPY --from=build /mtproxy_checkerd /usr/local/bin/mtproxy_checkerd
|
||||
COPY docker-entrypoint.sh /usr/local/bin/docker-entrypoint.sh
|
||||
RUN chmod +x /usr/local/bin/docker-entrypoint.sh
|
||||
EXPOSE 8080
|
||||
ENTRYPOINT ["/usr/local/bin/mtproxy_checker"]
|
||||
ENTRYPOINT ["/usr/local/bin/docker-entrypoint.sh"]
|
||||
|
||||
@@ -24,7 +24,7 @@ go build -o mtproxy_checker.exe ./cmd/mtproxy_checker
|
||||
|
||||
Код выхода: `0` — OK, `1` — ошибка, `2` — неверные аргументы, `3` — прокси закрыл соединение после проверки, `4` — таймаут.
|
||||
|
||||
**Docker:** [docs/docker.ru.md](docs/docker.ru.md) — образ CLI, несколько прокси из файла, а также контейнер с **HTTP API** (`mtproxy_checkerd`, файл со списком `tg://`, интервал проверки, опциональный whitelist IP).
|
||||
**Docker:** [docs/docker.ru.md](docs/docker.ru.md) — один образ: **с аргументами** после образа — CLI; **без аргументов** — HTTP API (файл со списком `tg://`, интервал, опциональный whitelist IP).
|
||||
|
||||
### Если в Telegram прокси «Available», а утилита падает на `read server hello`
|
||||
|
||||
|
||||
@@ -1,10 +1,9 @@
|
||||
# HTTP API: список tg:// в файле, периодическая проверка, JSON по GET.
|
||||
# HTTP API: тот же образ, что и CLI — без command запускается mtproxy_checkerd (см. docker-entrypoint.sh).
|
||||
# Запуск: docker compose -f docker-compose.api.yaml up --build
|
||||
services:
|
||||
mtproxy-checkerd:
|
||||
build: .
|
||||
image: mtproxy_checker:local
|
||||
entrypoint: ["/usr/local/bin/mtproxy_checkerd"]
|
||||
ports:
|
||||
- "8080:8080"
|
||||
volumes:
|
||||
|
||||
@@ -0,0 +1,8 @@
|
||||
#!/bin/sh
|
||||
set -e
|
||||
# Один образ: без аргументов — HTTP API (mtproxy_checkerd), иначе — разовая проверка CLI (mtproxy_checker).
|
||||
if [ "$#" -eq 0 ]; then
|
||||
exec /usr/local/bin/mtproxy_checkerd
|
||||
else
|
||||
exec /usr/local/bin/mtproxy_checker "$@"
|
||||
fi
|
||||
+17
-13
@@ -7,36 +7,40 @@
|
||||
| **База runtime** | Alpine Linux 3.20 |
|
||||
| **Бинарники** | CLI: `/usr/local/bin/mtproxy_checker`. HTTP-сервис списка: `/usr/local/bin/mtproxy_checkerd` (см. ниже) |
|
||||
| **Сертификаты** | Пакет `ca-certificates` (для TLS к реальным хостам при необходимости) |
|
||||
| **ENTRYPOINT** | По умолчанию **CLI** — аргументы `docker run …` идут в `mtproxy_checker` |
|
||||
| **Порты** | В режиме CLI ничего не слушает (только исходящий TCP). Образ объявляет **EXPOSE 8080** для режима API |
|
||||
| **ENTRYPOINT** | Скрипт `docker-entrypoint.sh`: **есть аргументы** после имени образа → `mtproxy_checker` (разовая проверка); **нет аргументов** → `mtproxy_checkerd` (HTTP API) |
|
||||
| **Порты** | В режиме CLI ничего не слушает (только исходящий TCP). В режиме API слушает **8080** (или `MTPROXY_HTTP_ADDR`). Образ объявляет **EXPOSE 8080** |
|
||||
|
||||
Одна команда `docker run` с entrypoint по умолчанию = **одна** проверка одного прокси; процесс завершается с **кодом выхода** (`0`…`4`), что удобно в CI и скриптах.
|
||||
`docker run … ИМЯ_ОБРАЗА tg://…` или с флагами — одна проверка, **код выхода** `0`…`4`. `docker run … ИМЯ_ОБРАЗА` **без** command — долгоживущий API (нужны volume/env к файлу со списком).
|
||||
|
||||
## HTTP API: `mtproxy_checkerd`
|
||||
|
||||
Лёгкий сервер на стандартной библиотеке Go: читает файл со списком `tg://` (как в разделе «файл — одна ссылка на строку»), **сразу после старта** выполняет первый цикл проверок, затем повторяет с интервалом. Результаты последнего цикла отдаются по HTTP в JSON.
|
||||
|
||||
### Запуск контейнера (смена entrypoint)
|
||||
### Запуск контейнера в режиме API
|
||||
|
||||
**Без** `command` / аргументов после образа entrypoint сам запускает `mtproxy_checkerd`.
|
||||
|
||||
**Linux / macOS:**
|
||||
|
||||
```bash
|
||||
docker run --rm -p 8080:8080 \
|
||||
docker run -d --name mtproxy-api --restart unless-stopped -p 8080:8080 \
|
||||
-v /path/to/proxies.txt:/data/proxies.txt:ro \
|
||||
--entrypoint /usr/local/bin/mtproxy_checkerd \
|
||||
-e MTPROXY_CHECK_INTERVAL=60m \
|
||||
mtproxy_checker:local
|
||||
```
|
||||
|
||||
**Windows (PowerShell):**
|
||||
|
||||
```powershell
|
||||
docker run --rm -p 8080:8080 `
|
||||
-v "${PWD}\proxies.txt:/data/proxies.txt:ro" `
|
||||
--entrypoint /usr/local/bin/mtproxy_checkerd `
|
||||
docker run -d --name mtproxy-api --restart unless-stopped -p 8080:8080 `
|
||||
-v "${PWD}/proxies.txt:/data/proxies.txt:ro" `
|
||||
-e MTPROXY_CHECK_INTERVAL=60m `
|
||||
mtproxy_checker:local
|
||||
```
|
||||
|
||||
Готовый пример с переменными окружения: репозиторий **`docker-compose.api.yaml`** — `docker compose -f docker-compose.api.yaml up --build`.
|
||||
Явно указать демон (редко нужно): `--entrypoint /usr/local/bin/mtproxy_checkerd`.
|
||||
|
||||
Готовый пример: **`docker-compose.api.yaml`** — `docker compose -f docker-compose.api.yaml up --build`.
|
||||
|
||||
### Переменные окружения
|
||||
|
||||
@@ -83,11 +87,11 @@ cd C:\path\to\mtproxy_checker
|
||||
docker build -t mtproxy_checker:local .
|
||||
```
|
||||
|
||||
Проверка, что образ собран:
|
||||
Проверка, что образ собран (нужен хотя бы один аргумент, иначе стартует API):
|
||||
|
||||
```bash
|
||||
docker run --rm mtproxy_checker:local -timeout 5s 2>&1 | head -1
|
||||
# ожидается сообщение usage (код выхода 2 — нормально без URL)
|
||||
# ожидается сообщение usage CLI (код выхода 2 — нормально без URL)
|
||||
```
|
||||
|
||||
## Запуск под Linux
|
||||
@@ -107,7 +111,7 @@ docker run --rm mtproxy_checker:local \
|
||||
'tg://proxy?server=example.com&port=443&secret=eeYOURHEX...'
|
||||
```
|
||||
|
||||
Чтобы не светить секрет в истории shell, прочитайте его из файла и передайте флагами (образ запускает бинарник как `ENTRYPOINT`, отдельный `sh` без смены entrypoint использовать нельзя):
|
||||
Чтобы не светить секрет в истории shell, прочитайте его из файла и передайте флагами (аргументы уходят в CLI через `docker-entrypoint.sh`):
|
||||
|
||||
```bash
|
||||
SECRET=$(tr -d ' \n' < secret.hex)
|
||||
|
||||
Reference in New Issue
Block a user