Output:
ARGOCD_IT15_INFISICAL_PIDOKA_PLAN.md:125:- Existing DMZ Argo CD has ingress `argocd.cattaro.eu` via Traefik.
PLATFORM_AUFGABEN_KUBE_BOT.md:20:- Argo CD: `argocd.cattaro.eu` -> K3s/Ingress
PLATFORM_AUFGABEN_KUBE_BOT.md:205:  - Ingress: `argocd.cattaro.eu` über Traefik
PLATFORM_AUFGABEN_KUBE_BOT.md:207:  - Extern über `https://argocd.cattaro.eu` erreichbar, HTTP 200.
PLATFORM_AUFGABEN_KUBE_BOT.md:266:- `argocd.cattaro.eu` -> `http://192.168.20.40:31797`
PLATFORM_AUFGABEN_KUBE_BOT.md:267:- `bitwarden.cattaro.eu` -> `http://192.168.20.20:8080`
PLATFORM_AUFGABEN_KUBE_BOT.md:269:- `office.cattaro.eu` -> `http://192.168.188.40:80`
PLATFORM_AUFGABEN_KUBE_BOT.md:270:- `meshcentral.cattaro.eu` -> `http://192.168.188.42:2087`
PLATFORM_AUFGABEN_KUBE_BOT.md:275:- `crm.heckenfels.com` -> `http://192.168.20.40:31797`
PLATFORM_AUFGABEN_KUBE_BOT.md:276:- `suitecrm.heckenfels.com` -> `http://192.168.20.40:31797`
PLATFORM_AUFGABEN_KUBE_BOT.md:278:- `dashboard.heckenfels.com` -> `http://192.168.20.40:30718`
PLATFORM_AUFGABEN_KUBE_BOT.md:279:- `service.heckenfels.com` -> `http://192.168.20.40:8080`
PLATFORM_AUFGABEN_KUBE_BOT.md:293:- Ist `dashboard.heckenfels.com` ein Admin-Dashboard oder Anwender-Dashboard?
PLATFORM_AUFGABEN_KUBE_BOT.md:294:- Was ist `service.heckenfels.com` auf Port 8080?
SESSION_HANDOFF.md:278:  - Extern: `https://service.heckenfels.com/` HTTP 200.
SESSION_HANDOFF.md:722:  - Service: `LoadBalancer` Port `8080`, NPM/Externpfad `service.heckenfels.com`.
SESSION_HANDOFF.md:746:  - `https://service.heckenfels.com/`: HTTP `200`.
SESSION_HANDOFF.md:769:  - `https://service.heckenfels.com/`: HTTP `200`.
SESSION_HANDOFF.md:805:  - Externer Check danach: `https://service.heckenfels.com/` HTTP `200`.
SESSION_HANDOFF.md:883:  - `https://service.heckenfels.com/`: HTTP `200`
SESSION_HANDOFF.md:914:  - `https://service.heckenfels.com/`: HTTP `200`.
SESSION_HANDOFF.md:1059:  - `https://service.heckenfels.com/`: HTTP `200`.
SESSION_HANDOFF.md:1098:  - Zammad `https://service.heckenfels.com/`: HTTP `200`.
SESSION_HANDOFF.md:1119:  - `https://service.heckenfels.com/`: HTTP `200`.
SESSION_HANDOFF.md:1154:  - `https://service.heckenfels.com/`: `200`
SESSION_HANDOFF.md:1315:  - Extern `https://service.heckenfels.com/` zuletzt HTTP `200`.
SESSION_HANDOFF.md:1581:    - Host `suitecrm.heckenfels.com`
SESSION_HANDOFF.md:1582:    - Externer Test: `https://suitecrm.heckenfels.com/` HTTP `200`
SESSION_HANDOFF.md:1621:  - `https://suitecrm.heckenfels.com/`: HTTP `200`
SESSION_HANDOFF.md:1848:  - Service `my-homarr` NodePort `30718`; passt zum dokumentierten NPM-Proxy `dashboard.heckenfels.com`.
SESSION_HANDOFF.md:1903:  - `https://dashboard.heckenfels.com/` liefert HTTP `307` nach `/board`.
SESSION_HANDOFF.md:1932:  - `https://dashboard.heckenfels.com/`: HTTP `307` nach `/board`.
SESSION_HANDOFF.md:1942:  - `https://dashboard.heckenfels.com/`: HTTP `307` nach `/board`.
INFRASTRUCTURE.md:46:- service.heckenfels.com → http://192.168.20.40:8080
INFRASTRUCTURE.md:47:- office.cattaro.eu → http://192.168.188.40:80
INFRASTRUCTURE.md:48:- meshcentral.cattaro.eu → http://192.168.188.42:2087
INFRASTRUCTURE.md:49:- dashboard.heckenfels.com → http://192.168.20.40:30718
INFRASTRUCTURE.md:50:- bitwarden.cattaro.eu → http://192.168.20.20:8080
INFRASTRUCTURE.md:52:- argocd.cattaro.eu → http://192.168.20.40:31797
INFRASTRUCTURE.md:54:- crm.heckenfels.com → http://192.168.20.40:31797
INFRASTRUCTURE.md:55:- suitecrm.heckenfels.com → http://192.168.20.40:31797
INFRASTRUCTURE.md:72:  - `office.cattaro.eu`
INFRASTRUCTURE.md:73:  - `meshcentral.cattaro.eu`
INFRASTRUCTURE.md:74:  - `bitwarden.cattaro.eu`
INFRASTRUCTURE.md:75:  - `argocd.cattaro.eu`
INFRASTRUCTURE.md:81:  - `service.heckenfels.com`
INFRASTRUCTURE.md:82:  - `dashboard.heckenfels.com`
INFRASTRUCTURE.md:85:  - `crm.heckenfels.com`
INFRASTRUCTURE.md:86:  - `suitecrm.heckenfels.com`
inventory/argocd-mandanten-migrationsmatrix-20260615.md:44:| `infra-argocd` | altes DMZ-ArgoCD | mehrere Apps verwaltet; öffentlich via `argocd.cattaro.eu` Ingress | Nach Migration deaktivieren/entfernen nur mit explizitem OK. |
inventory/argocd-mandanten-migrationsmatrix-20260615.md:54:| `homarr` | Homarr | `dashboard.heckenfels.com` zeigt laut NPM auf NodePort `30718` | Vermutlich Pidoka/Heckenfels oder Shared Dashboard; fachlich klären. |
inventory/argocd-mandanten-migrationsmatrix-20260615.md:55:| `bitwarden` | Namespace vorhanden, Proxy `bitwarden.cattaro.eu` zeigt auf `192.168.20.20:8080` | Nicht im aktuellen K8s Workload-Auszug sichtbar | Prüfen, ob Docker auf Raspi oder K8s Altlast. |
inventory/argocd-mandanten-migrationsmatrix-20260615.md:57:| `zammad` | Zammad Stack | LoadBalancer `8080`; NPM `service.heckenfels.com` zeigt auf `192.168.20.40:8080` | Vermutlich Pidoka/Heckenfels Service; gesund wirkend, aber Storage local-path. |
inventory/argocd-mandanten-migrationsmatrix-20260615.md:66:| `hf-espocrm` | EspoCRM + MariaDB | `crm.heckenfels.com` | Running, Argo OutOfSync | P2 — Drift analysieren. |
inventory/argocd-mandanten-migrationsmatrix-20260615.md:67:| `hf-suitecrm` | SuiteCRM + MariaDB | `suitecrm.heckenfels.com` | Deployment 0/1, ImagePullBackOff/Progressing | P3 — erst reparieren/entscheidet ob migrieren oder ablösen. |
inventory/argocd-mandanten-migrationsmatrix-20260615.md:68:| `zammad` | Zammad | `service.heckenfels.com` via NPM auf `192.168.20.40:8080` | Running | P2 — Quelle/Owner prüfen, Storage local-path beachten. |
inventory/argocd-mandanten-migrationsmatrix-20260615.md:75:| `office.cattaro.eu` | `http://office.cattaro.eu:80` | ja | nein | Nicht direkt K3s; DNS/Loop prüfen. |
inventory/argocd-mandanten-migrationsmatrix-20260615.md:76:| `service.heckenfels.com` | `http://192.168.20.40:8080` | ja | nein | Vermutlich Zammad LoadBalancer. |
inventory/argocd-mandanten-migrationsmatrix-20260615.md:77:| `meshcentral.cattaro.eu` | `https://192.168.188.42:2087` | ja | ja | Nicht K3s, Intranet/Management. |
inventory/argocd-mandanten-migrationsmatrix-20260615.md:78:| `dashboard.heckenfels.com` | `http://192.168.20.40:30718` | ja | ja | Homarr NodePort. |
inventory/argocd-mandanten-migrationsmatrix-20260615.md:79:| `bitwarden.cattaro.eu` | `http://192.168.20.20:8080` | ja | ja | Raspi/Docker oder lokaler Dienst; nicht K3s-Traefik. |
inventory/k8s-inventory-raw.txt:136:hf-espocrm     espocrm             traefik   crm.heckenfels.com        192.168.20.40,192.168.20.45   80      261d
inventory/k8s-inventory-raw.txt:140:hf-suitecrm    suitecrm-suitecrm   traefik   suitecrm.heckenfels.com   192.168.20.40,192.168.20.45   80      259d
inventory/k8s-inventory-raw.txt:141:infra-argocd   argocd-server       traefik   argocd.cattaro.eu         192.168.20.40,192.168.20.45   80      267d
inventory/argocd-apps.json:420:                        "http://suitecrm.heckenfels.com/"
inventory/argocd-apps.json:3288:                        "http://crm.heckenfels.com/"
inventory/professionalization-priorities.md:109:- `office.cattaro.eu` → `192.168.188.40`
inventory/professionalization-priorities.md:110:- `meshcentral.cattaro.eu` → `192.168.188.42`
inventory/professionalization-priorities.md:111:- `bitwarden.cattaro.eu` → `192.168.20.20:8080`
inventory/service-matrix.md:8:| Cattaro GmbH | `argocd.cattaro.eu` | `http://192.168.20.40:31797` | infra-argocd/argocd-server / → svc/argocd-server:80 | `infra-argocd` | argocd-server (ClusterIP 80->8080, 443->8080) | Deployment/argocd-server |  | apps Unknown/Healthy |
inventory/service-matrix.md:9:| Cattaro GmbH | `bitwarden.cattaro.eu` | `http://192.168.20.20:8080` | kein Kubernetes-Ingress gefunden | `-` | - | - | - | nicht sichtbar |
inventory/service-matrix.md:10:| Cattaro GmbH | `meshcentral.cattaro.eu` | `http://192.168.188.42:2087` | kein Kubernetes-Ingress gefunden | `-` | - | - | - | nicht sichtbar |
inventory/service-matrix.md:12:| Cattaro GmbH | `office.cattaro.eu` | `http://192.168.188.40:80` | kein Kubernetes-Ingress gefunden | `-` | - | - | - | nicht sichtbar |
inventory/service-matrix.md:13:| Pidoka GmbH | `crm.heckenfels.com` | `http://192.168.20.40:31797` | hf-espocrm/espocrm / → svc/espocrm:80 | `hf-espocrm` | espocrm (ClusterIP 80->80) | Deployment/espocrm | data-hf-espocrm-mariadb-0 Bound longhorn 8Gi | hf-espocrm Unknown/Healthy |
inventory/service-matrix.md:14:| Pidoka GmbH | `dashboard.heckenfels.com` | `http://192.168.20.40:30718` | kein Kubernetes-Ingress gefunden | `-` | - | - | - | nicht sichtbar |
inventory/service-matrix.md:18:| Pidoka GmbH | `service.heckenfels.com` | `http://192.168.20.40:8080` | kein Kubernetes-Ingress gefunden | `-` | - | - | - | nicht sichtbar |
inventory/service-matrix.md:19:| Pidoka GmbH | `suitecrm.heckenfels.com` | `http://192.168.20.40:31797` | hf-suitecrm/suitecrm-suitecrm / → svc/suitecrm-suitecrm:8080 | `hf-suitecrm` | suitecrm-suitecrm (ClusterIP 8080->8080) | Deployment/suitecrm-suitecrm | data-suitecrm-mariadb-0 Bound longhorn 10Gi; suitecrm-suitecrm Bound longhorn 10Gi | suitecrm Unknown/Progressing |
inventory/service-matrix.md:22:- `argocd.cattaro.eu` → https://github.com/GitMasterOne/ArgoCD applications
inventory/service-matrix.md:23:- `crm.heckenfels.com` → https://github.com/GitMasterOne/ArgoCD.git espocrm
inventory/service-matrix.md:26:- `suitecrm.heckenfels.com` → https://github.com/GitMasterOne/ArgoCD.git charts/suitecrm
inventory/service-matrix.md:30:- Problematisch/unklar: `suitecrm.heckenfels.com` (`Unknown/Progressing`) plus ImagePullBackOff im Namespace.
inventory/layered-inventory.md:49:| `service.heckenfels.com` | `http://192.168.20.40:8080` | Pidoka | force SSL, websocket, http2 |
inventory/layered-inventory.md:50:| `office.cattaro.eu` | `http://192.168.188.40:80` | Cattaro | - |
inventory/layered-inventory.md:51:| `meshcentral.cattaro.eu` | `http://192.168.188.42:2087` | Cattaro | - |
inventory/layered-inventory.md:52:| `dashboard.heckenfels.com` | `http://192.168.20.40:30718` | Pidoka | - |
inventory/layered-inventory.md:53:| `bitwarden.cattaro.eu` | `http://192.168.20.20:8080` | Cattaro | - |
inventory/layered-inventory.md:55:| `argocd.cattaro.eu` | `http://192.168.20.40:31797` | Cattaro | http2 |
inventory/layered-inventory.md:57:| `crm.heckenfels.com` | `http://192.168.20.40:31797` | Pidoka | websocket |
inventory/layered-inventory.md:58:| `suitecrm.heckenfels.com` | `http://192.168.20.40:31797` | Pidoka | websocket |
inventory/layered-inventory.md:66:| `hf-espocrm` | `espocrm` | `crm.heckenfels.com` |
inventory/layered-inventory.md:70:| `hf-suitecrm` | `suitecrm-suitecrm` | `suitecrm.heckenfels.com` |
inventory/layered-inventory.md:71:| `infra-argocd` | `argocd-server` | `argocd.cattaro.eu` |
inventory/migration-20260615/nginx-proxy-hosts.txt:2:2|["office.cattaro.eu"]|http|office.cattaro.eu|80|1|0
inventory/migration-20260615/nginx-proxy-hosts.txt:3:3|["service.heckenfels.com"]|http|192.168.20.40|8080|1|0
inventory/migration-20260615/nginx-proxy-hosts.txt:4:4|["meshcentral.cattaro.eu"]|https|192.168.188.42|2087|1|1
inventory/migration-20260615/nginx-proxy-hosts.txt:5:5|["dashboard.heckenfels.com"]|http|192.168.20.40|30718|1|1
inventory/migration-20260615/nginx-proxy-hosts.txt:6:6|["bitwarden.cattaro.eu"]|http|192.168.20.20|8080|1|1
inventory/k8s-objects.json:2832:                    "kubectl.kubernetes.io/last-applied-configuration": "{\"apiVersion\":\"networking.k8s.io/v1\",\"kind\":\"Ingress\",\"metadata\":{\"annotations\":{\"argocd.argoproj.io/tracking-id\":\"hf-espocrm:networking.k8s.io/Ingress:hf-espocrm/espocrm\",\"kubernetes.io/ingress.class\":\"traefik\",\"traefik.ingress.kubernetes.io/router.entrypoints\":\"web\"},\"name\":\"espocrm\",\"namespace\":\"hf-espocrm\"},\"spec\":{\"ingressClassName\":\"traefik\",\"rules\":[{\"host\":\"crm.heckenfels.com\",\"http\":{\"paths\":[{\"backend\":{\"service\":{\"name\":\"espocrm\",\"port\":{\"number\":80}}},\"path\":\"/\",\"pathType\":\"Prefix\"}]}}]}}\n",
inventory/k8s-objects.json:2847:                        "host": "crm.heckenfels.com",
inventory/k8s-objects.json:3055:                    "kubectl.kubernetes.io/last-applied-configuration": "{\"apiVersion\":\"networking.k8s.io/v1\",\"kind\":\"Ingress\",\"metadata\":{\"annotations\":{\"argocd.argoproj.io/tracking-id\":\"suitecrm:networking.k8s.io/Ingress:hf-suitecrm/suitecrm-suitecrm\",\"traefik.ingress.kubernetes.io/router.entrypoints\":\"web\"},\"name\":\"suitecrm-suitecrm\",\"namespace\":\"hf-suitecrm\"},\"spec\":{\"ingressClassName\":\"traefik\",\"rules\":[{\"host\":\"suitecrm.heckenfels.com\",\"http\":{\"paths\":[{\"backend\":{\"service\":{\"name\":\"suitecrm-suitecrm\",\"port\":{\"number\":8080}}},\"path\":\"/\",\"pathType\":\"Prefix\"}]}}]}}\n",
inventory/k8s-objects.json:3069:                        "host": "suitecrm.heckenfels.com",
inventory/k8s-objects.json:3131:                        "host": "argocd.cattaro.eu",
inventory/k8s-objects.json:9005:                    "kubectl.kubernetes.io/last-applied-configuration": "{\"apiVersion\":\"apps/v1\",\"kind\":\"Deployment\",\"metadata\":{\"annotations\":{\"argocd.argoproj.io/tracking-id\":\"suitecrm:apps/Deployment:hf-suitecrm/suitecrm-suitecrm\"},\"labels\":{\"app.kubernetes.io/instance\":\"suitecrm\",\"app.kubernetes.io/managed-by\":\"Helm\",\"app.kubernetes.io/name\":\"suitecrm\",\"helm.sh/chart\":\"suitecrm-0.1.0\"},\"name\":\"suitecrm-suitecrm\",\"namespace\":\"hf-suitecrm\"},\"spec\":{\"replicas\":1,\"selector\":{\"matchLabels\":{\"app.kubernetes.io/instance\":\"suitecrm\",\"app.kubernetes.io/name\":\"suitecrm\"}},\"template\":{\"metadata\":{\"labels\":{\"app.kubernetes.io/instance\":\"suitecrm\",\"app.kubernetes.io/name\":\"suitecrm\"}},\"spec\":{\"containers\":[{\"env\":[{\"name\":\"SUITECRM_HOST\",\"value\":\"http://suitecrm.heckenfels.com\"},{\"name\":\"SUITECRM_ENABLE_HTTPS\",\"value\":\"no\"},{\"name\":\"SUITECRM_EXTERNAL_HTTP_PORT_NUMBER\",\"value\":\"80\"},{\"name\":\"SUITECRM_EXTERNAL_HTTPS_PORT_NUMBER\",\"value\":\"443\"},{\"name\":\"SUITECRM_DATABASE_HOST\",\"value\":\"suitecrm-mariadb\"},{\"name\":\"SUITECRM_DATABASE_NAME\",\"value\":\"bitnami_suitecrm\"},{\"name\":\"SUITECRM_DATABASE_USER\",\"value\":\"bn_suitecrm\"},{\"name\":\"SUITECRM_DATABASE_PASSWORD\",\"valueFrom\":{\"secretKeyRef\":{\"key\":\"mariadb-password\",\"name\":\"suitecrm-mariadb\"}}},{\"name\":\"SUITECRM_USERNAME\",\"valueFrom\":{\"secretKeyRef\":{\"key\":\"SUITECRM_USERNAME\",\"name\":\"suitecrm-suitecrm-app\"}}},{\"name\":\"SUITECRM_PASSWORD\",\"valueFrom\":{\"secretKeyRef\":{\"key\":\"SUITECRM_PASSWORD\",\"name\":\"suitecrm-suitecrm-app\"}}},{\"name\":\"SUITECRM_EMAIL\",\"valueFrom\":{\"secretKeyRef\":{\"key\":\"SUITECRM_EMAIL\",\"name\":\"suitecrm-suitecrm-app\"}}},{\"name\":\"SUITECRM_SMTP_HOST\",\"valueFrom\":{\"secretKeyRef\":{\"key\":\"SUITECRM_SMTP_HOST\",\"name\":\"suitecrm-suitecrm-app\"}}},{\"name\":\"SUITECRM_SMTP_PORT_NUMBER\",\"valueFrom\":{\"secretKeyRef\":{\"key\":\"SUITECRM_SMTP_PORT_NUMBER\",\"name\":\"suitecrm-suitecrm-app\"}}},{\"name\":\"SUITECRM_SMTP_USER\",\"valueFrom\":{\"secretKeyRef\":{\"key\":\"SUITECRM_SMTP_USER\",\"name\":\"suitecrm-suitecrm-app\"}}},{\"name\":\"SUITECRM_SMTP_PASSWORD\",\"valueFrom\":{\"secretKeyRef\":{\"key\":\"SUITECRM_SMTP_PASSWORD\",\"name\":\"suitecrm-suitecrm-app\"}}},{\"name\":\"SUITECRM_SMTP_PROTOCOL\",\"valueFrom\":{\"secretKeyRef\":{\"key\":\"SUITECRM_SMTP_PROTOCOL\",\"name\":\"suitecrm-suitecrm-app\"}}}],\"image\":\"bitnami/suitecrm:8.8.1\",\"imagePullPolicy\":\"IfNotPresent\",\"livenessProbe\":{\"failureThreshold\":6,\"httpGet\":{\"path\":\"/\",\"port\":\"http\"},\"initialDelaySeconds\":60,\"periodSeconds\":20,\"timeoutSeconds\":5},\"name\":\"web\",\"ports\":[{\"containerPort\":8080,\"name\":\"http\"}],\"readinessProbe\":{\"failureThreshold\":10,\"httpGet\":{\"path\":\"/\",\"port\":\"http\"},\"initialDelaySeconds\":30,\"periodSeconds\":10,\"timeoutSeconds\":5},\"volumeMounts\":[{\"mountPath\":\"/bitnami/suitecrm\",\"name\":\"data\"}]},{\"args\":[\"while true; do\\n  php /bitnami/suitecrm/bin/console schedulers:run || true;\\n  sleep 60;\\ndone\\n\"],\"command\":[\"bash\",\"-lc\"],\"env\":[{\"name\":\"SUITECRM_HOST\",\"value\":\"http://suitecrm.heckenfels.com\"},{\"name\":\"SUITECRM_DATABASE_HOST\",\"value\":\"suitecrm-mariadb\"},{\"name\":\"SUITECRM_DATABASE_NAME\",\"value\":\"bitnami_suitecrm\"},{\"name\":\"SUITECRM_DATABASE_USER\",\"value\":\"bn_suitecrm\"},{\"name\":\"SUITECRM_DATABASE_PASSWORD\",\"valueFrom\":{\"secretKeyRef\":{\"key\":\"mariadb-password\",\"name\":\"suitecrm-mariadb\"}}}],\"image\":\"bitnami/suitecrm:8.8.1\",\"imagePullPolicy\":\"IfNotPresent\",\"name\":\"scheduler\",\"volumeMounts\":[{\"mountPath\":\"/bitnami/suitecrm\",\"name\":\"data\"}]}],\"securityContext\":{\"fsGroup\":1001},\"volumes\":[{\"name\":\"data\",\"persistentVolumeClaim\":{\"claimName\":\"suitecrm-suitecrm\"}}]}}}}\n"
inventory/k8s-objects.json:9051:                                        "value": "http://suitecrm.heckenfels.com"
inventory/k8s-objects.json:9214:                                        "value": "http://suitecrm.heckenfels.com"
inventory/migration-20260615/raw-inventory.txt:153:hf-espocrm     ingress.networking.k8s.io/espocrm             traefik   crm.heckenfels.com        192.168.20.40,192.168.20.45   80      268d
inventory/migration-20260615/raw-inventory.txt:157:hf-suitecrm    ingress.networking.k8s.io/suitecrm-suitecrm   traefik   suitecrm.heckenfels.com   192.168.20.40,192.168.20.45   80      266d
inventory/migration-20260615/raw-inventory.txt:158:infra-argocd   ingress.networking.k8s.io/argocd-server       traefik   argocd.cattaro.eu         192.168.20.40,192.168.20.45   80      274d


