Uptime Kuma Güncelleme ve Sürüm Yönetimi

Üretim ortamında çalışan bir izleme aracını güncellemek her zaman biraz gerginlik yaratır. “Ya şu an bir şeyler izliyorsa?”, “Ya güncelleme sırasında veri kaybı olursa?”, “Ya yeni sürüm eski ayarlarımı bozarsa?” Uptime Kuma söz konusu olduğunda bu sorular daha da kritik hale geliyor, çünkü zaten bu aracı kullanmanızın nedeni hizmetlerinizin sürekli gözaltında olmasını sağlamak. Peki ya izleme aracının kendisi güncelleme sürecinde “kör” kalıyorsa?

Bu yazıda Uptime Kuma’yı farklı kurulum senaryolarında nasıl güncelleyeceğinizi, sürüm yönetimini nasıl ele almanız gerektiğini ve güncelleme sürecini mümkün olduğunca risksiz hale getirmenin yollarını aktaracağım. Hem Docker ile çalışanlar hem de bare-metal kurulum yapanlar için ayrı ayrı ele alacağız konuyu.

Uptime Kuma Güncelleme Stratejisine Genel Bakış

Önce şunu netleştirelim: Uptime Kuma aktif geliştirilen bir proje. GitHub’da bakarsanız sürümler sık sık çıkıyor ve bazen breaking change’ler de geliyor. Bu yüzden “çalışıyorsa dokunma” mantığı burada size ihanet edebilir. Güvenlik yamaları, yeni monitör tipleri, bildirim kanallarındaki düzeltmeler gibi şeyler için güncel kalmak önemli.

Güncelleme stratejisi belirlemeden önce şu üç soruyu cevaplamanız lazım:

  • Uptime Kuma’yı Docker üzerinde mi, yoksa doğrudan sunucuya mı kurduğunuz
  • Veritabanı yedeğiniz var mı ve nerede
  • Güncelleme sırasında izleme kesintisine toleransınız ne kadar

Bu soruların cevaplarına göre yaklaşım değişiyor. Haydi her senaryoyu inceleyelim.

Docker ile Kurulumda Güncelleme

Docker ile çalışıyorsanız işiniz görece kolay, ama dikkat edilmesi gereken noktalar var. Uptime Kuma’nın resmi imajı louislam/uptime-kuma şeklinde. latest tagini kullanıyorsanız her ne kadar teorik olarak kolaylık gibi görünse de üretim ortamında sabit sürüm taglerini tercih etmenizi öneririm.

Mevcut Sürümü Kontrol Etme

Güncellemeye geçmeden önce ne üzerinde çalıştığınızı bilin:

docker inspect uptime-kuma | grep -i image
# ya da daha temiz bir çıktı için:
docker ps --format "table {{.Names}}t{{.Image}}t{{.Status}}" | grep uptime

Bir de container içinden kontrol edebilirsiniz:

docker exec -it uptime-kuma node -e "const pkg = require('/app/package.json'); console.log(pkg.version);"

Güncelleme Öncesi Yedek Almak

Bu adımı atlamayın. Uptime Kuma SQLite kullanıyor ve tüm verileriniz tek bir dosyada: kuma.db. Bunu yedeklemeden güncelleme yapmak istikbali zorlamak demek.

# Volume mount noktanızı öğrenin
docker inspect uptime-kuma | grep -A5 "Mounts"

# Genellikle şu şekilde yedek alınır:
mkdir -p /backup/uptime-kuma/$(date +%Y%m%d)
docker cp uptime-kuma:/app/data/kuma.db /backup/uptime-kuma/$(date +%Y%m%d)/kuma.db
docker cp uptime-kuma:/app/data/kuma.db /backup/uptime-kuma/$(date +%Y%m%d)/kuma.db.bak
echo "Yedek alındı: $(ls -lh /backup/uptime-kuma/$(date +%Y%m%d)/)"

Eğer named volume kullanıyorsanız (ki önerilen bu):

# Volume içeriğini yedekle
docker run --rm 
  -v uptime-kuma_data:/source:ro 
  -v /backup/uptime-kuma:/backup 
  alpine tar czf /backup/kuma_backup_$(date +%Y%m%d_%H%M).tar.gz -C /source .

Docker Güncelleme Adımları

Yedek aldıktan sonra güncelleme sürecine geçebilirsiniz:

# 1. Mevcut container'ı durdur
docker stop uptime-kuma

# 2. Yeni imajı çek
docker pull louislam/uptime-kuma:latest

