Files
PnvPanel/README.md
T
mrleo1nidandClaude Opus 5.5 d7743977a1 Use bind mounts for pgdata and dp_keys in docker-compose
Matches the production compose so the stack data lives next to the
compose file and can be backed up with the server. ticket_uploads stays
a named volume to avoid losing existing attachments on pull.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-06 19:45:17 +03:00

70 lines
4.3 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.
# PnvPanel
**PnvPanel** — self-service портал для VPN-конфигураций. Пользователи самостоятельно создают
и управляют своими VPN-конфигами (VLESS / VMess / Trojan / Shadowsocks), а администраторы
управляют серверами, лимитами и пользователями. Есть **Telegram-бот** (ссылка на сайт, просмотр
конфигов, passwordless-вход через привязку Telegram). Под капотом — интеграция с панелями
[3x-ui](https://github.com/MHSanaei/3x-ui) через библиотеку
[ThreeXui.Net](https://github.com/mrleo1nid/ThreeXui.Net). Приложение (фронт + бек + бот)
поставляется **единым Docker-образом**; PostgreSQL — отдельным контейнером в compose.
## Стек
| Слой | Технологии |
| ----------- | -------------------------------------------------------------------------------- |
| Backend | C# / .NET 10, ASP.NET Core Web API, Clean Architecture, CQRS (свой диспетчер), EF Core |
| БД | PostgreSQL (Npgsql) |
| Auth | ASP.NET Core Identity + JWT (access + refresh) |
| Realtime | SignalR |
| Интеграция | ThreeXui.Net (3x-ui REST API) |
| Telegram | Telegram.Bot (in-process hosted service, long polling) |
| Frontend | React 19 + Vite + TypeScript, TanStack Query/Router, shadcn/ui + Tailwind |
| Упаковка | Единый Docker-образ (API + бот + статика SPA) + PostgreSQL в docker-compose |
## Быстрый старт
Единый Docker-образ (API + бот + статика SPA) + PostgreSQL:
```bash
cp .env.example .env # заполнить AdminSeed__Password, Jwt__SigningKey и т.д.
docker compose up -d --build
# → http://localhost:8085 (админ — логин/пароль из .env, AdminSeed__Username/Password)
```
БД и key-ring лежат рядом с `docker-compose.yml` (bind-маунты): `./pgdata` — PostgreSQL, `./dp_keys` —
key-ring Data Protection (без него не расшифровать пароли нод). Вложения тикетов и картинки — в
именованном volume `ticket_uploads`. Бэкап — остановить стек (`docker compose stop`) и скопировать
каталог целиком вместе с `.env` (+ содержимое volume `ticket_uploads`).
Локальная разработка (без Docker для приложения — только `db`):
```bash
# backend, из backend/
dotnet build && dotnet test
dotnet run --project src/PnvPanel.Api
# frontend, из frontend/
pnpm install
pnpm dev # проксирует /api, /hubs на localhost:8080
```
## Документация
Проектная документация лежит в [`docs/`](docs/README.md):
- [Product Vision & Scope](docs/vision.md) — что мы строим и для кого
- [Architecture](docs/architecture.md) — Clean Architecture, CQRS, интеграция, realtime, безопасность
- [Domain Model](docs/domain-model.md) — сущности, связи, инварианты
- [Tech Stack](docs/tech-stack.md) — используемые технологии
- [Backend Conventions](docs/backend-conventions.md) — структура проекта, паттерны, стиль кода
- [Frontend](docs/frontend.md) — стек фронтенда и структура
- [Telegram Bot](docs/telegram-bot.md) — бот, привязка Telegram и passwordless-вход
- [API Design](docs/api-design.md) — REST-эндпоинты и SignalR-контракты
Пример переменных окружения (сид админа, БД, JWT, Telegram) — [`.env.example`](.env.example).
Инструкции для AI-ассистента (Claude Code) — в [`CLAUDE.md`](CLAUDE.md).
## Лицензия
[MIT](LICENSE)