Python SDK for orchestrating sing-box VPN nodes
Project description
PrismaCore
Monorepo: REST API для одной sing-box-ноды (server/) и Python SDK для управления несколькими нодами (client/).
License: MIT · English: README.en.md
Состав
| Часть | Что делает |
|---|---|
server/ |
FastAPI: CRUD пользователей, инбаундов, аутбаундов, роутов; генерация share-ссылок; запись конфига sing-box |
client/ |
SDK: несколько нод, выбор по региону/latency, сборка подписок |
deploy/ |
Установка server на Linux (systemd) |
SDK не отдаёт HTTP-подписку клиентам — вы сами оборачиваете core.subscriptions.build() во FastAPI/Flask/nginx.
Требования
- Python 3.10+
- sing-box (для server)
- Redis — опционально (кэш на server и в SDK)
Установка
SDK (PyPI):
pip install prismacore
SDK (из исходников / dev):
git clone https://github.com/YOUR_USER/PrismaCore.git
cd PrismaCore
pip install -e .
Server:
pip install -r server/requirements.txt
# или production: sudo bash deploy/install_server.sh
Импорт SDK: from client import PrismaCore. Публикация новых версий на PyPI — docs/publishing.md.
Быстрый старт
import asyncio
from client import PrismaCore
async def main():
async with PrismaCore.single_node(
url="http://127.0.0.1:8000",
token="<api-token>",
public_host="203.0.113.10", # публичный IP/домен для share-ссылок на server
) as core:
await core.node().users.create_simple("alice", inbound_tags=["vless-in"])
sub = await core.subscriptions.build("alice")
print(sub[:80])
asyncio.run(main())
Токен API создаётся один раз: POST /api/v1/auth/token (см. docs/server.md).
Документация
| Документ | Содержание |
|---|---|
| docs/sdk.md | SDK: конфиг, CRUD, регионы, подписки, кэш, ошибки, модели |
| docs/server.md | Server API: эндпoинты, auth, env, sing-box, share-ссылки |
| docs/deploy.md | Production-установка: install_server.sh, systemd, .env |
| docs/publishing.md | PyPI: сборка, первая загрузка, новые версии |
Архитектура
PrismaCore (SDK)
├── vpn_servers: VpnServerManager # реестр нод
├── regions: RegionService # fastest_node / best_nodes
├── subscriptions: SubscriptionAggregator
└── cache: CacheManager # Redis, опционально
Node (на каждую ноду)
├── users / inbounds / outbounds / routes / system
└── HttpClient → server /api/v1/*
Типичный поток подписки:
- SDK выбирает ноды по регионам (
fastest_only=True— одна на регион) - На каждой ноде:
GET /api/v1/sublink/{user_name}/all - Server собирает
vless:///hysteria2://из БД +HOST - SDK добавляет meta-строки Happ, кодирует в base64
Структура репозитория
client/
├── prismacore.py
├── config.py, models.py, api_funcs.py, cache.py, exceptions.py
├── nodes/ node.py, vpn.py
├── resources/ users, inbounds, outbounds, routes, system
├── regions/ prober.py, registry.py
└── subscriptions/ aggregator.py
server/
├── app.py, routes.py, config.py
├── database.py, models.py, schemas.py
└── core/ singbox.py, cache.py
deploy/
├── install_server.sh
├── prismacore.service
└── .env.example
Частые ошибки
HOST=localhostна server — share-ссылки будут с localhost, клиенты не подключатся. Задайте публичный IP/домен.- Забыли
invalidateпосле CRUD — подписчики получат закэшированную подписку без новых ссылок. - Несколько нод,
core.node()без имени —ConfigError. Указывайтеcore.node("de-1"). - Токен в заголовке — server ждёт
?token=...в query, не Bearer.
English
See README.en.md and docs/en/.
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file prismacore-0.1.0.tar.gz.
File metadata
- Download URL: prismacore-0.1.0.tar.gz
- Upload date:
- Size: 17.7 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.13.13
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
0c0bfa1441aab227db27f7c61e73ff63ba12faf9b366ffb2f4e537fd08b89acc
|
|
| MD5 |
aff89aae0c4b69c5c35bbad0293a1e35
|
|
| BLAKE2b-256 |
e048a5bd4a370bd592b124f5d9a1761e11629d5a79e86c0735aba2b7690d2277
|
File details
Details for the file prismacore-0.1.0-py3-none-any.whl.
File metadata
- Download URL: prismacore-0.1.0-py3-none-any.whl
- Upload date:
- Size: 22.3 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.13.13
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
4721f62050ea11a50e4f6c15743f328733cea167a1a1eb22083921c670984b9a
|
|
| MD5 |
3564b1ede549938add0e7a989858c20f
|
|
| BLAKE2b-256 |
ef43b90c7d9299288056ddf440bf18d10c57b0cdb43e3cd2353e17be32b4bcdf
|