bash

/bin/bash -lc "ssh -i /home/node/.ssh/kube-bot-it15-ed25519 kube-bot@192.168.20.40 'sudo ss -tulpn | grep -E \":(80|443|8080|31797|30718)\" || true; for host in n8n.heckenfels.com matomo.heckenfels.com mautic.heckenfels.com crm.heckenfels.com suitecrm.heckenfels.com argocd.cattaro.eu; do printf \"%s \" \""'$host"; curl -k -s -o /dev/null -w "%{http_code} %{redirect_url}'"\\n\" --max-time 5 -H \"Host: "'$host" http://192.168.20.40:31797/ || true; done'"'"


Output:
http://192.168.20.40:30718/ 307 http://192.168.20.40:30718/board
http://192.168.20.40:80/ 404
http://192.168.20.40:31797/ 404
https://192.168.20.40:443/ 404
http://192.168.20.40:8080/ 200


Output:
tcp   LISTEN 0      511                *:80               *:*    users:(("apache2",pid=3799401,fd=4),("apache2",pid=3799400,fd=4),("apache2",pid=1110489,fd=4))
n8n.heckenfels.com 200
matomo.heckenfels.com 200
mautic.heckenfels.com 302 http://192.168.20.40:31797/s/dashboard
crm.heckenfels.com 404
suitecrm.heckenfels.com 200
argocd.cattaro.eu 404


