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:

  1. Telegram’da @BotFather ile konuşun
  2. /newbot komutunu gönderin
  3. Bot adı ve kullanıcı adını belirleyin
  4. 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:

  1. Slack workspace’inizde Apps > Incoming Webhooks’a gidin
  2. Yeni bir webhook URL’si oluşturun
  3. 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ı.

Bir yanıt yazın

E-posta adresiniz yayınlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir