Initial commit: ASPEKTER — визуальный конструктор email-рассылок

- z51-pug-builder: Svelte 5 SPA, визуальный редактор Pug-писем
- email-gen: Node.js рендерер Pug→HTML через email-templates + Juice
- email-gen-api: HTTP сервер рендеринга (порт 8787)
- coin-scout: сервис подбора монет из фидов
- Docker Compose для dev/prod
- Nginx конфиг с SSL для app.aspekter.ru
This commit is contained in:
2026-04-13 11:36:39 +05:00
commit 718821fdd6
282 changed files with 64697 additions and 0 deletions

117
DOCKER-DEPLOY.md Normal file
View File

@@ -0,0 +1,117 @@
# Docker deploy: z51-pug-builder + email-gen
## Что есть
- `docker-compose.yml` — локальный/дев запуск (builder на `localhost:5173`)
- `docker-compose.prod.yml` — прод запуск через nginx
Сервисы:
- `builder` — Svelte-конструктор + локальный API (`/api/*`)
- `email-gen-api` — мост к `email-gen` (рендер PUG -> HTML)
- `nginx` (только в prod compose) — входная точка на 80 порту
---
## 1) Локальный запуск (dev)
```bash
cd /Users/sergeyzotov/Documents/GENERATOR_Z51
docker compose up -d --build
docker compose ps
```
Открыть: `http://localhost:5173`
Остановить:
```bash
docker compose down
```
---
## 2) Прод запуск (nginx + docker)
1. Подготовь env:
```bash
cd /Users/sergeyzotov/Documents/GENERATOR_Z51
cp .env.prod.example .env
```
2. Запусти:
```bash
docker compose -f docker-compose.prod.yml up -d --build
```
3. Проверка:
```bash
docker compose -f docker-compose.prod.yml ps
```
Открыть: `http://<VPS_IP>` (или домен, если DNS уже настроен).
Остановить:
```bash
docker compose -f docker-compose.prod.yml down
```
---
## 3) Как работает генерация HTML
1. В конструкторе собирается PUG.
2. Нажимаешь `Превью -> Обновить`.
3. Builder вызывает `POST /api/project/:name/render-email`.
4. Запрос уходит в `email-gen-api`.
5. `email-gen-api`:
- пишет PUG в `email-gen/emails/<project>/letters/let.pug`
- запускает `gulp pug --project <project>`
- читает `email-gen/public/index.html`
- возвращает HTML обратно в конструктор.
Важно: в `Настройки -> Текущий проект` заполняй поле `Папка проекта в email-gen` (например `numizmat`).
---
## 4) Обновление email-gen без ручной пересборки всего
Скрипт:
```bash
./deploy/scripts/update-email-gen.sh
```
Или с веткой:
```bash
./deploy/scripts/update-email-gen.sh main
```
Что делает скрипт:
- `git fetch`/`git pull --ff-only` в `email-gen`
- пересобирает и перезапускает только `email-gen-api` контейнер
Это удобно, если `email-gen` обновляется через git и перезаписывается.
---
## 5) Логи
Prod:
```bash
docker compose -f docker-compose.prod.yml logs -f nginx
docker compose -f docker-compose.prod.yml logs -f builder
docker compose -f docker-compose.prod.yml logs -f email-gen-api
```
Dev:
```bash
docker compose logs -f builder
docker compose logs -f email-gen-api
```
---
## 6) Данные
- Данные конструктора: `z51-pug-builder/data`
- Репозиторий генератора: `email-gen` (bind mount в контейнер)
Оба каталога остаются на хосте и не теряются при пересоздании контейнеров.