/bin/bash -lc "ssh -i /home/node/.ssh/kube-bot-it15-ed25519 kube-bot@192.168.20.40 'for host in matomo.heckenfels.com n8n.heckenfels.com mautic.heckenfels.com suitecrm.heckenfels.com crm.heckenfels.com argocd.cattaro.eu; do printf \"port80 %s \" \""'$host"; curl -k -s -o /dev/null -w "%{http_code} %{redirect_url}'"\\n\" --max-time 5 -H \"Host: "'$host" http://192.168.20.40:80/ || true; done; for host in matomo.heckenfels.com n8n.heckenfels.com mautic.heckenfels.com suitecrm.heckenfels.com crm.heckenfels.com argocd.cattaro.eu; do printf "port31797 %s " "$host"; curl -k -s -o /dev/null -w "%{http_code} %{redirect_url}'"\\n\" --max-time 5 -H \"Host: "'$host" http://192.168.20.40:31797/ || true; done'"'"


Output:
port80 matomo.heckenfels.com 200
port80 n8n.heckenfels.com 200
port80 mautic.heckenfels.com 302 http://192.168.20.40:80/s/dashboard
port80 suitecrm.heckenfels.com 200
port80 crm.heckenfels.com 404
port80 argocd.cattaro.eu 404
port31797 matomo.heckenfels.com 200
port31797 n8n.heckenfels.com 200
port31797 mautic.heckenfels.com 302 http://192.168.20.40:31797/s/dashboard
port31797 suitecrm.heckenfels.com 200
port31797 crm.heckenfels.com 404
port31797 argocd.cattaro.eu 404


/bin/bash -lc "ssh -i /home/node/.ssh/kube-bot-it15-ed25519 kube-bot@192.168.20.40 \"sudo apache2ctl -S 2>/dev/null || true; sudo find /etc/apache2/sites-enabled -type f -maxdepth 1 -print -exec sudo grep -HEn 'ServerName|ServerAlias|ProxyPass|RewriteRule|DocumentRoot' {} \\; 2>/dev/null || true\""


Output:
VirtualHost configuration:
*:80                   192.168.189.22 (/etc/apache2/sites-enabled/zammad.conf:8)
ServerRoot: "/etc/apache2"
Main DocumentRoot: "/var/www/html"
Main ErrorLog: "/var/log/apache2/error.log"
Mutex watchdog-callback: using_defaults
Mutex proxy: using_defaults
Mutex default: dir="/var/run/apache2/" mechanism=default
PidFile: "/var/run/apache2/apache2.pid"
Define: DUMP_VHOSTS
Define: DUMP_RUN_CFG
User: name="www-data" id=33
Group: name="www-data" id=33


/bin/bash -lc "ssh -i /home/node/.ssh/kube-bot-it15-ed25519 kube-bot@192.168.20.40 \"sudo sed -n '1,220p' /etc/apache2/sites-enabled/zammad.conf\""


Output:
#
# this is the apache config for zammad
#

# security - prevent information disclosure about server version
ServerTokens Prod

<VirtualHost *:80>
    # replace 'localhost' with your fqdn if you want to use zammad from remote
    ServerName  192.168.189.22
    #localhost

    ## don't loose time with IP address lookups
    HostnameLookups Off

    ## needed for named virtual hosts
    UseCanonicalName Off

    ## configures the footer on server-generated documents
    ServerSignature Off

    ProxyRequests Off
    ProxyPreserveHost On

    <Proxy 127.0.0.1:3000>
	Require local
    </Proxy>

    ProxyPass /assets !
    ProxyPass /favicon.ico !
    ProxyPass /apple-touch-icon.png !
    ProxyPass /robots.txt !
    # legacy web socket server
    ProxyPass /ws ws://127.0.0.1:6042/
    # action cable
    ProxyPass /cable ws://127.0.0.1:3000/cable
    ProxyPass / http://127.0.0.1:3000/

    # change this line in an SSO setup
    # RequestHeader unset X-Forwarded-User

    DocumentRoot "/opt/zammad/public"

    <Directory />
        Options FollowSymLinks
        AllowOverride None
    </Directory>

    <Directory "/opt/zammad/public">
        Options FollowSymLinks
	Require all granted
    </Directory>

</VirtualHost>


/bin/bash -lc "ssh -i /home/node/.ssh/kube-bot-it15-ed25519 kube-bot@192.168.20.40 'for host in matomo.heckenfels.com service.heckenfels.com suitecrm.heckenfels.com n8n.heckenfels.com; do echo ===traefik-"'$host===; curl -k -L -s --max-time 8 -H "Host: $host" http://192.168.20.40:31797/ | tr "'"\\n\" \" \" | sed -E \"s/[[:space:]]+/ /g\" | grep -oiE \"<title>["'^<]+|Matomo|Zammad|SuiteCRM|n8n|Homarr" | head -n 8; done'"'"


/bin/bash -lc "ssh -i /home/node/.ssh/kube-bot-it15-ed25519 kube-bot@192.168.20.20 'for d in matomo.heckenfels.com service.heckenfels.com suitecrm.heckenfels.com n8n.heckenfels.com dashboard.heckenfels.com; do echo ==="'$d===; curl -k -L -s --max-time 8 https://$d/ | tr "'"\\n\" \" \" | sed -E \"s/[[:space:]]+/ /g\" | grep -oiE \"<title>["'^<]+|Matomo|Zammad|SuiteCRM|n8n|Homarr" | head -n 8; done'"'"


Output:
===traefik-matomo.heckenfels.com===
===traefik-service.heckenfels.com===
===traefik-suitecrm.heckenfels.com===
<title>SuiteCRM
===traefik-n8n.heckenfels.com===
n8n
n8n
<title>n8n.io - Workflow Automation
n8n


Output:
===matomo.heckenfels.com===
===service.heckenfels.com===
<title>Heckenfels Service
zammad
===suitecrm.heckenfels.com===
<title>SuiteCRM
===n8n.heckenfels.com===
n8n
n8n
<title>n8n.io - Workflow Automation
n8n
===dashboard.heckenfels.com===
Homarr
<title>Login • Homarr
Homarr
homarr
homarr
Homarr
Homarr
Homarr


/bin/bash -lc "ssh -i /home/node/.ssh/kube-bot-it15-ed25519 kube-bot@192.168.20.20 'for url in https://matomo.heckenfels.com/ http://192.168.20.40:80/ http://192.168.20.40:31797/; do echo ==="'$url===; if echo $url | grep -q 192.168; then curl -k -sS -D - --max-time 8 -H "Host: matomo.heckenfels.com" $url -o /tmp/matomo_check_body; else curl -k -sS -D - --max-time 8 $url -o /tmp/matomo_check_body; fi; echo body_bytes=$(wc -c </tmp/matomo_check_body); head -c 500 /tmp/matomo_check_body | tr "'"\\n\" \" \" | sed -E \"s/[[:space:]]+/ /g\"; echo; done'"


/bin/bash -lc "ssh -i /home/node/.ssh/kube-bot-it15-ed25519 kube-bot@192.168.20.40 'sudo kubectl --kubeconfig=<redacted> -n pidoka-hf-matomo logs deploy/matomo --tail=20 2>/dev/null || true'"


Output:
10.42.0.43 - - [17/Jun/2026:14:28:59 +0000] "GET / HTTP/1.1" 200 173 "-" "curl/7.81.0"
10.42.0.43 - - [17/Jun/2026:14:29:00 +0000] "GET / HTTP/1.1" 200 173 "-" "curl/7.81.0"
10.42.0.43 - - [17/Jun/2026:14:29:09 +0000] "GET / HTTP/1.1" 200 173 "-" "curl/7.81.0"
10.42.0.43 - - [17/Jun/2026:14:29:10 +0000] "GET / HTTP/1.1" 200 173 "-" "curl/7.81.0"
10.42.0.43 - - [17/Jun/2026:14:29:20 +0000] "GET / HTTP/1.1" 200 173 "-" "curl/7.81.0"
10.42.0.43 - - [17/Jun/2026:14:29:20 +0000] "GET / HTTP/1.1" 200 173 "-" "curl/7.81.0"
10.42.0.43 - - [17/Jun/2026:14:29:30 +0000] "GET / HTTP/1.1" 200 173 "-" "curl/7.81.0"
10.42.0.43 - - [17/Jun/2026:14:29:31 +0000] "GET / HTTP/1.1" 200 173 "-" "curl/7.81.0"
10.42.0.43 - - [17/Jun/2026:14:30:15 +0000] "GET / HTTP/1.1" 200 173 "-" "curl/7.88.1"
10.42.0.43 - - [17/Jun/2026:14:31:09 +0000] "GET / HTTP/1.1" 200 173 "-" "curl/7.81.0"
10.42.0.43 - - [17/Jun/2026:21:42:39 +0000] "GET / HTTP/1.1" 200 173 "-" "curl/7.81.0"
10.42.0.43 - - [18/Jun/2026:06:09:15 +0000] "GET / HTTP/1.1" 200 173 "-" "curl/7.88.1"
10.42.0.43 - - [19/Jun/2026:20:14:55 +0000] "GET / HTTP/1.1" 200 173 "-" "curl/7.81.0"
10.42.0.43 - - [19/Jun/2026:20:15:17 +0000] "GET / HTTP/1.1" 200 173 "-" "curl/7.81.0"
10.42.0.43 - - [19/Jun/2026:20:18:39 +0000] "GET / HTTP/1.1" 200 173 "-" "curl/7.88.1"
10.42.0.43 - - [19/Jun/2026:20:19:38 +0000] "GET / HTTP/1.1" 200 173 "-" "curl/7.81.0"
10.42.0.43 - - [19/Jun/2026:20:20:00 +0000] "GET / HTTP/1.1" 200 173 "-" "curl/7.81.0"
10.42.0.43 - - [19/Jun/2026:20:20:00 +0000] "GET / HTTP/1.1" 200 173 "-" "curl/7.81.0"
10.42.0.43 - - [19/Jun/2026:20:20:27 +0000] "GET / HTTP/1.1" 200 173 "-" "curl/7.81.0"
10.42.0.43 - - [19/Jun/2026:20:20:27 +0000] "GET / HTTP/1.1" 200 173 "-" "curl/7.88.1"


Output:
===https://matomo.heckenfels.com/===
HTTP/2 200
server: openresty
date: Fri, 19 Jun 2026 20:20:44 GMT
content-type: text/html; charset=UTF-8
content-length: 0
x-powered-by: PHP/8.4.20
x-served-by: matomo.heckenfels.com

body_bytes=0

===http://192.168.20.40:80/===
HTTP/1.1 200 OK
Content-Length: 0
Content-Type: text/html; charset=UTF-8
Date: Fri, 19 Jun 2026 20:20:44 GMT
Server: Apache/2.4.66 (Debian)
X-Powered-By: PHP/8.4.20

body_bytes=0

===http://192.168.20.40:31797/===
HTTP/1.1 200 OK
Content-Length: 0
Content-Type: text/html; charset=UTF-8
Date: Fri, 19 Jun 2026 20:20:44 GMT
Server: Apache/2.4.66 (Debian)
X-Powered-By: PHP/8.4.20

body_bytes=0


*Nginx-Abgleich ist erledigt* — read-only, keine NPM-Änderungen gemacht.

*OK / behalten:*
- `service.heckenfels.com` → Zammad, HTTP `200`
- `dashboard.heckenfels.com` → Homarr, HTTP `307`
- `matomo.heckenfels.com` → neuer `pidoka-hf-matomo`, HTTP `200`
- `mautic.heckenfels.com` → aktueller Ingress, HTTP `302`
- `suitecrm.heckenfels.com` → aktueller Ingress, HTTP `200`
- `n8n.heckenfels.com` → aktueller Ingress, HTTP `200`
- `nextcloud.cattaro.eu` → externes Ziel, erreichbar

*Klare NPM-Cleanup-Kandidaten nach OK:*
- `bitwarden.cattaro.eu` → Port `192.168.20.20:8080` geschlossen, liefert `502`
- `crm.heckenfels.com` → kein aktueller Ingress, Traefik `404`, wirkt wie alter EspoCRM-Pfad
- `argocd.cattaro.eu` → kein aktueller Ingress, Traefik `404`, altes DMZ-ArgoCD ist nicht mehr Zielmodell

