Caddy anstelle von Nginx Proxy Manager

Nachdem es wohl immer mal Probleme mit dem NPM zu geben scheint, habe ich mal eine Testinstallation mit Caddy anstelle von NPM aufgesetzt.
Der Caddy Server hat den Vorteil, dass er sich selbst um die Zertifikate kümmert.
Anstelle des docker-compose.yml aus der Installationsanleitung (Anleitung) verwendet man folgendes File:

version: '3.0'
networks:
  alarmiator-network:
    name: alarmiator-network
    driver: bridge

services:
  alarmiator_service:
    networks:
      - alarmiator-network
    restart: always
    image: alarmiator/alarmiator
    ports:
      - '5000:5000'
      - '5010:5010'
      - '5020:5020'
    healthcheck:
      test: curl --fail http://localhost:5000 || exit 1
      interval: 20s
      retries: 5
      start_period: 15s
      timeout: 10s
    volumes:
      - alarm-db:/alarmiatorserver/store
      - alarm-katsys:/alarmiatorserver/plugins/inbound/katsys
      - alarm-public-img:/alarmiatorserver/public/assets/img
      - alarm-uploads:/alarmiatorserver/uploads
      - alarm-logs:/alarmiatorserver/logs
  caddy:
    networks:
      - alarmiator-network
    image: caddy:2.6.4-alpine
    restart: always
    ports:
      - "80:80"
      - "443:443"
      - "443:443/udp"
    volumes:
      - ./Caddyfile:/etc/caddy/Caddyfile
      - caddy_data:/data
      - caddy_config:/config

volumes:
  alarm-db:
  alarm-katsys:
  alarm-public-img:
  alarm-uploads:
  alarm-logs:
  caddy_data:
  caddy_config:

gleichzeitg erstellt man im gleichen Verzeichnis eine Datei mit dem Namen Caddyfile mit folgendem Inhalt:

(proxy_options) {
        header_up Host {host}
        header_up X-Forwarded-Scheme {scheme}
        header_up X-Real-IP {remote_host}
}

