Запуск проекта (Next.js + Prisma/Postgres + Django Admin)
Актуально на: 2026-02-13
Путь проекта: D:\Code\project_try_create_interface
Обновление 2026-02-13
См. CHANGELOG.md и PERFORMANCE.md (оптимизация автосейва и настройка «Главная вкладка»).
Требования
- Node.js (рекомендуется LTS) + npm
- Python 3.11+
- PostgreSQL (локально или в Docker)
1) Подготовка базы (1 раз)
В .env в корне проекта должен быть DATABASE_URL, например:
DATABASE_URL="postgresql://app:app_pass@localhost:5432/app_db?schema=public"Если базы/пользователя ещё нет (пример для psql):
CREATE USER app WITH PASSWORD 'app_pass';
CREATE DATABASE app_db OWNER app;
GRANT ALL PRIVILEGES ON DATABASE app_db TO app;2) Запуск приложения (Next.js) — порт 3000
Откройте Терминал A (PowerShell):
cd D:\Code\project_try_create_interface
npm installПрименить миграции Prisma + перегенерировать Prisma Client (делайте после любых изменений в prisma/schema.prisma или миграциях):
npx prisma migrate deploy
npx prisma generate2.1 Миграция legacy JSON → нормализованные таблицы (вариант B)
Если у вас уже есть проекты, созданные до нормализации (данные лежат в ProjectWorkspaceState.state), можно перенести их в новые таблицы:
# убедитесь что DATABASE_URL указывает на нужную БД
node backfill_project_state.js2.2 Проверка, что данные действительно попали в таблицы (audit)
Если вы “не видите” этапы календаря/продукты в новых таблицах, сначала проверьте и выведите отчёт:
node audit_project_data.jsЕсли скрипт покажет, что в legacy JSON данные есть, но в нормализованных таблицах их нет — можно автоматически починить:
node audit_project_data.js --fixЗапуск dev-сервера:
npm run devОткрыть:
http://localhost:3000/- Проекты (таблица):
http://localhost:3000/projects?view=table
3) Запуск Django Admin — порт 8000
Откройте Терминал B (PowerShell).
3.1 Установка зависимостей (1 раз)
cd D:\Code\project_try_create_interface
python -m venv .venv
.\.venv\Scripts\activate
pip install -r django_admin\requirements.txtПроверка, что используется python из venv:
where pythonПервая строка должна быть: ...\project_try_create_interface\.venv\Scripts\python.exe
3.2 Миграции Django и суперпользователь (1 раз)
cd D:\Code\project_try_create_interface\django_admin
python .\manage.py migrate
python .\manage.py createsuperuser3.3 Запуск админки
cd D:\Code\project_try_create_interface\django_admin
python .\manage.py runserver 8000Открыть:
http://127.0.0.1:8000/admin/
4) Что важно про “пустой/демо” проект
При создании проекта в UI (/projects) есть выбор:
- Пустой — без данных (содержимое пустое).
- Демо — создаётся проект с примером данных (заполняются нормализованные таблицы варианта B:
ProjectInfo/ProjectSettings/ProjectProduct/ProjectCalendarNode/...).
5) Частые проблемы и решения
5.1 Prisma: findUnique of undefined / “модель не найдена”
Это значит, что Prisma Client не перегенерирован под текущую схему.
cd D:\Code\project_try_create_interface
npx prisma migrate deploy
npx prisma generateПотом перезапустите npm run dev.
5.2 Django: ModuleNotFoundError: No module named 'dotenv'
Значит вы запускаете не из .venv или не ставили зависимости:
cd D:\Code\project_try_create_interface
.\.venv\Scripts\activate
pip install -r django_admin\requirements.txt5.3 Django admin “без стилей”, в логе 404 на /static/admin/...
Сейчас по умолчанию DEBUG=1, поэтому обычно всё ок. Если вы вручную выключали:
Remove-Item Env:DJANGO_DEBUG -ErrorAction SilentlyContinueи перезапустите python .\manage.py runserver 8000.
5.4 Переменная DATABASE_URL “не та”
Если вы вручную делали $env:DATABASE_URL=..., это может перебить .env.
Сбросить в текущей консоли:
Remove-Item Env:DATABASE_URL -ErrorAction SilentlyContinue5.5 Prisma: P2002 при сохранении календарного плана
Если в логе появляется ошибка вида Unique constraint failed на ProjectCalendarNode/ProjectCalendarPaymentScheduleItem, это обычно значит, что в БД ещё не применена миграция для “составных ключей” календаря или у вас старая схема Prisma Client.
cd D:\Code\project_try_create_interface
npx prisma migrate deploy
npx prisma generateЕсли npx prisma migrate deploy падает с ошибкой миграции (например, P3018 / 42P07 “отношение … уже существует”), это значит миграция частично успела примениться. В этом случае:
npx prisma migrate resolve --rolled-back 20260202223500_calendar_composite_keys
npx prisma migrate deploy6) Рекомендуемая схема “два терминала”
- Терминал A:
npm run dev(Next.js,http://localhost:3000) - Терминал B:
python .\manage.py runserver 8000(Django admin,http://127.0.0.1:8000/admin/)
Структура данных в БД
См. DB_DATA.md — описание всех сущностей/таблиц и что в них хранится.
Просмотр данных (UI)
Самый простой способ посмотреть данные в базе:
npx prisma studioКонвертация Office → PDF (превью Word/PowerPoint)
PDF-превью Word-документов, презентаций и презентаций «с подменой значений», а также экспорт справочника меток в PDF выполняются на сервере. Поддерживаются два бэкенда:
| Бэкенд | Когда используется | Требования |
|---|---|---|
powershell | Windows-разработка | Установленные Microsoft Word и PowerPoint (COM) |
gotenberg | Прод (Linux-контейнер) и Windows без Office | Запущенный сервис Gotenberg (LibreOffice) |
Выбор бэкенда — переменная OFFICE_PDF_CONVERTER:
auto(по умолчанию): на Windows сначала Office COM, при неудаче — Gotenberg (если заданGOTENBERG_URL); на Linux/macOS — только Gotenberg;gotenberg/powershell— принудительный выбор.
Локальный запуск Gotenberg
docker run --rm -p 3001:3000 gotenberg/gotenberg:8и в .env:
GOTENBERG_URL="http://localhost:3001"Прод
Сервис gotenberg описан в docker-compose.yml, приложение получает GOTENBERG_URL
автоматически. Каталог uploads/ вынесен в volume planforge_uploads — исходники
документов, копии «с подменой» и кэш сконвертированных PDF переживают redeploy.
Шрифты конвертера
Сервис собирается из Dockerfile.gotenberg. Базовый образ уже содержит Liberation,
Carlito, Caladea, DejaVu и Noto — метрически совместимые замены Arial, Calibri, Cambria
и Times New Roman. Сверх этого ставятся оригинальные шрифты Microsoft
(ttf-mscorefonts-installer: Arial, Times New Roman, Courier New, Georgia, Verdana,
Trebuchet MS, Impact, Comic Sans MS) и популярные кириллические семейства
(PT Sans/Serif/Mono, Roboto, Open Sans, Inter, Montserrat, Fira Code, JetBrains Mono).
Образ вырастает примерно на 120 МБ.
MS-шрифты скачиваются со sourceforge во время сборки. Если сеть закрыта, соберите без них:
docker compose build --build-arg INSTALL_MSCOREFONTS=false gotenbergВёрстка от этого не поедет — Liberation метрически совпадает с Arial, отличаться будут только сами начертания глифов.
Если конвертер недоступен, приложение не падает: Word открывается встроенным DOCX-просмотрщиком, презентации — встроенным PPTX-просмотрщиком, недоступным остаётся только PDF-режим.