*Unklar / fachlich prüfen:*
- `office.cattaro.eu` → Ziel `192.168.188.40:80` aktuell nicht erreichbar
- `meshcentral.cattaro.eu` → Ziel `192.168.188.42:2087` aktuell nicht erreichbar

Dokumentiert in `inventory/nginx-proxy-abgleich-20260619.md` und im Handoff.

mach danach noch den Abgleich mit ngnix

/bin/bash -lc "ssh -i /home/node/.ssh/kube-bot-it15-ed25519 kube-bot@192.168.20.20 \"sudo docker exec ngm2-app-1 node - <<'NODE'
const knex = require('/app/db');
(async () => {
  const rows = await knex('proxy_host')
    .select('id','domain_names','forward_scheme','forward_host','forward_port','enabled')
    .orderBy('id');
  for (const r of rows) console.log(JSON.stringify(r));
  await knex.destroy();
})().catch(async e => { console.error(e.message); try { await knex.destroy(); } catch (_) {} process.exit(1); });
NODE\""

/bin/bash -lc "ssh -i /home/node/.ssh/kube-bot-it15-ed25519 kube-bot@192.168.20.20 \"sudo docker exec ngm2-app-1 node - <<'NODE'
const knex = require('/app/db');
(async () => {
  const rows = await knex('proxy_host')
    .select('id','domain_names','forward_scheme','forward_host','forward_port','enabled')
    .orderBy('id');
  for (const r of rows) console.log(JSON.stringify(r));
  await knex.destroy();
})().catch(async e => { console.error(e.message); try { await knex.destroy(); } catch (_) {} process.exit(1); });
NODE\""

/bin/bash -lc 'ssh -i /home/node/.ssh/kube-bot-it15-ed25519 kube-bot@192.168.20.40 "sudo kubectl --kubeconfig=<redacted> get ingress -A -o wide; sudo kubectl --kubeconfig=<redacted> get svc -A -o wide"'

/bin/bash -lc 'ssh -i /home/node/.ssh/kube-bot-it15-ed25519 kube-bot@192.168.20.40 "sudo kubectl --kubeconfig=<redacted> get ingress -A -o wide; sudo kubectl --kubeconfig=<redacted> get svc -A -o wide"'

/bin/bash -lc "ssh -i /home/node/.ssh/kube-bot-it15-ed25519 kube-bot@192.168.20.20 \"sudo docker ps --format '{{.Names}} {{.Image}} {{.Ports}}'\""

/bin/bash -lc "ssh -i /home/node/.ssh/kube-bot-it15-ed25519 kube-bot@192.168.20.20 \"sudo docker ps --format '{{.Names}} {{.Image}} {{.Ports}}'\""

NAMESPACE          NAME               CLASS     HOSTS                     ADDRESS                       PORTS   AGE
hf-n8n             n8n                traefik   n8n.heckenfels.com        192.168.20.40,192.168.20.45   80      151d
pidoka-hf-matomo   matomo-ingress     traefik   matomo.heckenfels.com     192.168.20.40,192.168.20.45   80      2d5h
hf-mautic          mautic-ingress     traefik   mautic.heckenfels.com     192.168.20.40,192.168.20.45   80      2d3h
hf-suitecrm        suitecrm-ingress   traefik   suitecrm.heckenfels.com   192.168.20.40,192.168.20.45   80      29h
NAMESPACE            NAME                                       TYPE           CLUSTER-IP      EXTERNAL-IP                   PORT(S)                      AGE      SELECTOR
default              kubernetes                                 ClusterIP      10.43.0.1       <none>                        443/TCP                      2y174d   <none>
kube-system          kube-dns                                   ClusterIP      10.43.0.10      <none>                        53/UDP,53/TCP,9153/TCP       2y174d   k8s-app=kube-dns
kube-system          metrics-server                             ClusterIP      10.43.29.227    <none>                        443/TCP                      2y174d   k8s-app=metrics-server
zammad               zammad-postgresql-hl                       ClusterIP      None            <none>                        5432/TCP                     2y171d   app.kubernetes.io/component=primary,app.kubernetes.io/instance=zammad,app.kubernetes.io/name=postgresql
zammad               zammad-elasticsearch-master-hl             ClusterIP      None            <none>                        9200/TCP,9300/TCP            2y171d   app.kubernetes.io/component=master,app.kubernetes.io/instance=zammad,app.kubernetes.io/name=elasticsearch
zammad               zammad-redis-headless                      ClusterIP      None            <none>                        6379/TCP                     2y171d   app.kubernetes.io/instance=zammad,app.kubernetes.io/name=redis
zammad               zammad-elasticsearch                       ClusterIP      10.43.183.61    <none>                        9200/TCP,9300/TCP            2y171d   app.kubernetes.io/component=master,app.kubernetes.io/instance=zammad,app.kubernetes.io/name=elasticsearch
zammad               zammad-postgresql                          ClusterIP      10.43.58.9      <none>                        5432/TCP                     2y171d   app.kubernetes.io/component=primary,app.kubernetes.io/instance=zammad,app.kubernetes.io/name=postgresql
zammad               zammad-memcached                           ClusterIP      10.43.177.250   <none>                        11211/TCP                    2y171d   app.kubernetes.io/instance=zammad,app.kubernetes.io/name=memcached
zammad               zammad-redis-master                        ClusterIP      10.43.50.180    <none>                        6379/TCP                     2y171d   app.kubernetes.io/component=master,app.kubernetes.io/instance=zammad,app.kubernetes.io/name=redis
longhorn-system      longhorn-backend                           ClusterIP      10.43.124.159   <none>                        9500/TCP                     2y66d    app=<redacted>
longhorn-system      longhorn-frontend                          ClusterIP      10.43.4.195     <none>                        80/TCP                       2y66d    app=longhorn-ui
longhorn-system      longhorn-conversion-webhook                ClusterIP      10.43.222.74    <none>                        9501/TCP                     2y66d    app=<redacted>
longhorn-system      longhorn-admission-webhook                 ClusterIP      10.43.165.36    <none>                        9502/TCP                     2y66d    app=<redacted>
longhorn-system      longhorn-recovery-backend                  ClusterIP      10.43.68.170    <none>                        9503/TCP                     2y66d    app=<redacted>
longhorn-system      longhorn-engine-manager                    ClusterIP      None            <none>                        <none>                       2y66d    longhorn.io/component=instance-manager,longhorn.io/instance-manager-type=engine
longhorn-system      longhorn-replica-manager                   ClusterIP      None            <none>                        <none>                       2y66d    longhorn.io/component=instance-manager,longhorn.io/instance-manager-type=replica
kube-system          sealed-secrets-controller                  ClusterIP      10.43.51.40     <none>                        8080/TCP                     273d     name=<redacted>
kube-system          sealed-secrets-controller-metrics          ClusterIP      10.43.79.118    <none>                        8081/TCP                     273d     name=<redacted>
kube-system          traefik                                    LoadBalancer   10.43.105.231   192.168.20.40,192.168.20.45   80:31797/TCP,443:30508/TCP   2y174d   app.kubernetes.io/instance=traefik-kube-system,app.kubernetes.io/name=traefik
zammad               zammad                                     LoadBalancer   10.43.105.38    192.168.20.40,192.168.20.45   8080:31520/TCP               2y171d   app.kubernetes.io/instance=zammad,app.kubernetes.io/name=zammad
platform-infisical   postgresql                                 ClusterIP      10.43.64.170    <none>                        5432/TCP                     3d23h    app.kubernetes.io/component=primary,app.kubernetes.io/instance=infisical,app.kubernetes.io/name=postgresql
platform-infisical   redis-headless                             ClusterIP      None            <none>                        6379/TCP                     3d23h    app.kubernetes.io/instance=infisical,app.kubernetes.io/name=redis
platform-infisical   postgresql-hl                              ClusterIP      None            <none>                        5432/TCP                     3d23h    app.kubernetes.io/component=primary,app.kubernetes.io/instance=infisical,app.kubernetes.io/name=postgresql
platform-infisical   infisical-infisical-standalone-infisical   ClusterIP      10.43.154.215   <none>                        8080/TCP                     3d23h    app=infisical-standalone,component=infisical,release=infisical
platform-infisical   redis-master                               ClusterIP      10.43.29.81     <none>                        6379/TCP                     3d23h    app.kubernetes.io/component=master,app.kubernetes.io/instance=infisical,app.kubernetes.io/name=redis
external-secrets     external-secrets-webhook                   ClusterIP      10.43.238.32    <none>                        443/TCP                      2d22h    app.kubernetes.io/instance=external-secrets,app.kubernetes.io/name=<redacted>
hf-n8n               n8n                                        ClusterIP      10.43.43.21     <none>                        80/TCP                       151d     app.kubernetes.io/instance=n8n,app.kubernetes.io/name=n8n,app.kubernetes.io/type=master
pidoka-hf-matomo     matomo                                     ClusterIP      10.43.37.72     <none>                        80/TCP                       2d13h    app=matomo
pidoka-hf-matomo     matomo-db                                  ClusterIP      10.43.215.111   <none>                        3306/TCP                     2d13h    app=matomo-db
hf-mautic            mautic-db                                  ClusterIP      10.43.184.10    <none>                        3306/TCP                     2d3h     app=mautic-db
hf-mautic            mautic                                     ClusterIP      10.43.59.172    <none>                        80/TCP                       2d3h     app=mautic
hf-suitecrm          suitecrm                                   ClusterIP      10.43.27.45     <none>                        80/TCP                       29h      app=suitecrm
hf-suitecrm          suitecrm-db                                ClusterIP      10.43.178.246   <none>                        3306/TCP                     29h      app=suitecrm-db
homarr               my-homarr                                  NodePort       10.43.177.71    <none>                        10245:30718/TCP              2y171d   app.kubernetes.io/instance=my-homarr,app.kubernetes.io/name=homarr,pod.name=main

portainer_agent portainer/agent:latest
portainer portainer/portainer-ce:latest 0.0.0.0:8000->8000/tcp, [::]:8000->8000/tcp, 0.0.0.0:9000->9000/tcp, [::]:9000->9000/tcp, 9443/tcp
ngm2-app-1 jc21/nginx-proxy-manager:latest 0.0.0.0:80-81->80-81/tcp, [::]:80-81->80-81/tcp, 0.0.0.0:443->443/tcp, [::]:443->443/tcp

/bin/bash -lc "ssh -i /home/node/.ssh/kube-bot-it15-ed25519 kube-bot@192.168.20.20 \"sudo find /data/compose/2/data/nginx -maxdepth 3 -type f -name '*.conf' -print | sort | xargs -r sudo grep -HEn 'server_name|proxy_pass|set \\\\"'$forward_scheme|set '"\\\\"'$server|set '"\\\\"'$port'"'\""

/bin/bash -lc "ssh -i /home/node/.ssh/kube-bot-it15-ed25519 kube-bot@192.168.20.20 \"sudo find /data/compose/2/data/nginx -maxdepth 3 -type f -name '*.conf' -print | sort | xargs -r sudo grep -HEn 'server_name|proxy_pass|set \\\\"'$forward_scheme|set '"\\\\"'$server|set '"\\\\"'$port'"'\""

/bin/bash -lc "ssh -i /home/node/.ssh/kube-bot-it15-ed25519 kube-bot@192.168.20.20 \"sudo find /data/compose/2/data/nginx/proxy_host -type f -name '*.conf' -print | sort | wc -l; sudo ls -la /data/compose/2/data/nginx/proxy_host 2>/dev/null || true\""

/bin/bash -lc "ssh -i /home/node/.ssh/kube-bot-it15-ed25519 kube-bot@192.168.20.20 \"sudo find /data/compose/2/data/nginx/proxy_host -type f -name '*.conf' -print | sort | wc -l; sudo ls -la /data/compose/2/data/nginx/proxy_host 2>/dev/null || true\""

