urbnywrt 2e1c488bb9 feat: direct subscription fetching, URI parser, FLClashX compatibility
- Fetch subscriptions directly via httpx (mihomo UA → YAML, xray-checker → base64 URI list)
- Add uri_parser.py: vless/vmess/ss/trojan/hysteria2 URI → Mihomo proxy dicts
- Fix YAML quoting for Go parser (strings starting with special chars)
- Remove hidden:true and proxy-providers from delivered configs
- Inject all service groups into GLOBAL proxies for FLClashX group discovery
- Strip placeholder proxy-providers (e.g. "subscription") not in DB
- Fix Mihomo healthcheck: add Bearer auth header
- Add README

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-15 06:04:03 +03:00

Mihomo Subscription Expander

Сервис для раздачи готовых Clash/Mihomo конфигов клиентам. Берёт ваш базовый YAML, подтягивает серверы из подписок и отдаёт полностью развёрнутый конфиг по токен-ссылке — без proxy-providers, с реальными прокси внутри каждой группы.

Как это работает

  1. Вы создаёте конфиг с вашими группами (proxy-groups) и правилами (rules)
  2. Добавляете подписки (URL в формате YAML или base64 URI-список)
  3. Клиент (Clash Verge, FLClashX и др.) получает конфиг по ссылке /config/<token>.yaml
  4. При каждом запросе подписки фетчатся свежими, серверы вставляются напрямую в группы
Клиент  →  GET /config/<token>.yaml
                │
                ├─ Фетч подписок (User-Agent: mihomo → YAML, fallback xray-checker → base64 URI)
                ├─ Раскрытие use: в proxy-groups
                ├─ Удаление proxy-providers
                └─  Готовый YAML с серверами прямо в группах

Стек

  • FastAPI + SQLAlchemy 2.0 async (aiosqlite) — веб-интерфейс и API
  • Mihomo (metacubex/mihomo) — прокси-ядро
  • Caddy — reverse proxy с Basic Auth и автоматическим TLS
  • Docker Compose — оркестрация всех трёх сервисов

Быстрый старт

git clone <repo>
cd mihomo_injecter

cp .env.example .env
# Отредактируйте .env: задайте MIHOMO_SECRET, ADMIN_USER, ADMIN_PASSWORD, HOST_DOMAIN

Сгенерируйте хэш пароля для Caddy:

docker run --rm caddy:2-alpine caddy hash-password --plaintext 'ваш_пароль'

Вставьте полученный хэш в .env как ADMIN_PASSWORD_HASH.

Запустите:

docker compose up -d

Откройте https://your-domain.com — веб-интерфейс для управления конфигами.

Переменные окружения (.env)

Переменная По умолчанию Описание
MIHOMO_SECRET changeme Bearer-токен для Mihomo API
ADMIN_USER admin Логин для веб-интерфейса
ADMIN_PASSWORD changeme Пароль (plaintext, используется Caddy entrypoint)
ADMIN_PASSWORD_HASH Bcrypt-хэш пароля (генерируется автоматически если задан ADMIN_PASSWORD)
HOST_DOMAIN Домен для Caddy (например sub.example.com). Пусто = слушать на всех портах
DATABASE_URL sqlite Путь к базе данных
MIHOMO_API http://mihomo:9090 URL Mihomo API
MIHOMO_CONFIG_DIR /data/mihomo Путь к конфигу Mihomo

Базовый конфиг

Пишите обычный Clash/Mihomo YAML. В proxy-groups используйте use: [subscription] — имя провайдера не важно, оно автоматически заменится на реальные подписки из БД.

proxy-groups:
  - name: Telegram
    type: select
    use:
      - subscription      # любое имя — заменится автоматически
    proxies:
      - DIRECT

  - name: GLOBAL
    type: select
    use:
      - subscription

Блок proxy-providers в базовом конфиге не нужен — если он есть, неизвестные провайдеры удаляются автоматически.

Форматы подписок

  • YAML (User-Agent: mihomo) — стандартный Clash/Mihomo формат с proxies:
  • Base64 URI-список (User-Agent: xray-checker) — строки vless://, vmess://, ss://, trojan://, hysteria2://

Доступ к конфигу

Ссылка для клиента (без авторизации):

https://your-domain.com/config/<token>.yaml

Токен генерируется автоматически при создании конфига и виден в веб-интерфейсе.

Структура данных

data/
  db/app.db        # SQLite: конфиги, подписки, логи экспорта
  mihomo/          # config.yaml для Mihomo (генерируется автоматически)

Разработка

cd app
python -m venv .venv && source .venv/bin/activate
pip install -r requirements.txt
pytest
S
Description
No description provided
Readme 57 KiB
Languages
Python 85.2%
HTML 14%
Shell 0.5%
Dockerfile 0.3%