platform: modularize api/gui, add docs-tests-web foundation, and refresh root config
This commit is contained in:
34
docs/phase-d/D5_NETNS_RUNTIME_CASE.md
Normal file
34
docs/phase-d/D5_NETNS_RUNTIME_CASE.md
Normal file
@@ -0,0 +1,34 @@
|
||||
# D5: NetNS Runtime Case (Ready)
|
||||
|
||||
Дата: 2026-03-09
|
||||
|
||||
## Что зафиксировано
|
||||
- `SingBox` может работать в отдельном `netns` без влияния на основной VPN-контур.
|
||||
- Для запуска внутри namespace используется адаптивный exec-режим:
|
||||
- default: `nsenter --net=/var/run/netns/<name> -- ...`
|
||||
- fallback: `ip netns exec <name> ...`
|
||||
- Подготовка `netns` (veth/route/NAT) и запуск runtime используют единый механизм выбора exec-mode.
|
||||
- GUI debug toggle (`Debug netns`) изменяет `netns_enabled` через API, делает `provision` и `restart` для активных клиентов.
|
||||
|
||||
## Рефакторинг модулей
|
||||
- Go:
|
||||
- `selective-vpn-api/app/transport_netns.go` — setup/cleanup/NAT/spec.
|
||||
- `selective-vpn-api/app/transport_netns_exec.go` — exec-mode selection (`nsenter|ip`) и wrappers.
|
||||
- GUI:
|
||||
- `selective-vpn-gui/netns_debug.py` — вычисление состояния netns-кнопки и общий toggle pipeline (`patch -> provision -> restart`).
|
||||
- `selective-vpn-gui/vpn_dashboard_qt.py` — только UI-обвязка и вызов helper-модуля.
|
||||
|
||||
## Минимальный runtime-check
|
||||
1. `POST /api/v1/transport/clients/<id>/restart` -> `ok=true`.
|
||||
2. `GET /api/v1/transport/clients/<id>/health` -> `status=up`.
|
||||
3. `systemctl status <unit>` -> `active (running)`.
|
||||
4. `systemctl show <unit> -p ExecStart` -> команда через `nsenter` (или `ip netns exec` при fallback).
|
||||
|
||||
## Полезные конфиг-ключи клиента
|
||||
- `netns_enabled: bool`
|
||||
- `netns_name: string`
|
||||
- `netns_exec_mode: auto|nsenter|ip` (optional)
|
||||
- `netns_nsenter_bin: /usr/bin/nsenter` (optional)
|
||||
- `netns_ip_bin: /sbin/ip` (optional)
|
||||
- `netns_setup_strict: bool` (optional)
|
||||
- `netns_auto_cleanup: bool` (optional)
|
||||
Reference in New Issue
Block a user