/bin/bash -lc "ssh -i /home/node/.ssh/kube-bot-it15-ed25519 kube-bot@192.168.20.20 \"sudo docker exec ngm2-app-1 node - <<'NODE'
const knex = require('/app/db');
(async () => {
  const tables = await knex.raw(\"select name from sqlite_master where type='table' order by name\");
  console.log(JSON.stringify(tables));
  const count = await knex('proxy_host').count({c:'id'});
  console.log('proxy_host_count', JSON.stringify(count));
  await knex.destroy();
})().catch(async e => { console.error(e.stack || e.message); try { await knex.destroy(); } catch (_) {} process.exit(1); });
NODE\""

/bin/bash -lc "ssh -i /home/node/.ssh/kube-bot-it15-ed25519 kube-bot@192.168.20.20 \"sudo docker exec ngm2-app-1 node - <<'NODE'
const knex = require('/app/db');
(async () => {
  const tables = await knex.raw(\"select name from sqlite_master where type='table' order by name\");
  console.log(JSON.stringify(tables));
  const count = await knex('proxy_host').count({c:'id'});
  console.log('proxy_host_count', JSON.stringify(count));
  await knex.destroy();
})().catch(async e => { console.error(e.stack || e.message); try { await knex.destroy(); } catch (_) {} process.exit(1); });
NODE\""

12
total 56
drwxr-xr-x 2 root root 4096 Jan 18 19:47 .
drwxr-xr-x 9 root root 4096 Dec 30  2024 ..
-rw-r--r-- 1 root root 1612 May  3 11:39 1.conf
-rw-r--r-- 1 root root 1386 May  3 11:39 10.conf
-rw-r--r-- 1 root root 1396 May  3 11:39 11.conf
-rw-r--r-- 1 root root 1783 May  3 11:39 12.conf
-rw-r--r-- 1 root root 1278 May  3 11:39 2.conf
-rw-r--r-- 1 root root  963 May  3 11:39 3.conf
-rw-r--r-- 1 root root  975 May  3 11:39 4.conf
-rw-r--r-- 1 root root  979 May  3 11:39 5.conf
-rw-r--r-- 1 root root  970 May  3 11:39 6.conf
-rw-r--r-- 1 root root 1274 May  3 11:39 7.conf
-rw-r--r-- 1 root root 1146 May  3 11:39 8.conf
-rw-r--r-- 1 root root 1460 May  3 11:39 9.conf

grep: Trailing backslash

grep: Trailing backslash

/bin/bash -lc "ssh -i /home/node/.ssh/kube-bot-it15-ed25519 kube-bot@192.168.20.20 \"sudo sh -c 'for f in /data/compose/2/data/nginx/proxy_host/*.conf; do echo ==="'$f===; grep -E '"\\\"server_name|proxy_pass|set \\\\\\\\"'$server|set '"\\\\\\\\"'$port|set '"\\\\\\\\"'$forward_scheme'"\\\" "'$f; done'"'\""

/bin/bash -lc "ssh -i /home/node/.ssh/kube-bot-it15-ed25519 kube-bot@192.168.20.20 \"sudo sh -c 'for f in /data/compose/2/data/nginx/proxy_host/*.conf; do echo ==="'$f===; grep -E '"\\\"server_name|proxy_pass|set \\\\\\\\"'$server|set '"\\\\\\\\"'$port|set '"\\\\\\\\"'$forward_scheme'"\\\" "'$f; done'"'\""

/bin/bash -lc "ssh -i /home/node/.ssh/kube-bot-it15-ed25519 kube-bot@192.168.20.20 \"sudo docker exec ngm2-app-1 node -e \\\"const knex=require('/app/db'); (async()=>{ console.log(await knex('proxy_host').count({c:'id'})); console.log(await knex('proxy_host').select('id','domain_names','forward_host','forward_port','enabled').orderBy('id')); await knex.destroy(); })().catch(async e=>{ console.error(e.stack||e.message); try{await knex.destroy()}catch(_){}; process.exit(1); })\\\"\""

/bin/bash -lc "ssh -i /home/node/.ssh/kube-bot-it15-ed25519 kube-bot@192.168.20.20 \"sudo docker exec ngm2-app-1 node -e \\\"const knex=require('/app/db'); (async()=>{ console.log(await knex('proxy_host').count({c:'id'})); console.log(await knex('proxy_host').select('id','domain_names','forward_host','forward_port','enabled').orderBy('id')); await knex.destroy(); })().catch(async e=>{ console.error(e.stack||e.message); try{await knex.destroy()}catch(_){}; process.exit(1); })\\\"\""

======
grep: Trailing backslash
======
grep: Trailing backslash
======
grep: Trailing backslash
======
grep: Trailing backslash
======
grep: Trailing backslash
======
grep: Trailing backslash
======
grep: Trailing backslash
======
grep: Trailing backslash
======
grep: Trailing backslash
======
grep: Trailing backslash
======
grep: Trailing backslash
======
grep: Trailing backslash

[6/19/2026] [8:17:38 PM] [Global   ] › ℹ  info      Using Sqlite: /data/database.sqlite
[ { c: 12 } ]
[
  {
    id: 1,
    domain_names: '["nextcloud.cattaro.eu"]',
    forward_host: '192.168.20.30',
    forward_port: 80,
    enabled: 1
  },
  {
    id: 2,
    domain_names: '["service.heckenfels.com"]',
    forward_host: '192.168.20.40',
    forward_port: 8080,
    enabled: 1
  },
  {
    id: 3,
    domain_names: '["office.cattaro.eu"]',
    forward_host: '192.168.188.40',
    forward_port: 80,
    enabled: 1
  },
  {
    id: 4,
    domain_names: '["meshcentral.cattaro.eu"]',
    forward_host: '192.168.188.42',
    forward_port: 2087,
    enabled: 1
  },
  {
    id: 5,
    domain_names: '["dashboard.heckenfels.com"]',
    forward_host: '192.168.20.40',
    forward_port: 30718,
    enabled: 1
  },
  {
    id: 6,
    domain_names: '["bitwarden.cattaro.eu"]',
    forward_host: '192.168.20.20',
    forward_port: 8080,
    enabled: 1
  },
  {
    id: 7,
    domain_names: '["matomo.heckenfels.com"]',
    forward_host: '192.168.20.40',
    forward_port: 80,
    enabled: 1
  },
  {
    id: 8,
    domain_names: '["argocd.cattaro.eu"]',
    forward_host: '192.168.20.40',
    forward_port: 31797,
    enabled: 1
  },
  {
    id: 9,
    domain_names: '["mautic.heckenfels.com"]',
    forward_host: '192.168.20.40',
    forward_port: 31797,
    enabled: 1
  },
  {
    id: 10,
    domain_names: '["crm.heckenfels.com"]',
    forward_host: '192.168.20.40',
    forward_port: 31797,
    enabled: 1
  },
  {
    id: 11,
    domain_names: '["suitecrm.heckenfels.com"]',
    forward_host: '192.168.20.40',
    forward_port: 31797,
    enabled: 1
  },
  {
    id: 12,
    domain_names: '["n8n.heckenfels.com"]',
    forward_host: '192.168.20.40',
    forward_port: 443,
    enabled: 1
  }
]

/bin/bash -lc 'ssh -i /home/node/.ssh/kube-bot-it15-ed25519 kube-bot@192.168.20.20 "for d in nextcloud.cattaro.eu service.heckenfels.com office.cattaro.eu meshcentral.cattaro.eu dashboard.heckenfels.com bitwarden.cattaro.eu matomo.heckenfels.com argocd.cattaro.eu mautic.heckenfels.com crm.heckenfels.com suitecrm.heckenfels.com n8n.heckenfels.com; do code=$(curl -k -s -o /dev/null -w '"'%{http_code}' --max-time 5 https://"'$d/ || true); echo '"\\\""'$d $code'"\\\"; done\""

/bin/bash -lc 'ssh -i /home/node/.ssh/kube-bot-it15-ed25519 kube-bot@192.168.20.20 "for d in nextcloud.cattaro.eu service.heckenfels.com office.cattaro.eu meshcentral.cattaro.eu dashboard.heckenfels.com bitwarden.cattaro.eu matomo.heckenfels.com argocd.cattaro.eu mautic.heckenfels.com crm.heckenfels.com suitecrm.heckenfels.com n8n.heckenfels.com; do code=$(curl -k -s -o /dev/null -w '"'%{http_code}' --max-time 5 https://"'$d/ || true); echo '"\\\""'$d $code'"\\\"; done\""

CLOSED
CLOSED
CLOSED
CLOSED
CLOSED
CLOSED
CLOSED
CLOSED
CLOSED

CLOSED
CLOSED
CLOSED
CLOSED
CLOSED
CLOSED
CLOSED
CLOSED
CLOSED

tcp   LISTEN 0      4096         0.0.0.0:8000       0.0.0.0:*    users:(("docker-proxy",pid=1357,fd=8))
tcp   LISTEN 0      4096         0.0.0.0:80         0.0.0.0:*    users:(("docker-proxy",pid=1412,fd=8))
tcp   LISTEN 0      4096         0.0.0.0:443        0.0.0.0:*    users:(("docker-proxy",pid=1456,fd=8))
tcp   LISTEN 0      4096            [::]:8000          [::]:*    users:(("docker-proxy",pid=1364,fd=8))
tcp   LISTEN 0      4096            [::]:80            [::]:*    users:(("docker-proxy",pid=1418,fd=8))
tcp   LISTEN 0      4096            [::]:443           [::]:*    users:(("docker-proxy",pid=1462,fd=8))

/bin/bash -lc "ssh -i /home/node/.ssh/kube-bot-it15-ed25519 kube-bot@192.168.20.20 'for d in nextcloud.cattaro.eu service.heckenfels.com office.cattaro.eu meshcentral.cattaro.eu dashboard.heckenfels.com bitwarden.cattaro.eu matomo.heckenfels.com argocd.cattaro.eu mautic.heckenfels.com crm.heckenfels.com suitecrm.heckenfels.com n8n.heckenfels.com; do code="'$(curl -k -s -o /dev/null -w "%{http_code}" --max-time 5 https://$d/ || true); echo "$d $code"; done'"'"

/bin/bash -lc "ssh -i /home/node/.ssh/kube-bot-it15-ed25519 kube-bot@192.168.20.20 'for d in nextcloud.cattaro.eu service.heckenfels.com office.cattaro.eu meshcentral.cattaro.eu dashboard.heckenfels.com bitwarden.cattaro.eu matomo.heckenfels.com argocd.cattaro.eu mautic.heckenfels.com crm.heckenfels.com suitecrm.heckenfels.com n8n.heckenfels.com; do code="'$(curl -k -s -o /dev/null -w "%{http_code}" --max-time 5 https://$d/ || true); echo "$d $code"; done'"'"

/bin/bash -lc "ssh -i /home/node/.ssh/kube-bot-it15-ed25519 kube-bot@192.168.20.40 \"sudo kubectl --kubeconfig=<redacted> get ingress -A -o jsonpath='{range .items[*]}{.spec.rules[*].host}{\\\" -> \\\"}{.metadata.namespace}/{.metadata.name}{\\\"\\\\n\\\"}{end}'\""

/bin/bash -lc "ssh -i /home/node/.ssh/kube-bot-it15-ed25519 kube-bot@192.168.20.40 \"sudo kubectl --kubeconfig=<redacted> get ingress -A -o jsonpath='{range .items[*]}{.spec.rules[*].host}{\\\" -> \\\"}{.metadata.namespace}/{.metadata.name}{\\\"\\\\n\\\"}{end}'\""

n8n.heckenfels.com -> hf-n8n/n8n
matomo.heckenfels.com -> pidoka-hf-matomo/matomo-ingress
mautic.heckenfels.com -> hf-mautic/mautic-ingress
suitecrm.heckenfels.com -> hf-suitecrm/suitecrm-ingress

192.168.20.30:80 CLOSED
192.168.20.40:8080 CLOSED
192.168.188.40:80 CLOSED
192.168.188.42:2087 CLOSED
192.168.20.40:30718 CLOSED
192.168.20.20:8080 CLOSED
192.168.20.40:80 CLOSED
192.168.20.40:31797 CLOSED
192.168.20.40:443 CLOSED

nextcloud.cattaro.eu 302
service.heckenfels.com 200
office.cattaro.eu 000
meshcentral.cattaro.eu 000
dashboard.heckenfels.com 307
bitwarden.cattaro.eu 502
matomo.heckenfels.com 200
argocd.cattaro.eu 404
mautic.heckenfels.com 302
crm.heckenfels.com 404
suitecrm.heckenfels.com 200
n8n.heckenfels.com 200

/bin/bash -lc "ssh -i /home/node/.ssh/kube-bot-it15-ed25519 kube-bot@192.168.20.20 \"sudo docker exec ngm2-app-1 node -e \\\"const knex=require('/app/db'); (async()=>{ const rows=await knex('proxy_host').select('id','domain_names','forward_scheme','forward_host','forward_port','enabled').orderBy('id'); console.log(JSON.stringify(rows,null,2)); await knex.destroy(); })().catch(async e=>{ console.error(e.stack||e.message); try{await knex.destroy()}catch(_){}; process.exit(1); })\\\"\""

/bin/bash -lc "ssh -i /home/node/.ssh/kube-bot-it15-ed25519 kube-bot@192.168.20.20 \"sudo docker exec ngm2-app-1 node -e \\\"const knex=require('/app/db'); (async()=>{ const rows=await knex('proxy_host').select('id','domain_names','forward_scheme','forward_host','forward_port','enabled').orderBy('id'); console.log(JSON.stringify(rows,null,2)); await knex.destroy(); })().catch(async e=>{ console.error(e.stack||e.message); try{await knex.destroy()}catch(_){}; process.exit(1); })\\\"\""

curl: no URL specified!
curl: try 'curl --help' or 'curl --manual' for more information
 curl: no URL specified!
curl: try 'curl --help' or 'curl --manual' for more information
 curl: no URL specified!
curl: try 'curl --help' or 'curl --manual' for more information
 curl: no URL specified!
curl: try 'curl --help' or 'curl --manual' for more information

[6/19/2026] [8:19:03 PM] [Global   ] › ℹ  info      Using Sqlite: /data/database.sqlite
[
  {
    "id": 1,
    "domain_names": "[\"nextcloud.cattaro.eu\"]",
    "forward_scheme": "http",
    "forward_host": "192.168.20.30",
    "forward_port": 80,
    "enabled": 1
  },
  {
    "id": 2,
    "domain_names": "[\"service.heckenfels.com\"]",
    "forward_scheme": "http",
    "forward_host": "192.168.20.40",
    "forward_port": 8080,
    "enabled": 1
  },
  {
    "id": 3,
    "domain_names": "[\"office.cattaro.eu\"]",
    "forward_scheme": "http",
    "forward_host": "192.168.188.40",
    "forward_port": 80,
    "enabled": 1
  },
  {
    "id": 4,
    "domain_names": "[\"meshcentral.cattaro.eu\"]",
    "forward_scheme": "http",
    "forward_host": "192.168.188.42",
    "forward_port": 2087,
    "enabled": 1
  },
  {
    "id": 5,
    "domain_names": "[\"dashboard.heckenfels.com\"]",
    "forward_scheme": "http",
    "forward_host": "192.168.20.40",
    "forward_port": 30718,
    "enabled": 1
  },
  {
    "id": 6,
    "domain_names": "[\"bitwarden.cattaro.eu\"]",
    "forward_scheme": "http",
    "forward_host": "192.168.20.20",
    "forward_port": 8080,
    "enabled": 1
  },
  {
    "id": 7,
    "domain_names": "[\"matomo.heckenfels.com\"]",
    "forward_scheme": "http",
    "forward_host": "192.168.20.40",
    "forward_port": 80,
    "enabled": 1
  },
  {
    "id": 8,
    "domain_names": "[\"argocd.cattaro.eu\"]",
    "forward_scheme": "http",
    "forward_host": "192.168.20.40",
    "forward_port": 31797,
    "enabled": 1
  },
  {
    "id": 9,
    "domain_names": "[\"mautic.heckenfels.com\"]",
    "forward_scheme": "http",
    "forward_host": "192.168.20.40",
    "forward_port": 31797,
    "enabled": 1
  },
  {
    "id": 10,
    "domain_names": "[\"crm.heckenfels.com\"]",
    "forward_scheme": "http",
    "forward_host": "192.168.20.40",
    "forward_port": 31797,
    "enabled": 1
  },
  {
    "id": 11,
    "domain_names": "[\"suitecrm.heckenfels.com\"]",
    "forward_scheme": "http",
    "forward_host": "192.168.20.40",
    "forward_port": 31797,
    "enabled": 1
  },
  {
    "id": 12,
    "domain_names": "[\"n8n.heckenfels.com\"]",
    "forward_scheme": "https",
    "forward_host": "192.168.20.40",
    "forward_port": 443,
    "enabled": 1
  }
]

192.168.20.30:80 OPEN
192.168.20.40:8080 OPEN
192.168.188.40:80 CLOSED
192.168.188.42:2087 CLOSED
192.168.20.40:30718 OPEN
192.168.20.20:8080 CLOSED
192.168.20.40:80 OPEN
192.168.20.40:31797 OPEN
192.168.20.40:443 OPEN

/bin/bash -lc "rg -n \"crm\\.heckenfels|service\\.heckenfels|argocd\\.cattaro|bitwarden\\.cattaro|office\\.cattaro|meshcentral\\.cattaro|dashboard\\.heckenfels\" inventory *.md"

/bin/bash -lc "rg -n \"crm\\.heckenfels|service\\.heckenfels|argocd\\.cattaro|bitwarden\\.cattaro|office\\.cattaro|meshcentral\\.cattaro|dashboard\\.heckenfels\" inventory *.md"

ARGOCD_IT15_INFISICAL_PIDOKA_PLAN.md:125:- Existing DMZ Argo CD has ingress `argocd.cattaro.eu` via Traefik.
PLATFORM_AUFGABEN_KUBE_BOT.md:20:- Argo CD: `argocd.cattaro.eu` -> K3s/Ingress
PLATFORM_AUFGABEN_KUBE_BOT.md:205:  - Ingress: `argocd.cattaro.eu` über Traefik
PLATFORM_AUFGABEN_KUBE_BOT.md:207:  - Extern über `https://argocd.cattaro.eu` erreichbar, HTTP 200.
PLATFORM_AUFGABEN_KUBE_BOT.md:266:- `argocd.cattaro.eu` -> `http://192.168.20.40:31797`
PLATFORM_AUFGABEN_KUBE_BOT.md:267:- `bitwarden.cattaro.eu` -> `http://192.168.20.20:8080`
PLATFORM_AUFGABEN_KUBE_BOT.md:269:- `office.cattaro.eu` -> `http://192.168.188.40:80`
PLATFORM_AUFGABEN_KUBE_BOT.md:270:- `meshcentral.cattaro.eu` -> `http://192.168.188.42:2087`
PLATFORM_AUFGABEN_KUBE_BOT.md:275:- `crm.heckenfels.com` -> `http://192.168.20.40:31797`
PLATFORM_AUFGABEN_KUBE_BOT.md:276:- `suitecrm.heckenfels.com` -> `http://192.168.20.40:31797`
PLATFORM_AUFGABEN_KUBE_BOT.md:278:- `dashboard.heckenfels.com` -> `http://192.168.20.40:30718`
PLATFORM_AUFGABEN_KUBE_BOT.md:279:- `service.heckenfels.com` -> `http://192.168.20.40:8080`
PLATFORM_AUFGABEN_KUBE_BOT.md:293:- Ist `dashboard.heckenfels.com` ein Admin-Dashboard oder Anwender-Dashboard?
PLATFORM_AUFGABEN_KUBE_BOT.md:294:- Was ist `service.heckenfels.com` auf Port 8080?
SESSION_HANDOFF.md:278:  - Extern: `https://service.heckenfels.com/` HTTP 200.
SESSION_HANDOFF.md:722:  - Service: `LoadBalancer` Port `8080`, NPM/Externpfad `service.heckenfels.com`.
SESSION_HANDOFF.md:746:  - `https://service.heckenfels.com/`: HTTP `200`.
SESSION_HANDOFF.md:769:  - `https://service.heckenfels.com/`: HTTP `200`.
SESSION_HANDOFF.md:805:  - Externer Check danach: `https://service.heckenfels.com/` HTTP `200`.
SESSION_HANDOFF.md:883:  - `https://service.heckenfels.com/`: HTTP `200`
SESSION_HANDOFF.md:914:  - `https://service.heckenfels.com/`: HTTP `200`.
SESSION_HANDOFF.md:1059:  - `https://service.heckenfels.com/`: HTTP `200`.
SESSION_HANDOFF.md:1098:  - Zammad `https://service.heckenfels.com/`: HTTP `200`.
SESSION_HANDOFF.md:1119:  - `https://service.heckenfels.com/`: HTTP `200`.
SESSION_HANDOFF.md:1154:  - `https://service.heckenfels.com/`: `200`
SESSION_HANDOFF.md:1315:  - Extern `https://service.heckenfels.com/` zuletzt HTTP `200`.
SESSION_HANDOFF.md:1581:    - Host `suitecrm.heckenfels.com`
SESSION_HANDOFF.md:1582:    - Externer Test: `https://suitecrm.heckenfels.com/` HTTP `200`
SESSION_HANDOFF.md:1621:  - `https://suitecrm.heckenfels.com/`: HTTP `200`
SESSION_HANDOFF.md:1848:  - Service `my-homarr` NodePort `30718`; passt zum dokumentierten NPM-Proxy `dashboard.heckenfels.com`.
SESSION_HANDOFF.md:1903:  - `https://dashboard.heckenfels.com/` liefert HTTP `307` nach `/board`.
SESSION_HANDOFF.md:1932:  - `https://dashboard.heckenfels.com/`: HTTP `307` nach `/board`.
SESSION_HANDOFF.md:1942:  - `https://dashboard.heckenfels.com/`: HTTP `307` nach `/board`.
INFRASTRUCTURE.md:46:- service.heckenfels.com → http://192.168.20.40:8080
INFRASTRUCTURE.md:47:- office.cattaro.eu → http://192.168.188.40:80
INFRASTRUCTURE.md:48:- meshcentral.cattaro.eu → http://192.168.188.42:2087
INFRASTRUCTURE.md:49:- dashboard.heckenfels.com → http://192.168.20.40:30718
INFRASTRUCTURE.md:50:- bitwarden.cattaro.eu → http://192.168.20.20:8080
INFRASTRUCTURE.md:52:- argocd.cattaro.eu → http://192.168.20.40:31797
INFRASTRUCTURE.md:54:- crm.heckenfels.com → http://192.168.20.40:31797
INFRASTRUCTURE.md:55:- suitecrm.heckenfels.com → http://192.168.20.40:31797
INFRASTRUCTURE.md:72:  - `office.cattaro.eu`
INFRASTRUCTURE.md:73:  - `meshcentral.cattaro.eu`
INFRASTRUCTURE.md:74:  - `bitwarden.cattaro.eu`
INFRASTRUCTURE.md:75:  - `argocd.cattaro.eu`
INFRASTRUCTURE.md:81:  - `service.heckenfels.com`
INFRASTRUCTURE.md:82:  - `dashboard.heckenfels.com`
INFRASTRUCTURE.md:85:  - `crm.heckenfels.com`
INFRASTRUCTURE.md:86:  - `suitecrm.heckenfels.com`
inventory/argocd-mandanten-migrationsmatrix-20260615.md:44:| `infra-argocd` | altes DMZ-ArgoCD | mehrere Apps verwaltet; öffentlich via `argocd.cattaro.eu` Ingress | Nach Migration deaktivieren/entfernen nur mit explizitem OK. |
inventory/argocd-mandanten-migrationsmatrix-20260615.md:54:| `homarr` | Homarr | `dashboard.heckenfels.com` zeigt laut NPM auf NodePort `30718` | Vermutlich Pidoka/Heckenfels oder Shared Dashboard; fachlich klären. |
inventory/argocd-mandanten-migrationsmatrix-20260615.md:55:| `bitwarden` | Namespace vorhanden, Proxy `bitwarden.cattaro.eu` zeigt auf `192.168.20.20:8080` | Nicht im aktuellen K8s Workload-Auszug sichtbar | Prüfen, ob Docker auf Raspi oder K8s Altlast. |
inventory/argocd-mandanten-migrationsmatrix-20260615.md:57:| `zammad` | Zammad Stack | LoadBalancer `8080`; NPM `service.heckenfels.com` zeigt auf `192.168.20.40:8080` | Vermutlich Pidoka/Heckenfels Service; gesund wirkend, aber Storage local-path. |
inventory/argocd-mandanten-migrationsmatrix-20260615.md:66:| `hf-espocrm` | EspoCRM + MariaDB | `crm.heckenfels.com` | Running, Argo OutOfSync | P2 — Drift analysieren. |
inventory/argocd-mandanten-migrationsmatrix-20260615.md:67:| `hf-suitecrm` | SuiteCRM + MariaDB | `suitecrm.heckenfels.com` | Deployment 0/1, ImagePullBackOff/Progressing | P3 — erst reparieren/entscheidet ob migrieren oder ablösen. |
inventory/argocd-mandanten-migrationsmatrix-20260615.md:68:| `zammad` | Zammad | `service.heckenfels.com` via NPM auf `192.168.20.40:8080` | Running | P2 — Quelle/Owner prüfen, Storage local-path beachten. |
inventory/argocd-mandanten-migrationsmatrix-20260615.md:75:| `office.cattaro.eu` | `http://office.cattaro.eu:80` | ja | nein | Nicht direkt K3s; DNS/Loop prüfen. |
inventory/argocd-mandanten-migrationsmatrix-20260615.md:76:| `service.heckenfels.com` | `http://192.168.20.40:8080` | ja | nein | Vermutlich Zammad LoadBalancer. |
inventory/argocd-mandanten-migrationsmatrix-20260615.md:77:| `meshcentral.cattaro.eu` | `https://192.168.188.42:2087` | ja | ja | Nicht K3s, Intranet/Management. |
inventory/argocd-mandanten-migrationsmatrix-20260615.md:78:| `dashboard.heckenfels.com` | `http://192.168.20.40:30718` | ja | ja | Homarr NodePort. |
inventory/argocd-mandanten-migrationsmatrix-20260615.md:79:| `bitwarden.cattaro.eu` | `http://192.168.20.20:8080` | ja | ja | Raspi/Docker oder lokaler Dienst; nicht K3s-Traefik. |
inventory/k8s-inventory-raw.txt:136:hf-espocrm     espocrm             traefik   crm.heckenfels.com        192.168.20.40,192.168.20.45   80      261d
inventory/k8s-inventory-raw.txt:140:hf-suitecrm    suitecrm-suitecrm   traefik   suitecrm.heckenfels.com   192.168.20.40,192.168.20.45   80      259d
inventory/k8s-inventory-raw.txt:141:infra-argocd   argocd-server       traefik   argocd.cattaro.eu         192.168.20.40,192.168.20.45   80      267d
inventory/argocd-apps.json:420:                        "http://suitecrm.heckenfels.com/"
inventory/argocd-apps.json:3288:                        "http://crm.heckenfels.com/"
inventory/professionalization-priorities.md:109:- `office.cattaro.eu` → `192.168.188.40`
inventory/professionalization-priorities.md:110:- `meshcentral.cattaro.eu` → `192.168.188.42`
inventory/professionalization-priorities.md:111:- `bitwarden.cattaro.eu` → `192.168.20.20:8080`
inventory/service-matrix.md:8:| Cattaro GmbH | `argocd.cattaro.eu` | `http://192.168.20.40:31797` | infra-argocd/argocd-server / → svc/argocd-server:80 | `infra-argocd` | argocd-server (ClusterIP 80->8080, 443->8080) | Deployment/argocd-server |  | apps Unknown/Healthy |
inventory/service-matrix.md:9:| Cattaro GmbH | `bitwarden.cattaro.eu` | `http://192.168.20.20:8080` | kein Kubernetes-Ingress gefunden | `-` | - | - | - | nicht sichtbar |
inventory/service-matrix.md:10:| Cattaro GmbH | `meshcentral.cattaro.eu` | `http://192.168.188.42:2087` | kein Kubernetes-Ingress gefunden | `-` | - | - | - | nicht sichtbar |
inventory/service-matrix.md:12:| Cattaro GmbH | `office.cattaro.eu` | `http://192.168.188.40:80` | kein Kubernetes-Ingress gefunden | `-` | - | - | - | nicht sichtbar |
inventory/service-matrix.md:13:| Pidoka GmbH | `crm.heckenfels.com` | `http://192.168.20.40:31797` | hf-espocrm/espocrm / → svc/espocrm:80 | `hf-espocrm` | espocrm (ClusterIP 80->80) | Deployment/espocrm | data-hf-espocrm-mariadb-0 Bound longhorn 8Gi | hf-espocrm Unknown/Healthy |
inventory/service-matrix.md:14:| Pidoka GmbH | `dashboard.heckenfels.com` | `http://192.168.20.40:30718` | kein Kubernetes-Ingress gefunden | `-` | - | - | - | nicht sichtbar |
inventory/service-matrix.md:18:| Pidoka GmbH | `service.heckenfels.com` | `http://192.168.20.40:8080` | kein Kubernetes-Ingress gefunden | `-` | - | - | - | nicht sichtbar |
inventory/service-matrix.md:19:| Pidoka GmbH | `suitecrm.heckenfels.com` | `http://192.168.20.40:31797` | hf-suitecrm/suitecrm-suitecrm / → svc/suitecrm-suitecrm:8080 | `hf-suitecrm` | suitecrm-suitecrm (ClusterIP 8080->8080) | Deployment/suitecrm-suitecrm | data-suitecrm-mariadb-0 Bound longhorn 10Gi; suitecrm-suitecrm Bound longhorn 10Gi | suitecrm Unknown/Progressing |
inventory/service-matrix.md:22:- `argocd.cattaro.eu` → https://github.com/GitMasterOne/ArgoCD applications
inventory/service-matrix.md:23:- `crm.heckenfels.com` → https://github.com/GitMasterOne/ArgoCD.git espocrm
inventory/service-matrix.md:26:- `suitecrm.heckenfels.com` → https://github.com/GitMasterOne/ArgoCD.git charts/suitecrm
inventory/service-matrix.md:30:- Problematisch/unklar: `suitecrm.heckenfels.com` (`Unknown/Progressing`) plus ImagePullBackOff im Namespace.
inventory/layered-inventory.md:49:| `service.heckenfels.com` | `http://192.168.20.40:8080` | Pidoka | force SSL, websocket, http2 |
inventory/layered-inventory.md:50:| `office.cattaro.eu` | `http://192.168.188.40:80` | Cattaro | - |
inventory/layered-inventory.md:51:| `meshcentral.cattaro.eu` | `http://192.168.188.42:2087` | Cattaro | - |
inventory/layered-inventory.md:52:| `dashboard.heckenfels.com` | `http://192.168.20.40:30718` | Pidoka | - |
inventory/layered-inventory.md:53:| `bitwarden.cattaro.eu` | `http://192.168.20.20:8080` | Cattaro | - |
inventory/layered-inventory.md:55:| `argocd.cattaro.eu` | `http://192.168.20.40:31797` | Cattaro | http2 |
inventory/layered-inventory.md:57:| `crm.heckenfels.com` | `http://192.168.20.40:31797` | Pidoka | websocket |
inventory/layered-inventory.md:58:| `suitecrm.heckenfels.com` | `http://192.168.20.40:31797` | Pidoka | websocket |
inventory/layered-inventory.md:66:| `hf-espocrm` | `espocrm` | `crm.heckenfels.com` |
inventory/layered-inventory.md:70:| `hf-suitecrm` | `suitecrm-suitecrm` | `suitecrm.heckenfels.com` |
inventory/layered-inventory.md:71:| `infra-argocd` | `argocd-server` | `argocd.cattaro.eu` |
inventory/migration-20260615/nginx-proxy-hosts.txt:2:2|["office.cattaro.eu"]|http|office.cattaro.eu|80|1|0
inventory/migration-20260615/nginx-proxy-hosts.txt:3:3|["service.heckenfels.com"]|http|192.168.20.40|8080|1|0
inventory/migration-20260615/nginx-proxy-hosts.txt:4:4|["meshcentral.cattaro.eu"]|https|192.168.188.42|2087|1|1
inventory/migration-20260615/nginx-proxy-hosts.txt:5:5|["dashboard.heckenfels.com"]|http|192.168.20.40|30718|1|1
inventory/migration-20260615/nginx-proxy-hosts.txt:6:6|["bitwarden.cattaro.eu"]|http|192.168.20.20|8080|1|1
inventory/k8s-objects.json:2832:                    "kubectl.kubernetes.io/last-applied-configuration": "{\"apiVersion\":\"networking.k8s.io/v1\",\"kind\":\"Ingress\",\"metadata\":{\"annotations\":{\"argocd.argoproj.io/tracking-id\":\"hf-espocrm:networking.k8s.io/Ingress:hf-espocrm/espocrm\",\"kubernetes.io/ingress.class\":\"traefik\",\"traefik.ingress.kubernetes.io/router.entrypoints\":\"web\"},\"name\":\"espocrm\",\"namespace\":\"hf-espocrm\"},\"spec\":{\"ingressClassName\":\"traefik\",\"rules\":[{\"host\":\"crm.heckenfels.com\",\"http\":{\"paths\":[{\"backend\":{\"service\":{\"name\":\"espocrm\",\"port\":{\"number\":80}}},\"path\":\"/\",\"pathType\":\"Prefix\"}]}}]}}\n",
inventory/k8s-objects.json:2847:                        "host": "crm.heckenfels.com",
inventory/k8s-objects.json:3055:                    "kubectl.kubernetes.io/last-appl
...(truncated)...

/bin/bash -lc "ssh -i /home/node/.ssh/kube-bot-it15-ed25519 kube-bot@192.168.20.40 'sudo ss -tulpn | grep -E \":(80|443|8080|31797|30718)\" || true; for host in n8n.heckenfels.com matomo.heckenfels.com mautic.heckenfels.com crm.heckenfels.com suitecrm.heckenfels.com argocd.cattaro.eu; do printf \"%s \" \""'$host"; curl -k -s -o /dev/null -w "%{http_code} %{redirect_url}'"\\n\" --max-time 5 -H \"Host: "'$host" http://192.168.20.40:31797/ || true; done'"'"

/bin/bash -lc "ssh -i /home/node/.ssh/kube-bot-it15-ed25519 kube-bot@192.168.20.40 'sudo ss -tulpn | grep -E \":(80|443|8080|31797|30718)\" || true; for host in n8n.heckenfels.com matomo.heckenfels.com mautic.heckenfels.com crm.heckenfels.com suitecrm.heckenfels.com argocd.cattaro.eu; do printf \"%s \" \""'$host"; curl -k -s -o /dev/null -w "%{http_code} %{redirect_url}'"\\n\" --max-time 5 -H \"Host: "'$host" http://192.168.20.40:31797/ || true; done'"'"

http://192.168.20.40:30718/ 307 http://192.168.20.40:30718/board
http://192.168.20.40:80/ 404
http://192.168.20.40:31797/ 404
https://192.168.20.40:443/ 404
http://192.168.20.40:8080/ 200

tcp   LISTEN 0      511                *:80               *:*    users:(("apache2",pid=3799401,fd=4),("apache2",pid=3799400,fd=4),("apache2",pid=1110489,fd=4))
n8n.heckenfels.com 200
matomo.heckenfels.com 200
mautic.heckenfels.com 302 http://192.168.20.40:31797/s/dashboard
crm.heckenfels.com 404
suitecrm.heckenfels.com 200
argocd.cattaro.eu 404

/bin/bash -lc "ssh -i /home/node/.ssh/kube-bot-it15-ed25519 kube-bot@192.168.20.40 'for host in matomo.heckenfels.com n8n.heckenfels.com mautic.heckenfels.com suitecrm.heckenfels.com crm.heckenfels.com argocd.cattaro.eu; do printf \"port80 %s \" \""'$host"; curl -k -s -o /dev/null -w "%{http_code} %{redirect_url}'"\\n\" --max-time 5 -H \"Host: "'$host" http://192.168.20.40:80/ || true; done; for host in matomo.heckenfels.com n8n.heckenfels.com mautic.heckenfels.com suitecrm.heckenfels.com crm.heckenfels.com argocd.cattaro.eu; do printf "port31797 %s " "$host"; curl -k -s -o /dev/null -w "%{http_code} %{redirect_url}'"\\n\" --max-time 5 -H \"Host: "'$host" http://192.168.20.40:31797/ || true; done'"'"

/bin/bash -lc "ssh -i /home/node/.ssh/kube-bot-it15-ed25519 kube-bot@192.168.20.40 'for host in matomo.heckenfels.com n8n.heckenfels.com mautic.heckenfels.com suitecrm.heckenfels.com crm.heckenfels.com argocd.cattaro.eu; do printf \"port80 %s \" \""'$host"; curl -k -s -o /dev/null -w "%{http_code} %{redirect_url}'"\\n\" --max-time 5 -H \"Host: "'$host" http://192.168.20.40:80/ || true; done; for host in matomo.heckenfels.com n8n.heckenfels.com mautic.heckenfels.com suitecrm.heckenfels.com crm.heckenfels.com argocd.cattaro.eu; do printf "port31797 %s " "$host"; curl -k -s -o /dev/null -w "%{http_code} %{redirect_url}'"\\n\" --max-time 5 -H \"Host: "'$host" http://192.168.20.40:31797/ || true; done'"'"

port80 matomo.heckenfels.com 200
port80 n8n.heckenfels.com 200
port80 mautic.heckenfels.com 302 http://192.168.20.40:80/s/dashboard
port80 suitecrm.heckenfels.com 200
port80 crm.heckenfels.com 404
port80 argocd.cattaro.eu 404
port31797 matomo.heckenfels.com 200
port31797 n8n.heckenfels.com 200
port31797 mautic.heckenfels.com 302 http://192.168.20.40:31797/s/dashboard
port31797 suitecrm.heckenfels.com 200
port31797 crm.heckenfels.com 404
port31797 argocd.cattaro.eu 404

/bin/bash -lc "ssh -i /home/node/.ssh/kube-bot-it15-ed25519 kube-bot@192.168.20.40 \"sudo apache2ctl -S 2>/dev/null || true; sudo find /etc/apache2/sites-enabled -type f -maxdepth 1 -print -exec sudo grep -HEn 'ServerName|ServerAlias|ProxyPass|RewriteRule|DocumentRoot' {} \\; 2>/dev/null || true\""

/bin/bash -lc "ssh -i /home/node/.ssh/kube-bot-it15-ed25519 kube-bot@192.168.20.40 \"sudo apache2ctl -S 2>/dev/null || true; sudo find /etc/apache2/sites-enabled -type f -maxdepth 1 -print -exec sudo grep -HEn 'ServerName|ServerAlias|ProxyPass|RewriteRule|DocumentRoot' {} \\; 2>/dev/null || true\""

VirtualHost configuration:
*:80                   192.168.189.22 (/etc/apache2/sites-enabled/zammad.conf:8)
ServerRoot: "/etc/apache2"
Main DocumentRoot: "/var/www/html"
Main ErrorLog: "/var/log/apache2/error.log"
Mutex watchdog-callback: using_defaults
Mutex proxy: using_defaults
Mutex default: dir="/var/run/apache2/" mechanism=default
PidFile: "/var/run/apache2/apache2.pid"
Define: DUMP_VHOSTS
Define: DUMP_RUN_CFG
User: name="www-data" id=33
Group: name="www-data" id=33

/bin/bash -lc "ssh -i /home/node/.ssh/kube-bot-it15-ed25519 kube-bot@192.168.20.40 \"sudo sed -n '1,220p' /etc/apache2/sites-enabled/zammad.conf\""

/bin/bash -lc "ssh -i /home/node/.ssh/kube-bot-it15-ed25519 kube-bot@192.168.20.40 \"sudo sed -n '1,220p' /etc/apache2/sites-enabled/zammad.conf\""

#
# this is the apache config for zammad
#

# security - prevent information disclosure about server version
ServerTokens Prod

<VirtualHost *:80>
    # replace 'localhost' with your fqdn if you want to use zammad from remote
    ServerName  192.168.189.22
    #localhost

    ## don't loose time with IP address lookups
    HostnameLookups Off

    ## needed for named virtual hosts
    UseCanonicalName Off

    ## configures the footer on server-generated documents
    ServerSignature Off

    ProxyRequests Off
    ProxyPreserveHost On

    <Proxy 127.0.0.1:3000>
	Require local
    </Proxy>

    ProxyPass /assets !
    ProxyPass /favicon.ico !
    ProxyPass /apple-touch-icon.png !
    ProxyPass /robots.txt !
    # legacy web socket server
    ProxyPass /ws ws://127.0.0.1:6042/
    # action cable
    ProxyPass /cable ws://127.0.0.1:3000/cable
    ProxyPass / http://127.0.0.1:3000/

    # change this line in an SSO setup
    # RequestHeader unset X-Forwarded-User

    DocumentRoot "/opt/zammad/public"

    <Directory />
        Options FollowSymLinks
        AllowOverride None
    </Directory>

    <Directory "/opt/zammad/public">
        Options FollowSymLinks
	Require all granted
    </Directory>

</VirtualHost>

/bin/bash -lc "ssh -i /home/node/.ssh/kube-bot-it15-ed25519 kube-bot@192.168.20.40 'for host in matomo.heckenfels.com service.heckenfels.com suitecrm.heckenfels.com n8n.heckenfels.com; do echo ===traefik-"'$host===; curl -k -L -s --max-time 8 -H "Host: $host" http://192.168.20.40:31797/ | tr "'"\\n\" \" \" | sed -E \"s/[[:space:]]+/ /g\" | grep -oiE \"<title>["'^<]+|Matomo|Zammad|SuiteCRM|n8n|Homarr" | head -n 8; done'"'"

/bin/bash -lc "ssh -i /home/node/.ssh/kube-bot-it15-ed25519 kube-bot@192.168.20.40 'for host in matomo.heckenfels.com service.heckenfels.com suitecrm.heckenfels.com n8n.heckenfels.com; do echo ===traefik-"'$host===; curl -k -L -s --max-time 8 -H "Host: $host" http://192.168.20.40:31797/ | tr "'"\\n\" \" \" | sed -E \"s/[[:space:]]+/ /g\" | grep -oiE \"<title>["'^<]+|Matomo|Zammad|SuiteCRM|n8n|Homarr" | head -n 8; done'"'"

/bin/bash -lc "ssh -i /home/node/.ssh/kube-bot-it15-ed25519 kube-bot@192.168.20.20 'for d in matomo.heckenfels.com service.heckenfels.com suitecrm.heckenfels.com n8n.heckenfels.com dashboard.heckenfels.com; do echo ==="'$d===; curl -k -L -s --max-time 8 https://$d/ | tr "'"\\n\" \" \" | sed -E \"s/[[:space:]]+/ /g\" | grep -oiE \"<title>["'^<]+|Matomo|Zammad|SuiteCRM|n8n|Homarr" | head -n 8; done'"'"

/bin/bash -lc "ssh -i /home/node/.ssh/kube-bot-it15-ed25519 kube-bot@192.168.20.20 'for d in matomo.heckenfels.com service.heckenfels.com suitecrm.heckenfels.com n8n.heckenfels.com dashboard.heckenfels.com; do echo ==="'$d===; curl -k -L -s --max-time 8 https://$d/ | tr "'"\\n\" \" \" | sed -E \"s/[[:space:]]+/ /g\" | grep -oiE \"<title>["'^<]+|Matomo|Zammad|SuiteCRM|n8n|Homarr" | head -n 8; done'"'"

===traefik-matomo.heckenfels.com===
===traefik-service.heckenfels.com===
===traefik-suitecrm.heckenfels.com===
<title>SuiteCRM
===traefik-n8n.heckenfels.com===
n8n
n8n
<title>n8n.io - Workflow Automation
n8n

===matomo.heckenfels.com===
===service.heckenfels.com===
<title>Heckenfels Service
zammad
===suitecrm.heckenfels.com===
<title>SuiteCRM
===n8n.heckenfels.com===
n8n
n8n
<title>n8n.io - Workflow Automation
n8n
===dashboard.heckenfels.com===
Homarr
<title>Login • Homarr
Homarr
homarr
homarr
Homarr
Homarr
Homarr

/bin/bash -lc "ssh -i /home/node/.ssh/kube-bot-it15-ed25519 kube-bot@192.168.20.20 'for url in https://matomo.heckenfels.com/ http://192.168.20.40:80/ http://192.168.20.40:31797/; do echo ==="'$url===; if echo $url | grep -q 192.168; then curl -k -sS -D - --max-time 8 -H "Host: matomo.heckenfels.com" $url -o /tmp/matomo_check_body; else curl -k -sS -D - --max-time 8 $url -o /tmp/matomo_check_body; fi; echo body_bytes=$(wc -c </tmp/matomo_check_body); head -c 500 /tmp/matomo_check_body | tr "'"\\n\" \" \" | sed -E \"s/[[:space:]]+/ /g\"; echo; done'"

/bin/bash -lc "ssh -i /home/node/.ssh/kube-bot-it15-ed25519 kube-bot@192.168.20.20 'for url in https://matomo.heckenfels.com/ http://192.168.20.40:80/ http://192.168.20.40:31797/; do echo ==="'$url===; if echo $url | grep -q 192.168; then curl -k -sS -D - --max-time 8 -H "Host: matomo.heckenfels.com" $url -o /tmp/matomo_check_body; else curl -k -sS -D - --max-time 8 $url -o /tmp/matomo_check_body; fi; echo body_bytes=$(wc -c </tmp/matomo_check_body); head -c 500 /tmp/matomo_check_body | tr "'"\\n\" \" \" | sed -E \"s/[[:space:]]+/ /g\"; echo; done'"

/bin/bash -lc "ssh -i /home/node/.ssh/kube-bot-it15-ed25519 kube-bot@192.168.20.40 'sudo kubectl --kubeconfig=<redacted> -n pidoka-hf-matomo logs deploy/matomo --tail=20 2>/dev/null || true'"

/bin/bash -lc "ssh -i /home/node/.ssh/kube-bot-it15-ed25519 kube-bot@192.168.20.40 'sudo kubectl --kubeconfig=<redacted> -n pidoka-hf-matomo logs deploy/matomo --tail=20 2>/dev/null || true'"

10.42.0.43 - - [17/Jun/2026:14:28:59 +0000] "GET / HTTP/1.1" 200 173 "-" "curl/7.81.0"
10.42.0.43 - - [17/Jun/2026:14:29:00 +0000] "GET / HTTP/1.1" 200 173 "-" "curl/7.81.0"
10.42.0.43 - - [17/Jun/2026:14:29:09 +0000] "GET / HTTP/1.1" 200 173 "-" "curl/7.81.0"
10.42.0.43 - - [17/Jun/2026:14:29:10 +0000] "GET / HTTP/1.1" 200 173 "-" "curl/7.81.0"
10.42.0.43 - - [17/Jun/2026:14:29:20 +0000] "GET / HTTP/1.1" 200 173 "-" "curl/7.81.0"
10.42.0.43 - - [17/Jun/2026:14:29:20 +0000] "GET / HTTP/1.1" 200 173 "-" "curl/7.81.0"
10.42.0.43 - - [17/Jun/2026:14:29:30 +0000] "GET / HTTP/1.1" 200 173 "-" "curl/7.81.0"
10.42.0.43 - - [17/Jun/2026:14:29:31 +0000] "GET / HTTP/1.1" 200 173 "-" "curl/7.81.0"
10.42.0.43 - - [17/Jun/2026:14:30:15 +0000] "GET / HTTP/1.1" 200 173 "-" "curl/7.88.1"
10.42.0.43 - - [17/Jun/2026:14:31:09 +0000] "GET / HTTP/1.1" 200 173 "-" "curl/7.81.0"
10.42.0.43 - - [17/Jun/2026:21:42:39 +0000] "GET / HTTP/1.1" 200 173 "-" "curl/7.81.0"
10.42.0.43 - - [18/Jun/2026:06:09:15 +0000] "GET / HTTP/1.1" 200 173 "-" "curl/7.88.1"
10.42.0.43 - - [19/Jun/2026:20:14:55 +0000] "GET / HTTP/1.1" 200 173 "-" "curl/7.81.0"
10.42.0.43 - - [19/Jun/2026:20:15:17 +0000] "GET / HTTP/1.1" 200 173 "-" "curl/7.81.0"
10.42.0.43 - - [19/Jun/2026:20:18:39 +0000] "GET / HTTP/1.1" 200 173 "-" "curl/7.88.1"
10.42.0.43 - - [19/Jun/2026:20:19:38 +0000] "GET / HTTP/1.1" 200 173 "-" "curl/7.81.0"
10.42.0.43 - - [19/Jun/2026:20:20:00 +0000] "GET / HTTP/1.1" 200 173 "-" "curl/7.81.0"
10.42.0.43 - - [19/Jun/2026:20:20:00 +0000] "GET / HTTP/1.1" 200 173 "-" "curl/7.81.0"
10.42.0.43 - - [19/Jun/2026:20:20:27 +0000] "GET / HTTP/1.1" 200 173 "-" "curl/7.81.0"
10.42.0.43 - - [19/Jun/2026:20:20:27 +0000] "GET / HTTP/1.1" 200 173 "-" "curl/7.88.1"

===https://matomo.heckenfels.com/===
HTTP/2 200
server: openresty
date: Fri, 19 Jun 2026 20:20:44 GMT
content-type: text/html; charset=UTF-8
content-length: 0
x-powered-by: PHP/8.4.20
x-served-by: matomo.heckenfels.com

body_bytes=0

===http://192.168.20.40:80/===
HTTP/1.1 200 OK
Content-Length: 0
Content-Type: text/html; charset=UTF-8
Date: Fri, 19 Jun 2026 20:20:44 GMT
Server: Apache/2.4.66 (Debian)
X-Powered-By: PHP/8.4.20

body_bytes=0

===http://192.168.20.40:31797/===
HTTP/1.1 200 OK
Content-Length: 0
Content-Type: text/html; charset=UTF-8
Date: Fri, 19 Jun 2026 20:20:44 GMT
Server: Apache/2.4.66 (Debian)
X-Powered-By: PHP/8.4.20

body_bytes=0