docs(infra): app4 + core-bu provisioning, migration plan, verified inventory
- migration-plan-app4-core-bu-2026-09-15.md: 8-phase plan (Nuremberg decision, provider-diversity gap, acceptance criteria, rollback, DNS/Caddy checklist) - core-service-inventory-2026-09-15: verified Core inventory, ~30 customer-facing services (the Aug 15 plan listed 5), 3 DocuSeal instances, TimeTrex Postgres, dead Caddy routes - reference-update-matrix-2026-09-15: 52 artifacts that name a host - fix naming collision: 6 files called the Hetzner box core-bu, the name core-bu now claims; app1-bu = 5.161.225.131, core-bu = 159.195.204.203 (netcup Nuremberg) - correct the false provider-diversity claim (the standby is now netcup too) - supersede app4-migration-plan.md (wrong region reported, silent on core-bu)
This commit is contained in:
@@ -0,0 +1,288 @@
|
||||
{
|
||||
"meta": {
|
||||
"host": "Core (152.53.192.33)",
|
||||
"spec": "netcup RS 2000, 8 vCPU / 15GB RAM / 503GB disk, Debian 13, Manassas VA",
|
||||
"scan_date": "2026-09-15",
|
||||
"method": "read-only commands executed directly on Core; no service started/stopped/restarted; hermes-gateway left untouched",
|
||||
"counts": {
|
||||
"docker_containers_total": 13,
|
||||
"docker_containers_running": 13,
|
||||
"systemd_services_running": 57,
|
||||
"caddy_site_blocks": 49,
|
||||
"postgres_databases_excl_templates": 1,
|
||||
"hermes_cron_jobs": 87,
|
||||
"root_system_crontab_entries": 12,
|
||||
"listening_tcp_sockets": 66,
|
||||
"listening_udp_sockets": 14,
|
||||
"tls_certs_acme": 47,
|
||||
"tls_certs_self_signed_internal": 7
|
||||
}
|
||||
},
|
||||
"services": [
|
||||
{"name": "auth-api", "type": "systemd", "purpose": "ITPP centralized Auth API / SSO", "ports": ["127.0.0.1:8500"], "data_paths": [{"path": "/root/projects/auth/auth.db", "size": "32M (dir)"}], "config_paths": ["/root/projects/auth/.env"], "hostnames": ["auth.itpropartner.com"], "hermes_related": false, "customer_facing": true, "backup_coverage": "yes - auth-api-backup.sh (3:15/4:35 AM)", "migration_classification": "needs-decision"},
|
||||
{"name": "diglocate-api", "type": "systemd", "purpose": "811 locate ticket management API", "ports": ["127.0.0.1:8000"], "data_paths": [{"path": "/root/projects/diglocate", "size": "118M"}], "config_paths": ["none found"], "hostnames": ["dig.iamgmb.com"], "hermes_related": false, "customer_facing": true, "backup_coverage": "no", "migration_classification": "move-to-app4"},
|
||||
{"name": "dre-mcp", "type": "systemd", "purpose": "DRE MCP server (Hermes tool for DRE data)", "ports": [], "data_paths": [{"path": "/root/docker/dre-mcp", "size": "171M"}], "config_paths": ["/root/.hermes/.env"], "hostnames": [], "hermes_related": true, "customer_facing": true, "backup_coverage": "no", "migration_classification": "needs-decision"},
|
||||
{"name": "dre-portal", "type": "systemd", "purpose": "DRE customer portal API (FastAPI/uvicorn)", "ports": ["127.0.0.1:8093"], "data_paths": [{"path": "/opt/dre-portal/data/dre.db", "size": "110M (dir)"}], "config_paths": ["/opt/dre-portal/.env"], "hostnames": ["internal.debtrecoveryexperts.com", "my.debtrecoveryexperts.com"], "hermes_related": false, "customer_facing": true, "backup_coverage": "no", "migration_classification": "move-to-app4"},
|
||||
{"name": "ft360-mcp", "type": "systemd", "purpose": "FleetTracker360 MCP server", "ports": [], "data_paths": [{"path": "/root/docker/ft360-mcp", "size": "60K"}], "config_paths": ["none found"], "hostnames": [], "hermes_related": true, "customer_facing": true, "backup_coverage": "partial - stats/export scripts only, no DB backup found", "migration_classification": "needs-decision"},
|
||||
{"name": "gitea-runner", "type": "systemd", "purpose": "Gitea Actions Runner (core)", "ports": ["0.0.0.0:35849"], "data_paths": [{"path": "/var/lib/gitea-runner", "size": "not measured"}], "config_paths": ["none found"], "hostnames": [], "hermes_related": false, "customer_facing": false, "backup_coverage": "no", "migration_classification": "stays-on-Core"},
|
||||
{"name": "hermes-assistant", "type": "systemd", "purpose": "Hermes Assistant PWA backend", "ports": ["127.0.0.1:8082"], "data_paths": [{"path": "/root/hermes-assistant", "size": "169M"}], "config_paths": ["none found"], "hostnames": [], "hermes_related": true, "customer_facing": false, "backup_coverage": "unknown", "migration_classification": "stays-on-Core"},
|
||||
{"name": "hermes-browser", "type": "systemd", "purpose": "Headless Chromium (CDP browser) for Hermes", "ports": ["127.0.0.1:9222"], "data_paths": [], "config_paths": [], "hostnames": [], "hermes_related": true, "customer_facing": false, "backup_coverage": "n/a - stateless", "migration_classification": "stays-on-Core"},
|
||||
{"name": "hermes-socat-8787", "type": "systemd", "purpose": "Hermes API port forward (8787 -> 8642) for HermesX mobile", "ports": ["0.0.0.0:8787"], "data_paths": [], "config_paths": [], "hostnames": [], "hermes_related": true, "customer_facing": false, "backup_coverage": "n/a", "migration_classification": "stays-on-Core"},
|
||||
{"name": "hermes-voice", "type": "systemd", "purpose": "Hermes Voice (SvelteKit frontend)", "ports": ["127.0.0.1:4331"], "data_paths": [{"path": "/opt/hermes-voice", "size": "123M"}], "config_paths": ["/opt/hermes-voice/.env"], "hostnames": ["voice.itpropartner.com"], "hermes_related": true, "customer_facing": true, "backup_coverage": "unknown", "migration_classification": "needs-decision"},
|
||||
{"name": "host-metrics-exporter", "type": "systemd", "purpose": "systemd/Docker/disk/memory metrics exporter", "ports": [], "data_paths": [], "config_paths": [], "hostnames": [], "hermes_related": false, "customer_facing": false, "backup_coverage": "n/a", "migration_classification": "stays-on-Core"},
|
||||
{"name": "hotnow-api", "type": "systemd", "purpose": "HotNow API backend", "ports": ["127.0.0.1:8001"], "data_paths": [{"path": "/root/hotnow-api", "size": "66M"}, {"path": "postgresql db hotnow", "size": "16MB"}], "config_paths": ["/root/hotnow-api/.env"], "hostnames": ["api.hotnow.io"], "hermes_related": false, "customer_facing": true, "backup_coverage": "no", "migration_classification": "move-to-app4"},
|
||||
{"name": "intelsight-api", "type": "systemd", "purpose": "IntelSight API service", "ports": ["127.0.0.1:8099"], "data_paths": [{"path": "/root/intelsight-api/intelsight.db", "size": "64M (dir)"}], "config_paths": ["none found"], "hostnames": ["my.intelsight.io"], "hermes_related": false, "customer_facing": true, "backup_coverage": "no", "migration_classification": "move-to-app4"},
|
||||
{"name": "node_exporter", "type": "systemd", "purpose": "Prometheus Node Exporter", "ports": ["0.0.0.0:9100"], "data_paths": [], "config_paths": [], "hostnames": [], "hermes_related": false, "customer_facing": false, "backup_coverage": "n/a", "migration_classification": "stays-on-Core"},
|
||||
{"name": "ops-portal", "type": "systemd", "purpose": "ITPP Ops Portal backend", "ports": ["127.0.0.1:8090"], "data_paths": [{"path": "/opt/ops-portal/ops.db", "size": "148M (dir)"}], "config_paths": ["/root/.hermes/.env"], "hostnames": ["ops.itpropartner.com"], "hermes_related": false, "customer_facing": true, "backup_coverage": "unknown - not explicitly listed in backup-plan.md as separate from core-services-backup.sh", "migration_classification": "move-to-app4"},
|
||||
{"name": "osint-api", "type": "systemd", "purpose": "OSINT Tool API", "ports": ["127.0.0.1:8100"], "data_paths": [{"path": "/opt/osint-api", "size": "323M"}], "config_paths": ["/root/.hermes/.env"], "hostnames": ["ops.itpropartner.com (/api/search/*)"], "hermes_related": true, "customer_facing": true, "backup_coverage": "no", "migration_classification": "needs-decision"},
|
||||
{"name": "osint-person", "type": "systemd", "purpose": "OSINT Person MCP server", "ports": [], "data_paths": [{"path": "/root/docker/osint-person-mcp", "size": "314M"}], "config_paths": ["/root/.hermes/.env"], "hostnames": [], "hermes_related": true, "customer_facing": false, "backup_coverage": "no", "migration_classification": "stays-on-Core"},
|
||||
{"name": "outlook-upload", "type": "systemd", "purpose": "Outlook folder upload receiver (chunked/resumable)", "ports": ["127.0.0.1:8240"], "data_paths": [{"path": "/root/upload-staging", "size": "not measured"}], "config_paths": ["none"], "hostnames": ["core.itpropartner.com (/o-.../*)"], "hermes_related": false, "customer_facing": true, "backup_coverage": "no", "migration_classification": "needs-decision"},
|
||||
{"name": "pipeline-api", "type": "systemd", "purpose": "Project Pipeline API - ITPP customer portal backend", "ports": ["127.0.0.1:8200"], "data_paths": [{"path": "/root/projects/pipeline/pipeline.db", "size": "30M (dir)"}], "config_paths": ["none found"], "hostnames": ["my.itpropartner.com (/api/pipeline/*)"], "hermes_related": false, "customer_facing": true, "backup_coverage": "no", "migration_classification": "move-to-app4"},
|
||||
{"name": "pry", "type": "systemd", "purpose": "PRY unified OSINT search backend", "ports": ["127.0.0.1:8905"], "data_paths": [{"path": "/root/docker/pry", "size": "66M"}], "config_paths": ["/root/.hermes/.env"], "hostnames": ["pry.iamgmb.com"], "hermes_related": true, "customer_facing": true, "backup_coverage": "no", "migration_classification": "needs-decision"},
|
||||
{"name": "pta-registration", "type": "systemd", "purpose": "TIMAPTA Membership Registration", "ports": ["127.0.0.1:8114"], "data_paths": [{"path": "/opt/pta-registration/pta.db", "size": "53M (dir)"}], "config_paths": ["none"], "hostnames": ["register.timapta.org", "pta.iamgmb.com"], "hermes_related": false, "customer_facing": true, "backup_coverage": "no", "migration_classification": "move-to-app4"},
|
||||
{"name": "rally", "type": "systemd", "purpose": "Rally Family Calendar", "ports": ["127.0.0.1:8105"], "data_paths": [{"path": "/opt/rally/data/rally.db", "size": "within 294M dir"}], "config_paths": ["none found"], "hostnames": ["rally.iamgmb.com"], "hermes_related": false, "customer_facing": true, "backup_coverage": "partial - debug/sync scripts exist, no scheduled DB backup confirmed", "migration_classification": "move-to-app4"},
|
||||
{"name": "seemytrip", "type": "systemd", "purpose": "SeeMyTrip collaborative trip media pipeline", "ports": ["127.0.0.1:8113"], "data_paths": [{"path": "/opt/seemytrip/data/seemytrip.db", "size": "within 212M dir"}], "config_paths": ["none"], "hostnames": ["seemytrip.iamgmb.com"], "hermes_related": false, "customer_facing": true, "backup_coverage": "no", "migration_classification": "move-to-app4"},
|
||||
{"name": "shark-game", "type": "systemd", "purpose": "Shark Attack Fantasy Game backend", "ports": ["0.0.0.0:8083"], "data_paths": [{"path": "/root/shark-game/backend/game.db", "size": "within 127M dir"}], "config_paths": ["none"], "hostnames": ["shark.iamgmb.com"], "hermes_related": false, "customer_facing": true, "backup_coverage": "no", "migration_classification": "move-to-app4"},
|
||||
{"name": "shopping-cart", "type": "systemd", "purpose": "Shopping Cart Builder", "ports": ["127.0.0.1:8101"], "data_paths": [{"path": "/opt/shopping-cart", "size": "147M"}], "config_paths": ["none"], "hostnames": ["shopping.iamgmb.com"], "hermes_related": false, "customer_facing": true, "backup_coverage": "no", "migration_classification": "move-to-app4"},
|
||||
{"name": "snmp-metrics", "type": "systemd", "purpose": "SNMP Metrics HTTP Server", "ports": ["0.0.0.0:8105"], "data_paths": [], "config_paths": [], "hostnames": [], "hermes_related": false, "customer_facing": false, "backup_coverage": "n/a", "migration_classification": "stays-on-Core"},
|
||||
{"name": "super-search", "type": "systemd", "purpose": "Super Search MCP Server (web_search/web_extract for Hermes)", "ports": ["0.0.0.0:8899"], "data_paths": [{"path": "/root/docker/super-search", "size": "1.1G"}], "config_paths": ["/root/.hermes/.env"], "hostnames": [], "hermes_related": true, "customer_facing": false, "backup_coverage": "unknown", "migration_classification": "stays-on-Core"},
|
||||
{"name": "survey-registration", "type": "systemd", "purpose": "TIMA Location Survey", "ports": ["127.0.0.1:8115"], "data_paths": [{"path": "/opt/pta-survey/survey.db", "size": "50M (dir)"}], "config_paths": ["none"], "hostnames": ["survey.iamgmb.com"], "hermes_related": false, "customer_facing": true, "backup_coverage": "no", "migration_classification": "move-to-app4"},
|
||||
{"name": "transitpin", "type": "systemd", "purpose": "TransitPin WebSocket Relay", "ports": ["127.0.0.1:8210"], "data_paths": [{"path": "/opt/transitpin", "size": "496K"}], "config_paths": ["none"], "hostnames": ["status.itpropartner.com (/api/msg*)", "shopping.iamgmb.com (/api/msg*)"], "hermes_related": false, "customer_facing": true, "backup_coverage": "yes - transitpin-backup.sh (app3-associated, verify covers Core path)", "migration_classification": "move-to-app4"},
|
||||
{"name": "twilio-mcp", "type": "systemd", "purpose": "Twilio MCP Server", "ports": [], "data_paths": [{"path": "/root/docker/twilio-mcp", "size": "171M"}], "config_paths": ["/root/.hermes/.env"], "hostnames": [], "hermes_related": true, "customer_facing": true, "backup_coverage": "unknown", "migration_classification": "stays-on-Core"},
|
||||
{"name": "verdicttank-api", "type": "systemd", "purpose": "VerdictTank API - form handler and PDF generation", "ports": ["127.0.0.1:8201"], "data_paths": [{"path": "/opt/verdicttank/users.db", "size": "within 15M dir"}], "config_paths": ["/etc/verdicttank.env"], "hostnames": ["verdicttank.com", "www.verdicttank.com", "ops.verdicttank.com", "core.itpropartner.com (/api/verdicttank/*)"], "hermes_related": false, "customer_facing": true, "backup_coverage": "partial - collect scripts exist, no DB backup confirmed", "migration_classification": "move-to-app4"},
|
||||
{"name": "verdicttank-worker", "type": "systemd", "purpose": "VerdictTank review worker - polls queue, runs multi-model panel", "ports": [], "data_paths": [{"path": "/opt/verdicttank", "size": "15M"}], "config_paths": ["/etc/verdicttank.env"], "hostnames": [], "hermes_related": false, "customer_facing": true, "backup_coverage": "no", "migration_classification": "move-to-app4"},
|
||||
{"name": "voice-agent-stt", "type": "systemd", "purpose": "Voice Agent STT (faster-whisper)", "ports": ["127.0.0.1:9000"], "data_paths": [{"path": "/opt/voice-agent", "size": "470M"}], "config_paths": ["none"], "hostnames": [], "hermes_related": false, "customer_facing": true, "backup_coverage": "no", "migration_classification": "needs-decision"},
|
||||
{"name": "voice-agent", "type": "systemd", "purpose": "Voice Agent (open-source stack)", "ports": ["127.0.0.1:9101"], "data_paths": [{"path": "/opt/voice-agent", "size": "470M"}], "config_paths": ["/opt/voice-agent/.env"], "hostnames": ["voice-open.itpropartner.com"], "hermes_related": false, "customer_facing": true, "backup_coverage": "no", "migration_classification": "move-to-app4"},
|
||||
{"name": "wazuh-agent", "type": "systemd", "purpose": "Wazuh SIEM/XDR agent", "ports": [], "data_paths": [], "config_paths": [], "hostnames": [], "hermes_related": false, "customer_facing": false, "backup_coverage": "n/a", "migration_classification": "stays-on-Core"},
|
||||
{"name": "caddy", "type": "systemd", "purpose": "Reverse proxy for all Core-hosted domains", "ports": ["152.53.192.33:80", "152.53.192.33:443"], "data_paths": [{"path": "/var/lib/caddy", "size": "not separately measured"}], "config_paths": ["/etc/caddy/Caddyfile"], "hostnames": ["all 49 site blocks - see caddy_sites"], "hermes_related": false, "customer_facing": true, "backup_coverage": "unknown - Caddyfile not confirmed in root-essentials-backup.sh path list", "migration_classification": "stays-on-Core (trim customer routes post-cutover per plan)"},
|
||||
{"name": "postgresql@17-main", "type": "systemd", "purpose": "Host PostgreSQL cluster", "ports": ["127.0.0.1:5432", "[::1]:5432"], "data_paths": [{"path": "/var/lib/postgresql", "size": "71M"}], "config_paths": [], "hostnames": [], "hermes_related": false, "customer_facing": true, "backup_coverage": "no dedicated pg_dump script found for hotnow db", "migration_classification": "needs-decision (only db is hotnow, which is moving)"},
|
||||
{"name": "redis-server", "type": "systemd", "purpose": "Redis cache/keystore", "ports": ["127.0.0.1:6379", "[::1]:6379"], "data_paths": [{"path": "/var/lib/redis", "size": "8.0K"}], "config_paths": [], "hostnames": [], "hermes_related": false, "customer_facing": true, "backup_coverage": "no", "migration_classification": "needs-decision (HotNow is confirmed consumer via DB1)"},
|
||||
{"name": "crawl4ai", "type": "systemd", "purpose": "Crawl4AI extraction microservice", "ports": ["8910 (configured, service disabled/inactive)"], "data_paths": [], "config_paths": [], "hostnames": [], "hermes_related": true, "customer_facing": false, "backup_coverage": "n/a - inactive", "migration_classification": "needs-decision (disabled, unclear if still needed)"},
|
||||
{"name": "hermes-control-deck", "type": "systemd", "purpose": "Hermes Control Deck Backend API Server", "ports": ["127.0.0.1:8200 (configured, service disabled/inactive)"], "data_paths": [], "config_paths": [], "hostnames": [], "hermes_related": true, "customer_facing": false, "backup_coverage": "n/a - inactive", "migration_classification": "needs-decision (port 8200 conflicts with active pipeline-api)"},
|
||||
{"name": "hermes-gateway", "type": "systemd (user unit)", "purpose": "Hermes Agent Gateway - messaging platform integration", "ports": ["0.0.0.0:8642"], "data_paths": [], "config_paths": ["/root/.hermes/config.yaml"], "hostnames": [], "hermes_related": true, "customer_facing": false, "backup_coverage": "yes - hermes-backup.sh + hermes-live-sync", "migration_classification": "stays-on-Core (untouched during this audit)"}
|
||||
],
|
||||
"containers": [
|
||||
{"name": "docuseal", "image": "docuseal/docuseal:latest", "status": "Up 2 hours", "ports": ["127.0.0.1:8091->3000/tcp"], "restart_policy": "always", "mounts": [{"type": "bind", "source": "/root/docker/docuseal/data", "dest": "/data"}], "compose_file": "/root/docker/docuseal/docker-compose.yml", "hostnames": ["sign.itpropartner.com"], "migration_classification": "move-to-app4"},
|
||||
{"name": "docuseal-dre", "image": "docuseal/docuseal:latest", "status": "Up 2 hours", "ports": ["127.0.0.1:8094->3000/tcp"], "restart_policy": "always", "mounts": [{"type": "bind", "source": "/root/docker/docuseal-dre/data", "dest": "/data"}], "compose_file": "/root/docker/docuseal-dre/docker-compose.yml", "hostnames": ["sign.debtrecoveryexperts.com"], "migration_classification": "move-to-app4"},
|
||||
{"name": "docuseal-modelortho", "image": "docuseal/docuseal:latest", "status": "Up 2 hours", "ports": ["127.0.0.1:8092->3000/tcp"], "restart_policy": "always", "mounts": [{"type": "bind", "source": "/root/docker/docuseal-modelortho/data", "dest": "/data"}], "compose_file": "/root/docker/docuseal-modelortho/docker-compose.yml", "hostnames": ["sign.modelortho.com"], "migration_classification": "move-to-app4"},
|
||||
{"name": "timetrex", "image": "skewll/timetrex:latest", "status": "Up 2 hours", "ports": ["127.0.0.1:8085->80/tcp"], "restart_policy": "unless-stopped", "mounts": [{"type": "bind", "source": "/root/docker/timetrex/storage", "dest": "/storage"}, {"type": "bind", "source": "/root/docker/timetrex/logs", "dest": "/logs"}, {"type": "bind", "source": "/root/docker/timetrex/database", "dest": "/database"}, {"type": "bind", "source": "/root/docker/timetrex/timetrex.ini.php", "dest": "/var/www/html/timetrex/timetrex.ini.php"}], "compose_file": "/root/docker/timetrex/docker-compose.yml", "hostnames": ["timetrex.iamgmb.com"], "migration_classification": "move-to-app4", "note": "runs its own internal PostgreSQL 16 instance in /database, separate from host PG17"},
|
||||
{"name": "microbin", "image": "danielszabo99/microbin:latest", "status": "Up 2 hours", "ports": ["127.0.0.1:8260->8080/tcp"], "restart_policy": "unless-stopped", "mounts": [{"type": "bind", "source": "/opt/microbin/data", "dest": "/app/pasta_data"}], "compose_file": "/opt/microbin/docker-compose.yml", "hostnames": ["share.itpropartner.com"], "migration_classification": "move-to-app4"},
|
||||
{"name": "uptime-kuma", "image": "louislam/uptime-kuma:latest", "status": "Up 2 hours (healthy)", "ports": ["0.0.0.0:3001->3001/tcp"], "restart_policy": "unless-stopped", "mounts": [{"type": "bind", "source": "/root/docker/uptime-kuma/data", "dest": "/app/data"}], "compose_file": "/root/docker/uptime-kuma/docker-compose.yml", "hostnames": ["uptimekuma.itpropartner.com"], "migration_classification": "move-to-app4"},
|
||||
{"name": "grafana", "image": "grafana/grafana:11.4.0", "status": "Up 2 hours", "ports": ["3002 (container-internal, exposed on all host interfaces)"], "restart_policy": "unless-stopped", "mounts": [{"type": "volume", "source": "grafana_data_final", "dest": "/var/lib/grafana"}], "compose_file": "not found", "hostnames": [], "migration_classification": "stays-on-Core"},
|
||||
{"name": "prometheus", "image": "prom/prometheus:latest", "status": "Up 2 hours", "ports": ["9090 (container)"], "restart_policy": "unless-stopped", "mounts": [{"type": "bind", "source": "/root/docker/monitoring/prometheus/prometheus.yml", "dest": "/etc/prometheus/prometheus.yml"}, {"type": "volume", "source": "prometheus_data", "dest": "/prometheus"}, {"type": "bind", "source": "/var/lib/prometheus/textfile", "dest": "/var/lib/prometheus/textfile"}], "compose_file": "not directly located", "hostnames": [], "migration_classification": "stays-on-Core"},
|
||||
{"name": "telegraf", "image": "telegraf:latest", "status": "Up 2 hours", "ports": [], "restart_policy": "unless-stopped", "mounts": [{"type": "bind", "source": "/root/docker/monitoring/telegraf/telegraf.conf", "dest": "/etc/telegraf/telegraf.conf"}], "compose_file": "not directly located", "hostnames": [], "migration_classification": "stays-on-Core"},
|
||||
{"name": "mikrotik-exporter", "image": "swoga/mikrotik-exporter:latest", "status": "Up 2 hours", "ports": ["127.0.0.1:9436->9436/tcp"], "restart_policy": "unless-stopped", "mounts": [{"type": "bind", "source": "/root/docker/monitoring/mikrotik-exporter/config.yml", "dest": "/etc/mikrotik-exporter/config.yml"}], "compose_file": "not directly located", "hostnames": [], "migration_classification": "stays-on-Core"},
|
||||
{"name": "searxng", "image": "searxng/searxng:latest", "status": "Up 2 hours", "ports": ["127.0.0.1:8888->8080/tcp"], "restart_policy": "always", "mounts": [{"type": "bind", "source": "/root/docker/searxng/searxng-data", "dest": "/etc/searxng"}, {"type": "bind", "source": "/root/docker/searxng/searxng-themes", "dest": "/usr/local/searxng/searx/static/themes"}], "compose_file": "/root/docker/searxng/docker-compose.yml", "hostnames": [], "migration_classification": "stays-on-Core", "note": "backup-plan.md incorrectly lists this as removed/stale; it is running"},
|
||||
{"name": "browserless", "image": "browserless/chrome:latest", "status": "Up 2 hours", "ports": ["0.0.0.0:3000->3000/tcp"], "restart_policy": "always", "mounts": [], "compose_file": "not found", "hostnames": [], "migration_classification": "stays-on-Core"},
|
||||
{"name": "camofox-browser", "image": "camofox-browser:dataimpulse", "status": "Up 2 hours", "ports": ["0.0.0.0:9377->9377/tcp"], "restart_policy": "unless-stopped", "mounts": [], "compose_file": "not found", "hostnames": [], "migration_classification": "stays-on-Core"}
|
||||
],
|
||||
"volumes": [
|
||||
{"name": "grafana_data_final", "size": "14.65MB", "used_by": "grafana", "status": "active"},
|
||||
{"name": "grafana_data", "size": "50.13MB", "used_by": "none (orphaned, older grafana volume)", "status": "orphaned"},
|
||||
{"name": "grafana_data_v3", "size": "14.59MB", "used_by": "none (orphaned)", "status": "orphaned"},
|
||||
{"name": "prometheus_data", "size": "118.9MB", "used_by": "prometheus", "status": "active"},
|
||||
{"name": "twenty_db-data", "size": "71.46MB", "used_by": "none (Twenty CRM migrated to App1, orphaned on Core)", "status": "orphaned"},
|
||||
{"name": "twenty_server-local-data", "size": "0B", "used_by": "none", "status": "orphaned"},
|
||||
{"name": "act-toolcache", "size": "0B", "used_by": "gitea-runner (possibly)", "status": "unclear"}
|
||||
],
|
||||
"ports": [
|
||||
{"port": 443, "bind": "152.53.192.33", "process": "caddy", "protocol": "tcp"},
|
||||
{"port": 80, "bind": "152.53.192.33", "process": "caddy", "protocol": "tcp"},
|
||||
{"port": 443, "bind": "100.71.155.7 (tailscale)", "process": "tailscaled", "protocol": "tcp"},
|
||||
{"port": 22, "bind": "0.0.0.0 / [::]", "process": "sshd", "protocol": "tcp"},
|
||||
{"port": 5432, "bind": "127.0.0.1 / [::1]", "process": "postgres", "protocol": "tcp"},
|
||||
{"port": 6379, "bind": "127.0.0.1 / [::1]", "process": "redis-server", "protocol": "tcp"},
|
||||
{"port": 3000, "bind": "0.0.0.0 / [::]", "process": "docker-proxy (browserless)", "protocol": "tcp"},
|
||||
{"port": 3001, "bind": "0.0.0.0 / [::]", "process": "docker-proxy (uptime-kuma)", "protocol": "tcp"},
|
||||
{"port": 3002, "bind": "* (all interfaces)", "process": "grafana", "protocol": "tcp"},
|
||||
{"port": 9377, "bind": "0.0.0.0 / [::]", "process": "docker-proxy (camofox)", "protocol": "tcp"},
|
||||
{"port": 8000, "bind": "127.0.0.1", "process": "uvicorn (diglocate-api)", "protocol": "tcp"},
|
||||
{"port": 8001, "bind": "127.0.0.1", "process": "uvicorn (hotnow-api)", "protocol": "tcp"},
|
||||
{"port": 8082, "bind": "127.0.0.1", "process": "python3 (hermes-assistant)", "protocol": "tcp"},
|
||||
{"port": 8083, "bind": "0.0.0.0", "process": "python3 (shark-game)", "protocol": "tcp"},
|
||||
{"port": 8085, "bind": "127.0.0.1", "process": "docker-proxy (timetrex)", "protocol": "tcp"},
|
||||
{"port": 8090, "bind": "127.0.0.1", "process": "uvicorn (ops-portal)", "protocol": "tcp"},
|
||||
{"port": 8091, "bind": "127.0.0.1", "process": "docker-proxy (docuseal)", "protocol": "tcp"},
|
||||
{"port": 8092, "bind": "127.0.0.1", "process": "docker-proxy (docuseal-modelortho)", "protocol": "tcp"},
|
||||
{"port": 8093, "bind": "127.0.0.1", "process": "uvicorn (dre-portal)", "protocol": "tcp"},
|
||||
{"port": 8094, "bind": "127.0.0.1", "process": "docker-proxy (docuseal-dre)", "protocol": "tcp"},
|
||||
{"port": 8099, "bind": "0.0.0.0", "process": "python3 (intelsight-api)", "protocol": "tcp"},
|
||||
{"port": 8100, "bind": "127.0.0.1", "process": "uvicorn (osint-api)", "protocol": "tcp"},
|
||||
{"port": 8101, "bind": "127.0.0.1", "process": "uvicorn (shopping-cart)", "protocol": "tcp"},
|
||||
{"port": 8105, "bind": "0.0.0.0", "process": "python (rally) / snmp-metrics collision note", "protocol": "tcp"},
|
||||
{"port": 8113, "bind": "127.0.0.1", "process": "uvicorn (seemytrip)", "protocol": "tcp"},
|
||||
{"port": 8114, "bind": "127.0.0.1", "process": "uvicorn (pta-registration)", "protocol": "tcp"},
|
||||
{"port": 8115, "bind": "127.0.0.1", "process": "uvicorn (survey-registration)", "protocol": "tcp"},
|
||||
{"port": 8200, "bind": "127.0.0.1", "process": "python (pipeline-api)", "protocol": "tcp"},
|
||||
{"port": 8201, "bind": "127.0.0.1", "process": "python3 (verdicttank-api)", "protocol": "tcp"},
|
||||
{"port": 8210, "bind": "127.0.0.1", "process": "node (transitpin)", "protocol": "tcp"},
|
||||
{"port": 8240, "bind": "127.0.0.1", "process": "python3 (outlook-upload)", "protocol": "tcp"},
|
||||
{"port": 8260, "bind": "127.0.0.1", "process": "docker-proxy (microbin)", "protocol": "tcp"},
|
||||
{"port": 8500, "bind": "127.0.0.1", "process": "uvicorn (auth-api)", "protocol": "tcp"},
|
||||
{"port": 8787, "bind": "0.0.0.0", "process": "socat (hermes forward)", "protocol": "tcp"},
|
||||
{"port": 8642, "bind": "0.0.0.0", "process": "hermes (gateway internal)", "protocol": "tcp"},
|
||||
{"port": 8888, "bind": "127.0.0.1", "process": "docker-proxy (searxng)", "protocol": "tcp"},
|
||||
{"port": 8899, "bind": "0.0.0.0", "process": "python3 (super-search MCP)", "protocol": "tcp"},
|
||||
{"port": 8900, "bind": "127.0.0.1", "process": "python3", "protocol": "tcp"},
|
||||
{"port": 8901, "bind": "127.0.0.1", "process": "python3", "protocol": "tcp"},
|
||||
{"port": 8902, "bind": "127.0.0.1", "process": "python3", "protocol": "tcp"},
|
||||
{"port": 8903, "bind": "127.0.0.1", "process": "python3", "protocol": "tcp"},
|
||||
{"port": 8905, "bind": "127.0.0.1", "process": "python (pry)", "protocol": "tcp"},
|
||||
{"port": 9000, "bind": "127.0.0.1", "process": "uvicorn (voice-agent-stt)", "protocol": "tcp"},
|
||||
{"port": 9090, "bind": "*", "process": "prometheus", "protocol": "tcp"},
|
||||
{"port": 9100, "bind": "*", "process": "node_exporter", "protocol": "tcp"},
|
||||
{"port": 9101, "bind": "127.0.0.1", "process": "uvicorn (voice-agent)", "protocol": "tcp"},
|
||||
{"port": 9222, "bind": "127.0.0.1", "process": "chrome (hermes-browser CDP)", "protocol": "tcp"},
|
||||
{"port": 9273, "bind": "*", "process": "telegraf", "protocol": "tcp"},
|
||||
{"port": 9274, "bind": "127.0.0.1", "process": "python3", "protocol": "tcp"},
|
||||
{"port": 9275, "bind": "127.0.0.1", "process": "python3", "protocol": "tcp"},
|
||||
{"port": 9436, "bind": "127.0.0.1", "process": "docker-proxy (mikrotik-exporter)", "protocol": "tcp"},
|
||||
{"port": 25, "bind": "127.0.0.1 / [::1]", "process": "exim4", "protocol": "tcp"},
|
||||
{"port": 500, "bind": "0.0.0.0 / [::]", "process": "charon (strongswan)", "protocol": "udp"},
|
||||
{"port": 4500, "bind": "0.0.0.0 / [::]", "process": "charon (strongswan)", "protocol": "udp"},
|
||||
{"port": 1701, "bind": "0.0.0.0", "process": "xl2tpd", "protocol": "udp"},
|
||||
{"port": 51821, "bind": "0.0.0.0 / [::]", "process": "unowned (WireGuard per UFW comment)", "protocol": "udp"},
|
||||
{"port": 41641, "bind": "0.0.0.0 / [::]", "process": "tailscaled", "protocol": "udp"},
|
||||
{"port": 5353, "bind": "0.0.0.0 / [::]", "process": "avahi-daemon", "protocol": "udp"}
|
||||
],
|
||||
"caddy_sites": [
|
||||
{"hostname": "core.itpropartner.com", "backend": ["127.0.0.1:8240", "127.0.0.1:8201", "static /var/www"], "tls": "acme, expires 2026-12-05"},
|
||||
{"hostname": "sign.itpropartner.com", "backend": ["127.0.0.1:8091"], "tls": "acme, expires 2026-12-06"},
|
||||
{"hostname": "sign.modelortho.com", "backend": ["127.0.0.1:8092"], "tls": "acme, expires 2026-11-20"},
|
||||
{"hostname": "sign.debtrecoveryexperts.com", "backend": ["127.0.0.1:8094"], "tls": "acme, expires 2026-11-21"},
|
||||
{"hostname": "ops.itpropartner.com", "backend": ["127.0.0.1:8090", "127.0.0.1:8100", "static"], "tls": "acme, expires 2026-12-06"},
|
||||
{"hostname": "shark.iamgmb.com", "backend": ["127.0.0.1:8083"], "tls": "acme, expires 2026-12-06"},
|
||||
{"hostname": "internal.debtrecoveryexperts.com", "backend": ["127.0.0.1:8093", "static", "basic_auth protected"], "tls": "acme, expires 2026-12-06"},
|
||||
{"hostname": "portal.debtrecoveryexperts.com", "backend": ["redirect to my.debtrecoveryexperts.com/start"], "tls": "acme, expires 2026-12-06"},
|
||||
{"hostname": "pay.debtrecoveryexperts.com", "backend": ["static"], "tls": "acme, expires 2026-10-24"},
|
||||
{"hostname": "my.debtrecoveryexperts.com", "backend": ["127.0.0.1:8093", "static"], "tls": "acme, expires 2026-11-20"},
|
||||
{"hostname": "crm.debtrecoveryexperts.com", "backend": ["localhost:3003 - NOTHING LISTENING"], "tls": "acme, expires 2026-12-06", "note": "dead backend"},
|
||||
{"hostname": "dig.iamgmb.com", "backend": ["127.0.0.1:8000", "static"], "tls": "acme, expires 2026-10-26"},
|
||||
{"hostname": "uptimekuma.itpropartner.com", "backend": ["localhost:3001"], "tls": "acme, expires 2026-12-11"},
|
||||
{"hostname": "gps.fleettracker360.com", "backend": ["152.53.39.202:8082 (App2, remote)"], "tls": "acme, expires 2026-12-13"},
|
||||
{"hostname": "my.itpropartner.com", "backend": ["152.53.241.111:8090 (App3, remote)", "127.0.0.1:8200", "static"], "tls": "acme, expires 2026-10-15"},
|
||||
{"hostname": "status.itpropartner.com", "backend": ["127.0.0.1:8210", "127.0.0.1:3001", "static"], "tls": "acme, expires 2026-10-16"},
|
||||
{"hostname": "track.fleettracker360.com", "backend": ["152.53.39.202:5055 (App2, remote)"], "tls": "http only, no TLS block"},
|
||||
{"hostname": "hear.fleettracker360.com", "backend": ["static"], "tls": "acme, expires 2026-10-17"},
|
||||
{"hostname": "voice.itpropartner.com", "backend": ["127.0.0.1:4331"], "tls": "acme, expires 2026-10-24"},
|
||||
{"hostname": "voice-open.itpropartner.com", "backend": ["127.0.0.1:9101"], "tls": "acme, expires 2026-10-24"},
|
||||
{"hostname": "auth.itpropartner.com", "backend": ["127.0.0.1:8500", "static"], "tls": "acme, expires 2026-10-30"},
|
||||
{"hostname": "my.intelsight.io", "backend": ["127.0.0.1:8099", "static"], "tls": "acme, expires 2026-10-24"},
|
||||
{"hostname": "intelsight.io", "backend": ["static"], "tls": "acme, expires 2026-10-28"},
|
||||
{"hostname": "intelsight.iamgmb.com", "backend": ["static"], "tls": "acme, expires 2026-10-26"},
|
||||
{"hostname": "schedule.iamgmb.com", "backend": ["static"], "tls": "acme (not individually captured)"},
|
||||
{"hostname": "seemytrip.iamgmb.com", "backend": ["127.0.0.1:8113", "static"], "tls": "acme, expires 2026-11-03"},
|
||||
{"hostname": "rally.iamgmb.com", "backend": ["127.0.0.1:8105", "static"], "tls": "acme, expires 2026-10-28"},
|
||||
{"hostname": "shopping.iamgmb.com", "backend": ["127.0.0.1:8101", "127.0.0.1:8210", "static"], "tls": "acme, expires 2026-10-25"},
|
||||
{"hostname": "pry.iamgmb.com", "backend": ["127.0.0.1:8905", "static"], "tls": "acme, expires 2026-10-26 (http listed as http:// in Caddyfile but cert present)"},
|
||||
{"hostname": "crm.intelsight.io", "backend": ["localhost:3003 - NOTHING LISTENING"], "tls": "acme, expires 2026-10-28", "note": "dead backend"},
|
||||
{"hostname": "www.hotnow.io", "backend": ["redirect to hotnow.io"], "tls": "acme, expires 2026-10-31"},
|
||||
{"hostname": "hotnow.io", "backend": ["static"], "tls": "acme, expires 2026-10-31"},
|
||||
{"hostname": "app.hotnow.io", "backend": ["static"], "tls": "acme, expires 2026-10-31"},
|
||||
{"hostname": "api.hotnow.io", "backend": ["127.0.0.1:8001"], "tls": "acme (ZeroSSL CA), expires 2026-10-31"},
|
||||
{"hostname": "admin.hotnow.io", "backend": ["static"], "tls": "acme, expires 2026-10-31"},
|
||||
{"hostname": "timetrex.iamgmb.com", "backend": ["127.0.0.1:8085"], "tls": "acme, expires 2026-11-02"},
|
||||
{"hostname": "webmail.timapta.org", "backend": ["redirect to heracles.mxrouting.net"], "tls": "tls internal (self-signed), expires 2026-09-15"},
|
||||
{"hostname": "webmail.transitpin.com", "backend": ["redirect to heracles.mxrouting.net"], "tls": "tls internal (self-signed), expires 2026-09-15"},
|
||||
{"hostname": "webmail.rfptank.com", "backend": ["redirect to heracles.mxrouting.net"], "tls": "tls internal (self-signed), expires 2026-09-16"},
|
||||
{"hostname": "webmail.radartank.com", "backend": ["redirect to heracles.mxrouting.net"], "tls": "tls internal (self-signed), expires 2026-09-16"},
|
||||
{"hostname": "webmail.verdicttank.com", "backend": ["redirect to heracles.mxrouting.net"], "tls": "tls internal (self-signed), expires 2026-09-16"},
|
||||
{"hostname": "share.itpropartner.com", "backend": ["127.0.0.1:8260"], "tls": "acme, expires 2026-11-02"},
|
||||
{"hostname": "verdicttank.com, www.verdicttank.com", "backend": ["127.0.0.1:8201", "static"], "tls": "acme, expires 2026-11-06"},
|
||||
{"hostname": "voipsimplicity.itpropartner.com", "backend": ["static"], "tls": "tls internal (self-signed), expires 2026-09-15"},
|
||||
{"hostname": "forefront.itpropartner.com", "backend": ["static"], "tls": "tls internal (self-signed), expires 2026-09-15"},
|
||||
{"hostname": "ops.verdicttank.com", "backend": ["127.0.0.1:8201", "static"], "tls": "acme, expires 2026-11-17"},
|
||||
{"hostname": "register.timapta.org", "backend": ["127.0.0.1:8114"], "tls": "acme, expires 2026-12-08"},
|
||||
{"hostname": "pta.iamgmb.com", "backend": ["127.0.0.1:8114"], "tls": "acme, expires 2026-12-09"},
|
||||
{"hostname": "survey.iamgmb.com", "backend": ["127.0.0.1:8115"], "tls": "acme, expires 2026-12-09"}
|
||||
],
|
||||
"databases": [
|
||||
{"engine": "PostgreSQL 17.10", "instance": "host (postgresql@17-main.service)", "port": 5432, "databases": [
|
||||
{"name": "hotnow", "owner": "hotnow_app", "size": "16 MB"},
|
||||
{"name": "postgres", "owner": "postgres", "size": "7510 kB"},
|
||||
{"name": "template0", "owner": "postgres", "size": "7353 kB"},
|
||||
{"name": "template1", "owner": "postgres", "size": "7582 kB"}
|
||||
]},
|
||||
{"engine": "PostgreSQL 16", "instance": "containerized inside timetrex container", "port": "not published to host", "databases": [{"name": "timetrex", "owner": "timetrex", "size": "not separately queryable from host"}]},
|
||||
{"engine": "Redis 8.0.2", "instance": "host (redis-server.service)", "port": 6379, "used_memory": "758688 bytes (741K)", "appendonly": false, "save_policy": "3600 1 300 100 60 10000", "keyspace_db0": 0, "keyspace_db1": 0, "known_consumer": "hotnow-api (redis://localhost:6379/1 in .env)"}
|
||||
],
|
||||
"cron": [
|
||||
{"source": "root system crontab", "entries": 12, "detail": "boys-mail-monitor (hourly+daily), shark-game scraper (daily), shark-draft-reminder (15min), hermes-backup.sh (1AM), backup-audit-check.sh (2AM), root-essentials-backup.sh (3AM), system-config-sync.sh (4AM), snmp-collect.sh (1min), core-services-backup.sh (1:30AM), watchdog-wg-tunnel.sh (10min), ops-report-collect/send (23:30)"},
|
||||
{"source": "/etc/crontab", "entries": 4, "detail": "stock Debian run-parts hourly/daily/weekly/monthly"},
|
||||
{"source": "/etc/cron.d/", "entries": 5, "detail": "e2scrub_all, kernel(fstrim), php(sessionclean), sysstat - all stock; reap-chrome (custom, 30min, added 2026-09-09 DR fix)"},
|
||||
{"source": "/root/.hermes/cron/jobs.json", "entries": 87, "detail": "full list in tool log; 82 last_status=ok, 5 last_status=error (Doc-Live Verify, Security Compliance Check, OSINT Tool Daily Discovery, Super Search Daily Discovery, Nous LLM Pricing Weekly Report - all Hermes-internal automation, not customer migration scope)"}
|
||||
],
|
||||
"certs": {
|
||||
"acme_count": 47,
|
||||
"self_signed_internal_count": 7,
|
||||
"ca_providers": ["Let's Encrypt (acme-v02.api.letsencrypt.org)", "ZeroSSL (api.hotnow.io only)"],
|
||||
"self_signed_hosts": ["webmail.verdicttank.com", "webmail.rfptank.com", "webmail.radartank.com", "webmail.timapta.org", "webmail.transitpin.com", "voipsimplicity.itpropartner.com", "forefront.itpropartner.com"],
|
||||
"nearest_expiry": "2026-09-15/16 (self-signed webmail/internal stubs, low stakes)",
|
||||
"furthest_expiry": "2026-12-13 (gps.fleettracker360.com)",
|
||||
"note": "app4 must pre-issue its own certs for every moving hostname before DNS cutover; Core certs are not portable without importing Caddy's TLS storage"
|
||||
},
|
||||
"data_paths": [
|
||||
{"path": "/root/docker/uptime-kuma/data", "size": "487M", "owner": "uptime-kuma"},
|
||||
{"path": "/root/docker/super-search", "size": "1.1G", "owner": "super-search MCP"},
|
||||
{"path": "/opt/voice-agent", "size": "470M", "owner": "voice-agent + voice-agent-stt"},
|
||||
{"path": "/opt/rally", "size": "294M", "owner": "rally"},
|
||||
{"path": "/opt/osint-api", "size": "323M", "owner": "osint-api"},
|
||||
{"path": "/root/docker/osint-person-mcp", "size": "314M", "owner": "osint-person MCP"},
|
||||
{"path": "/opt/seemytrip", "size": "212M", "owner": "seemytrip"},
|
||||
{"path": "/opt/ops-portal", "size": "148M", "owner": "ops-portal"},
|
||||
{"path": "/opt/shopping-cart", "size": "147M", "owner": "shopping-cart"},
|
||||
{"path": "/root/docker/dre-mcp", "size": "171M", "owner": "dre-mcp"},
|
||||
{"path": "/root/docker/twilio-mcp", "size": "171M", "owner": "twilio-mcp"},
|
||||
{"path": "/root/shark-game", "size": "127M", "owner": "shark-game"},
|
||||
{"path": "/root/hermes-assistant", "size": "169M", "owner": "hermes-assistant"},
|
||||
{"path": "/opt/hermes-voice", "size": "123M", "owner": "hermes-voice"},
|
||||
{"path": "/root/projects/diglocate", "size": "118M", "owner": "diglocate-api"},
|
||||
{"path": "/opt/dre-portal", "size": "110M", "owner": "dre-portal"},
|
||||
{"path": "/var/lib/docker/volumes/prometheus_data/_data", "size": "114.9M", "owner": "prometheus"},
|
||||
{"path": "/opt/pta-registration", "size": "53M", "owner": "pta-registration"},
|
||||
{"path": "/opt/pta-survey", "size": "50M", "owner": "survey-registration"},
|
||||
{"path": "/root/docker/timetrex", "size": "50M", "owner": "timetrex"},
|
||||
{"path": "/root/hotnow-api", "size": "66M", "owner": "hotnow-api"},
|
||||
{"path": "/root/intelsight-api", "size": "64M", "owner": "intelsight-api"},
|
||||
{"path": "/root/docker/pry", "size": "66M", "owner": "pry"},
|
||||
{"path": "/root/projects/pipeline", "size": "30M", "owner": "pipeline-api"},
|
||||
{"path": "/root/projects/auth", "size": "32M", "owner": "auth-api"},
|
||||
{"path": "/var/lib/docker/volumes/grafana_data_final/_data", "size": "15M", "owner": "grafana"},
|
||||
{"path": "/opt/verdicttank", "size": "15M", "owner": "verdicttank-api + worker"},
|
||||
{"path": "/var/lib/postgresql", "size": "71M", "owner": "host PostgreSQL"},
|
||||
{"path": "/root/docker/docuseal-dre/data", "size": "2.5M", "owner": "docuseal-dre"},
|
||||
{"path": "/root/docker/docuseal-modelortho/data", "size": "1.4M", "owner": "docuseal-modelortho"},
|
||||
{"path": "/root/docker/docuseal/data", "size": "688K", "owner": "docuseal"},
|
||||
{"path": "/opt/transitpin", "size": "496K", "owner": "transitpin"},
|
||||
{"path": "/opt/microbin/data", "size": "4.0K", "owner": "microbin"},
|
||||
{"path": "/var/lib/redis", "size": "8.0K", "owner": "redis-server"}
|
||||
],
|
||||
"disk_summary": {
|
||||
"filesystem": "/dev/vda4",
|
||||
"total": "503G",
|
||||
"used": "157G (33%)",
|
||||
"available": "326G",
|
||||
"var_lib_docker": "31G",
|
||||
"root_docker": "5.8G",
|
||||
"opt": "6.4G"
|
||||
},
|
||||
"memory_cpu_summary": {
|
||||
"ram_total": "15Gi",
|
||||
"ram_used": "4.9Gi",
|
||||
"ram_buff_cache": "11Gi",
|
||||
"swap_total": "8.0Gi",
|
||||
"swap_used": "1.9Gi",
|
||||
"vcpus": 8
|
||||
},
|
||||
"ambiguities": [
|
||||
"grafana, prometheus, telegraf, mikrotik-exporter containers: no discoverable docker-compose.yml at the expected paths for grafana specifically; likely started via manual docker run or an unfound compose file",
|
||||
"crawl4ai.service and hermes-control-deck.service are disabled/inactive; hermes-control-deck's configured port 8200 collides with the actively-running pipeline-api.service - would fail to start if ever enabled",
|
||||
"IPsec (charon/strongSwan, UDP 500/4500) and L2TP (xl2tpd, UDP 1701) are running with no documented owner found in the reviewed plan/backup docs",
|
||||
"UFW rule '8890/tcp temp map server' has nothing currently listening on that port; purpose and lifecycle unclear",
|
||||
"crm.debtrecoveryexperts.com and crm.intelsight.io Caddy blocks proxy to localhost:3003 but nothing listens there on Core (Twenty CRM migrated to App1); unclear if these routes are dead code or missing a proxy hop",
|
||||
"gitea-runner.service binds 0.0.0.0:35849 - purpose of this specific port from Core's perspective alone is not fully confirmed",
|
||||
"Grafana is bound to *:3002 on all interfaces, not evidently proxied through Caddy and not restricted to localhost/Tailscale - worth confirming this exposure is intentional",
|
||||
"TimeTrex's internal PostgreSQL 16 instance could not be queried from host psql (container-internal, not published); migration must use docker exec pg_dump as timetrex-backup.sh already does",
|
||||
"diglocate-api, ft360-mcp, pipeline-api, pry, rally, seemytrip, shark-game, shopping-cart, transitpin have no discoverable .env or explicit external DB config beyond their local SQLite files found in a shallow scan - deeper source review would be needed to fully rule out hidden Postgres/Redis dependencies"
|
||||
]
|
||||
}
|
||||
Reference in New Issue
Block a user