Files
contracts/VM.md
T

131 lines
4.1 KiB
Markdown

# 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)
```