334 lines
17 KiB
Markdown
334 lines
17 KiB
Markdown
# 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`
|
||
- рабочий env-файл хранится в репозитории: `/Users/dcconstructions/Downloads/mnt/data/dc_taskmanager/NODEDC_TASKMANAGER/plane-app/plane.env`
|
||
- snapshot текущих volume-данных хранится в репозитории: `/Users/dcconstructions/Downloads/mnt/data/dc_taskmanager/NODEDC_TASKMANAGER/plane-app/backup/20260418-1904`
|
||
|
||
Используется именно 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`
|
||
- backup данных: `/Users/dcconstructions/Downloads/mnt/data/dc_taskmanager/NODEDC_TASKMANAGER/plane-app/backup/20260418-1904`
|
||
- форк репозитория: `/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`
|
||
|
||
Текущий snapshot volume-данных:
|
||
- `/Users/dcconstructions/Downloads/mnt/data/dc_taskmanager/NODEDC_TASKMANAGER/plane-app/backup/20260418-1904/pgdata.tar.gz`
|
||
- `/Users/dcconstructions/Downloads/mnt/data/dc_taskmanager/NODEDC_TASKMANAGER/plane-app/backup/20260418-1904/uploads.tar.gz`
|
||
- `/Users/dcconstructions/Downloads/mnt/data/dc_taskmanager/NODEDC_TASKMANAGER/plane-app/backup/20260418-1904/rabbitmq_data.tar.gz`
|
||
- `/Users/dcconstructions/Downloads/mnt/data/dc_taskmanager/NODEDC_TASKMANAGER/plane-app/backup/20260418-1904/redisdata.tar.gz`
|
||
|
||
Ключевые параметры для локалки:
|
||
- `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-live:local -f apps/live/Dockerfile.live .
|
||
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-сценарием.
|