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
+323
View File
@@ -0,0 +1,323 @@
# Plane Community Edition для локального стенда NodeDC
## Что развернуто
Локально поднят self-hosted стенд Plane Community Edition для macOS.
Состав:
- self-host runtime: `/Users/dcconstructions/Downloads/mnt/data/dc_taskmanager/NODEDC_TASKMANAGER/plane-app`
- локальный форк исходников для кастомизации: `/Users/dcconstructions/Downloads/mnt/data/dc_taskmanager/NODEDC_TASKMANAGER/plane-src`
- ветка форка: `nodedc-ru-local`
- локальные image tags для UI: `nodedc/plane-frontend:ru`, `nodedc/plane-admin:ru`, `nodedc/plane-space:ru`
- demo bootstrap-скрипт: `/Users/dcconstructions/Downloads/mnt/data/dc_taskmanager/NODEDC_TASKMANAGER/scripts/bootstrap_nodedc_demo.py`
- demo asset для вложения: `/Users/dcconstructions/Downloads/mnt/data/dc_taskmanager/NODEDC_TASKMANAGER/demo-assets/nodedc-document-request-template.txt`
Используется именно open-source/community self-host путь через официальный `setup.sh`, без enterprise/commercial-фич.
## Окружение
- ОС: macOS
- Архитектура: `arm64` (Apple Silicon)
- Shell: `zsh`
- Bash: `/bin/bash`
- Docker: `Docker version 29.1.3`
- Docker Compose: `Docker Compose version v5.0.0-desktop.1`
## Локальный URL
- основной URL: `http://localhost:8090`
- без домена и без SSL, как локальный PoC-стенд
## Где что лежит
- корень стенда: `/Users/dcconstructions/Downloads/mnt/data/dc_taskmanager/NODEDC_TASKMANAGER`
- setup script: `/Users/dcconstructions/Downloads/mnt/data/dc_taskmanager/NODEDC_TASKMANAGER/setup.sh`
- compose: `/Users/dcconstructions/Downloads/mnt/data/dc_taskmanager/NODEDC_TASKMANAGER/plane-app/docker-compose.yaml`
- env: `/Users/dcconstructions/Downloads/mnt/data/dc_taskmanager/NODEDC_TASKMANAGER/plane-app/plane.env`
- форк репозитория: `/Users/dcconstructions/Downloads/mnt/data/dc_taskmanager/NODEDC_TASKMANAGER/plane-src`
## Используемые env-файлы
Основной env-файл:
- `/Users/dcconstructions/Downloads/mnt/data/dc_taskmanager/NODEDC_TASKMANAGER/plane-app/plane.env`
Ключевые параметры для локалки:
- `WEB_URL=http://localhost:8090`
- `LISTEN_HTTP_PORT=8090`
- `LISTEN_HTTPS_PORT=8443`
- `CORS_ALLOWED_ORIGINS=http://localhost:8090`
## Команды, которые реально применялись
### Получение и запуск self-host runtime
```bash
mkdir -p /Users/dcconstructions/Downloads/mnt/data/dc_taskmanager/NODEDC_TASKMANAGER
cd /Users/dcconstructions/Downloads/mnt/data/dc_taskmanager/NODEDC_TASKMANAGER
curl -fsSL -o setup.sh https://github.com/makeplane/plane/releases/latest/download/setup.sh
chmod +x setup.sh
./setup.sh install
./setup.sh start
```
### Остановка и повторный запуск
```bash
cd /Users/dcconstructions/Downloads/mnt/data/dc_taskmanager/NODEDC_TASKMANAGER
./setup.sh stop
./setup.sh start
```
### Логи
```bash
cd /Users/dcconstructions/Downloads/mnt/data/dc_taskmanager/NODEDC_TASKMANAGER
./setup.sh logs api
./setup.sh logs worker
./setup.sh logs web
./setup.sh logs admin
./setup.sh logs space
./setup.sh logs proxy
```
### Клонирование исходников под форк
```bash
git clone --depth 1 --branch v1.3.0 https://github.com/makeplane/plane.git /Users/dcconstructions/Downloads/mnt/data/dc_taskmanager/NODEDC_TASKMANAGER/plane-src
cd /Users/dcconstructions/Downloads/mnt/data/dc_taskmanager/NODEDC_TASKMANAGER/plane-src
git checkout -b nodedc-ru-local
pnpm install --frozen-lockfile
```
### Проверка фронтовых пакетов после русификации
```bash
cd /Users/dcconstructions/Downloads/mnt/data/dc_taskmanager/NODEDC_TASKMANAGER/plane-src
pnpm turbo run check:types --filter=web --filter=admin --filter=space --filter='@plane/i18n' --filter='@plane/ui'
pnpm turbo run check:types --filter=web --filter='@plane/i18n' --filter='@plane/utils'
```
### Пересборка локального фронта после изменений русификации
```bash
cd /Users/dcconstructions/Downloads/mnt/data/dc_taskmanager/NODEDC_TASKMANAGER/plane-src
docker build -t nodedc/plane-frontend:ru -f apps/web/Dockerfile.web .
cd /Users/dcconstructions/Downloads/mnt/data/dc_taskmanager/NODEDC_TASKMANAGER
./setup.sh stop
./setup.sh start
```
### Пересборка всех UI-образов после ребрендинга NODE.DC
```bash
cd /Users/dcconstructions/Downloads/mnt/data/dc_taskmanager/NODEDC_TASKMANAGER/plane-src
docker build -t nodedc/plane-frontend:ru -f apps/web/Dockerfile.web .
docker build -t nodedc/plane-admin:ru -f apps/admin/Dockerfile.admin .
docker build -t nodedc/plane-space:ru -f apps/space/Dockerfile.space .
cd /Users/dcconstructions/Downloads/mnt/data/dc_taskmanager/NODEDC_TASKMANAGER
./setup.sh stop
./setup.sh start
```
### Наполнение demo-данными
```bash
docker cp /Users/dcconstructions/Downloads/mnt/data/dc_taskmanager/NODEDC_TASKMANAGER/demo-assets/nodedc-document-request-template.txt plane-app-api-1:/tmp/nodedc-document-request-template.txt
docker exec -i plane-app-api-1 python manage.py shell < /Users/dcconstructions/Downloads/mnt/data/dc_taskmanager/NODEDC_TASKMANAGER/scripts/bootstrap_nodedc_demo.py
```
## Команды эксплуатации
### Старт
```bash
cd /Users/dcconstructions/Downloads/mnt/data/dc_taskmanager/NODEDC_TASKMANAGER
./setup.sh start
```
### Стоп
```bash
cd /Users/dcconstructions/Downloads/mnt/data/dc_taskmanager/NODEDC_TASKMANAGER
./setup.sh stop
```
### Рестарт
```bash
cd /Users/dcconstructions/Downloads/mnt/data/dc_taskmanager/NODEDC_TASKMANAGER
./setup.sh stop
./setup.sh start
```
### Проверка контейнеров
```bash
cd /Users/dcconstructions/Downloads/mnt/data/dc_taskmanager/NODEDC_TASKMANAGER
./setup.sh status
```
Если нужно смотреть контейнеры напрямую:
```bash
cd /Users/dcconstructions/Downloads/mnt/data/dc_taskmanager/NODEDC_TASKMANAGER/plane-app
docker compose --env-file plane.env ps
```
Важно:
- для локального стенда безопаснее пользоваться именно `./setup.sh`, а не голым `docker compose`
- причина: host env может переопределить значения из `plane.env`; на практике это уже ломало `DEBUG`
- если все-таки запускать compose напрямую, лучше делать это с `--env-file plane.env` и без конфликтующих env-переменных в shell
## Тестовые учетные записи
Пароль для всех demo-пользователей:
```text
NodeDC123!
```
Пользователи:
- `admin@nodedc.local`
- `accountant@nodedc.local`
- `manager@nodedc.local`
- `docs@nodedc.local`
## Что создано в demo-данных
Workspace:
- `NodeDC` (`nodedc`)
Проекты:
- `Бухгалтерия` (`BUH`)
- `Менеджеры` (`MGR`)
- `Запросы документов` (`DOC`)
Demo work items:
- адресная задача бухгалтеру
- задача в общий контур менеджеров
- задача на запрос документов
- задача с дедлайном на согласование лимитов
- задача с вложением в проекте запросов документов
Дополнительно:
- создан сохраненный view `Срочные документы`
- пользователям выставлен язык `ru`
## Что пришлось чинить вручную
### 1. Официальный `setup.sh` в актуальном состоянии неустойчиво определял latest release
Проблема:
- функция `checkLatestRelease()` ожидала формат JSON с пробелом после `tag_name`
- GitHub API отдавал минифицированный JSON
- в результате latest release мог не определяться корректно
Что сделано:
- локально поправлен парсинг `tag_name` в `/Users/dcconstructions/Downloads/mnt/data/dc_taskmanager/NODEDC_TASKMANAGER/setup.sh`
### 2. Хостовый env ломал запуск backend-контейнеров
Проблема:
- в shell был `DEBUG=release`
- compose-интерполяция подхватывала host env раньше, чем `plane.env`
- `api/worker/migrator` падали с ошибкой преобразования DEBUG в integer
Что сделано:
- в локальный `setup.sh` добавлена загрузка `plane.env` перед compose-командами
- обертка запускает compose в предсказуемом env-контексте
### 3. `/api/instances/` может показывать несвежие данные
Проблема:
- endpoint отдает состояние не всегда синхронно после bootstrap
Что делалось на практике:
- финальная проверка велась через БД и прикладные API workspace/project/issues
### 4. Баг на создании attachment в текущем релизе `v1.3.0`
Проблема:
- legacy flow вложений упирался в `S3Storage.file_overwrite`
- создание attachment через стандартный путь падало
Что сделано:
- для demo bootstrap файл был загружен напрямую в MinIO через storage API
- после этого вручную создан `FileAsset` для `ISSUE_ATTACHMENT`
### 5. Onboarding после signup не подходил под локальный контур NodeDC
Проблема:
- штатный flow после регистрации вел пользователя через `role`, `use case` и `create workspace`
- новые профили создавались backend-ом с `language = en`, поэтому первый onboarding-экран переключался на английский
Что сделано:
- onboarding в `apps/web` упрощен до одного шага: `Создайте профиль`
- после нажатия `Начать` автоматически создается персональное пустое workspace и пользователь сразу редиректится в него
- backend-дефолт языка для новых профилей изменен на `ru`
- добавлена migration `db.0122_alter_profile_language`
### 6. Product Tour на главной временно отключен
Проблема:
- после входа в workspace Plane показывал отдельный welcome/product tour поверх главной страницы
- для локального NodeDC PoC этот оверлей мешает первичному осмотру интерфейса
Что сделано:
- сам код tour сохранен
- показ временно отключен флагом в `apps/web/core/components/home/root.tsx`
- для возврата достаточно снова включить локальный флаг `IS_PRODUCT_TOUR_ENABLED`
- добавлена migration `db.0123_force_profile_language_ru`, которая переводит все существующие профили на `ru`
## Русификация
Русификация делается в локальном форке `/Users/dcconstructions/Downloads/mnt/data/dc_taskmanager/NODEDC_TASKMANAGER/plane-src`.
Базовый подход:
- использована существующая структура `@plane/i18n`
- `ru` сделан языком по умолчанию
- fallback оставлен `en`
- вынесены и переведены дополнительные строки, которые были захардкожены в web UI
- отдельно локализованы даты и relative-time в `packages/utils/src/datetime.ts`
- локализован дефолтный label группы `All work items`
- живой smoke-test пройден для login, home, project issues, views, project settings и profile settings
## Ребрендинг NODE.DC
Что дополнительно изменено поверх русификации:
- пользовательский брендинг `Plane` заменен на `NODE.DC` в основных web/admin/space UI
- логотипы `PlaneLockup` и `PlaneLogo` заменены на asset `/Users/dcconstructions/Downloads/mnt/data/dc_taskmanager/NODEDC_TASKMANAGER/demo-assets/logo.svg`
- с auth-экрана убраны `Условия использования`, `Политика конфиденциальности` и нижний маркетинговый блок
- из основного web UI убраны GitHub CTA, help/question menu в top bar и badge `Сообщество` внизу sidebar
- после регистрации оставлен только один onboarding-экран `Создайте профиль`; экраны `role`, `use case` и `create workspace` удалены из потока
- product tour на главной странице временно отключен без удаления кода
- для изменений были пересобраны локальные images `nodedc/plane-frontend:ru`, `nodedc/plane-admin:ru`, `nodedc/plane-space:ru`
Отдельный архитектурный обзор по точкам кастомизации:
- `/Users/dcconstructions/Downloads/mnt/data/dc_taskmanager/NODEDC_TASKMANAGER/ARCH_REVIEW_NODEDC_RU.md`
## Повторная инициализация demo-данных
Если нужно повторно прогнать bootstrap после чистого разворачивания:
```bash
docker cp /Users/dcconstructions/Downloads/mnt/data/dc_taskmanager/NODEDC_TASKMANAGER/demo-assets/nodedc-document-request-template.txt plane-app-api-1:/tmp/nodedc-document-request-template.txt
docker exec -i plane-app-api-1 python manage.py shell < /Users/dcconstructions/Downloads/mnt/data/dc_taskmanager/NODEDC_TASKMANAGER/scripts/bootstrap_nodedc_demo.py
```
Скрипт сделан как bootstrap для PoC-стенда, а не как production-migration.
## Практические замечания
- Это локальный технический стенд, не production.
- Основа подходит для форка фронта и бэка: monorepo прозрачен, модели и API читаемы.
- При следующем этапе кастомизации имеет смысл держать отдельно:
- self-host runtime
- форк `plane-src`
- свои скрипты bootstrap/migrations рядом
- На момент финальной проверки основная пользовательская зона UI уже русифицирована.
- Остаточные англоязычные хвосты, которые еще видны на живом стенде:
- `Moscow Time` в выборе часового пояса проекта
- отдельные loader/accessibility строки вне основных экранов
- часть admin/space интерфейсов не проходила такой же глубокий ручной аудит, как `apps/web`
- Attachment flow релиза `v1.3.0` нестабилен, поэтому demo-вложение создавалось обходным bootstrap-сценарием.