# Caddy Reverse Proxy med Bunny.net DNS och Dynamisk IP Detta projekt innehåller konfigurationen för en **Docker-installation** av Caddy som fungerar som en reverse proxy för olika tjänster, med stöd för **Bunny.net DNS** och **automatisk IP-uppdatering**. ## Beskrivning Caddy används för att dirigera trafik till olika tjänster som körs i Docker-containrar. Denna konfiguration inkluderar: - Säkerhetsrubriker och autentisering för vissa tjänster. - **Bunny.net DNS-integration** för ACME DNS-01 challenges (Let's Encrypt-certifikat). - **Dynamisk DNS-uppdatering** när den publika IP:n ändras. - **Cron-script** för att övervaka IP-förändringar och säkerställa TLS-funktion. ## Tjänster Följande domäner och tjänster hanteras av Caddy: - `test.gynther.se` → `recipe-flutter:5000` - `bazarr.gynther.se` → `bazarr:6767` - `prowlarr.gynther.se` → `prowlarr:9696` - `radarr.gynther.se` → `radarr:7878` - `sonarr.gynther.se` → `sonarr:8989` - `jellyfin.gynther.se` → `jellyfin:8096` - `qbittorrent.gynther.se` → `192.168.50.4:8080` - `wetty.gynther.se` → `wetty:3001` (med autentisering) - `portainer.gynther.se` → `portainer:9000` - `gitea.gynther.se` → `192.168.50.2:3002` - `import.gynther.se` → `recipe-import-service:3000` - `recept.gynther.se` → Kombinerar flera tjänster: - `recipe-import-service:3000` - `recipe-frontend:3000` - `recipe-api:8080` ## Säkerhet - **Autentisering**: Vissa tjänster, som `wetty.gynther.se`, kräver basautentisering. - **Säkerhetsrubriker**: Caddy lägger till säkerhetsrubriker för att skydda mot vanliga webbsårbarheter. - **TLS**: Automatisk certifikatshantering via Let's Encrypt med Bunny.net DNS-01 challenge. ## Installation och Körning ### Förutsättningar - Docker och Docker Compose installerade. - Bunny.net API-nyckel (för DNS-hantering). - Miljövariabler konfigurerade (se `.env.example`). ### Steg 1. **Klona repot och navigera till katalogen:** ```bash git clone ssh://git@gitea.gynther.se:2222/nilsjohan/caddy-bunny.git cd caddy-bunny ``` 2. **Skapa en `.env`-fil med nödvändiga variabler:** ```bash cp .env.example .env # Redigera .env och lägg till din Bunny.net API-nyckel och e-post ``` 3. **Bygg och starta containrar:** ```bash docker-compose build docker-compose up -d ``` 4. **Verifiera att Caddy körs korrekt:** ```bash docker-compose logs caddy docker-compose exec caddy caddy list-modules | grep -E "dns.providers.bunny|dynamic_dns" ``` ## Konfiguration ### Caddyfile - **Globala inställningar**: - `acme_dns bunny {env.BUNNY_API_KEY}`: Aktiverar ACME DNS-01 challenge med Bunny.net. - `dynamic_dns`: Konfigurerar automatisk uppdatering av DNS-records när IP:n ändras. - **Site-specifika regler**: Se `conf/Caddyfile` för detaljerad routing. ### Miljövariabler - `BUNNY_API_KEY`: Bunny.net API-nyckel (för DNS-hantering). - `CADDY_EMAIL`: E-postadress för Let's Encrypt-kontot. ## Dynamisk DNS och IP-övervakning ### Cron-script Ett script (`scripts/ddns-cert-sync.sh`) körs periodiskt (var 5:e minut) för att: 1. Kontrollera den publika IP:n. 2. Uppdatera DNS-records om IP:n har ändrats. 3. Starta om Caddy för att säkerställa TLS-synkronisering. 4. Verifiera HTTPS-anslutningar till kritiska domäner. ### Installation av Cron 1. Kopiera cron-filen till servern: ```bash scp cron/caddy-ddns-cert.cron user@server:/etc/cron.d/caddy-ddns-cert ``` 2. Säkerställa att scriptet är körbart: ```bash chmod +x /app/scripts/ddns-cert-sync.sh ``` ## Felsökning - **Loggar**: - Caddy-loggar: `docker-compose logs caddy` - Cron-loggar: `/var/log/cron-caddy-ddns.log` - Script-loggar: `/var/log/caddy-ddns-cert-sync.log` - **Vanliga problem**: - **DNS-uppdateringar misslyckas**: Kontrollera att Bunny.net API-nyckeln är korrekt och att zonen och hostnames är korrekt konfigurerade. - **TLS-fel**: Verifiera att DNS-records har propagerats korrekt och att Caddy har startats om. - **Caddy startar inte**: Kontrollera att alla nödvändiga moduler är inkluderade i den anpassade builden (`docker-compose exec caddy caddy list-modules`). ## Uppdatering För att uppdatera konfigurationen: 1. Redigera `Caddyfile` efter behov. 2. Starta om Caddy-containern: ```bash docker-compose restart caddy ``` ## Rollback För att återgå till den tidigare versionen: 1. Återgå till det gamla repot: ```bash cd ../caddy docker-compose up -d ``` ## Licens MIT