194 lines
5.5 KiB
Markdown
194 lines
5.5 KiB
Markdown
# Деплой, ВМ и переменные окружения
|
||
|
||
---
|
||
|
||
## Платформа
|
||
|
||
**Штурвал** — Managed Flask на pythonk8s (Kubernetes).
|
||
|
||
- Запускает Flask **сам** — без Dockerfile, без gunicorn
|
||
- Точка входа: `site/app.py` → глобальная переменная `app`
|
||
- Деплой: `git push origin master` → авто-деплой через UI Штурвала
|
||
|
||
---
|
||
|
||
## Деплой
|
||
|
||
```bash
|
||
cd /home/naeel/nubes/drhider
|
||
git add -A
|
||
git commit -m "описание изменений"
|
||
git push origin master
|
||
```
|
||
|
||
После пуша — зайти в UI Штурвала и нажать ** Redeploy** для `drhider`.
|
||
|
||
---
|
||
|
||
## Переменные окружения (настраиваются в UI Штурвала)
|
||
|
||
| Переменная | Значение | Для чего |
|
||
|---|---|---|
|
||
| `LLM_API_KEY` | `sk-ucI5YvOticoOQ9Kuj5K9mQ` | Ключ доступа к LLM API |
|
||
| `LLM_URL` | `https://api.aillm.ru/v1/chat/completions` | URL LLM API |
|
||
| `LLM_MODEL` | `gpt-oss-120b` | Модель для NER |
|
||
|
||
Без `LLM_API_KEY` LLM-сканирование не работает (только regex).
|
||
|
||
---
|
||
|
||
## ВМ contracts (legacy)
|
||
|
||
Старый сервер contracts.kube5s.ru. DrHider там — standalone HTTP-сервер на порту 8767.
|
||
|
||
### SSH
|
||
|
||
```bash
|
||
ssh -i ~/.ssh/naeel_vm_id_ed25519 naeel@5.172.178.213
|
||
```
|
||
|
||
### Где лежит старый drhider
|
||
|
||
```
|
||
/home/naeel/contracts/drhider/
|
||
├── drhider.py # Ядро обфускации (отсюда скопировано в этот проект)
|
||
├── drhider_server.py # HTTP-сервер :8767 (НЕ ИСПОЛЬЗУЕТСЯ в новом проекте)
|
||
└── __init__.py
|
||
```
|
||
|
||
### Сервисы на ВМ
|
||
|
||
| Сервис | Порт | systemd unit |
|
||
|---|---|---|
|
||
| drhider | 8767 | `contracts-drhider` |
|
||
| convert_server | 8766 | `contracts` |
|
||
| Flask UI | 5001 | — (start.sh) |
|
||
| nginx | 443 | `nginx` |
|
||
| PostgreSQL | 5432 | — |
|
||
|
||
### Управление drhider на ВМ
|
||
|
||
```bash
|
||
# Статус
|
||
systemctl status contracts-drhider
|
||
|
||
# Логи
|
||
journalctl -u contracts-drhider -f
|
||
|
||
# Перезапуск
|
||
sudo systemctl restart contracts-drhider
|
||
```
|
||
|
||
---
|
||
|
||
## Kubernetes-кластер (iot-naeel)
|
||
|
||
DrHider работает в кластере `iot-naeel` на платформе Штурвал.
|
||
|
||
### Доступ к kubectl
|
||
|
||
kubectl настроен на ВМ `5.172.178.213`. Все команды выполняются через SSH:
|
||
|
||
```bash
|
||
ssh -i ~/.ssh/naeel_vm_id_ed25519 naeel@5.172.178.213 kubectl ...
|
||
```
|
||
|
||
### DrHider
|
||
|
||
```bash
|
||
# Найти под drhider (namespace — UUID Штурвала)
|
||
kubectl get pods --all-namespaces | grep pythonk8s
|
||
|
||
# Логи
|
||
kubectl logs -n <namespace> <pod>
|
||
|
||
# Перезапуск — через UI Штурвала (Redeploy)
|
||
```
|
||
|
||
### Ingress
|
||
|
||
```bash
|
||
# Реплики
|
||
kubectl get deploy -n ingress shturval-ingress-controller-controller
|
||
|
||
# externalTrafficPolicy
|
||
kubectl get svc -n ingress shturval-ingress-controller-controller \
|
||
-o jsonpath='{.spec.externalTrafficPolicy}'
|
||
|
||
# Масштабирование (если сбросилось)
|
||
kubectl scale deploy -n ingress shturval-ingress-controller-controller --replicas=4
|
||
```
|
||
|
||
### Cilium / MTU
|
||
|
||
```bash
|
||
# Текущий MTU
|
||
kubectl get configmap -n kube-system cilium-config -o jsonpath='{.data.mtu}'
|
||
|
||
# Статус Cilium
|
||
kubectl -n kube-system exec ds/cilium -- cilium-dbg status | grep -i mtu
|
||
```
|
||
|
||
### VIP (kube-vip)
|
||
|
||
VIP кластера: `185.247.187.151`. Раздаётся через kube-vip (ARP) на все 4 ноды.
|
||
|
||
---
|
||
|
||
## Локальная разработка
|
||
|
||
```bash
|
||
cd /home/naeel/nubes/drhider
|
||
|
||
# Установка зависимостей
|
||
pip install -r requirements.txt
|
||
|
||
# Запуск Flask (dev-сервер)
|
||
cd site && python3 app.py
|
||
|
||
# Проверка синтаксиса ВСЕХ файлов
|
||
python3 -c "
|
||
import py_compile, os
|
||
for root, dirs, files in os.walk('.'):
|
||
for f in files:
|
||
if f.endswith('.py'):
|
||
path = os.path.join(root, f)
|
||
py_compile.compile(path, doraise=True)
|
||
print(f'OK: {path}')
|
||
"
|
||
|
||
# Проверка импорта
|
||
python3 -c "from drhider import obfuscate_files, LLMClient; print('OK')"
|
||
```
|
||
|
||
---
|
||
|
||
## Как править код
|
||
|
||
1. Понять что меняем → **описать план**
|
||
2. Получить **«делай»**
|
||
3. Внести изменения
|
||
4. `python3 -c "import py_compile; py_compile.compile('файл.py', doraise=True)"` — КАЖДЫЙ изменённый .py
|
||
5. `python3 -c "from drhider import obfuscate_files, LLMClient"` — проверка импорта
|
||
6. `git add -A && git commit -m "подробно что и зачем" && git push`
|
||
7. Записать в `History/` что сделано
|
||
8. Зайти в UI Штурвала → Redeploy
|
||
|
||
---
|
||
|
||
## Как добавить новый генератор
|
||
|
||
1. Создать `drhider/generators/новый_тип.py` с функцией `generate_xxx(original: str) -> str`
|
||
2. Добавить regex-паттерн в `drhider/config.py` → `ENTITY_PATTERNS`
|
||
3. Добавить импорт и маппинг в `drhider/generators/__init__.py` → `ENTITY_GENERATORS`
|
||
4. Проверить синтаксис → commit → push → Redeploy
|
||
|
||
---
|
||
|
||
## История версий
|
||
|
||
| Версия | Дата | Что |
|
||
|---|---|---|
|
||
| 2.0.0 | 2026-07-12 | Модульный рефакторинг (22 модуля вместо монолита) |
|
||
| 1.0.0 | 2026-07-11 | Начальная версия (monolith drhider.py + Flask) |
|