Files
contracts/VM.md

4.1 KiB

VM — contracts.kube5s.ru (5.172.178.213)

SSH

ssh -i ~/.ssh/naeel_vm_id_ed25519 naeel@5.172.178.213

Сервисы

Сервис Порт systemd unit Назначение
gunicorn (Flask UI) 5001 — (start.sh) Веб-интерфейс
convert_server.py 8766 contracts API: upload, classify, compare, /static
drhider_server.py 8767 contracts-drhider Обфускация документов
nginx 443 nginx Прокси + SSL (Certbot)
PostgreSQL 5432 БД baza, пользователь super
act_runner act_runner Gitea CI runner

Деплой

# Из папки contracts-flask/:
bash deploy/sync.sh

Скрипт копирует deploy/compare/, deploy/drhider/, deploy/db/, deploy/convert_*.py/home/naeel/contracts/ на ВМ, затем делает sudo systemctl restart contracts contracts-drhider.

Nginx-конфиг — вручную:

scp -i ~/.ssh/naeel_vm_id_ed25519 deploy/nginx-contracts.conf naeel@5.172.178.213:/tmp/
ssh -i ~/.ssh/naeel_vm_id_ed25519 naeel@5.172.178.213 sudo cp /tmp/nginx-contracts.conf /etc/nginx/sites-enabled/
ssh -i ~/.ssh/naeel_vm_id_ed25519 naeel@5.172.178.213 'sudo nginx -t && sudo systemctl reload nginx'

Команды на ВМ

# Статус сервисов
systemctl status contracts contracts-drhider

# Логи
journalctl -u contracts -f
journalctl -u contracts-drhider -f

# Перезапуск
sudo systemctl restart contracts
sudo systemctl restart contracts-drhider

# Nginx
sudo nginx -t && sudo systemctl reload nginx

# БД
psql -U super -d baza

# Порты
ss -tlnp | grep -E '5001|8766|8767|5432'

.env

Файл на ВМ: /home/naeel/contracts/.env

DB_HOST=127.0.0.1
DB_PORT=5432
DB_NAME=baza
DB_USER=super
DB_PASS=
LLM_API_URL=https://api.aillm.ru/v1/chat/completions
LLM_API_KEY=...
LLM_MODEL=gpt-oss-120b

Flask (site/app.py) читает VM_API (по умолчанию https://contracts.kube5s.ru).

Nginx-роутинг

contracts.kube5s.ru :443
  /               → 127.0.0.1:5001   Flask UI
  /api/drhider    → 127.0.0.1:8767   DrHider обфускация
  /api/*          → 127.0.0.1:8766   convert_server
  /static/        → 127.0.0.1:8766
  /upload         → 127.0.0.1:8766
  /lucee/*        → contractor.luceek8s.dev.nubes.ru  (legacy)

Структура БД (PostgreSQL baza)

Таблица Назначение
documents Загруженные документы
contracts Договоры
supplements Допсоглашения к договорам
spec_current Текущая спецификация услуг
spec_events История изменений спецификации
prompts LLM-промпты (extract/diff)
upload_chunks Чанки загрузки

Файлы на ВМ

/home/naeel/contracts/
├── .env
├── convert_server.py        # API-сервер :8766
├── convert_doc.py           # Конвертер .doc → .docx
├── drhider/
│   ├── drhider.py           # Ядро обфускации
│   └── drhider_server.py   # HTTP-сервер :8767
├── compare/
│   ├── process.py, llm.py, classify.py, ...
│   └── parse.py, grouping.py, upload.py
├── db/
│   ├── connection.py        # Пул коннектов
│   ├── documents.py, contracts.py, supplements.py
│   └── spec_current.py, spec_events.py, prompts.py
├── files/                   # Загруженные документы
└── llm_prompt.py            # Шаблоны промптов extract/diff

Пути в проекте

contracts-flask/
├── deploy/          → копируется на ВМ (sync.sh)
├── site/            → Flask UI (gunicorn на ВМ :5001)
├── Dockerfile       → контейнеризация (не используется на ВМ)
└── .gitea/workflows/deploy.yaml  → CI (act_runner)