docs: README — new Next.js admin panel (admin-next/), tor schema update, project structure

This commit is contained in:
NW
2026-08-08 11:55:52 +01:00
parent 9226871eb4
commit a71012680a

View File

@@ -10,7 +10,8 @@
- История транзакций и покупок - История транзакций и покупок
- SaaS-система с автоматическим расчётом комиссий - SaaS-система с автоматическим расчётом комиссий
- **Мультиязычность (i18n)** — английский, испанский, немецкий с переключением в боте - **Мультиязычность (i18n)** — английский, испанский, немецкий с переключением в боте
- Админ-панель на порту 3001 с вкладкой локализации - **Новая админ-панель** (Next.js 16 + Prisma + shadcn/ui) на порту 3000: дашборд, каталог, заказы, кошельки, лиды, ИИ-чатбот, аудит, настройки
- **Старая админка** (Express/EJS) на порту 3001 — бэкенд бота, сохранена для совместимости
- Tor-прокси с двумя onion-сервисами (SSH + админка) - Tor-прокси с двумя onion-сервисами (SSH + админка)
- WireGuard VPN для безопасных транзакций - WireGuard VPN для безопасных транзакций
@@ -51,7 +52,8 @@ docker compose up -d --build
# 4. Проверить статус # 4. Проверить статус
docker compose ps docker compose ps
curl http://localhost:3001/health curl http://localhost:3001/health # бот + старая админка
curl -o /dev/null -w "%{http_code}\n" http://localhost:3000/login # новая админка
``` ```
## Настройка .env ## Настройка .env
@@ -93,10 +95,16 @@ node -e "console.log(require('crypto').randomBytes(32).toString('hex'))"
``` ```
Internet → Tor Network → tor-proxy контейнер Internet → Tor Network → tor-proxy контейнер
├── Onion #1 :22 → хост SSH ├── Onion #1 :22 → хост SSH
└── Onion #2 :80 → telegram_shop_prod:3001 └── Onion #2 :80 → tg_shop_admin:3000
(через Docker сеть tor_proxy_net) (новая Next.js админка, через Docker сеть tor_proxy_net)
``` ```
Новая админ-панель (`admin-next/`, Next.js 16 + Prisma + shadcn/ui):
- Работает на порту 3000 (контейнер `tg_shop_admin`)
- Использует **ту же SQLite БД**, что и бот (`db/shop.db`) — любые изменения мгновенно видны боту и наоборот
- Вход по токену `ADMIN_SECRET` / `SUPER_ADMIN_SECRET` (из `.env`)
- ИИ-чатбот: настройки в БД (`site_settings` ключи `chatbot_*`), бот обращается к `/api/chat` контейнера админки
### Файлы Tor-прокси ### Файлы Tor-прокси
| Файл | Назначение | | Файл | Назначение |
@@ -158,8 +166,10 @@ Docker автоматически собирает нативные модули
│ │ telegram_shop_prod │ │ tor-proxy │ │ │ │ telegram_shop_prod │ │ tor-proxy │ │
│ │ (node:22-alpine) │ │ (alpine:3.18 + tor) │ │ │ │ (node:22-alpine) │ │ (alpine:3.18 + tor) │ │
│ │ │ │ │ │ │ │ │ │ │ │
│ │ Port 3001 │◄─┤ HiddenService :80 │ │ │ │ Port 3000 ←─────────────┼── Новая админка (Next.js) │ │
│ │ Bot + Admin Panel │ │ HiddenService :22 → SSH│ │ │ Port 3001 ──────────────┼── Бот + старая админка (Express)
│ │ Bot + Admin Panel │ HiddenService :80 → админка 3000│
│ │ │ HiddenService :22 → SSH │
│ │ │ │ │ │ │ │ │ │ │ │
│ │ Net: default │ │ Net: default + proxy_net │ │ │ │ Net: default │ │ Net: default + proxy_net │ │
│ │ + tor_proxy_net │ │ │ │ │ │ + tor_proxy_net │ │ │ │
@@ -260,9 +270,11 @@ src/i18n/
## Безопасность ## Безопасность
- `.env` монтируется только для чтения (`:ro`) - `.env` монтируется только для чтения (`:ro`)
- Порт 3001 доступен из LAN и через Tor onion - Порт 3001 (бот + старая админка) и 3000 (новая админка) доступны из LAN и через Tor onion
- Onion-адреса сохраняются в volume (персистентность при перезапуске) - Onion-адреса сохраняются в volume (персистентность при перезапуске)
- Tor hidden services с валидацией env vars - Tor hidden services с валидацией env vars
- Новая админка (`admin-next/`): вход по токену, `ADMIN_SECRET`/`SUPER_ADMIN_SECRET` из `.env`
- Секреты админки (`admin-next/.env`) исключены из git (`.gitignore`)
- Нативные модули компилируются в builder-стейдже - Нативные модули компилируются в builder-стейдже
- `devDependencies` не попадают в production-образ - `devDependencies` не попадают в production-образ
- Тестовые файлы исключены из Docker-образа (`.dockerignore`) - Тестовые файлы исключены из Docker-образа (`.dockerignore`)
@@ -278,7 +290,7 @@ src/i18n/
``` ```
├── src/ ├── src/
│ ├── admin/ # Админ-панель (Express) │ ├── admin/ # Старая админ-панель (Express/EJS)
│ │ ├── routes/ # Роуты админ-панели (вкл. /locales для i18n) │ │ ├── routes/ # Роуты админ-панели (вкл. /locales для i18n)
│ │ ├── views/ # Шаблоны HTML │ │ ├── views/ # Шаблоны HTML
│ │ ├── public/ # Статические файлы (CSS) │ │ ├── public/ # Статические файлы (CSS)
@@ -296,9 +308,14 @@ src/i18n/
│ ├── migrations/ # Миграции БД │ ├── migrations/ # Миграции БД
│ ├── models/ # Модели данных │ ├── models/ # Модели данных
│ ├── router/ # Роутинг Express │ ├── router/ # Роутинг Express
│ ├── services/ # Бизнес-логика │ ├── services/ # Бизнес-логика (вкл. chatbotService, leadService)
│ ├── utils/ # Утилиты (логирование, валидация, ошибки) │ ├── utils/ # Утилиты (логирование, валидация, ошибки)
│ └── index.js # Точка входа │ └── index.js # Точка входа
├── admin-next/ # НОВАЯ админ-панель (Next.js 16 + Prisma + shadcn/ui)
│ ├── prisma/schema.prisma # Схема БД (та же SQLite, что у бота)
│ ├── src/app/api/ # 45 API-роутов (каталог, заказы, лиды, чатбот)
│ ├── src/components/ # 76 UI-компонентов (dashboard, wallets, leads...)
│ └── Dockerfile # Multi-stage Next.js standalone
├── tor-proxy/ # Tor прокси для SSH и админки ├── tor-proxy/ # Tor прокси для SSH и админки
│ ├── Dockerfile # Alpine + Tor образ │ ├── Dockerfile # Alpine + Tor образ
│ ├── entrypoint.sh # Генерация torrc, валидация env vars │ ├── entrypoint.sh # Генерация torrc, валидация env vars
@@ -309,7 +326,7 @@ src/i18n/
├── db/ # SQLite база данных (volume) ├── db/ # SQLite база данных (volume)
├── uploads/ # Загруженные фото (volume) ├── uploads/ # Загруженные фото (volume)
├── Dockerfile # Multi-stage сборка магазина ├── Dockerfile # Multi-stage сборка магазина
├── docker-compose.yml # Конфигурация обоих контейнеров ├── docker-compose.yml # Конфигурация трёх контейнеров (бот, админка, tor)
├── install.sh # Установщик (POSIX sh) ├── install.sh # Установщик (POSIX sh)
├── .dockerignore # Исключения из образа ├── .dockerignore # Исключения из образа
├── .env.example # Шаблон переменных ├── .env.example # Шаблон переменных