Документация ASPEKTER: архитектура, деплой, API, безопасность, пользователи
25
API.md
Normal file
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
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
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
25
Home.md
@@ -1 +1,26 @@
|
|||||||
# ASPEKTER
|
# 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
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
9
Users.md
Normal file
@@ -0,0 +1,9 @@
|
|||||||
|
# Пользователи
|
||||||
|
|
||||||
|
## Роли
|
||||||
|
| admin | Все проекты, управление пользователями, логи |
|
||||||
|
| user | Только назначенные проекты |
|
||||||
|
|
||||||
|
## Письма
|
||||||
|
- createdBy — создатель
|
||||||
|
- updatedBy — последний редактор
|
||||||
Reference in New Issue
Block a user