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:
darkorion
2026-10-13 13:27:20 +03:00
parent 3a6e1f444c
commit 0f239d5015
44 changed files with 2131 additions and 94 deletions
+18 -3
View File
@@ -4,7 +4,7 @@ from pathlib import Path
from sqlalchemy.orm import Session
from . import config
from . import autoconf, config
from .models import Setting
DEFAULTS = {
@@ -19,6 +19,8 @@ DEFAULTS = {
"setup_done": "",
"crane_map": "0", # отдельная карта кранов
"reliability": "1", # раздел «Анализ надёжности» для инженеров и руководителей
"photo_keep_days": "0", # автоочистка: удалять фото нарядов и заданий старше N дней (0 — не удалять; keep/ не трогается)
"photo_cleanup_at": "", # когда очистка выполнялась последний раз
"crane_map_image": "", # картинка карты кранов (пусто — используется карта завода) # мастер первичной настройки: отмеченные шаги (через запятую)
# AI-помощник (не входит в EDITABLE: ключ не отдаётся в общих настройках, правится через /assistant/config)
"assistant_enabled": "0",
@@ -27,14 +29,27 @@ DEFAULTS = {
"assistant_model": "",
"assistant_api_key": "",
"assistant_scope": "",
# документация из Nextcloud (не входит в EDITABLE: пароль и секрет не отдаются, правится через /docs/config)
"nc_url": "", # адрес Nextcloud, лучше внутренний в локальной сети
"nc_user": "", # служебная учётная запись (только чтение)
"nc_password": "", # пароль приложения этой учётной записи
"nc_root": "", # корневая папка документации внутри учётной записи
"onlyoffice_url": "", # ONLYOFFICE Document Server — переводит документы Office в PDF для просмотра
"onlyoffice_jwt": "", # секрет JWT Document Server (если включён)
"portal_internal_url": "", # адрес портала, по которому его видит ONLYOFFICE (локальная сеть)
"docs_ai": "0", # «Работа с документацией» для AI-помощника
"docs_index_at": "", # когда последний раз строился индекс
}
EDITABLE = ("photo_dir", "max_photo_mb", "vapid_contact", "fcm_credentials_path", "public_incidents",
"backup_auto_hours", "backup_keep", "backup_media", "setup_done", "crane_map", "reliability")
"backup_auto_hours", "backup_keep", "backup_media", "setup_done", "crane_map", "reliability", "photo_keep_days")
def get(db: Session, key: str) -> str:
row = db.get(Setting, key)
return row.value if row and row.value != "" else DEFAULTS.get(key, "")
if row and row.value != "":
return row.value
auto = autoconf.default(key) # окружение (.env) или сервис во внутренней сети Docker
return auto if auto is not None else DEFAULTS.get(key, "")
def set_(db: Session, key: str, value: str):