FlowAct — веб-приложение для визуального создания, настройки и запуска рабочих процессов. Проект развивается как аналог n8n: пользователь собирает workflow из блоков, соединяет их связями, запускает выполнение и анализирует результат через логи.
В текущей версии реализованы:
- визуальный frontend-редактор workflow;
- landing page, home page, notebook editor и страница аккаунта;
- UserService с регистрацией, входом, JWT access token и refresh token;
- авторизация backend-запросов через
Authorization: Bearer <accessToken>; - хранение notebook/workflow в PostgreSQL;
- ExecutionService для управления notebook, workflow и executions;
- WorkerService для выполнения workflow через Kafka-события;
- отдельные базы данных для UserService и ExecutionService;
- подготовка под AI-рекомендации и AI-блоки;
- Docker Compose-окружение для запуска frontend, backend-сервисов, PostgreSQL, Kafka и Caddy.
Текущий состав проекта:
FlowAct/
├── Frontend/ # React + Vite frontend, сборка отдаётся через nginx
├── UserService/ # Spring Boot API для пользователей и авторизации
├── ExecutionService/ # Spring Boot API для notebook/workflow/execution
├── WorkerService/ # Spring Boot worker для выполнения workflow
├── docs/deployment/ # инструкции запуска и развёртывания
├── Caddyfile.example # пример reverse proxy для домена
├── docker-compose.yml # локальный/prod-like запуск сервисов
├── .env.example # пример переменных окружения
└── README.md
Основные сервисы:
| Сервис | Назначение |
|---|---|
| Frontend | SPA-интерфейс FlowAct, landing, home, account page и визуальный редактор workflow |
| UserService | Регистрация, вход, refresh/logout, профиль пользователя и выпуск JWT |
| ExecutionService | REST API для notebook, workflow, валидации и execution; проверяет JWT |
| WorkerService | Выполнение workflow по событиям из Kafka |
PostgreSQL postgres |
БД ExecutionService: notebook, workflow, blocks, connections, executions и logs |
PostgreSQL user-db |
БД UserService: users и refresh_tokens |
| Kafka | Очередь событий запуска, повтора, отмены и продолжения execution |
| Caddy | Reverse proxy для публикации frontend по домену и автоматического HTTPS |
Упрощённая схема запуска через Docker Compose:
Browser
-> frontend:80
-> /api/v1/auth/**, /api/v1/users/** -> user-service:8083 -> user-db
-> /api/v1/notebooks/** -> execution-service:8082 -> postgres
-> /api/v1/.../executions/** -> execution-service:8082 -> Kafka
-> worker-service -> postgres
Если используется Caddy:
Browser
-> Caddy :80/:443
-> frontend:80
FlowAct использует JWT-авторизацию:
- пользователь регистрируется или входит через
UserService; UserServiceвозвращаетaccessToken,refreshTokenи данные пользователя;- frontend хранит сессию и отправляет backend-запросы с заголовком:
Authorization: Bearer <accessToken>ExecutionServiceпроверяет JWT и берётuserIdизsubтокена;- notebook, workflow и execution доступны только владельцу notebook.
X-User-Id больше не используется в обычном запуске проекта. Dev-auth оставлен только как legacy-код/аварийная заготовка и по умолчанию отключён.
Для локального запуска из корня проекта:
cp .env.example .env
cp Caddyfile.example CaddyfileНа Windows важно, чтобы Caddyfile был именно файлом, а не папкой. Если случайно создана папка Caddyfile, удалите её и создайте файл заново.
Если запускаете проект локально без домена, frontend можно открыть напрямую на http://localhost:3000. В этом случае Caddy нужен не всегда, но файл Caddyfile всё равно должен существовать, если запускается полный docker compose up.
Запуск всех сервисов:
docker compose up --buildЗапуск в фоне:
docker compose up -d --buildПосле запуска доступны:
Frontend: http://localhost:3000
UserService: http://localhost:8083
UserService Swagger: http://localhost:8083/swagger-ui.html
UserService health: http://localhost:8083/actuator/health
ExecutionService: http://localhost:8082
Execution Swagger: http://localhost:8082/swagger-ui.html
Execution health: http://localhost:8082/actuator/health
Execution PostgreSQL: localhost:5433
User PostgreSQL: localhost:5434
Kafka: localhost:9092
Caddy: http://localhost или https://<ваш-домен>
Остановка:
docker compose downОстановка с удалением локальных данных:
docker compose down -vВажно:
down -vудаляет локальные данные PostgreSQL и данные Caddy, включая полученные сертификаты.
В репозитории хранится только пример:
Caddyfile.example
Для реального запуска создайте рабочий файл:
cp Caddyfile.example CaddyfileДля локального reverse proxy без домена можно использовать минимальный файл:
:80 {
reverse_proxy frontend:80
}Для домена замените заглушку в Caddyfile:
example.ru, www.example.ru {
reverse_proxy frontend:80
}На сервере DNS-записи домена должны указывать на IP машины, где запущен Docker Compose. Caddy слушает внешние порты 80 и 443, проксирует запросы во внутренний контейнер frontend:80 и может автоматически получить HTTPS-сертификат для домена.
Минимальная проверка после запуска:
docker compose ps
docker compose logs -f caddyИнструкции запуска вынесены в отдельные документы:
| Вариант | Статус | Документация |
|---|---|---|
| Docker Compose | основной локальный и prod-like сценарий | docs/deployment/docker-compose.md |
| Kubernetes | планируется позже | docs/deployment/kubernetes.md |
Для текущей ветки используйте Docker Compose-инструкцию.
| Сервис | Документация |
|---|---|
| Frontend | Frontend/README.md |
| UserService | UserService/README.md |
| ExecutionService | ExecutionService/README.md |
| WorkerService | WorkerService/README.md |
| Страница | Назначение |
|---|---|
/landing |
Лендинг FlowAct |
/home |
Список notebook текущего пользователя |
/notebook/:notebookId |
Визуальный редактор workflow |
/my-account |
Страница аккаунта и настроек профиля |
В редакторе notebook доступны сочетания клавиш:
| Сочетание | Действие |
|---|---|
Ctrl+S / Cmd+S |
Сохранить notebook |
Ctrl+Z / Cmd+Z |
Отменить последнее действие на canvas |
Ctrl+Shift+Z / Cmd+Shift+Z |
Повторить отменённое действие |
Ctrl+Y / Cmd+Y |
Альтернативный redo |
Ctrl+Enter / Cmd+Enter |
Запустить workflow |
Ctrl+Shift+A / Cmd+Shift+A |
Автосборка схемы |
Ctrl+Shift+V / Cmd+Shift+V |
Проверить схему |
Ctrl+Shift+L / Cmd+Shift+L |
Открыть панель логов/результата |
Комбинации не перехватываются внутри полей ввода, textarea, select и contenteditable-элементов, чтобы не мешать редактированию текста.
Базовый путь API:
/api/v1
Auth/User endpoint-ы:
POST /api/v1/auth/register
POST /api/v1/auth/login
POST /api/v1/auth/refresh
POST /api/v1/auth/logout
GET /api/v1/users/me
PATCH /api/v1/users/me
Notebook/workflow/execution endpoint-ы:
/api/v1/notebooks
/api/v1/notebooks/{notebookId}/workflows
/api/v1/notebooks/{notebookId}/workflows/{workflowId}/executions
Защищённые endpoint-ы требуют:
Authorization: Bearer <accessToken>UserService использует Flyway:
UserService/src/main/resources/db/migration
ExecutionService использует Flyway:
ExecutionService/src/main/resources/db/migration
Hibernate работает в режиме:
spring.jpa.hibernate.ddl-auto=validate
Это значит, что схема БД должна соответствовать Entity-классам. Если добавлено новое поле в Entity, нужно добавить SQL-миграцию.
cd Frontend
npm run typecheck
npm run lint
npm run buildUserService:
cd UserService
./gradlew test
./gradlew buildExecutionService:
cd ExecutionService
./gradlew test
./gradlew buildWorkerService:
cd WorkerService
./gradlew test
./gradlew buildНа Windows можно использовать gradlew.bat:
.\gradlew.bat test
.\gradlew.bat buildЛоги всех сервисов:
docker compose logs -fЛоги frontend/nginx:
docker compose logs -f frontendЛоги UserService:
docker compose logs -f user-serviceЛоги ExecutionService:
docker compose logs -f execution-serviceЛоги WorkerService:
docker compose logs -f worker-serviceЛоги Caddy:
docker compose logs -f caddyПодключиться к БД ExecutionService:
docker compose exec postgres psql -U postgres -d flowact_executionПодключиться к БД UserService:
docker compose exec user-db psql -U postgres -d flowact_usersПолная очистка локального окружения:
docker compose down -v --remove-orphans
docker compose build --no-cache
docker compose up