Anasayfa / Blog / 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

HTTPS ile Full-Stack Uygulamanızı Certbot ve Docker Kullanarak Güvence Altına Alın

Öne Çıkan

HTTPS ile Full-Stack Uygulamanızı Certbot ve Docker Kullanarak Güvence Altına Alın

a

admin

Yazar

30 dakika okuma
50 Görüntülenme
09 Temmuz 2025

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.

Şimdi sırada uygulamanızı HTTPS ile güvenli hale getirmek var – bu modern web uygulamaları için standarttır.

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ız example.com ve sunucu IP adresiniz 192.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.

bu yazıyı paylaş

Bağlantı Kopyalandı