Caddy ile ters proxy ve otomatik HTTPS: tek dosyada çoklu uygulama
Aynı sunucudaki birden çok uygulamayı alan adlarıyla yayınlayın; sertifikaları Caddy otomatik alsın ve yenilesin.
Rehberler · 3 dk okuma
Bir sunucuda birden fazla web uygulaması çalıştırıyorsanız hepsini 80 ve 443 portlarından, alan adına göre yönlendiren bir ters proxy yayınlar. Caddy bunu tek bir kısa dosyayla yapar ve HTTPS sertifikalarını kendisi alıp yeniler.

Önkoşullar
- Docker ve Compose (bkz. Docker kurulumu).
- Her uygulama için bir alan adı ya da alt alan adı; A kaydı sunucu IP adresini göstermeli (bkz. DNS kayıtları).
- Güvenlik duvarında 80 ve 443 açık:
sudo ufw allow 80,443/tcp
1. Compose dosyası
Caddy ve uygulamalar aynı Compose projesinde olduğunda birbirlerine servis adıyla ulaşır; uygulamaların portlarını dışarı yayınlamanız gerekmez.
services:
caddy:
image: caddy:2
restart: unless-stopped
ports:
- "80:80"
- "443:443"
- "443:443/udp"
volumes:
- ./Caddyfile:/etc/caddy/Caddyfile
- caddy_data:/data
- caddy_config:/config
uygulama:
image: traefik/whoami
restart: unless-stopped
volumes:
caddy_data:
caddy_config:
2. Caddyfile
uygulama.alanadiniz.com {
reverse_proxy uygulama:80
}
# ikinci uygulama için aynı kalıp:
# git.alanadiniz.com {
# reverse_proxy gitea:3000
# }
Her blok bir alan adıdır ve reverse_proxy hedefi, aynı ağdaki container adı ve portudur.
3. Başlatın
docker compose up -d
docker compose logs -f caddy
Caddy ilk istekte sertifikayı otomatik alır (Let’s Encrypt); günlükte “certificate obtained successfully” görünür. Tarayıcıdan https://uygulama.alanadiniz.com adresini açın.
Yeni uygulama eklemek
- Uygulamanın servisini Compose dosyasına ekleyin (ana makineye port yayınlamanıza gerek yok).
- Caddyfile’a yeni bir alan adı bloğu ekleyin.
- Yapılandırmayı yeniden yükleyin:
docker compose exec caddy caddy reload --config /etc/caddy/Caddyfile
Uygulama Compose projenizden ayrıysa, ortak bir Docker ağı oluşturup hem Caddy’yi hem uygulamayı o ağa bağlayın (docker network create proxy ve her servise networks: [proxy]).
Faydalı eklemeler
| İhtiyaç | Caddyfile |
|---|---|
www’yi ana alan adına yönlendirme | www.alanadiniz.com { redir https://alanadiniz.com{uri} } |
| Sıkıştırma | encode zstd gzip |
| Temel kimlik doğrulama | basicauth (bcrypt özetiyle) |
| Yalnızca belirli IP’ler | @izinli remote_ip 203.0.113.0/24 ile eşleşme |
Sorun giderme
- Sertifika alınamadı: A kaydının doğru olduğundan ve 80/443 portlarının açık olduğundan emin olun (bkz. DNS yansımadı).
- 502 Bad Gateway: hedef container çalışmıyor ya da ad/port yanlış:
docker compose psvereverse_proxyhedefini kontrol edin. - Sınır: Let’s Encrypt’in sertifika sıklığı sınırları vardır; deneme yaparken alan adını sık sık silip yeniden eklemeyin.
Melinhost ile başlayın
Birden çok uygulama için 4 vCPU ve 8 GB RAM düzeyinde bir bulut sunucu rahat bir başlangıçtır.