- Unify API: lib/api.ts uses /api/v1, inbox uses /api/inbox (rewrites) - Remove localhost refs: openapi, inbox page - Add rewrites: /api/inbox|tmc -> inbox-server, /api/v1 -> FastAPI - Add stub routes: knowledge/insights, recommendations, search, log-error - Transfer from PAPA: prompts (inspection, tmc), scripts, supabase, data/tmc-requests - Fix inbox-server: ORDER BY created_at, package.json - Remove redundant app/api/inbox/files route (rewrites handle it) - knowledge/ in gitignore (large PDFs) Co-authored-by: Cursor <cursoragent@cursor.com>
256 lines
9.8 KiB
Markdown
256 lines
9.8 KiB
Markdown
# Как запустить программу
|
||
|
||
## Lawer R в своём окне (DMG или из исходников)
|
||
|
||
**Готовый образ для macOS:** `dist/Lawer R.dmg`. Перетащите «Lawer R» в «Программы» и запускайте. Своё окно, без Docker, Python, Node и других программ.
|
||
|
||
**Если .app не открывается** (macOS: «Разработчик не опознан»): нажмите по «Lawer R» правой кнопкой → **Открыть** (один раз).
|
||
|
||
### Сборка DMG (на машине сборки: Python 3, Node.js)
|
||
|
||
```bash
|
||
pip install -r requirements-standalone.txt
|
||
./build_dmg.sh
|
||
```
|
||
|
||
Результат: `dist/Lawer R.dmg`. Данные приложения: `~/Library/Application Support/LawerR/`.
|
||
|
||
### Запуск из исходников в одном окне (без сборки .app)
|
||
|
||
Если DMG не собран или .app не запускается — можно поднять Lawer R в одном окне из кода (нужны Python 3.11–3.13 и Node.js). **Из корня проекта** (папка `klg_asutk_app`):
|
||
|
||
```bash
|
||
cd ~/Downloads/klg_asutk_app # или путь к папке проекта
|
||
chmod +x run-standalone-from-source.sh
|
||
./run-standalone-from-source.sh
|
||
```
|
||
|
||
Скрипт соберёт frontend (если ещё нет `frontend/dist`), поставит зависимости (в т.ч. pywebview) и запустит лаунчер. Вход: токен **`dev`**.
|
||
|
||
### Не запускается?
|
||
|
||
Откройте **`~/Library/Logs/LawerR/launcher.log`** — в нём причина и полный traceback при ошибках сервера или окна. Если порт **18473** занят, закройте другое приложение или пересоберите .app.
|
||
|
||
---
|
||
|
||
## Нет Docker?
|
||
|
||
- **Установить Docker:** [Docker Desktop для Mac](https://www.docker.com/products/docker-desktop/) — раздел 1.
|
||
- **Без Docker (проще всего):** только **Python 3.11+** и **Node.js** — один скрипт, **PostgreSQL и Homebrew не нужны**. См. **раздел 4 (вариант А)**.
|
||
- **Без Docker с PostgreSQL:** раздел 4, вариант Б (пункты 4.1–4.3).
|
||
|
||
---
|
||
|
||
## 1. Запуск через Docker Compose (рекомендуется)
|
||
|
||
Из корня проекта:
|
||
|
||
```bash
|
||
cd klg_asutk_app
|
||
docker compose up --build
|
||
```
|
||
|
||
После старта:
|
||
|
||
| Сервис | URL |
|
||
|----------|-----|
|
||
| **Frontend** | http://localhost:8080 |
|
||
| **API** | http://localhost:8000 |
|
||
| **Документация API (Swagger)** | http://localhost:8000/docs |
|
||
| **Health** | http://localhost:8000/api/v1/health |
|
||
|
||
### Пересборка после изменений
|
||
|
||
```bash
|
||
docker compose up --build
|
||
```
|
||
|
||
### Остановка
|
||
|
||
```bash
|
||
docker compose down
|
||
```
|
||
|
||
---
|
||
|
||
## 2. Авторизация (dev)
|
||
|
||
В dev используется заголовок:
|
||
|
||
```
|
||
Authorization: Bearer dev
|
||
```
|
||
|
||
или JWT с claim'ами: `sub`, `name`, `email`, `role`, `org_id`.
|
||
|
||
Роли: `admin`, `operator_manager`, `authority_inspector` и др.
|
||
|
||
---
|
||
|
||
## 3. Модуль юридических документов
|
||
|
||
### Юрисдикции (справочник)
|
||
|
||
После первого запуска заполните юрисдикции. **Команда выполняется только при запущенном backend** (если контейнеры остановлены — сначала `docker compose up -d` или `docker compose up --build`):
|
||
|
||
```bash
|
||
# 1) Убедитесь, что сервисы запущены (в одном терминале: docker compose up --build или в фоне: docker compose up -d)
|
||
# 2) Затем:
|
||
docker compose exec backend python -m app.db.seed_legal
|
||
```
|
||
|
||
Если видите ошибку `service "backend" is not running` — поднимите сервисы: `docker compose up -d`.
|
||
|
||
### ИИ-агенты (опционально)
|
||
|
||
Для работы классификации, проверки норм, перекрёстных ссылок и т.п. задайте в `docker-compose.yml` для сервиса `backend`:
|
||
|
||
```yaml
|
||
environment:
|
||
OPENAI_API_KEY: "sk-..."
|
||
# OPENAI_BASE_URL: "https://..." # для локальных моделей
|
||
# LEGAL_LLM_MODEL: "gpt-4o-mini" # модель по умолчанию
|
||
```
|
||
|
||
и перезапустите:
|
||
|
||
```bash
|
||
docker compose up --build -d
|
||
```
|
||
|
||
### Эндпоинты модуля legal
|
||
|
||
- `GET /api/v1/legal/jurisdictions` — список юрисдикций
|
||
- `GET /api/v1/legal/documents` — список документов
|
||
- `POST /api/v1/legal/analyze` — запуск ИИ-анализа (тело: `jurisdiction_id`, `title`, `content` и др.)
|
||
- и другие — см. http://localhost:8000/docs#/legal
|
||
|
||
---
|
||
|
||
## 4. Запуск без Docker
|
||
|
||
### Вариант А: один скрипт (без PostgreSQL и Homebrew)
|
||
|
||
Нужны только **Python 3.11+** и **Node.js** ([nodejs.org](https://nodejs.org/)).
|
||
|
||
```bash
|
||
chmod +x run-without-docker.sh # один раз, если «Permission denied»
|
||
./run-without-docker.sh
|
||
```
|
||
|
||
Скрипт: SQLite (`backend/klg.db`), каталог загрузок `backend/data/files`, зависимости из `backend/requirements-sqlite.txt` (без PostgreSQL), backend + frontend.
|
||
После запуска: **http://localhost:3000**, токен **`dev`**. Остановка: **Ctrl+C**.
|
||
|
||
---
|
||
|
||
### Вариант Б: вручную с PostgreSQL
|
||
|
||
Требуются: PostgreSQL, Python 3.11+, Node.js. Если нет Homebrew: [Docker Desktop](https://www.docker.com/products/docker-desktop/) (раздел 1) или [Homebrew](https://brew.sh) и [Postgres.app](https://postgresapp.com/).
|
||
|
||
#### 4.1. PostgreSQL
|
||
|
||
**macOS (Homebrew):** если Homebrew уже есть и PostgreSQL ещё не установлен:
|
||
|
||
```bash
|
||
brew install postgresql@16
|
||
brew services start postgresql@16
|
||
# при необходимости: export PATH="/opt/homebrew/opt/postgresql@16/bin:$PATH"
|
||
```
|
||
|
||
Создайте пользователя `klg` с паролем `klg` и БД `klg`:
|
||
|
||
```bash
|
||
# один раз: пользователь klg, пароль klg, БД klg
|
||
createuser -s klg 2>/dev/null || true
|
||
psql -d postgres -c "ALTER USER klg WITH PASSWORD 'klg';" 2>/dev/null || true
|
||
createdb -O klg klg 2>/dev/null || true
|
||
```
|
||
|
||
Если `createuser` или `psql` выдают «role klg already exists» / «database klg already exists» — это нормально.
|
||
|
||
Если `psql` или `createuser` не в PATH (Apple Silicon / Homebrew):
|
||
|
||
```bash
|
||
export PATH="/opt/homebrew/opt/postgresql@16/bin:$PATH"
|
||
# или: /usr/local/opt/postgresql@16/bin — для Intel Mac
|
||
```
|
||
|
||
Либо создайте БД под своим пользователем и укажите в `DATABASE_URL`, например:
|
||
|
||
```text
|
||
postgresql+psycopg2://ВАШ_ПОЛЬЗОВАТЕЛЬ@localhost:5432/klg
|
||
```
|
||
|
||
### 4.2. Backend
|
||
|
||
```bash
|
||
cd backend
|
||
|
||
# виртуальное окружение (по желанию)
|
||
python3 -m venv .venv
|
||
source .venv/bin/activate # Windows: .venv\Scripts\activate
|
||
|
||
# зависимости
|
||
pip install -r requirements.txt
|
||
|
||
# переменные (или .env в backend/)
|
||
export DATABASE_URL="postgresql+psycopg2://klg:klg@localhost:5432/klg"
|
||
export OPENAI_API_KEY="sk-..." # по желанию
|
||
|
||
# создание таблиц и запуск
|
||
python -m app.db.init_db
|
||
python -m app.db.seed_legal # юрисдикции для legal
|
||
uvicorn app.main:app --host 0.0.0.0 --port 8000
|
||
```
|
||
|
||
API: http://localhost:8000, docs: http://localhost:8000/docs
|
||
|
||
### 4.3. Frontend
|
||
|
||
```bash
|
||
cd frontend
|
||
npm install
|
||
npm run dev
|
||
```
|
||
|
||
Фронт: http://localhost:3000. Прокси `/api` → `http://localhost:8000` (в `vite.config.ts`).
|
||
|
||
---
|
||
|
||
## 5. Проверка работы
|
||
|
||
1. **Health:**
|
||
`curl http://localhost:8000/api/v1/health`
|
||
|
||
2. **Список юрисдикций (с авторизацией):**
|
||
`curl -H "Authorization: Bearer dev" http://localhost:8000/api/v1/legal/jurisdictions`
|
||
|
||
3. **Swagger:**
|
||
Откройте http://localhost:8000/docs, нажмите «Authorize», введите `dev` в качестве Bearer-токена.
|
||
|
||
---
|
||
|
||
## 6. Приложение не загружается — что проверить
|
||
|
||
### Страница белая или «не загружается»
|
||
|
||
1. **Docker (если через `docker compose`):**
|
||
- Убедитесь, что Docker запущен.
|
||
- Выполните `docker compose up --build` и дождитесь сообщений о готовности frontend и backend.
|
||
- Откройте http://localhost:8080 (не 3000: снаружи порт 8080).
|
||
|
||
2. **Вход в систему:**
|
||
- Если видите форму входа — введите токен `dev` и нажмите «Войти». Без токена дальше приложение не откроется.
|
||
|
||
3. **Бэкенд не отвечает:**
|
||
- Проверьте: `curl http://localhost:8000/api/v1/health`
|
||
- Если ошибка — поднимите backend (Docker или вручную `uvicorn app.main:app --host 0.0.0.0 --port 8000`).
|
||
- При ручном запуске фронта: backend должен быть на `http://localhost:8000`, иначе запросы `/api` будут падать.
|
||
|
||
4. **Запуск вручную (без Docker):**
|
||
- Сначала backend на порту 8000, затем `cd frontend && npm run dev`. Фронт: http://localhost:3000.
|
||
- В `vite.config.ts` по умолчанию прокси `/api` идёт на `http://localhost:8000`.
|
||
|
||
5. **Консоль браузера (F12 → Console):**
|
||
Посмотрите ошибки (сеть, CORS, 404 по `/api`). Если много 404 на `/api/*` — backend не запущен или прокси указан неверно.
|