alarmiator.example.com {
        handle_path /api/* {
                reverse_proxy alarmiator_service:5010 {
                        import proxy_options
                }
        }
        handle /socket.io/* {
                reverse_proxy alarmiator_service:5020 {
                        import proxy_options
                }
        }
        handle /spaceport/socket.io/* {
                reverse_proxy alarmiator_service:5555 {
                        import proxy_options
                }
        }
        handle {
                reverse_proxy alarmiator_service:5000 {
                        import proxy_options
                }
        }
}

wobei man alarmiator.example.com durch den passenden Domainnamen ersetzt.

Danach startet man die Konfig, wie in der Anleitung beschrieben:

docker compose up -d

Die Konfiguration von Caddy erfolgt durch das Caddyfile. Eine grafische Oberfläche wie der NPM besitzt der Caddy Server nicht.

Anmerkung: Im Gegensatz zur offiziellen Anleitung werden die Ports 5000, 5010 und 5020 durchgereicht. Leider haben einige Router Probleme, eine auf sie selbst gemappte Domain anzusprechen, und so hat man dann die Möglichkeit, Wallboards und GUI über die internen IP Adressen anzusprechen.

1 „Gefällt mir“

Hey,

sehr cool. Danke fürs Teilen!
Wir hatten uns für den NGINX Proxy Manager entschieden, da für viele Nutzer eine GUI am einfachsten ist und er ja doch relativ easy zum Aufsetzen ist. Was mich persönlich daran stört ist der Flag „Force SSL“. Wenn man diesen setzt erneuert er nicht immer automatisch das SSL Zertifikat kurz vor Ablauf. Da unsere Apps sowieso nur per Https anfragen ist das generell nur ein Problem, wenn Nutzer im Browser HTTP verwenden, obwohl die meisten Browser das ja mittlerweile auch enforcen.

Ich würde das selber mal ausprobieren und einen Link in unser Handbuch packen damit " Konsolenaffine" Nutzer deinen Beitrag als Alternative sehen können :slight_smile:

Danke dir!

Nachdem ich etwas weiter mit Caddy rumgespielt habe, gibt es ein kleines Update:

  • Primitiver Health-Check für den Caddy Container
  • Es wird das Config-Verzecihnis anstatt der Configdatei gemountet
  • Es wird eine eMail für die Zertifizierungsstelle hinterlegt
  • Setze HSTS Header
  • Entferne Server Header

docker-compose.yml:

version: '3.0'
networks:
  alarmiator-network:
    name: alarmiator-network
    driver: bridge

services:
  alarmiator_service:
    networks:
      - alarmiator-network
    restart: always
    image: alarmiator/alarmiator
    ports:
      - '5000:5000'
      - '5010:5010'
      - '5020:5020'
    healthcheck:
      test: curl --fail http://localhost:5000 || exit 1
      interval: 20s
      retries: 5
      start_period: 15s
      timeout: 10s
    volumes:
      - alarm-db:/alarmiatorserver/store
      - alarm-katsys:/alarmiatorserver/plugins/inbound/katsys
      - alarm-public-img:/alarmiatorserver/public/assets/img
      - alarm-uploads:/alarmiatorserver/uploads
      - alarm-logs:/alarmiatorserver/logs
  caddy:
    networks:
      - alarmiator-network
    image: caddy:2.6.4-alpine
    restart: always
    ports:
      - "80:80"
      - "443:443"
      - "443:443/udp"
    healthcheck:
      test: wget -q -O /dev/null http://localhost || exit 1
      interval: 20s
      retries: 5
      start_period: 15s
      timeout: 10s
    volumes:
      - /home/alarmiator/alarmiatorserver/caddy:/etc/caddy
      - caddy_data:/data
      - caddy_config:/config

volumes:
  alarm-db:
  alarm-katsys:
  alarm-public-img:
  alarm-uploads:
  alarm-logs:
  caddy_data:
  caddy_config:

Im Verzeichnis /home/alarmitor erstellt man ein Verzeichnis caddy und darin die Datei Caddyfile mit folgendem Inhalt:

(proxy_options) {
        header_up Host {host}
        header_up X-Forwarded-Scheme {scheme}
        header_up X-Real-IP {remote_host}
        header_down Strict-Transport-Security max-age=31536000
}

localhost:80 {
        respond 200
}

alarmiator.example.com {
        tls alarmiator@example.com
        header {
                -Server
        }
        handle_path /api/* {
                reverse_proxy alarmiator_service:5010 {
                        import proxy_options
                }
        }
        handle /socket.io/* {
                reverse_proxy alarmiator_service:5020 {
                        import proxy_options
                }
        }
        handle /spaceport/socket.io/* {
                reverse_proxy alarmiator_service:5555 {
                        import proxy_options
                }
        }
        handle {
                reverse_proxy alarmiator_service:5000 {
                        import proxy_options
                }
        }
}

Ändert man etwas im Caddyfile, dann kann man mit dem Befehl

docker exec -w /etc/caddy alarmiatorserver-caddy-1 caddy reload

die neue Konfig aktivieren.

Hey,

irgendwie ist mir dein letztes Update durchgegangen. Ich hatte heute mal wieder die Zeit mich ans Handbuch zu setzen und habe eine neue Seite für Proxy Alternativen aufgesetzt: Alternative Reverse Proxies – ALARMiator – Handbuch

Ich hoffe sehr, dass noch andere so gute Beiträge posten, wenn Sie selber andere Proxies verwenden und dementsprechend werden wir diese Seite dann fortführen. Im Moment bist du ganz oben :stuck_out_tongue_closed_eyes:

Schönen Abend!

Da hatte sich doch ein kleiner Fehlerteufel eingeschlichen…
Das Caddyfile muss natürlich den Pfad /home/alarmiator/alarmiatorserver/Caddyfile haben.
Hier ein korrigiertes docker-compose.yml mit neuem alarmiator Image:

version: '3.0'
networks:
  alarmiator-network:
    name: alarmiator-network
    driver: bridge

services:
  alarmiator_service:
    networks:
      - alarmiator-network
    restart: always
    image: alarmiator/alarmiator:latest-arm64
    ports:
      - '5000:5000'
      - '5010:5010'
      - '5020:5020'
    healthcheck:
      test: curl --fail http://localhost:5000 || exit 1
      interval: 20s
      retries: 5
      start_period: 600s
      timeout: 10s
    volumes:
      - alarm-db:/alarmiatorserver/store
      - alarm-katsys:/alarmiatorserver/plugins/inbound/katsys
      - alarm-public-img:/alarmiatorserver/public/assets/img
      - alarm-uploads:/alarmiatorserver/uploads
      - alarm-logs:/alarmiatorserver/logs
  caddy:
    networks:
      - alarmiator-network
    image: caddy:2.6.4-alpine
    restart: always
    ports:
      - "80:80"
      - "443:443"
      - "443:443/udp"
    healthcheck:
      test: wget -q -O /dev/null http://localhost || exit 1
      interval: 20s
      retries: 5
      start_period: 15s
      timeout: 10s
    volumes:
      - /home/alarmiator/alarmiatorserver/caddy:/etc/caddy
      - caddy_data:/data
      - caddy_config:/config

volumes:
  alarm-db:
  alarm-katsys:
  alarm-public-img:
  alarm-uploads:
  alarm-logs:
  caddy_data:
  caddy_config:
1 „Gefällt mir“

Anbei eine Fassung mit der Volume Korrektur für das katsys plugin.

version: '3.0'
networks:
  alarmiator-network:
    name: alarmiator-network
    driver: bridge

services:
  alarmiator_service:
    networks:
      - alarmiator-network
    restart: always
    image: alarmiator/alarmiator:latest-{{deine platform}}
    ports:
      - '5000:5000'
      - '5010:5010'
      - '5020:5020'
    healthcheck:
      test: curl --fail http://localhost:5000 || exit 1
      interval: 20s
      retries: 5
      start_period: 600s
      timeout: 10s
    volumes:
      - alarm-db:/alarmiatorserver/store
      - alarm-katsys-uploads:/alarmiatorserver/plugins/inbound/katsys/uploads
      - alarm-public-img:/alarmiatorserver/public/assets/img
      - alarm-uploads:/alarmiatorserver/uploads
      - alarm-logs:/alarmiatorserver/logs
  caddy:
    networks:
      - alarmiator-network
    image: caddy:2.6.4-alpine
    restart: always
    depends_on:
      alarmiator_service:
        condition: service_healthy
    ports:
      - "80:80"
      - "443:443"
      - "443:443/udp"
    healthcheck:
      test: wget -q -O /dev/null http://localhost || exit 1
      interval: 20s
      retries: 5
      start_period: 15s
      timeout: 10s
    volumes:
      - /home/alarmiator/alarmiatorserver/caddy:/etc/caddy
      - caddy_data:/data
      - caddy_config:/config

volumes:
  alarm-db:
  alarm-katsys-uploads:
  alarm-public-img:
  alarm-uploads:
  alarm-logs:
  caddy_data:
  caddy_config:

Und im vorherigen Post war wiederum ein Fehler. Sorry. Der komplette Pfad für das Caddyfile lautet:

/home/alarmiator/alarmiatorserver/caddy/Caddyfile
2 „Gefällt mir“