feat(caddy): integrate Bunny.net DNS and dynamic IP support

- Replace Bazarr with NZBGet in Caddyfile routes
- Add global DNS provider configuration for ACME DNS-01 challenges
- Implement dynamic DNS updater with Bunny.net provider
- Add comprehensive security headers and authentication
- Update documentation with new requirements and setup instructions
- Add .env.example, Dockerfile, cron jobs, and scripts
- Modify compose.yml to use local build and add environment variables

BREAKING CHANGE: Requires Bunny.net API key and updated Caddyfile configuration
This commit is contained in:
Nils-Johan Gynther
2026-06-04 17:23:35 +02:00
parent d553094a88
commit 76933d21c1
7 changed files with 394 additions and 24 deletions
+100 -23
View File
@@ -1,33 +1,27 @@
# Caddy Reverse Proxy Konfiguration
# 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.
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. Dessutom har **Flutter** en egen Caddy-installation i sin Docker-container för att hantera specifika behov.
UFW är uppe med följande regler:
To Action From
-- ------ ----
[ 1] 22/tcp ALLOW IN Anywhere
[ 2] 80/tcp ALLOW IN Anywhere
[ 3] 443/tcp ALLOW IN Anywhere
[ 4] 137,138/udp ALLOW IN 192.168.50.0/24 # Samba lokal UDP
[ 5] 139,445/tcp ALLOW IN 192.168.50.0/24 # Samba lokal TCP
[ 6] 22/tcp (v6) ALLOW IN Anywhere (v6)
[ 7] 443/tcp (v6) ALLOW IN Anywhere (v6)
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` (Flutter har en egen Caddy-installation i sin Docker-container)
- `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`
- `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`
@@ -40,21 +34,104 @@ Följande domäner och tjänster hanteras av Caddy:
- **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
1. Se till att Docker och Docker Compose är installerade.
2. Placera `Caddyfile` i `conf`-mappen.
3. Kör `docker-compose up -d` för att starta tjänsterna.
### 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 med `docker-compose restart caddy`.
2. Starta om Caddy-containern:
```bash
docker-compose restart caddy
```
## Felsökning
## Rollback
Om något inte fungerar som förväntat:
- Kontrollera loggarna med `docker-compose logs caddy`.
- Se till att alla tjänster som Caddy ska dirigera trafik till är igång och lyssnar på rätt portar.
För att återgå till den tidigare versionen:
1. Återgå till det gamla repot:
```bash
cd ../caddy
docker-compose up -d
```
## Licens
MIT