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:
+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