Host Manager rulează pe jumper ca serviciu Perl local, ascultând numai pe 127.0.0.1:8088. Nginx publică aplicația prin vhost HTTPS pe IP-ul de management 192.168.2.100:443; portul 80 redirecționează către HTTPS.
Vhost implicit:
madagascar.xdev.ro
Instanța curentă este instalată pe jumper în /usr/local/xdev-host-manager și publicată prin nginx. /opt rămâne rezervat pentru aplicații 3rd party/vendor.
Se folosesc doar pachete din distribuție:
perlperl-DBI / perl-DBD-SQLite dacă nu sunt deja disponibilesqlitenginxNu se instalează npm, pip sau CPAN direct pe host.
Dacă nginx nu este instalat pe jumper, se instalează din repo-ul distribuției:
sudo dnf install nginx
/usr/local/xdev-host-manager
config/hosts.yaml
config/local-hosts.tsv
var/host-manager.sqlite
scripts/host_manager.pl
scripts/mdns_host_seed.pl
scripts/sync_local_hosts.sh
deploy/mikrotik/dhcp-lease-push.rsc
/etc/xdev/host-manager.env
/etc/systemd/system/host-manager.service
/etc/systemd/system/host-manager-mdns.service
/etc/nginx/conf.d/madagascar.xdev.ro.conf
Pe jumper:
id -u host-manager >/dev/null 2>&1 || sudo useradd --system --home-dir /usr/local/xdev-host-manager --shell /usr/sbin/nologin host-manager
sudo install -d -o host-manager -g host-manager /usr/local/xdev-host-manager
sudo install -d -m 0750 /etc/xdev
sudo install -m 0644 deploy/jumper/host-manager.service /etc/systemd/system/host-manager.service
sudo install -m 0644 deploy/jumper/host-manager-mdns.service /etc/systemd/system/host-manager-mdns.service
sudo install -m 0644 deploy/jumper/nginx-host-manager.conf /etc/nginx/conf.d/madagascar.xdev.ro.conf
Copiază deploy/jumper/host-manager.env.example la /etc/xdev/host-manager.env și setează secretul TOTP real.
Nginx așteaptă certificatul TLS local CA la /etc/pki/tls/certs/madagascar.xdev.ro.crt și cheia la /etc/pki/tls/private/madagascar.xdev.ro.key.
La instalarea inițială se poate genera automat secretul TOTP. URI-ul de bootstrap rămâne doar pe jumper, root-only:
sudo cat /etc/xdev/host-manager.totp-uri
Validare:
sudo systemctl daemon-reload
sudo systemctl enable --now host-manager
sudo systemctl enable --now host-manager-mdns
sudo nginx -t
sudo systemctl reload nginx
curl -fsS http://127.0.0.1:8088/healthz
curl -k -o /dev/null -w '%{http_code}\n' https://madagascar.xdev.ro/healthz
# trebuie să întoarcă 404; healthcheck-ul public nu este expus prin nginx
Verificări de securitate de bază:
curl -k -o /dev/null -w '%{http_code}\n' -X POST https://madagascar.xdev.ro/api/render/local-hosts-tsv
# trebuie să întoarcă 401 fără sesiune OTP
Vhost-ul trebuie să existe în registrul intern:
madagascar.xdev.ro -> jumper.madagascar.xdev.ro
Nu se adaugă wildcard local. Doar acest nume exact trebuie publicat.
var/host-manager.sqlite este sursa de adevăr pentru registry și Work Orders. La prima pornire, aplicația seed-uiește documentele lipsă din config/hosts.yaml și config/work-orders.yaml; ulterior push-urile de cod nu trebuie să înlocuiască baza runtime.
host-manager-mdns este un listener separat care observă mDNS și scrie direct în tabelul SQLite mdns_observations. Listenerul nu modifică host registry-ul, config/hosts.yaml sau config/local-hosts.tsv. Sync-ul resolverului citește manifestul runtime din SQLite, nu din exportul static.
Lease-urile DHCP de pe routerul 192.168.2.1 sunt colectate prin push HTTP de pe MikroTik către:
POST https://192.168.2.100/api/collect/dhcp-leases
Setează HOST_MANAGER_DHCP_PUSH_TOKEN în /etc/xdev/host-manager.env și același token în deploy/mikrotik/dhcp-lease-push.rsc înainte de importul pe router. Endpoint-ul acceptă headerul X-DHCP-Push-Token sau Authorization: Bearer ... și scrie observații în dhcp_leases.
Scriptul RouterOS folosește lease-script, deci trimite evenimentele noi/modificate. Dacă routerul are deja un lease-script, îmbină manual codul din deploy/mikrotik/dhcp-lease-push.rsc.