# VM — contracts.kube5s.ru (5.172.178.213) ## SSH ```bash 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 | ## Деплой ```bash # Из папки 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-конфиг — вручную: ```bash 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' ``` ## Команды на ВМ ```bash # Статус сервисов 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` ```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) ```