# sultan server auf dem Ingress-Knoten (neben Traefik). # # cp .env.example .env && $EDITOR .env # install -d -m 0700 -o 65532 -g 65532 suldata # Datenverzeichnis für den nonroot-User # docker compose up -d # docker compose exec sultan-server sultan version # Zeitzone prüfen # docker compose exec sultan-server sultan token tenant add … # # network_mode: host wie Traefik: # - Ports frei wählbar (.env), ohne Mapping; die Adresse des Landers für die # Wartungsseiten stimmt damit automatisch. # - Rate-Limit und nodes.ip_address sehen die echte IP der Agents. # Traefik pollt http://${SULTAN_PROVIDER_ADDR}/v1/traefik-config (traefik.yml, siehe # traefik-provider.yml). services: sultan-server: image: ${SULTAN_IMAGE:-sultan:latest} container_name: sultan-server restart: unless-stopped network_mode: host command: ["sultan", "server", "--data-dir=/suldata"] environment: # Agents (TLS 1.3) – in der Firewall für die Agent-Hosts öffnen. SULTAN_AGENT_ADDR: ${SULTAN_AGENT_ADDR:-:8443} # Traefik-Provider & Checkmk – Klartext, nur Loopback! SULTAN_PROVIDER_ADDR: ${SULTAN_PROVIDER_ADDR:-127.0.0.1:8080} # Lander (Hinweis-/Wartungsseiten) – nur Loopback, Traefik ruft ihn auf. SULTAN_LANDER_ADDR: ${SULTAN_LANDER_ADDR:-127.0.0.1:8081} # Leer = keine Adresse in Einladungen (Agent braucht dann --server). # Mehrere Adressen kommagetrennt (öffentlich, NetBird …). SULTAN_PUBLIC_URL: ${SULTAN_PUBLIC_URL:-} SULTAN_HOSTER_NAME: ${SULTAN_HOSTER_NAME:-} SULTAN_HOSTER_URL: ${SULTAN_HOSTER_URL:-} SULTAN_NOTIFY_SLACK: ${SULTAN_NOTIFY_SLACK:-} SULTAN_NOTIFY_NTFY: ${SULTAN_NOTIFY_NTFY:-} SULTAN_NOTIFY_NTFY_TOKEN: ${SULTAN_NOTIFY_NTFY_TOKEN:-} # Zeitzone für Wartungsseite und Checkmk (sonst UTC). Prüfen: # docker compose exec sultan-server sultan version TZ: ${TZ:-Europe/Berlin} volumes: - ./suldata:/suldata # sultan.db, server.key/.crt, master.key – sichern!