# Mihomo Subscription Expander Сервис для раздачи готовых Clash/Mihomo конфигов клиентам. Берёт ваш базовый YAML, подтягивает серверы из подписок и отдаёт полностью развёрнутый конфиг по токен-ссылке — без `proxy-providers`, с реальными прокси внутри каждой группы. ## Как это работает 1. Вы создаёте конфиг с вашими группами (`proxy-groups`) и правилами (`rules`) 2. Добавляете подписки (URL в формате YAML или base64 URI-список) 3. Клиент (Clash Verge, FLClashX и др.) получает конфиг по ссылке `/config/.yaml` 4. При каждом запросе подписки фетчатся свежими, серверы вставляются напрямую в группы ``` Клиент → GET /config/.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** — оркестрация всех трёх сервисов ## Быстрый старт ```bash git clone cd mihomo_injecter cp .env.example .env # Отредактируйте .env: задайте MIHOMO_SECRET, ADMIN_USER, ADMIN_PASSWORD, HOST_DOMAIN ``` Сгенерируйте хэш пароля для Caddy: ```bash docker run --rm caddy:2-alpine caddy hash-password --plaintext 'ваш_пароль' ``` Вставьте полученный хэш в `.env` как `ADMIN_PASSWORD_HASH`. Запустите: ```bash 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]` — имя провайдера не важно, оно автоматически заменится на реальные подписки из БД. ```yaml 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/.yaml ``` Токен генерируется автоматически при создании конфига и виден в веб-интерфейсе. ## Структура данных ``` data/ db/app.db # SQLite: конфиги, подписки, логи экспорта mihomo/ # config.yaml для Mihomo (генерируется автоматически) ``` ## Разработка ```bash cd app python -m venv .venv && source .venv/bin/activate pip install -r requirements.txt pytest ```