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.
Publish mtproxy_checker Docker image / test (push) Successful in 7s
Publish mtproxy_checker Docker image / build-and-push (push) Successful in 53s

This commit is contained in:
Denozordec
2026-04-11 01:08:10 +07:00
parent 5a66f0f2e8
commit 175136d82a
6 changed files with 31 additions and 18 deletions
+17 -13
View File
@@ -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)