Let's Encrypt ile Apache için SSL Sertifikası
Bu rehber, Let’s Encrypt kullanarak otomatik SSL sertifikası yenileyen bir Apache sunucusunu Docker ile nasıl hazırlayacağınızı gösterir. Örnekler gerçekçi bir senaryo üzerinden sunulmuştur.
1. Proje Dizini Oluşturma
Önce bir klasör oluşturup içine gerekli dosyaları ekleyelim:
mkdir apache-ssl
cd apache-ssl
2. Dockerfile Hazırlama
Apache’yi çalıştıracak bir Dockerfile
oluşturun:
FROM httpd:2.4
# Gerekli dizinleri oluştur
RUN mkdir -p /etc/letsencrypt/live /var/www/html
# Apache yapılandırmasını ekle
COPY ./apache.conf /usr/local/apache2/conf/httpd.conf
3. Apache Ayarları
apache.conf
dosyasını oluşturun ve sertifikalarla çalışacak şekilde ayarlayın:
<VirtualHost *:80>
ServerName fmarslan.com
ServerAlias www.fmarslan.com
DocumentRoot /var/www/html
<Location "/.well-known/acme-challenge/">
AllowOverride None
Options None
Require all granted
</Location>
</VirtualHost>
<VirtualHost *:443>
ServerName fmarslan.com
ServerAlias www.fmarslan.com
DocumentRoot /var/www/html
SSLEngine on
SSLCertificateFile /etc/letsencrypt/live/fmarslan.com/fullchain.pem
SSLCertificateKeyFile /etc/letsencrypt/live/fmarslan.com/privkey.pem
</VirtualHost>
Alan adını kendi sitenize göre güncellemeyi unutmayın.
4. Docker Compose Dosyası
Hem Apache’yi hem de Certbot’u yönetecek bir docker-compose.yml
dosyası hazırlayın:
version: '3.7'
services:
apache:
build:
context: .
container_name: apache-server
ports:
- "80:80"
- "443:443"
volumes:
- ./html:/var/www/html
- ./certs:/etc/letsencrypt
depends_on:
- certbot
certbot:
image: certbot/certbot
container_name: certbot
volumes:
- ./certs:/etc/letsencrypt
- ./html:/var/www/html
entrypoint: >
sh -c 'trap exit TERM;
while :; do
certbot certonly --webroot -w /var/www/html \
-d fmarslan.com -d www.fmarslan.com --non-interactive --agree-tos \
--email admin@fmarslan.com;
sleep 12h & wait $${!};
done'
Not: Yukarıdaki while
döngüsü yalnızca test ortamı içindir. Gerçek kullanım için daha sağlam yöntemler tercih edilmelidir. Örneğin:
0 0 * * * docker run --rm -v $(pwd)/certs:/etc/letsencrypt -v $(pwd)/html:/var/www/html certbot/certbot renew
5. Gerekli Klasörler
HTML içerikleri ve sertifikalar için dizinler oluşturun:
mkdir html
echo "<h1>SSL Test Sayfası</h1>" > html/index.html
mkdir certs
6. Sunucuyu Çalıştırma
Konteynerleri başlatmak için aşağıdaki komutu çalıştırın:
docker-compose up -d
7. DNS Ayarları
Alan adınızı doğru IP’ye yönlendirdiğinizden emin olun. Örnek DNS kayıtları:
fmarslan.com
→ Sunucu IP adresinizwww.fmarslan.com
→ Sunucu IP adresiniz
8. Sorun Giderme
Bir sorun çıkarsa loglara bakarak kontrol edin:
docker logs certbot
docker logs apache-server
9. Sertifikaların Yenilenmesi
Certbot, sertifikaları yeniledikçe Apache bunu otomatik olarak kullanır. Eğer manuel bir çözüm tercih ederseniz, yenileme sonrası Apache’yi yeniden başlatmanız gerekebilir:
docker exec apache-server apachectl graceful
Bu yapılandırma ile otomatik sertifika yenilemeyi çalışır hale getirmiş olacaksınız. Test ortamı ve gerçek projeler için uygundur.