Publish Docker image / build-and-push (push) Successful in 2m13s
- Enhanced Docker.md with detailed instructions on building and running Docker images, including environment variable requirements and tag usage. - Updated README.md to reflect the current architecture using SQLite for data storage and clarified environment variable settings for backend and frontend operations. - Removed references to AWS S3, emphasizing local storage for MikroTik backups and SQLite database management. Made-with: Cursor
130 lines
5.1 KiB
Markdown
130 lines
5.1 KiB
Markdown
# Router Lists UI
|
||
|
||
UI/Backend для управления BGP-списками, фильтрами и конфигурациями MikroTik.
|
||
Текущая модель хранения: **SQLite + локальная файловая система** (для `.rsc` backup MikroTik).
|
||
|
||
## Актуальная архитектура хранения
|
||
|
||
- Основные данные и объекты приложения хранятся в SQLite (через `better-sqlite3`).
|
||
- MikroTik backup-файлы (`.rsc`) хранятся в локальной ФС в каталоге `MIKROTIK_BACKUP_DIR`.
|
||
- AWS SDK/S3 в runtime не используются.
|
||
- Часть имен API/сервисов (`s3*`) сохранена для обратной совместимости, но фактический backend storage — SQLite.
|
||
|
||
## Быстрый старт
|
||
|
||
### Требования
|
||
|
||
- Node.js 18+
|
||
- npm
|
||
|
||
### Запуск backend
|
||
|
||
```powershell
|
||
cd backend
|
||
npm install
|
||
# создайте .env и заполните (пример ниже)
|
||
npm start
|
||
```
|
||
|
||
Backend поднимется на `http://localhost:3001`.
|
||
|
||
### Запуск frontend
|
||
|
||
```powershell
|
||
cd frontend
|
||
npm install
|
||
npm run dev
|
||
```
|
||
|
||
Frontend доступен на `http://localhost:5173`.
|
||
|
||
## Важные переменные окружения
|
||
|
||
- `SQLITE_PATH` — путь к файлу SQLite (по умолчанию `backend/data/router-lists.db`).
|
||
- `MIKROTIK_BACKUP_DIR` — каталог для локальных `.rsc` backup-файлов MikroTik.
|
||
- `ENCRYPTION_KEY` — 64 hex-символа для шифрования секретов (IPSec/MikroTik).
|
||
- `EVOBGP_API_URL`, `EVOBGP_API_TOKEN` — если используете интеграцию EvoBGP.
|
||
- `CORS_ORIGINS`, `LOG_LEVEL`, `PORT` — эксплуатационные настройки сервиса.
|
||
- `BGP_BACKGROUND_URL` — URL фонового обновления BGP для прокси-эндпоинта `POST /api/update-bgp/background`.
|
||
|
||
Пример `.env`:
|
||
|
||
```dotenv
|
||
PORT=3001
|
||
LOG_LEVEL=info
|
||
SQLITE_PATH=./data/router-lists.db
|
||
MIKROTIK_BACKUP_DIR=./data/backups/mikrotik
|
||
ENCRYPTION_KEY=<64-hex>
|
||
CORS_ORIGINS=http://localhost:5173
|
||
BGP_BACKGROUND_URL=http://77.232.38.173:8080/api/update_bgp/background?api_key=...
|
||
```
|
||
|
||
## API (backend)
|
||
|
||
Формат ошибок:
|
||
|
||
```json
|
||
{ "code": "E_*", "message": "...", "details": {}, "requestId": "..." }
|
||
```
|
||
|
||
Формат успешных `POST/PUT`:
|
||
|
||
```json
|
||
{ "ok": true, "etag": "...", "lastModified": "ISO", "contentLength": 123 }
|
||
```
|
||
|
||
### Примечание по legacy-терминам
|
||
|
||
- `GET /api/s3/last-modified` и функции вида `readS3*`/`writeS3*` — это **legacy-названия**.
|
||
- Фактически эти операции работают с SQLite-backed хранилищем.
|
||
|
||
### Основные эндпоинты
|
||
|
||
- Данные: `/api/domains-new`, `/api/ip-ranges`, `/api/asns`, `/api/communities`
|
||
- Фильтры/конфиги: `/api/filters`, `/api/server-configs`, `/api/server-filters`
|
||
- MikroTik: `/api/mikrotik/generate`, `/api/mikrotik/generate-interfaces`, `/api/mikrotik/generate-recursive-routes`, `/api/mikrotik/test-connection`, `/api/mikrotik/apply`
|
||
- Прочее: `/api/servers`, `/api/billing`, `/api/auto-urls`, `/api/servers/availability`, `/api/locks/:resource`, `/api/history/:resource`
|
||
|
||
## Docker
|
||
|
||
Полная инструкция: [DOCKER.md](DOCKER.md).
|
||
|
||
Критично для production:
|
||
|
||
- Обязательно смонтировать volume для пути с `SQLITE_PATH`.
|
||
- Обязательно смонтировать volume для `MIKROTIK_BACKUP_DIR`, иначе `.rsc` backup-файлы потеряются при пересоздании контейнера.
|
||
- Использовать стабильный `ENCRYPTION_KEY` между перезапусками.
|
||
|
||
Пример запуска:
|
||
|
||
```powershell
|
||
docker run -d `
|
||
--name router-lists-ui `
|
||
-p 3001:3001 `
|
||
--env-file ./backend/.env `
|
||
-e SQLITE_PATH=/data/router-lists.db `
|
||
-e MIKROTIK_BACKUP_DIR=/data/backups/mikrotik `
|
||
-v router-lists-data:/data `
|
||
git.shts.su/[repository]:latest
|
||
```
|
||
|
||
## Чек-лист проверки соответствия (S3 -> SQLite)
|
||
|
||
1. В `backend/package.json` нет зависимостей AWS SDK.
|
||
2. Приложение стартует с `SQLITE_PATH` и создает/использует файл БД.
|
||
3. CRUD по основным данным (`/api/domains-new`, `/api/ip-ranges`, `/api/asns`) работает после перезапуска контейнера с тем же volume.
|
||
4. Созданный MikroTik backup появляется как локальный `.rsc` файл в каталоге `MIKROTIK_BACKUP_DIR`.
|
||
5. После перезапуска контейнера с тем же volume backup-файл остается доступным.
|
||
6. `GET /api/s3/last-modified` возвращает метаданные, но интерпретируется как legacy endpoint поверх SQLite.
|
||
|
||
## Структура репозитория
|
||
|
||
```text
|
||
backend/ Express API
|
||
frontend/ Vite + React UI
|
||
```
|
||
|
||
## Лицензия
|
||
|
||
MIT
|