Spaß mit Caddy und Dnsmasq

EntwurfCaddyDockermacOSDnsmasq

Bis vor Kurzem habe ich Änderungen an meinem Host-System vermieden, um Docker-Projekte zu entwickeln. Für mein neuestes Projekt brauchte ich jedoch auch lokal viele Subdomains um den Production-Workflow besser zu entwickeln und testen. Für alle einen Eintrag in der /etc/hosts schien nun auch nicht mehr praktikabel zu sein. So entstand der Wunsch, dynamische Domains an meinen Docker-Compose-Stack umzuleiten. Dort soll eine Caddy-Instanz schließlich die Aufrufe auf die unterschiedlichen Dienste verteilen.

Aktuell habe ich mich für die tld .localdev entschieden, aber ich suche noch nach einer kürzeren. Unter macOS war .local leider schon für den mdns reserviert.

1. Schritt: Dnsmasq im Host-System installieren System

brew install dnsmasq sudo mkdir -p /etc/resolver sudo sh -c 'echo "nameserver 127.0.0.1" > /etc/resolver/localdev' sudo sh -c 'echo "address=/localdev/127.0.0.1" > /opt/homebrew/etc/dnsmasq.d/localdev.conf' sudo sh -c 'echo "address=/localdev/::1" >> /opt/homebrew/etc/dnsmasq.d/localdev.conf' sudo brew services restart dnsmasq

Die ipv6 Deklaration ist optional, aber zumindest unter Chrome gab es ansonsen Performance Probleme weil zunächst versucht wurde eine v6-Adresse für den Aufruf aufzulösen, was initial immer 4-5 Sekunden gedauert hatte.

Step 2: Creating the Caddyfile

api.mycoolservice.localdev:443 { tls internal reverse_proxy api:8000 } mycoolservice.localdev:443 { tls internal reverse_proxy node:3000 }

Die Caddyfile habe ich zunächst auf die gleiche Höhe wie meine docker-compose.yml gepackt. Da sonst keine weiteren Konfigurationen notwendig waren, erschien mir ein extra Ordner überflüssig. Außerdem sind die Dienste natürlich auch noch traditionell unter z. B. http://127.0.0.1:3000 erreichbar.

3. Schritt: Caddy in docker compose Stack aufnehmen

# Andere Dienste caddy: image: caddy:latest ports: - "443:443" - "80:80" volumes: - ./Caddyfile:/etc/caddy/Caddyfile - caddy_data:/data - caddy_config:/config

Voilà! Nun sind die Dienste des Projekts im Browser, z. B. unter:

erreichbar. 👍

Schritt 4: Bonus Root Zertifikat vertrauen

In der heutigen Zeit, kann es schnell nervig werden, wenn der Browser dem Caddy-Root-Zertifikat nicht vertraut. Wenn ihr das auch erreichen wollt, könnt ihr unter macOS zB so vorgehen:

  1. Root Zertifikat aus Caddy-Volume extrahieren
    Viele Wege führen bekanntlich nach Rom. Für mich war es am einfachsten den Docker Desktop zu öffnen und im Volumes Tag nach "caddy" zu suchen. Unter stored data wählt: caddy/pki/local/ und kopiert die root.crt-Datei auf euren Desktop.
Docker Desktop Volumes
  1. Root Zertifikat in Schlüsselbund aufnehmen
    Dazu klickt es einfach doppelt an und öffnet auch anschließend die Schlüsselbundverwaltung, wenn das nicht schon automatisch geschieht.

  2. Root Zertifikat vertrauen
    Wählt aus dem Kontextmenü des Zertifikates "Informationen" aus und klappt die Vertrauenseinstellungen aus. Dort wählt einfach "Immer vertrauen" aus bei Verwendung dieses Zertifkates.

macOS Schlüsselbundverwaltung

Startet gegebenenfalls euren Browser (Chrome/Safari) neu, und ihr solltet nun eine optimal funktionierende Entwicklungsumgebung haben. ✌️

Metaebene

Spaß mit Caddy und Dnsmasq
Datum
26. Dezember 2024
vor etwa 1 Monat
Sprache
de
Aktualisiert am
31. Dezember 2024