docs: VM reference — SSH, сервисы, деплой, .env, роутинг, БД
This commit is contained in:
@@ -0,0 +1,130 @@
|
|||||||
|
# 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)
|
||||||
|
```
|
||||||
Reference in New Issue
Block a user