16 KiB
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:8090LISTEN_HTTP_PORT=8090LISTEN_HTTPS_PORT=8443CORS_ALLOWED_ORIGINS=http://localhost:8090
Команды, которые реально применялись
Получение и запуск self-host runtime
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
Остановка и повторный запуск
cd /Users/dcconstructions/Downloads/mnt/data/dc_taskmanager/NODEDC_TASKMANAGER
./setup.sh stop
./setup.sh start
Логи
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
Клонирование исходников под форк
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
Проверка фронтовых пакетов после русификации
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'
Пересборка локального фронта после изменений русификации
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
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-данными
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
Команды эксплуатации
Старт
cd /Users/dcconstructions/Downloads/mnt/data/dc_taskmanager/NODEDC_TASKMANAGER
./setup.sh start
Стоп
cd /Users/dcconstructions/Downloads/mnt/data/dc_taskmanager/NODEDC_TASKMANAGER
./setup.sh stop
Рестарт
cd /Users/dcconstructions/Downloads/mnt/data/dc_taskmanager/NODEDC_TASKMANAGER
./setup.sh stop
./setup.sh start
Проверка контейнеров
cd /Users/dcconstructions/Downloads/mnt/data/dc_taskmanager/NODEDC_TASKMANAGER
./setup.sh status
Если нужно смотреть контейнеры напрямую:
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-пользователей:
NodeDC123!
Пользователи:
admin@nodedc.localaccountant@nodedc.localmanager@nodedc.localdocs@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 после чистого разворачивания:
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-сценарием.