- 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>
Mihomo Subscription Expander
Сервис для раздачи готовых Clash/Mihomo конфигов клиентам. Берёт ваш базовый YAML, подтягивает серверы из подписок и отдаёт полностью развёрнутый конфиг по токен-ссылке — без proxy-providers, с реальными прокси внутри каждой группы.
Как это работает
- Вы создаёте конфиг с вашими группами (
proxy-groups) и правилами (rules) - Добавляете подписки (URL в формате YAML или base64 URI-список)
- Клиент (Clash Verge, FLClashX и др.) получает конфиг по ссылке
/config/<token>.yaml - При каждом запросе подписки фетчатся свежими, серверы вставляются напрямую в группы
Клиент → 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