This commit is contained in:
DCCONSTRUCTIONS
2026-04-18 18:39:25 +03:00
commit 3ba092b60c
4944 changed files with 497564 additions and 0 deletions
+332
View File
@@ -0,0 +1,332 @@
# Архитектурный обзор Plane CE под NodeDC
## Короткий вывод
Как база под локальный PoC и дальнейший форк Plane подходит.
Причины:
- monorepo прозрачный, фронт и бэк лежат рядом
- backend на Django с довольно прямой моделью данных
- frontend разбит на приложения и пакеты без сильной магии
- роли, проекты, workspace и work items вынесены в явные модели и API
- self-host runtime отделен от исходников, поэтому можно независимо разворачивать стенд и вести форк
Слабые места:
- есть шероховатости в self-host setup и в некоторых runtime-флоу релиза `v1.3.0`
- часть UI-строк все еще размазана по компонентам, не везде i18n идеально дисциплинирован
- attachment flow в текущем релизе выглядит хрупко
Что проверено уже на живом локальном инстансе:
- login/onboarding экран
- домашний экран workspace
- project issues/work items
- project views
- project settings
- profile settings
Фактический остаток после русификации на этих экранах небольшой:
- timezone label `Moscow Time`
- отдельные технические loader/accessibility строки вне основного happy-path
- часть secondary/admin экранов не аудировалась так же глубоко, как основной `apps/web`
## Как устроен frontend
Основное web-приложение:
- `/Users/dcconstructions/Downloads/mnt/data/dc_taskmanager/NODEDC_TASKMANAGER/plane-src/apps/web`
Соседние приложения:
- `/Users/dcconstructions/Downloads/mnt/data/dc_taskmanager/NODEDC_TASKMANAGER/plane-src/apps/admin`
- `/Users/dcconstructions/Downloads/mnt/data/dc_taskmanager/NODEDC_TASKMANAGER/plane-src/apps/space`
Технологически:
- React
- React Router
- TypeScript
- MobX stores
- Vite/react-router build
- общие UI/утилиты вынесены в workspace packages
Полезные пакеты:
- `/Users/dcconstructions/Downloads/mnt/data/dc_taskmanager/NODEDC_TASKMANAGER/plane-src/packages/i18n`
- `/Users/dcconstructions/Downloads/mnt/data/dc_taskmanager/NODEDC_TASKMANAGER/plane-src/packages/services`
- `/Users/dcconstructions/Downloads/mnt/data/dc_taskmanager/NODEDC_TASKMANAGER/plane-src/packages/ui`
- `/Users/dcconstructions/Downloads/mnt/data/dc_taskmanager/NODEDC_TASKMANAGER/plane-src/packages/types`
- `/Users/dcconstructions/Downloads/mnt/data/dc_taskmanager/NODEDC_TASKMANAGER/plane-src/packages/shared-state`
Практически это удобно для форка:
- можно менять только `apps/web`, не трогая backend
- можно переопределять поведение через store/services слой
- локализация и общие UI-слои вынесены отдельно, это удобно для русификации и брендирования под NodeDC
## Как устроен backend
Основной backend:
- `/Users/dcconstructions/Downloads/mnt/data/dc_taskmanager/NODEDC_TASKMANAGER/plane-src/apps/api`
Технологически:
- Django
- Django REST style API
- Postgres
- Redis
- RabbitMQ
- MinIO/S3-совместимое хранилище
Модельный слой читаемый, без сложной скрытой генерации.
Ключевые модели:
- users: `/Users/dcconstructions/Downloads/mnt/data/dc_taskmanager/NODEDC_TASKMANAGER/plane-src/apps/api/plane/db/models/user.py`
- workspace: `/Users/dcconstructions/Downloads/mnt/data/dc_taskmanager/NODEDC_TASKMANAGER/plane-src/apps/api/plane/db/models/workspace.py`
- projects: `/Users/dcconstructions/Downloads/mnt/data/dc_taskmanager/NODEDC_TASKMANAGER/plane-src/apps/api/plane/db/models/project.py`
- issues/work items: `/Users/dcconstructions/Downloads/mnt/data/dc_taskmanager/NODEDC_TASKMANAGER/plane-src/apps/api/plane/db/models/issue.py`
- views: `/Users/dcconstructions/Downloads/mnt/data/dc_taskmanager/NODEDC_TASKMANAGER/plane-src/apps/api/plane/db/models/view.py`
- instance admin: `/Users/dcconstructions/Downloads/mnt/data/dc_taskmanager/NODEDC_TASKMANAGER/plane-src/apps/api/plane/license/models/instance.py`
## Где живет auth / users / roles / projects / work items
### Auth
Auth-слой:
- `/Users/dcconstructions/Downloads/mnt/data/dc_taskmanager/NODEDC_TASKMANAGER/plane-src/apps/api/plane/authentication`
Что видно на практике:
- есть email/password вход
- есть magic-code и OAuth-провайдеры
- session auth используется в license/admin API
- для локального PoC email/password сценарий нормальный и достаточно простой
Для NodeDC это плюс:
- можно оставить Plane как внутренний task-сервис
- внешнюю SSO/SSO-агрегацию лучше строить аккуратно через отдельный auth gateway или через ограниченный backend patch, а не переписывать весь auth слой сразу
### Users
Основная пользовательская модель:
- `/Users/dcconstructions/Downloads/mnt/data/dc_taskmanager/NODEDC_TASKMANAGER/plane-src/apps/api/plane/db/models/user.py`
Пользовательские настройки и профили привязаны к workspace/user preference модели, а не размазаны хаотично.
### Roles
Роли workspace/project заданы явно числовыми choice-полями.
Файлы:
- `/Users/dcconstructions/Downloads/mnt/data/dc_taskmanager/NODEDC_TASKMANAGER/plane-src/apps/api/plane/db/models/workspace.py`
- `/Users/dcconstructions/Downloads/mnt/data/dc_taskmanager/NODEDC_TASKMANAGER/plane-src/apps/api/plane/db/models/project.py`
Базовая ролевая модель:
- `Admin`
- `Member`
- `Guest`
Это достаточно для PoC, но для NodeDC, если нужны тонкие корпоративные ACL, вероятнее всего придется строить внешний mapping или дополнительный policy layer.
### Projects
Файл:
- `/Users/dcconstructions/Downloads/mnt/data/dc_taskmanager/NODEDC_TASKMANAGER/plane-src/apps/api/plane/db/models/project.py`
Проект содержит нужный минимум:
- имя
- identifier
- network/доступность
- участники
- инвайты
- архивирование
### Work items / issues
Файл:
- `/Users/dcconstructions/Downloads/mnt/data/dc_taskmanager/NODEDC_TASKMANAGER/plane-src/apps/api/plane/db/models/issue.py`
Что важно practically:
- issue-модель богатая
- есть assignees
- comments
- attachments
- labels
- relations
- subscribers
- activity/history
- versions
Под встроенный task-management контур это хорошая база: предметная модель уже богаче, чем нужен минимальный NodeDC PoC.
## Что выглядит хорошими точками кастомизации
### 1. Frontend fork
Самая безопасная и быстрая зона кастомизации.
Что удобно менять:
- локализацию
- названия сущностей в UI
- onboarding
- проектные экраны
- навигацию
- виджеты карточек и work item detail
- интеграционные кнопки и ссылки в NodeDC
Причина:
- это в основном `apps/web`
- изменения изолируются без тяжелого вмешательства в доменную модель
- уже подтверждено практикой на этом стенде: русификация, переименование UI-лейблов и правка hardcoded строк делаются без вмешательства в backend
### 2. Слой сервисов и stores
Хорошее место для мягкой интеграции с NodeDC.
Файлы/пакеты:
- `/Users/dcconstructions/Downloads/mnt/data/dc_taskmanager/NODEDC_TASKMANAGER/plane-src/packages/services`
- store-слой внутри `apps/web/core/store` и `hooks/store`
Подходит для:
- прокидывания дополнительных данных из NodeDC
- feature-flags
- брендированных сценариев
- дополнительных UI-проверок
- синхронизации preferred language / workspace defaults / видимости пунктов меню
### 3. Bootstrap / seed / миграции рядом с runtime
Для PoC и внутренних стендов это удобно держать отдельно от core-кода Plane.
Что уже сработало:
- отдельный bootstrap-скрипт на Django shell
- demo-данные живут рядом с self-host runtime, а не смешаны с upstream
## Что лучше не трогать без необходимости
### 1. Базовый self-host stack целиком
Не стоит на старте переписывать:
- compose topology
- proxy слой
- очередь/redis/minio wiring
Причина:
- локальный runtime уже и так неидеален
- при ранней кастомизации инфраструктурного слоя слишком легко получить нестабильный стенд
### 2. Ядро auth-провайдеров
Не стоит сразу глубоко влезать в:
- `/apps/api/plane/authentication/provider`
- `/apps/api/plane/authentication/adapter`
Лучше сначала решить, нужен ли NodeDC-side SSO gateway, либо достаточно controlled login flow.
### 3. Низкоуровневый attachment/storage flow
По факту релиза `v1.3.0` это место уже выглядит хрупко.
Если кастомизировать загрузки и документы, лучше:
- сначала стабилизировать текущий runtime-флоу
- потом отдельно проектировать document-service интеграцию
Практический вывод по этому пункту:
- для NodeDC-сценария "запрос документов" Plane лучше использовать как UI и контур задач
- документный бинарный контент и его жизненный цикл разумнее держать в отдельном sidecar/document-service
## Что конфигурируется из коробки
Из практических вещей без тяжелого форка:
- self-host параметры через `plane.env`
- локальный URL/ports
- storage через MinIO/S3
- email/auth провайдеры
- язык пользователя
- workspace/project structure
- demo users/projects/issues
- i18n-переводы frontend UI
- локальные image tags для собственного форка frontend/admin/space
## Что, вероятно, стоит делать отдельным sidecar/service рядом с Plane
### 1. Корпоративная интеграция с NodeDC-админкой
Если NodeDC уже источник истины по оргструктуре, сотрудникам и ролям, лучше не вшивать это насмерть в core Plane.
Практичнее вынести рядом:
- sync-service пользователей
- sync-service оргструктуры / отделов / контуров
- mapping ролей NodeDC -> Plane workspace/project roles
### 2. Документный контур
Под сценарий “запросы документов” логично иметь sidecar:
- файловое/документное хранилище
- правила доступа к документам
- интеграцию с существующей NodeDC-документной подсистемой
Plane можно оставить как task/workflow UI, а не как единственный документный источник истины.
### 3. Внешние бизнес-правила
Если понадобятся:
- SLA
- маршруты согласования
- специфические статусы для бухгалтерии/менеджеров
- автоматическое создание задач из событий NodeDC
Это лучше сначала делать внешним orchestration/service слоем, а не перепахивать core issue lifecycle в Plane.
## Что можно синхронизировать с NodeDC-админкой
Наиболее реалистичные направления синхронизации:
- пользователи
- команды / отделы / контуры
- принадлежность к workspace/project
- справочник ролей и роль-mapping
- автосоздание проектов под контуры NodeDC
- начальные шаблоны проектов и saved views
- статусы и labels для типовых процессов вроде бухгалтерии и запросов документов
## Итог по пригодности под NodeDC
Для сценария "встроенный task-management контур внутри NodeDC" оценка положительная, если держать реалистичную границу кастомизации:
- Plane как готовое ядро задач, проектов, activity, comments, views и базовых ролей
- NodeDC как источник оргструктуры, корпоративных правил, документов и внешних интеграций
Нехороший путь:
- пытаться быстро превратить Plane в единственный источник истины по оргструктуре, документам и enterprise-ACL
Хороший путь:
- форк `apps/web` + ограниченные backend-патчи
- sidecar для sync и document workflows
- постепенное brand/UI-domain подстраивание под NodeDC
- автосоздание work items из событий NodeDC
- ссылки из NodeDC admin в конкретные work items Plane
## Практическая оценка пригодности под NodeDC
### Что уже хорошо
- есть рабочий self-hosted open-source контур
- модель projects/work items уже зрелая
- UI достаточно богат для быстрого PoC
- фронт реально поддается форку и русификации
- предметные сущности хорошо ложатся на сценарии “бухгалтерия / менеджеры / запросы документов”
### Что сыровато
- официальный self-host flow не полностью воспроизводим без ручных правок
- attachment/storage часть выглядит ненадежно
- не весь UI идеально дисциплинирован по i18n
- часть внутренних UX-решений все еще ориентирована на общий SaaS-сценарий Plane, а не на embedded B2B-контур
### Что опасно брать в глубокий форк
- глубокую переделку auth ядра на первом этапе
- радикальную переделку storage/attachments без отдельного тестового контура
- попытку сделать из Plane master-system для всего NodeDC вместо роли task/workflow сервиса
## Итог
Для сценария “встроенный task-management контур внутри NodeDC” Plane CE можно брать как базу под ручную докрутку.
Но разумная стратегия такая:
- Plane использовать как ядро task/work item UI и workflow-базы
- NodeDC оставить источником истины по оргструктуре и, возможно, идентификации
- сложные корпоративные правила и интеграции выносить в sidecar/sync services рядом
То есть: как стартовая база для PoC и дальнейшего прикладного форка подходит, как готовый безболезненный enterprise-foundation из коробки — нет.