# 3. Eski container'ı sil (volume'lar silinmez)
docker rm uptime-kuma

# 4. Container'ı yeniden başlat
docker run -d 
  --restart=always 
  -p 3001:3001 
  -v uptime-kuma_data:/app/data 
  --name uptime-kuma 
  louislam/uptime-kuma:latest

# 5. Logları kontrol et
docker logs -f uptime-kuma

Eğer belirli bir sürüme geçmek istiyorsanız latest yerine sürüm numarasını kullanın. GitHub releases sayfasından mevcut sürümleri takip edebilirsiniz:

docker pull louislam/uptime-kuma:1.23.13

Docker Compose ile Güncelleme

Eğer docker-compose kullanıyorsanız (ki çoğunuz öyle) süreç daha da temiz:

# docker-compose.yml dosyanızı güncelledikten sonra:
docker compose pull
docker compose down
docker compose up -d

# Logları takip et
docker compose logs -f uptime-kuma

Compose dosyanızda sürüm yönetimi için şunu öneririm:

version: '3.8'
services:
  uptime-kuma:
    image: louislam/uptime-kuma:1.23.13  # latest yerine sabit sürüm
    container_name: uptime-kuma
    volumes:
      - ./data:/app/data
    ports:
      - "3001:3001"
    restart: unless-stopped
    environment:
      - TZ=Europe/Istanbul

Sürüm numarasını compose dosyasında tutmak önemli çünkü git blame yaptığınızda ne zaman hangi sürüme geçtiğinizi görebilirsiniz. Bu küçük detay ay sonra “bu ne zaman değişti?” sorusunu soran müdürünüze somut cevap vermenizi sağlar.

Node.js ile Doğrudan Kurulumda Güncelleme

Bare-metal ya da VM üzerine doğrudan Node.js ile kurduysanız süreç biraz daha elle yapılan işlem içeriyor. Ama aynı şekilde yönetilebilir.

# Uptime Kuma process'ini durdur (systemd kullanıyorsanız)
sudo systemctl stop uptime-kuma

# Uptime Kuma dizinine git
cd /opt/uptime-kuma  # kurulum dizininize göre değişir

# Mevcut sürümü not al
git log --oneline -1

# Yedek al
cp -r data/ /backup/uptime-kuma/data_$(date +%Y%m%d_%H%M)/

# Güncellemeleri çek
git fetch --all
git checkout $(git describe --tags `git rev-list --tags --max-count=1`)

# Bağımlılıkları güncelle
npm install --production

# Servisi yeniden başlat
sudo systemctl start uptime-kuma

# Durumu kontrol et
sudo systemctl status uptime-kuma
journalctl -u uptime-kuma -f

PM2 ile Yönetiyorsanız

Pek çok kişi PM2 ile yönetiyor bu kurulumu:

# Durdur
pm2 stop uptime-kuma

# Güncelle
cd /opt/uptime-kuma
git pull origin master
npm install --production

# Yeniden başlat
pm2 restart uptime-kuma

# Logları izle
pm2 logs uptime-kuma --lines 50

Güncelleme Sonrası Kontroller

Güncelleme yaptım, oldu bitti demek olmaz. Birkaç şeyi mutlaka kontrol edin:

# Container sağlık durumu (Docker için)
docker inspect --format='{{.State.Health.Status}}' uptime-kuma

# HTTP erişim kontrolü
curl -s -o /dev/null -w "%{http_code}" http://localhost:3001

# Veritabanı bütünlüğü (sqlite3 kuruluysa)
sqlite3 /path/to/kuma.db "PRAGMA integrity_check;"

Arayüze girip şunları kontrol edin:

  • Tüm monitörlerinizin hala mevcut olup olmadığı
  • Bildirim kanallarının (Slack, Telegram, e-posta vb.) çalışıp çalışmadığı
  • Heartbeat geçmişinin kayıpsız gelip gelmediği
  • Status page’lerin düzgün görüntülenip görüntülenmediği

Sürüm Yönetimi ve Changelog Takibi

Uptime Kuma’nın changelog’unu takip etmek için GitHub’daki releases sayfasını düzenli ziyaret etmenizi öneririm. Ama bunu otomatize etmek de mümkün. RSS destekli araçlar ya da basit bir script ile bunu yapabilirsiniz:

#!/bin/bash
# uptime-kuma-version-check.sh
# Bu scripti cron'a ekleyip haftalık çalıştırabilirsiniz

