
HTTPS ile Full-Stack Uygulamanızı Certbot ve Docker Kullanarak Güvence Altına Alın
HTTPS ile Full-Stack Uygulamanızı Certbot ve Docker Kullanarak Güvence Altına Alın
Certbot'u Docker içinde kullanarak full-stack uygulamanız için ücretsiz SSL sertifikaları oluşturmayı ve yapılandırmayı öğrenin. Bu adım adım rehberde HTTPS kurulumu, Nginx ayarları, alan adı yapılandırması ve sertifika yenileme işlemleri ele alınmaktadır.
Yayın serimizin ilk bölümünde, Nginx’i Docker kullanarak full-stack uygulamanız (NestJS + Next.js) için ters proxy olarak yapılandırdık. Henüz okumadıysanız, buradan inceleyebilirsiniz: Fullstack Uygulamalar için Nginx'i Anlamak.
Bu rehberde, Let’s Encrypt + Certbot kullanarak Docker içinde ücretsiz SSL sertifikası oluşturmayı ve uygulamayı adım adım göstereceğiz.
📌 Gereklilikler
HTTPS kurulumuna başlamadan önce aşağıdakilere sahip olmalısınız:
- ✅ Satın aldığınız bir alan adınız (örneğin
example.com
) olmalı. - ✅ Alan adınızın A kaydı, sunucunuzun genel IP adresine yönlendirilmiş olmalı.
- ✅ Sunucunuzda 80 numaralı port açık olmalı (güvenlik duvarı tarafından engellenmemeli).
- ✅ Sunucuda Docker ve Docker Compose kurulu olmalı.
Örnek: Eğer alan adınızexample.com
ve sunucu IP adresiniz192.0.2.1
ise, A kaydınız şöyle olmalı:example.com → 192.0.2.1
🔒 Adım 1: Certbot’u Geçici Bir Konteynerde Çalıştırın
Certbot, alan adınızı doğrulamak için 80 numaralı port üzerinden HTTP ile bir doğrulama yapar. Bu adımda Certbot'u Docker konteyneri olarak bir kez çalıştırarak SSL sertifikasını oluşturacağız.
Öncelikle sertifikaları saklayacağınız klasörleri oluşturun:
mkdir -p ./certbot/conf mkdir -p ./certbot/www
Ardından Certbot'u çalıştırın:
docker run --rm \ -v $(pwd)/certbot/www:/var/www/certbot \ -v $(pwd)/certbot/conf:/etc/letsencrypt \ certbot/certbot certonly \ --webroot -w /var/www/certbot \ -d example.com -d www.example.com
example.com
yerine kendi alan adınızı girin. Sertifikalar./certbot/conf
dizinine oluşturulacaktır.
🔍 Neden --webroot
Kullanıyoruz?
Certbot, /var/www/certbot/.well-known/...
altında bir dosya oluşturur ve Let's Encrypt bu dosyaya HTTP üzerinden erişebildiği zaman alan adınız size ait olduğunu doğrular.
⚙️ Adım 2: Nginx’e SSL Yapılandırması Ekleyin
Sertifikalarınızı oluşturduktan sonra Nginx yapılandırmanızı HTTPS desteği verecek şekilde güncelleyin.
nginx/default.conf
dosyanızı aşağıdaki gibi güncelleyin:
server { listen 80; server_name example.com www.example.com; location /.well-known/acme-challenge/ { root /var/www/certbot; } location / { return 301 https://$host$request_uri; } } server { listen 443 ssl; server_name example.com www.example.com; ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem; ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem; location /api/ { proxy_pass http://backend:5000/; proxy_set_header Host $host; proxy_http_version 1.1; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection 'upgrade'; proxy_cache_bypass $http_upgrade; } location / { proxy_pass http://frontend:3000/; proxy_set_header Host $host; proxy_http_version 1.1; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection 'upgrade'; proxy_cache_bypass $http_upgrade; } }
example.com
değerini kendi alan adınızla değiştirin.
Bu yapılandırmayı daha iyi anlamak istiyorsanız serinin ilk bölümünü inceleyin: Fullstack Uygulamalar için Nginx'i Anlamak
🐳 Adım 3: Certbot Klasörlerini Docker Compose İle Bağlayın
docker-compose.yml
dosyanızı şu şekilde güncelleyin:
nginx: image: nginx:alpine container_name: nginx_proxy ports: - "80:80" - "443:443" volumes: - ./nginx/default.conf:/etc/nginx/conf.d/default.conf - ./certbot/conf:/etc/letsencrypt - ./certbot/www:/var/www/certbot depends_on: - frontend - backend
Servisleri yeniden başlatın:
docker compose up -d --build
Artık siteniz https://example.com
üzerinden güvenli şekilde çalışıyor 🎉
🔁 Adım 4: SSL Sertifikasını Otomatik Yenile
Let's Encrypt sertifikaları 90 günde bir sona erer. Bu yüzden sertifikanın otomatik yenilenmesi için bir cron job oluşturmamız gerekiyor.
Öncelikle renew_cert.sh
adında bir betik oluşturun:
#!/bin/bash docker run --rm \ -v $(pwd)/certbot/www:/var/www/certbot \ -v $(pwd)/certbot/conf:/etc/letsencrypt \ certbot/certbot renew docker exec nginx_proxy nginx -s reload
Betiğe çalıştırma izni verin:
chmod +x renew_cert.sh
Son olarak crontab'e ekleyin:
crontab -e
Aşağıdaki satırı ekleyerek betiği her gece çalıştırın:
0 0 * * * /path/to/your/renew_cert.sh >> /var/log/cert_renew.log 2>&1
Bu şekilde sertifikalarınızın süresi dolmadan otomatik olarak yenilenir.
🧠 Özet
Bu yazıda şunları öğrendiniz:
- Certbot ile ücretsiz SSL sertifikası nasıl alınır
- Nginx üzerinde HTTPS nasıl etkinleştirilir
- Docker volume kullanarak sertifikalar nasıl bağlanır
- Cron ile sertifika yenileme nasıl yapılır
👉 Artık uygulamanız şifreli ve üretime hazır ✅
📘 Docker konusunda hala öğrenme sürecindeyseniz bu yazıya göz atın: Dockerize NestJS – Dockerfile & Compose
📘 Nginx kurulumu hakkında daha fazla bilgi almak isterseniz: Fullstack Uygulamalar için Nginx'i Anlamak
Sorularınız mı var? kaisalhusrom.com üzerinden veya LinkedIn'den bana ulaşabilirsiniz.