Uptime Kuma ile SSL Sertifikası Sona Erme Tarihi İzleme ve Uyarı Kurulumu
SSL sertifikası yönetimi, sistem yöneticilerinin en çok baş ağrısı yaşadığı konulardan biri. Gece yarısı gelen “siteniz çalışmıyor” mesajının arkasında genellikle süresi dolmuş bir SSL sertifikası yatar. Let’s Encrypt’in yaygınlaşmasıyla birlikte 90 günlük sertifikalar hayatımıza girdi ve bu kısıt döngüsü, takip etmediğinizde felakete dönüşebiliyor. Uptime Kuma tam da bu noktada devreye giriyor: açık kaynak, hafif ve kullanımı kolay bir izleme aracı olarak SSL sertifikası takibini son derece pratik hale getiriyor.
Uptime Kuma Nedir ve Neden SSL İzleme İçin İdeal?
Uptime Kuma, Node.js tabanlı, self-hosted bir uptime izleme aracıdır. StatusCake veya UptimeRobot gibi servislerin aksine, kendi sunucunuzda çalışır ve verileriniz sizin kontrolünüzde kalır. SSL sertifikası izleme söz konusu olduğunda şu avantajları öne çıkıyor:
- Gerçek zamanlı SSL kontrolü: Her ping döngüsünde sertifika geçerliliğini kontrol eder
- Kalan gün bildirimi: Sertifika sona ermesine kaç gün kaldığını gösterir ve belirli eşiğin altına düşünce uyarır
- Çoklu bildirim kanalı: Telegram, Slack, E-posta, Discord ve daha fazlasına uyarı gönderebilir
- Dashboard görünümü: Tüm sertifikalarınızın durumunu tek ekranda görürsünüz
- Ücretsiz ve açık kaynak: Ticari araçlara para harcamanıza gerek kalmaz
Peki kurulumdan uyarı mekanizmasına kadar her şeyi nasıl yapılandırırsınız? Adım adım gidelim.
Uptime Kuma Kurulumu
Docker ile Kurulum (Önerilen Yöntem)
Production ortamları için Docker kullanımı hem taşınabilirlik hem de güncelleme kolaylığı açısından en mantıklı seçenek. Aşağıdaki komutla Uptime Kuma container’ını ayağa kaldırabilirsiniz:
docker run -d
--restart=always
-p 3001:3001
-v uptime-kuma:/app/data
--name uptime-kuma
louislam/uptime-kuma:1
Eğer Docker Compose kullanıyorsanız, ki production’da kesinlikle tavsiye ederim, bir docker-compose.yml dosyası oluşturun:
mkdir -p /opt/uptime-kuma
cd /opt/uptime-kuma
cat > docker-compose.yml << 'EOF'
version: '3.8'
services:
uptime-kuma:
image: louislam/uptime-kuma:1
container_name: uptime-kuma
restart: always
ports:
- "3001:3001"
volumes:
- ./data:/app/data
environment:
- TZ=Europe/Istanbul
EOF
docker compose up -d
Container çalışmaya başladıktan sonra http://sunucu-ip:3001 adresine gidip ilk kullanıcı hesabınızı oluşturun.
Nginx Reverse Proxy Arkasına Alma
Uptime Kuma’yı doğrudan 3001 portuyla dışa açmak yerine, Nginx reverse proxy arkasına almak hem güvenlik hem de SSL açısından daha doğru yaklaşım. Aşağıdaki Nginx konfigürasyonunu /etc/nginx/sites-available/uptime-kuma dosyasına ekleyin:
cat > /etc/nginx/sites-available/uptime-kuma << 'EOF'
server {
listen 80;
server_name monitor.sirketiniz.com;
return 301 https://$host$request_uri;
}
server {
listen 443 ssl http2;
server_name monitor.sirketiniz.com;
ssl_certificate /etc/letsencrypt/live/monitor.sirketiniz.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/monitor.sirketiniz.com/privkey.pem;
location / {
proxy_pass http://localhost:3001;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_cache_bypass $http_upgrade;
}
}
EOF
ln -s /etc/nginx/sites-available/uptime-kuma /etc/nginx/sites-enabled/
nginx -t && systemctl reload nginx
SSL Sertifikası İzleme Monitor’u Oluşturma
Temel HTTPS Monitor Ekleme
Uptime Kuma arayüzüne girdikten sonra “Add New Monitor” butonuna tıklayın. SSL izleme için önemli olan ayarlar şunlardır:
Monitor Type: HTTPS seçin. HTTP tipi sertifika kontrolü yapmaz.
Friendly Name: Tanımlayıcı bir isim girin, örneğin “Ana Site SSL – sirketiniz.com”
URL: İzlemek istediğiniz tam URL, örneğin https://sirketiniz.com
Heartbeat Interval: Kaç saniyede bir kontrol yapacağı. SSL için 300 saniye (5 dakika) makul bir değer.
Retries: Uyarı vermeden önce kaç kez deneyeceği. 3 değeri yanlış alarmları azaltır.
SSL Seçenekleri: Monitor ayarlarında “SSL” bölümünü genişletin ve “Notify Before SSL expiry” seçeneğini aktif edin. Varsayılan uyarı eşiği 7 gündür, bunu 30 güne çıkarmanızı öneririm.
SSL İzleme için Özel Ayarlar
Uptime Kuma’nın SSL kontrolü şu bilgileri doğrular:
- Sertifikanın geçerli olup olmadığı
- Sona erme tarihine kaç gün kaldığı
- Sertifika zincirinin doğruluğu
- Alan adı eşleşmesi
Wildcard sertifika kullanan bir senaryo düşünün. *.sirketiniz.com sertifikanız varsa, hem www.sirketiniz.com hem de api.sirketiniz.com için ayrı ayrı monitor eklemeniz gerekmez. Tek bir subdomain’i izlemek, tüm wildcard’ın durumunu size yansıtır. Ancak farklı sertifikalar kullanan servisleriniz varsa, her biri için ayrı monitor açmalısınız.
Bildirim Kanallarını Yapılandırma
Telegram Bot ile Anlık Uyarı
Telegram, sysadmin’lerin en çok tercih ettiği bildirim kanalı. Önce bir bot oluşturun:
- Telegram’da
@BotFatherile konuşun /newbotkomutunu gönderin- Bot adı ve kullanıcı adını belirleyin
- Aldığınız API token’ı kopyalayın
Uptime Kuma arayüzünde Settings > Notifications > Add Notification adımlarını izleyin. Telegram seçeneğinde şu bilgileri girin:
- Bot Token: BotFather’dan aldığınız token
- Chat ID: Kendi Telegram ID’niz (bulmak için
@userinfobot‘a mesaj atın)
Ardından bu bildirimi oluşturduğunuz SSL monitor’larına atayın.
E-posta Bildirimi ile SMTP Yapılandırması
Kurumsal ortamlarda e-posta bildirimleri hala birincil tercih. Settings > Notifications menüsünde Email (SMTP) seçeneğiyle şu yapılandırmayı kullanın:
- Hostname: mail.sirketiniz.com
- Port: 587 (TLS için) veya 465 (SSL için)
- Security: STARTTLS veya TLS/SSL
- Username: [email protected]
- Password: Uygulama şifresi (Gmail kullanıyorsanız App Password oluşturun)
- From/To: Gönderi ve alıcı adresleri
Slack Entegrasyonu
Ekip bilgilendirmesi için Slack webhook yapılandırması oldukça basit:
- Slack workspace’inizde Apps > Incoming Webhooks’a gidin
- Yeni bir webhook URL’si oluşturun
- Uptime Kuma’da Slack notification tipini seçin ve webhook URL’sini yapıştırın
Birden fazla bildirim kanalı tanımlamak ve bunları farklı monitor gruplarına atamak, ciddi bir production ortamında mutlaka yapılması gereken bir şey. Kritik SSL sertifikaları için hem e-posta hem Telegram aktif tutun.
Çoklu Domain İçin Toplu Monitor Ekleme
Onlarca domain’i olan bir ortamda tek tek eklemek zaman kaybı. Uptime Kuma’nın API’sini kullanarak scriptlenmiş ekleme yapabilirsiniz. Önce API erişimi için bir token alın:
# Uptime Kuma API token almak için login isteği
curl -s -X POST http://localhost:3001/api/login
-H "Content-Type: application/json"
-d '{"username":"admin","password":"sifreniz"}'
| python3 -m json.tool
Ardından domain listesinden toplu monitor ekleme scripti yazabilirsiniz:
#!/bin/bash
# ssl-monitor-ekle.sh
# Kullanim: ./ssl-monitor-ekle.sh domains.txt
UPTIME_KUMA_URL="http://localhost:3001"
TOKEN="api_token_buraya"
DOMAINS_FILE=$1
if [ -z "$DOMAINS_FILE" ]; then
echo "Kullanim: $0 domains.txt"
exit 1
fi
while IFS= read -r domain; do
# Bos satir ve yorum satirlarini atla
[[ -z "$domain" || "$domain" =~ ^# ]] && continue
echo "Monitor ekleniyor: $domain"
curl -s -X POST "$UPTIME_KUMA_URL/api/monitors"
-H "Content-Type: application/json"
-H "Authorization: Bearer $TOKEN"
-d "{
"type": "https",
"name": "SSL - $domain",
"url": "https://$domain",
"interval": 300,
"retryInterval": 60,
"maxretries": 3,
"upsideDown": false,
"notificationIDList": {},
"ignoreTls": false,
"expiryNotification": true
}" | python3 -m json.tool
sleep 1
done < "$DOMAINS_FILE"
echo "Islem tamamlandi."
Bu scriptle domains.txt dosyasına her satıra bir domain yazarak onlarca kaydı dakikalar içinde ekleyebilirsiniz.
SSL Sertifikası Durumunu Harici Script ile Kontrol Etme
Uptime Kuma’nın yanı sıra, sunucu tarafında periyodik SSL kontrolü yapan bir script bulundurmak iyi bir yedek önlem. Bu script, Uptime Kuma’nın herhangi bir nedenle çalışmadığı senaryolara karşı güvence sağlar:
#!/bin/bash
# ssl-kontrol.sh
# Crontab: 0 8 * * * /opt/scripts/ssl-kontrol.sh
UYARI_ESIGI=30 # Kac gun kala uyari verilsin
KRITIK_ESIK=7 # Kritik esik
BILDIRIM_EMAIL="[email protected]"
LOG_DOSYA="/var/log/ssl-kontrol.log"
DOMAINS=(
"sirketiniz.com"
"www.sirketiniz.com"
"api.sirketiniz.com"
"mail.sirketiniz.com"
)
tarih=$(date '+%Y-%m-%d %H:%M:%S')
echo "[$tarih] SSL kontrol basliyor..." >> "$LOG_DOSYA"
for domain in "${DOMAINS[@]}"; do
# Sertifika bitis tarihini al
bitis_tarihi=$(echo | openssl s_client -servername "$domain"
-connect "$domain:443" 2>/dev/null
| openssl x509 -noout -enddate 2>/dev/null
| cut -d= -f2)
if [ -z "$bitis_tarihi" ]; then
echo "[$tarih] HATA: $domain icin sertifika alinamadi" >> "$LOG_DOSYA"
echo "SSL Kontrol Hatasi: $domain icin sertifika alinamadi"
| mail -s "[KRITIK] SSL Hata: $domain" "$BILDIRIM_EMAIL"
continue
fi
# Kalan gun hesapla
bitis_epoch=$(date -d "$bitis_tarihi" +%s 2>/dev/null ||
date -j -f "%b %d %T %Y %Z" "$bitis_tarihi" +%s)
simdi_epoch=$(date +%s)
kalan_gun=$(( (bitis_epoch - simdi_epoch) / 86400 ))
echo "[$tarih] $domain: $kalan_gun gun kaldi" >> "$LOG_DOSYA"
if [ "$kalan_gun" -le "$KRITIK_ESIK" ]; then
echo "Domain: $domainnKalan Gun: $kalan_gunnBitis: $bitis_tarihi"
| mail -s "[KRITIK] SSL $kalan_gun gun icinde doluyor: $domain"
"$BILDIRIM_EMAIL"
elif [ "$kalan_gun" -le "$UYARI_ESIGI" ]; then
echo "Domain: $domainnKalan Gun: $kalan_gunnBitis: $bitis_tarihi"
| mail -s "[UYARI] SSL $kalan_gun gun icinde doluyor: $domain"
"$BILDIRIM_EMAIL"
fi
done
echo "[$tarih] SSL kontrol tamamlandi." >> "$LOG_DOSYA"
Bu scripti crontab’a ekleyin:
crontab -e
# Asagidaki satiri ekleyin:
0 8 * * * /opt/scripts/ssl-kontrol.sh
Gerçek Dünya Senaryosu: E-ticaret Sitesi SSL Yönetimi
Diyelim ki 15 farklı subdomain’i olan bir e-ticaret altyapısını yönetiyorsunuz:
- Ana site ve CDN edge node’ları ayrı sertifikalar kullanıyor
- Ödeme sayfası için EV sertifika mevcut ve yıllık yenileniyor
- API gateway Let’s Encrypt kullanıyor, 90 günde bir otomatik yenileniyor
- Staging ortamları self-signed sertifika kullanıyor
Bu senaryoda Uptime Kuma’da şu organizasyonu kuruyorsunuz: Production monitor’larını “PRODUCTION – SSL” grubunda, staging’leri “STAGING – SSL” grubunda toplayın. Production group’una hem Telegram hem e-posta bildirimi atayın, staging grubuna yalnızca Slack.
EV sertifika için uyarı eşiğini 60 güne çıkartın. EV sertifika sağlayıcıları bazen validation süreci için haftalar istiyor, 30 gün yetmeyebilir.
Let’s Encrypt sertifikaları için certbot’un otomatik yenileme durumunu da kontrol eden basit bir script ekleyin:
#!/bin/bash
# certbot-durum.sh
# Let's Encrypt yenileme durumunu kontrol eder
BILDIRIM_EMAIL="[email protected]"
# Certbot dry-run yap
certbot renew --dry-run 2>&1 | grep -E "(SUCCESS|FAILED|ERROR)" > /tmp/certbot-kontrol.txt
if grep -q "FAILED|ERROR" /tmp/certbot-kontrol.txt; then
echo "Certbot otomatik yenileme HATASI tespit edildi:" |
cat - /tmp/certbot-kontrol.txt |
mail -s "[KRITIK] Certbot Yenileme Hatasi" "$BILDIRIM_EMAIL"
fi
# Sonraki yenileme tarihlerini raporla
certbot certificates 2>/dev/null | grep -E "(Domains|Expiry Date|Certificate Path)"
>> /var/log/certbot-kontrol.log
Uptime Kuma Status Page ile Takımı Bilgilendirme
SSL izlemenin bir diğer güzel yanı, Uptime Kuma’nın Status Page özelliğiyle ekip içi şeffaflık sağlamak. Settings > Status Pages menüsünden yeni bir status page oluşturun ve SSL monitor’larınızı buraya ekleyin.
Bu sayfa sayesinde DevOps ekibiniz, geliştirici takımı ve hatta gerekirse müşterileriniz sertifika durumlarını görebilir. Public veya private (şifreli) olarak ayarlayabilirsiniz.
Status page URL’sini şu şekilde özelleştirin: https://status.sirketiniz.com şeklinde subdomain atayın ve bu subdomain’i Nginx üzerinden Uptime Kuma’ya yönlendirin.
Sık Karşılaşılan Sorunlar ve Çözümleri
Sorun: Monitor “SSL Certificate Expiry” hatasını çok erken gösteriyor
Uptime Kuma’nın sertifika sona erme uyarısı, monitor ayarlarındaki eşik değerinden bağımsız olarak bazen erken tetiklenebilir. Çözüm: Monitor’u düzenleyip “SSL Expiry Notification Days” değerini açıkça 30 veya istediğiniz değere set edin.
Sorun: Self-signed sertifikalı iç sunucuları izleyemiyorum
Uptime Kuma varsayılan olarak geçersiz SSL sertifikalarını reddeder. İç sunucular için monitor ayarlarında “Ignore TLS/SSL error” seçeneğini aktif edin. Bu durumda sertifika içeriği hala okunur, sadece doğrulama atlanır.
Sorun: Cloudflare arkasındaki sitelerde gerçek sertifika bilgisi görünmüyor
Cloudflare proxy modunda (turuncu bulut), Uptime Kuma Cloudflare’in kendi sertifikasını görür, kaynak sunucunuzun sertifikasını değil. Origin sertifikasını izlemek için DNS-only (gri bulut) modunu kullanın veya sunucunun gerçek IP’sine doğrudan monitor ekleyin.
Sorun: Bildirimler geliyor ama sertifika zaten yenilendi
Monitor cache’i eski veriyi tutabilir. Monitor detay sayfasında “Clear Data” butonunu kullanın veya container’ı restart edin:
docker restart uptime-kuma
Uptime Kuma Veri Yedekleme
Tüm bu yapılandırmanın yok olmaması için düzenli yedek alın. Uptime Kuma verisi /app/data dizininde SQLite veritabanı olarak tutuluyor:
#!/bin/bash
# uptime-kuma-yedek.sh
# Crontab: 0 2 * * * /opt/scripts/uptime-kuma-yedek.sh
YEDEK_DIZIN="/backup/uptime-kuma"
TARIH=$(date +%Y%m%d_%H%M%S)
VERI_DIZIN="/opt/uptime-kuma/data"
mkdir -p "$YEDEK_DIZIN"
# Container durdur, yedek al, baslat
docker stop uptime-kuma
tar -czf "$YEDEK_DIZIN/uptime-kuma-$TARIH.tar.gz" -C "$VERI_DIZIN" .
docker start uptime-kuma
# 30 gundan eski yedekleri sil
find "$YEDEK_DIZIN" -name "*.tar.gz" -mtime +30 -delete
echo "Yedek tamamlandi: uptime-kuma-$TARIH.tar.gz"
Container’ı durdurmadan yedek almak istiyorsanız SQLite’ın .backup komutunu kullanın, bu yöntem daha güvenli:
sqlite3 /opt/uptime-kuma/data/kuma.db ".backup '/backup/uptime-kuma/kuma-$(date +%Y%m%d).db'"
Sonuç
SSL sertifikası sona erme olayları, “önlenebilir felaket” kategorisinin en klasik örneği. Uptime Kuma ile bu riski neredeyse sıfıra indirebilirsiniz: kurulumu 10 dakika, yapılandırması 30 dakika, kazandırdığı gönül rahatlığı ise paha biçilemez.
Anlattığımız kurulumda şunları elde etmiş oldunuz: Docker üzerinde çalışan, Nginx reverse proxy arkasına alınmış, Telegram ve e-posta bildirimleri aktif, otomatik yedekleme ve çift katmanlı kontrol (Uptime Kuma + bash script) ile çalışan bir SSL izleme altyapısı.
Buna ek olarak şunu da ekleyeyim: Uptime Kuma yalnızca SSL izleme için değil, genel servis monitoring için de son derece yetenekli bir araç. TCP port kontrolü, DNS sorgu izleme, Docker container sağlığı ve hatta özel keyword kontrolü gibi özelliklerle tüm altyapınızın tek dashboard’dan takibini yapabilirsiniz. SSL izleme bu yolculuğun sadece başlangıcı.
