Документация ASPEKTER: архитектура, деплой, API, безопасность, пользователи

2026-04-13 12:06:44 +05:00
parent d9a3b7e6eb
commit 48cc5ae564
6 changed files with 126 additions and 0 deletions

25
API.md Normal file

@@ -0,0 +1,25 @@
# API
Endpoints: /api/*. Auth: cookie z51_token.
## Auth
| POST | /api/auth/login | {login, password} |
| GET | /api/auth/me | Текущий пользователь |
## Проекты
| GET | /api/projects | Список |
| GET | /api/project/:name | Данные проекта |
| PUT | /api/project/:name/settings | Настройки |
## Письма
| PUT | /api/project/:name/letter | Сохранить (+createdBy) |
| DELETE | /api/project/:name/letter/:id | Удалить |
## Рендер
| POST | /api/project/:name/render-email | Pug→HTML |
## Фиды
| POST | /api/project/:name/auto-assemble | Авто-подбор |
## Админ
| GET | /api/admin/logs | Аудит-логи |

29
Architecture.md Normal file

@@ -0,0 +1,29 @@
# Архитектура
## Структура
```
aspekter/
├── z51-pug-builder/ # Фронтенд + API
│ ├── src/App.svelte # SPA компонент
│ ├── vite.config.js # API middleware
│ └── data/{project}/ # Данные
├── email-gen/ # Pug-шаблоны
├── deploy/email-gen-api/ # Рендер-сервер
├── coin-scout/ # Подбор монет
└── docker-compose*.yml
```
## Поток: Pug → HTML
1. Пользователь собирает письмо из блоков
2. POST на email-gen-api с Pug-кодом
3. Валидация → temp-файл → email-templates рендер
4. Juice инлайнит CSS → HTML
5. Превью / копирование
## Данные проекта
```
data/{project}/
├── block.pug, settings.json
├── draft.json, presets.json
├── letters.json + letters/*.json
```

25
Deploy.md Normal file

@@ -0,0 +1,25 @@
# Деплой
## Сервер
IP: 147.45.109.108, Ubuntu 24, Docker 29.2
## Запуск
```bash
cd /opt/aspekter
docker compose -f docker-compose.yml -f docker-compose.prod.yml up -d --build
```
## SSL
```bash
certbot certonly --standalone -d app.aspekter.ru
certbot certonly --standalone -d coins.aspekter.ru
```
## Обновление
```bash
cd /opt/aspekter && git pull && docker compose -f docker-compose.yml -f docker-compose.prod.yml up -d --build
```
## Картинки
- FTP/SFTP — внешний сервер
- Локально — data/images/ → https://app.aspekter.ru/images/

25
Home.md

@@ -1 +1,26 @@
# ASPEKTER
Визуальный конструктор email-рассылок.
## Ссылки
- **Приложение:** [app.aspekter.ru](https://app.aspekter.ru)
- **Coin Scout:** [coins.aspekter.ru](https://coins.aspekter.ru)
- **Репозиторий:** [git.aspekter.ru/s.zotov/aspekter](https://git.aspekter.ru/s.zotov/aspekter)
## Стек
| Компонент | Описание | Порт |
|-----------|----------|------|
| z51-pug-builder | Svelte 5 SPA — редактор писем | 5173 → 5175 |
| email-gen-api | Рендерер Pug→HTML | 8787 |
| coin-scout | Подбор монет из фидов | 5180 |
| nginx | Reverse proxy + SSL | 80/443 |
## Документация
- [Архитектура](Architecture)
- [Деплой](Deploy)
- [API](API)
- [Безопасность](Security)
- [Пользователи](Users)

13
Security.md Normal file

@@ -0,0 +1,13 @@
# Безопасность
## Pug Injection Protection
Валидация перед рендером: запрещены require, process, exec, eval, Function, global, fs, Buffer.
## Конкурентность
Уникальный temp-файл на каждый запрос рендера.
## Auth
scrypt, HttpOnly cookies, порты только 127.0.0.1, HTTPS.
## Аудит
Все мутации логируются в JSONL (кто, когда, что, IP). Ротация 6 мес.

9
Users.md Normal file

@@ -0,0 +1,9 @@
# Пользователи
## Роли
| admin | Все проекты, управление пользователями, логи |
| user | Только назначенные проекты |
## Письма
- createdBy — создатель
- updatedBy — последний редактор