feat: документация из Nextcloud, график у сотрудника, автоочистка фото, мониторинг, итог мастера, фильтр по местам; доп. сервисы в docker-compose
- docker-compose.yml: профили docs (Nextcloud), office (ONLYOFFICE Document Server), ai (Ollama + скачивание модели) - автонастройка: адреса Nextcloud, ONLYOFFICE, портала и модели подставляются из .env или по именам сервисов во внутренней сети Docker; значения из интерфейса важнее - локальная модель в своей сети (имя сервиса, частный IP) подключается без ключа API - .env.example, docs/DEPLOY.md (раздел 7а), README
This commit is contained in:
+35
@@ -81,6 +81,10 @@
|
||||
Пример «3 дня, отсыпной, 3 ночи, отсыпной, 3 выходных» — 5 шагов, цикл 11 дней.
|
||||
`POST /schedules/preview` `{schedule, from_date, days}` — календарь без сохранения (для конструктора).
|
||||
|
||||
График назначается **сотруднику**: `schedule_id` в `POST/PATCH /users` и в `UserOut` (пусто — всегда на смене). `on_shift`
|
||||
считается по графику сотрудника. Наряд на должность видят и получают уведомление только сотрудники этой должности, которые
|
||||
сейчас на смене. `schedule_id` у должности устарел и не используется (при обновлении перенесён сотрудникам).
|
||||
|
||||
## Отчёты (инженер/модератор/админ)
|
||||
`GET /reports` — список отчётов. `GET /reports/completed-orders?from=…&to=…` — **период обязателен** (дата и время).
|
||||
Фильтры: `equipment_id`, `position_id` (должность исполнителя **на момент выполнения**), `user_id`, `include_review`.
|
||||
@@ -225,6 +229,37 @@ deviations, tasks_cancelled, tasks_paused, hours, calendar: {"2026-10-12": {n, h
|
||||
- Только администраторам портала доступны `PUT /settings` (кроме отметок мастера `setup_done`), полный `GET /settings`, `/api-keys`,
|
||||
`/assistant/config` и `/assistant/test`. Остальные администраторы получают в `GET /settings` сокращённый ответ (`limited: true`).
|
||||
|
||||
## Документация оборудования (Nextcloud)
|
||||
Портал читает Nextcloud по WebDAV от служебной учётной записи (пароль приложения, только чтение) и сам отдаёт файлы;
|
||||
Office переводится в PDF через ONLYOFFICE Document Server (ConvertService).
|
||||
- `GET/PUT /api/v1/docs/config` — **администратор портала**: `nc_url, nc_user, nc_password, nc_root, onlyoffice_url, onlyoffice_jwt,
|
||||
portal_internal_url, docs_ai`. Пароль и секрет JWT в ответе не возвращаются (`nc_password_set`, `onlyoffice_jwt_set`) и не попадают
|
||||
в резервные копии. `POST /api/v1/docs/test` — проверка Nextcloud и ONLYOFFICE.
|
||||
- `GET /api/v1/docs/browse?path=` — администратор или модератор: вложенные папки (с `linked` — к каким машинам привязаны) и число файлов.
|
||||
- `PUT /api/v1/equipment/{id}/docs` `{path}` — администратор или модератор: привязать папку (пустой `path` — отвязать). В `EquipmentOut` — `docs_path`.
|
||||
- `GET /api/v1/equipment/{id}/docs?sub=` — кто видит машину: `{folder, sub, items: [{name, path, is_dir, kind: dir|pdf|image|text|office|file, size, mtime}]}`.
|
||||
- `GET /api/v1/equipment/{id}/docs/file?path=...&view=1` — файл; `view=1` — для просмотра: PDF, картинки, текст — inline,
|
||||
Office — PDF через ONLYOFFICE (кэшируется). Без `view` — скачивание оригинала. Пути `..` отклоняются (422).
|
||||
- `GET /api/v1/docs/raw/{token}` — без входа, только для ONLYOFFICE: подписанная ссылка на исходник, живёт 10 минут.
|
||||
- В `GET /me` — `docs: true`, если Nextcloud подключён.
|
||||
|
||||
Опция AI-помощника **«Работа с документацией»** (`docs_ai`): раз в сутки портал строит индекс (имя и начало текста файлов,
|
||||
PDF — через pypdf, docx/xlsx/pptx/odt — из XML; файлы больше 60 МБ — только по имени), `POST /api/v1/docs/reindex` — вручную
|
||||
(администратор портала). `GET /api/v1/docs/search?q=` — поиск по индексу среди машин, которые видит пользователь (только при
|
||||
включённой опции). Помощник получает инструменты `search_docs` и `equipment_docs`. Фрагменты документов уходят провайдеру ИИ —
|
||||
для закрытой документации нужна локальная модель.
|
||||
|
||||
## Фото: «хранить более года» и автоочистка
|
||||
- `photo_keep` у пункта чек-листа (`ChecklistItemIn`), копируется в пункт наряда (`OrderItemOut.photo_keep`); у задания —
|
||||
`photo_keep` в `POST/PATCH /tasks` и `TaskOut`. Такие фото сохраняются в каталог `keep/` и очисткой не удаляются.
|
||||
- Настройка `photo_keep_days` (`PUT /settings`, администратор портала): раз в сутки удалять фото нарядов и заданий старше N дней,
|
||||
0 — выключено (по умолчанию). `GET /photo-cleanup` — сколько удалится сейчас (ничего не удаляет), `POST /photo-cleanup` — очистить сразу.
|
||||
В `GET /settings` — `photo_keep_stats` (сколько фото в `keep/`).
|
||||
|
||||
## Мониторинг сервера
|
||||
`GET /api/v1/server/monitor` (администратор портала) → `{cpu: %, cpu_count, load: [1, 5, 15 мин] | null,
|
||||
memory: {used, total, scope: host|container}, disks: [{labels, path, used, total, free}], now}`.
|
||||
|
||||
## AI-помощник
|
||||
Включает администратор: «Администрирование → Настройки сервера → AI-помощник» (`GET/PUT /api/v1/assistant/config`:
|
||||
`enabled, provider (openai | anthropic | gigachat), base_url, model, api_key, scope`; ключ в ответах не возвращается и не попадает
|
||||
|
||||
@@ -98,6 +98,36 @@ docker compose cp checklists-1.7.0.apk app:/srv/data/apk/
|
||||
Версия берётся из имени файла (`checklists-<версия>.apk`); приложения сами предложат обновиться. В приложении на телефоне
|
||||
указывается адрес вашего сервера (`https://portal.example.ru`).
|
||||
|
||||
## 7а. Дополнительные сервисы: документация, просмотр Office, локальный ИИ
|
||||
`docker-compose.yml` умеет поднять рядом с порталом ещё три сервиса. Они включаются **профилями** — строкой в `.env`:
|
||||
|
||||
```bash
|
||||
COMPOSE_PROFILES=docs,office,ai
|
||||
```
|
||||
|
||||
| Профиль | Что запускается | Зачем | Ресурсы сверх портала |
|
||||
|---|---|---|---|
|
||||
| `docs` | Nextcloud + своя PostgreSQL | хранилище документации оборудования: паспорта, схемы, руководства | 1 ГБ памяти, место под документы |
|
||||
| `office` | ONLYOFFICE Document Server | Word, Excel, PowerPoint открываются прямо в портале (переводятся в PDF) | 2–4 ГБ памяти |
|
||||
| `ai` | Ollama + скачивание модели | локальная модель для AI-помощника: вопросы и документы не уходят в интернет | 6–8 ГБ памяти для 7B-модели, лучше видеокарта |
|
||||
|
||||
Профили независимы: можно взять только `ai` или подключить свой Nextcloud и ONLYOFFICE, указав их адреса в `.env`
|
||||
(`NC_URL`, `ONLYOFFICE_URL`, `PORTAL_INTERNAL_URL`).
|
||||
|
||||
**Настройки заполняются сами.** Портал ищет сервисы во внутренней сети Docker по именам `nextcloud`, `onlyoffice`, `ollama`
|
||||
и подставляет адреса в «Настройки сервера»: Nextcloud — `http://nextcloud`, ONLYOFFICE — `http://onlyoffice` (документы
|
||||
он забирает у портала по `http://app:8000`), модель — `http://ollama:11434/v1` с моделью из `OLLAMA_MODEL`. Учётная запись
|
||||
Nextcloud и секрет ONLYOFFICE берутся из `.env`. Всё, что администратор поменяет в интерфейсе, важнее автоматических значений.
|
||||
|
||||
Что сделать после запуска:
|
||||
1. **Nextcloud** откройте на порту `NEXTCLOUD_PORT` (по умолчанию 8081), войдите администратором из `.env`, создайте папку
|
||||
документации (например, «Документация») с подпапками по машинам и укажите её в `NC_ROOT` или в настройках портала.
|
||||
Для безопасности заведите отдельного пользователя с доступом только на чтение к этой папке и пароль приложения для
|
||||
него — и впишите их в `NC_USER` / `NC_PASSWORD`.
|
||||
2. **ONLYOFFICE** наружу не публикуется: портал общается с ним внутри сети Docker. Задайте свой `ONLYOFFICE_JWT`.
|
||||
3. **ИИ**: дождитесь, пока `ollama-pull` скачает модель (`docker compose logs -f ollama-pull`), затем в «Настройках сервера →
|
||||
AI-помощник» нажмите «Проверить» и включите помощника. Опция «Работа с документацией» включается там же.
|
||||
|
||||
## 8. Обновление
|
||||
```bash
|
||||
cd /opt/portal
|
||||
|
||||
Binary file not shown.
Reference in New Issue
Block a user