CURRENT=$(docker exec uptime-kuma node -e "const pkg = require('/app/package.json'); console.log(pkg.version);" 2>/dev/null)
LATEST=$(curl -s https://api.github.com/repos/louislam/uptime-kuma/releases/latest | grep '"tag_name"' | sed 's/.*"v([^"]*)".*/1/')

if [ "$CURRENT" != "$LATEST" ]; then
    echo "Güncelleme mevcut: Mevcut=$CURRENT, En son=$LATEST"
    # Buraya bildirim gönderme kodu ekleyebilirsiniz
    # örneğin Telegram bot ile bildirim
    TELEGRAM_TOKEN="your_token"
    CHAT_ID="your_chat_id"
    curl -s -X POST "https://api.telegram.org/bot${TELEGRAM_TOKEN}/sendMessage" 
        -d chat_id="${CHAT_ID}" 
        -d text="Uptime Kuma güncellemesi mevcut! Mevcut: v${CURRENT}, Yeni: v${LATEST}"
else
    echo "Uptime Kuma güncel: v${CURRENT}"
fi

Bu scripti cron’a eklemek için:

# Her Pazartesi sabah 09:00'da kontrol et
echo "0 9 * * 1 /opt/scripts/uptime-kuma-version-check.sh >> /var/log/uptime-kuma-check.log 2>&1" | crontab -

Rollback Senaryosu: İşler Ters Giderse

Güncelleme sonrası bir şeyler ters gidebilir. Önceden rollback planı yapmak bu yüzden kritik. Şu ana kadar önerdiğim yedek stratejileri sayesinde geri dönmek zor değil.

Docker için rollback:

# Sorunlu container'ı durdur ve sil
docker stop uptime-kuma
docker rm uptime-kuma

# Veritabanını yedekten geri yükle
docker run --rm 
  -v uptime-kuma_data:/target 
  -v /backup/uptime-kuma:/backup 
  alpine sh -c "rm -rf /target/* && tar xzf /backup/kuma_backup_TARIH.tar.gz -C /target"

# Eski sürümle yeniden başlat
docker run -d 
  --restart=always 
  -p 3001:3001 
  -v uptime-kuma_data:/app/data 
  --name uptime-kuma 
  louislam/uptime-kuma:1.23.10  # eski sürüm numarası

Bare-metal kurulum için git ile rollback çok daha temiz:

# Hangi commit'te olduğunu gör
git log --oneline -5

# Bir önceki tag'e dön
git checkout v1.23.10  # önceki sürüm

# Yedekten veritabanını geri yükle
cp /backup/uptime-kuma/data_TARIH/kuma.db /opt/uptime-kuma/data/

npm install --production
pm2 restart uptime-kuma

Otomatik Güncelleme: Ne Kadar Risk Almalısınız?

Bu noktada dürüst olmak gerekiyor: Uptime Kuma için tam otomatik güncelleme önermiyorum. Çünkü izleme aracınızın kendisi güncelleme sırasında çöküyorsa ve siz bunu fark etmiyorsanız, izleme sisteminizin varlığı sorgulanır hale gelir.

Ancak Watchtower gibi araçlar kullananlar için şunu söyleyeyim: Eğer kullanacaksanız en azından bir gecikme ve bildirim mekanizması ekleyin:

# Watchtower ile sadece bildirim gönder, otomatik güncelleme yapma
docker run -d 
  --name watchtower 
  -v /var/run/docker.sock:/var/run/docker.sock 
  containrrr/watchtower 
  --notifications slack 
  --notification-slack-hook-url "https://hooks.slack.com/..." 
  --monitor-only 
  uptime-kuma

--monitor-only flag’i ile Watchtower güncelleme yapmadan size haber verir. Güncellemeyi siz uygun zamanda manuel yaparsınız. Bu yaklaşım üretim için çok daha sağlıklı.

Bakım Penceresi Planlaması

Güncelleme için ideal zaman seçimi önemli. Türkiye için gece 02:00-04:00 arası genellikle en düşük trafik zamanıdır. Ama bu tamamen sizin izlediğiniz servislere göre değişir.

Bakım penceresi için şu pratik yaklaşımı benimseyebilirsiniz:

  • Güncelleme öncesi status page’e bakım bildirimi ekleyin (Uptime Kuma’nın kendi özelliği)
  • Güncelleme 15 dakikadan uzun sürmeyecekse büyük ihtimalle downtime bildirimi bile gerekmez
  • Kritik monitörler için güncelleme sonrası ilk 30 dakikayı aktif izleme yapın

Uptime Kuma’nın arayüzünden bakım modu açmak için Settings > Maintenance bölümünü kullanabilirsiniz. Bu sayede güncelleme sırasında yanlış alarm üretmezsiniz.

Günlük Yedekleme ile Sürüm Takibini Birleştirmek

En iyi pratik, güncelleme yönetimini düzenli yedekleme rutiniyle birleştirmektir. Şu script her gece kuma.db’yi yedekliyor ve 7 günden eski yedekleri siliyor:

#!/bin/bash
# /opt/scripts/kuma-backup.sh

BACKUP_DIR="/backup/uptime-kuma"
DATE=$(date +%Y%m%d_%H%M)
RETENTION_DAYS=7

mkdir -p "$BACKUP_DIR"

# Yedek al
docker cp uptime-kuma:/app/data/kuma.db "${BACKUP_DIR}/kuma_${DATE}.db"

if [ $? -eq 0 ]; then
    # Sıkıştır
    gzip "${BACKUP_DIR}/kuma_${DATE}.db"
    echo "[$(date)] Yedek başarıyla alındı: kuma_${DATE}.db.gz"
else
    echo "[$(date)] HATA: Yedek alınamadı!" >&2
    exit 1
fi

# Eski yedekleri temizle
find "$BACKUP_DIR" -name "*.db.gz" -mtime +${RETENTION_DAYS} -delete
echo "[$(date)] ${RETENTION_DAYS} günden eski yedekler temizlendi."

# Mevcut sürümü kaydet
CURRENT_VERSION=$(docker exec uptime-kuma node -e "const pkg = require('/app/package.json'); console.log(pkg.version);" 2>/dev/null)
echo "$DATE - v$CURRENT_VERSION" >> "${BACKUP_DIR}/version_history.log"

Bu scripti cron’a ekleyin:

# Her gece 01:30'da çalıştır
30 1 * * * /opt/scripts/kuma-backup.sh >> /var/log/kuma-backup.log 2>&1

version_history.log dosyası sayesinde hangi tarihte hangi sürüme geçtiğinizi de takip etmiş olursunuz. Sorun çıktığında “ne zaman değişti” sorusunun cevabı hazır olur.

Büyük Sürüm Atlamalarında Dikkat

Bazen uzun süre güncelleme yapmadan bırakırsınız ve birkaç major sürüm geride kalırsınız. Bu durumda doğrudan en son sürüme atlamak yerine ara sürümleri kontrol etmenizi öneririm. Özellikle veritabanı migration’ları içeren güncellemelerde Uptime Kuma kendi migration’ını otomatik yapıyor, ama iki major sürüm atlarsanız nadir de olsa sorun çıkabiliyor.

Birden fazla sürüm gerideyseniz şu yaklaşımı izleyin:

  • Mevcut sürümünüzü not edin
  • GitHub’da release notlarını en eskileri ve yenileri arasında tarayın
  • “Breaking changes” veya “database migration” içeren sürümleri işaretleyin
  • Eğer üç veya daha fazla major versiyon atlanacaksa, ara sürümleri sırayla geçmeyi değerlendirin

Pratikte çoğu zaman direkt en son sürüme geçmek sorunsuz çalışıyor, ama yedek her zaman alınmış olsun.

Sonuç

Uptime Kuma güncellemesi aslında korkutucu bir işlem değil. Ama “nasılsa çalışıyor” deyip aylarca güncelleme yapmamak da doğru değil. Özellikle güvenlik açıkları ve bildirim sistemi düzeltmeleri geldiğinde güncel kalmak kritik oluyor.

Özetleyecek olursam:

  • Docker kullanıyorsanız compose dosyasında sabit sürüm kullanın, lateste güvenmeyin
  • Güncelleme öncesi mutlaka yedek alın, bu adımı asla atlamayın
  • Rollback planınız hazır olsun, sadece düşünmek yetmez, script hazırlayıp test edin
  • Otomatik güncelleme yerine otomatik bildirim kullanın, güncellemeyi kendiniz yapın
  • Version history tutun, hangi tarihte hangi sürüme geçtiniz kayıt altında olsun
  • Güncelleme sonrası kontrol listesi uygulayın, monitörler, bildirimler, veritabanı bütünlüğü

İzleme aracınızı izlemek garip geliyor olabilir, ama üretim ortamında bu da bir sorumluluk. Uptime Kuma’yı sağlıklı tutarsanız o da sizin servislerinizi sağlıklı tutar.

Bir yanıt yazın

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