Files
mihomo_injecter/README.md
T
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

118 lines
4.8 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 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** — оркестрация всех трёх сервисов
## Быстрый старт
```bash
git clone <repo>
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/<token>.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
```