# Telemt API gateway — copy to config.yaml and mount into the container. # # Semantics: client calls GET /api/{alias}/health # forwarded to GET {base_url}/v1/health # # Web UI (SvelteKit) в образе Docker встроен в тот же процесс: GET / — панель, # /api/… — API. CORS для панели на том же origin не нужен. listen: ":8080" # If true, IP whitelist is not enforced (development only). allow_all: false # CIDR allowlist when allow_all is false. Empty list denies all clients. # Можно указывать и одиночный IP (будет трактован как /32 или /128), и CIDR. whitelist_cidrs: - "127.0.0.1/32" - "203.0.113.5" - "::1/128" # Docker bridge (adjust to your environment): # - "172.16.0.0/12" # When the direct TCP peer is in these CIDRs, client IP for whitelist is taken # from X-Forwarded-For (first hop) or X-Real-IP (e.g. behind nginx). # trusted_proxies: # - "10.0.0.0/8" trusted_proxies: [] # CORS только если фронт на другом origin (например Vite :5173 при разработке). # В production за nginx на одном хосте с шлюзом обычно не требуется. # cors_allowed_origins: # - "http://localhost:5173" # # - "*" # Опционально: по умолчанию /api/agg/* опрашивает все servers; можно ограничить список и включить кэш ответов: # aggregate: # include_aliases: # - gt1 # - gt2 # cache_ttl_ms: 2000 # Геолокация IP в /api/agg/unique-ips. См. docs/GEOIP.md (City + опционально ASN; Country-only не нужен) # geoip: # enabled: true # database_path: /var/lib/telemt-gateway/GeoLite2-City.mmdb # download_url: "https://github.com/P3TERX/GeoLite.mmdb/raw/download/GeoLite2-City.mmdb" # asn_database_path: /var/lib/telemt-gateway/GeoLite2-ASN.mmdb # asn_download_url: "https://github.com/P3TERX/GeoLite.mmdb/raw/download/GeoLite2-ASN.mmdb" servers: - alias: main_srv base_url: http://127.0.0.1:9091 path_prefix: /v1 # authorization_env: TELEMT_API_AUTH # # --- Mihomo (Clash Meta), раздел «Mihomo» в панели (/servers/{alias}/mihomo) --- # Клиент: GET /api/{alias}/mihomo/… и WebSocket — шлюз проксирует на external-controller с Bearer. # # Типичный compose для самого Mihomo (отдельный файл или сервис рядом с gateway): # mihomo: # build: ./mihomo # container_name: mihomo # environment: # - SUB_URL=https://example.com/sub # - CLASH_SECRET=your-secret-here # - UPDATE_INTERVAL=86400 # # ports: # публиковать 9090 на хост не обязательно для панели # # - "9080:9090" # networks: # proxy-net: # ipv4_address: 172.20.0.2 # пример; контроллер слушает на 9090 внутри контейнера # # Контейнер gateway (telemt-api) должен быть в той же сети proxy-net, чтобы: # - резолвилось имя сервиса http://mihomo:9090, или # - использовался IP внутри сети, например http://172.20.0.2:9090 # # В environment сервиса gateway (не класть секреты в YAML в git): # MIHOMO_CONTROLLER_URL=http://mihomo:9090 # TELEMT_MIHOMO_AUTH=Bearer <тот же секрет, что CLASH_SECRET у Mihomo> # # Вариант A — URL в YAML: # mihomo_base_url: http://mihomo:9090 # mihomo_authorization_env: TELEMT_MIHOMO_AUTH # # Вариант B — URL из env (удобно в compose, без правки смонтированного config.yaml): # mihomo_base_url_env: MIHOMO_CONTROLLER_URL # mihomo_authorization_env: TELEMT_MIHOMO_AUTH # # Значение mihomo_authorization_env: полная строка заголовка Authorization (как у authorization_env для Telemt). # ivx: HTTPS + nginx location /api/ → Telemt; base_url должен заканчиваться на /api/ - alias: gt1 base_url: https://gt1.ivx.su/api/ path_prefix: /v1 - alias: gt2 base_url: https://gt2.ivx.su/api/ path_prefix: /v1 - alias: gt3 base_url: https://gt3.ivx.su/api/ path_prefix: /v1