base
This commit is contained in:
@@ -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-сценарием.
|
||||
Reference in New Issue
Block a user