Uptime Kuma Ubuntu’ya Manuel Kurulum Rehberi

Sunucu izleme konusunda onlarca araç denedim, ücretli çözümler kullandım, açık kaynak alternatifleri kurdum. Ama Uptime Kuma’yı ilk gördüğümde “bu tam olarak istediğim şey” dedim. Sade arayüzü, düşük kaynak tüketimi ve kolay kurulumu ile özellikle küçük-orta ölçekli altyapılarda neredeyse mükemmel bir seçenek. Bu yazıda Ubuntu üzerine production-grade bir Uptime Kuma kurulumunu adım adım anlatacağım. Docker kullanmadan, sistemin tam kontrolünün sizde olduğu manuel bir kurulum yapacağız.

Uptime Kuma Nedir, Neden Manuel Kurulum?

Uptime Kuma, Node.js tabanlı açık kaynaklı bir servis izleme aracı. HTTP/HTTPS, TCP, DNS, Steam oyun sunucuları, Docker container’ları dahil onlarca protokolü izleyebiliyorsunuz. Telegram, Slack, e-posta, Discord gibi onlarca bildirim kanalını destekliyor.

Docker ile kurulum çok daha hızlı tabii. Ama bazı ortamlarda Docker kullanmak istemiyorsunuz ya da kuruluş politikası Docker’a izin vermiyor. Ya da sadece sistemin üzerinde ne çalıştığını tam olarak kontrol etmek istiyorsunuz. Manuel kurulum tam bu ihtiyacı karşılıyor.

Benim tercihim genellikle production sunucularda manuel kurulum yönünde oldu. Kaynak kullanımı daha öngörülebilir, sorun çıktığında doğrudan log dosyalarına ulaşabiliyorsunuz, güncelleme süreçleri daha kontrollü.

Sistem Gereksinimleri

Uptime Kuma hafif bir uygulama ama minimum gereksinimlere dikkat etmek gerekiyor:

  • İşletim Sistemi: Ubuntu 20.04 LTS veya 22.04 LTS (bu yazıda 22.04 kullanıyoruz)
  • RAM: Minimum 512 MB, önerilen 1 GB
  • CPU: 1 vCPU yeterli, 50-100 monitor için 2 vCPU daha rahat çalışır
  • Disk: Uygulama için 1 GB, log ve SQLite veritabanı için ek alan
  • Node.js: v14 veya üzeri (v18 LTS önerilen)

Sunucunuzda başka servisler de çalışıyorsa 2 GB RAM’in altına düşmemenizi öneririm.

Kurulum Öncesi Hazırlık

Önce sistemi güncelleyelim ve gerekli temel paketleri kuralım:

sudo apt update && sudo apt upgrade -y
sudo apt install -y curl wget git build-essential

Şimdi Uptime Kuma için ayrı bir sistem kullanıcısı oluşturalım. Bu, güvenlik açısından kritik bir adım. Root ile uygulama çalıştırmak istemiyoruz:

sudo useradd -m -s /bin/bash uptimekuma
sudo passwd uptimekuma

Kullanıcıya sudo yetkisi vermiyoruz, sadece kendi dizininde çalışacak.

Node.js Kurulumu

Ubuntu’nun varsayılan repository’sinde Node.js sürümü genellikle güncel olmaz. NodeSource repository’sini kullanalım:

curl -fsSL https://deb.nodesource.com/setup_18.x | sudo -E bash -
sudo apt install -y nodejs

Kurulumu doğrulayalım:

node --version
npm --version

Beklenen çıktı şu şekilde olmalı:

v18.x.x
9.x.x

Node.js 18 LTS kullanmanızı şiddetle tavsiye ederim. 16 ile de çalışıyor ama güvenlik güncellemeleri ve performans iyileştirmeleri açısından 18 daha sağlam bir temel.

Uptime Kuma Kurulumu

Uptime Kuma’yı uptimekuma kullanıcısı olarak kuracağız. Önce o kullanıcıya geçelim:

sudo su - uptimekuma

Şimdi Uptime Kuma’yı GitHub’dan klonlayalım:

git clone https://github.com/louislam/uptime-kuma.git
cd uptime-kuma
npm run setup

npm run setup komutu oldukça uzun sürebilir, özellikle düşük kaynaklı sunucularda 5-10 dakika beklemeniz normal. Bu komut bağımlılıkları indiriyor ve production build’i oluşturuyor.

Kurulum tamamlandıktan sonra hızlıca test edelim:

node server/server.js

Tarayıcınızdan http://sunucu-ip:3001 adresine gidin. Uptime Kuma arayüzünü görüyorsanız kurulum başarılı. Ctrl+C ile durdurun, asıl kuruluma devam edeceğiz.

Root kullanıcısına geri dönelim:

exit

Systemd Service Yapılandırması

Uptime Kuma’nın sistem başlangıcında otomatik başlaması ve çökme durumunda yeniden başlatılması için systemd servisi oluşturacağız:

sudo nano /etc/systemd/system/uptime-kuma.service

Aşağıdaki içeriği yapıştırın:

[Unit]
Description=Uptime Kuma - Monitoring Service
Documentation=https://github.com/louislam/uptime-kuma
After=network-online.target

[Service]
Type=simple
User=uptimekuma
WorkingDirectory=/home/uptimekuma/uptime-kuma
ExecStart=/usr/bin/node server/server.js
Restart=on-failure
RestartSec=10
StandardOutput=syslog
StandardError=syslog
SyslogIdentifier=uptime-kuma
Environment=NODE_ENV=production
Environment=UPTIME_KUMA_PORT=3001

[Install]
WantedBy=multi-user.target

Birkaç satırı açıklayayım:

  • After=network-online.target: Ağ bağlantısı kurulduktan sonra başlatılıyor. Bu önemli, aksi halde Uptime Kuma başladığında monitör bağlantıları hata verebilir
  • Restart=on-failure: Sadece başarısız çıkışlarda yeniden başlatıyor, manual stop’larda değil
  • RestartSec=10: Yeniden başlatmadan önce 10 saniye bekliyor, sürekli döngüye girmeyi engelliyor
  • Environment=NODE_ENV=production: Production modunda çalıştırmak performans açısından önemli

Servisi etkinleştirelim ve başlatalım:

sudo systemctl daemon-reload
sudo systemctl enable uptime-kuma
sudo systemctl start uptime-kuma

Servis durumunu kontrol edelim:

sudo systemctl status uptime-kuma

Active: active (running) görüyorsanız her şey yolunda.

Nginx Reverse Proxy Yapılandırması

Uptime Kuma’yı doğrudan 3001 portunda açık bırakmak yerine Nginx arkasına almak daha doğru bir yaklaşım. Bu sayede SSL/TLS ekleyebilir, özel domain kullanabilir ve ekstra güvenlik katmanı sağlayabiliriz:

sudo apt install -y nginx

Nginx site konfigürasyonu oluşturalım:

sudo nano /etc/nginx/sites-available/uptime-kuma
server {
    listen 80;
    server_name izleme.sirketiniz.com;

    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_set_header   X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header   X-Forwarded-Proto $scheme;
        proxy_cache_bypass $http_upgrade;
        proxy_read_timeout 86400;
    }
}

WebSocket desteği için Upgrade ve Connection headerları kritik. Uptime Kuma gerçek zamanlı güncellemeler için WebSocket kullanıyor, bu satırları unutursanız dashboard’da sürekli bağlantı hataları görürsünüz.

Konfigürasyonu etkinleştirelim:

sudo ln -s /etc/nginx/sites-available/uptime-kuma /etc/nginx/sites-enabled/
sudo nginx -t
sudo systemctl restart nginx

SSL Sertifikası – Let’s Encrypt

Gerçek bir production ortamında HTTP üzerinden çalışmak kabul edilemez. Let’s Encrypt ile ücretsiz SSL sertifikası alalım:

sudo apt install -y certbot python3-certbot-nginx
sudo certbot --nginx -d izleme.sirketiniz.com

Certbot konfigürasyonu otomatik olarak güncelliyor. Yenileme cronjob’ını da kontrol edelim:

sudo certbot renew --dry-run

Hata almadıysanız sertifika yenilemesi otomatik çalışacak.

Güvenlik Duvarı Yapılandırması

UFW ile güvenlik duvarı kurallarını ayarlayalım:

sudo ufw allow 'Nginx Full'
sudo ufw allow OpenSSH
sudo ufw enable
sudo ufw status

3001 portunu direkt açmıyoruz. Uptime Kuma’ya sadece Nginx üzerinden erişilmeli:

sudo ufw deny 3001

Eğer Uptime Kuma’nın dışarıya bağlantı yapabilmesi gerekiyorsa (ki monitörleme için şart), çıkış trafiğine izin verelim:

sudo ufw default allow outgoing

İlk Yapılandırma ve Monitor Ekleme

Tarayıcınızdan https://izleme.sirketiniz.com adresine gidin. İlk girişte admin hesabı oluşturmanız istenecek. Güçlü bir parola seçin, bu panel dışarıdan erişilebilir olacak.

Giriş yaptıktan sonra ilk monitörünüzü ekleyelim. Gerçek dünya senaryosu olarak bir e-ticaret sitesini ve veritabanı sunucusunu izleyelim.

HTTP/HTTPS Monitörü (Web Sitesi):

  • Monitor Type: HTTP(s)
  • Friendly Name: Ana Sayfa – E-Ticaret
  • URL: https://www.sirketiniz.com
  • Heartbeat Interval: 60 saniye (production için 30-60 saniye arası ideal)
  • Retries: 3 (3 başarısız deneme sonrası alarm)
  • HTTP Options içinde “Accept Statuses” kısmında 200 ve 301 ekleyin

TCP Port Monitörü (Veritabanı):

  • Monitor Type: TCP Port
  • Friendly Name: MySQL Veritabanı
  • Hostname: 10.0.1.5 (iç ağ IP)
  • Port: 3306
  • Heartbeat Interval: 60 saniye

DNS Monitörü:

DNS kayıtlarınızın doğru çözüldüğünü izlemek için:

  • Monitor Type: DNS
  • Friendly Name: DNS Kontrolü – Ana Domain
  • Hostname: sirketiniz.com
  • DNS Resolver Server: 8.8.8.8
  • Resource Record Type: A

Bildirim Kanalı Yapılandırması

Telegram bildirimi en pratik seçenek bence. Kurulum için önce BotFather’dan bir bot oluşturmanız gerekiyor. Telegram’da @BotFather’a /newbot komutunu gönderin, verilen token’ı alın.

Chat ID’nizi öğrenmek için @userinfobot’a bir mesaj gönderin.

Uptime Kuma’da Settings > Notifications > Add Notification:

  • Notification Type: Telegram
  • Bot Token: BotFather’dan aldığınız token
  • Chat ID: Kullanıcı veya grup chat ID’niz

Test butonuna tıklayın, Telegram’da mesaj geldi mi kontrol edin.

Güncelleme Prosedürü

Uptime Kuma aktif geliştirilen bir proje, düzenli güncelleme önemli. Güncelleme süreci şu şekilde:

sudo systemctl stop uptime-kuma
sudo su - uptimekuma
cd uptime-kuma
git fetch --all
git checkout $(git tag -l | grep -v "beta" | sort -V | tail -1)
npm run setup
exit
sudo systemctl start uptime-kuma

Bu komut dizisi son stable release’e günceller. Beta sürümlerden uzak durmanızı öneririm, production ortamında beklenmedik sorunlar çıkabiliyor.

Güncelleme öncesi veriyi yedeklemek iyi bir alışkanlık:

sudo cp -r /home/uptimekuma/uptime-kuma/data /backup/uptime-kuma-$(date +%Y%m%d)

Uptime Kuma tüm verisini SQLite’da saklıyor, bu data dizini yedeğini düzenli alın.

Log Yönetimi ve Sorun Giderme

Servis loglarını görüntülemek için:

sudo journalctl -u uptime-kuma -f

Son 100 satır için:

sudo journalctl -u uptime-kuma -n 100 --no-pager

Sık karşılaşılan sorunlar ve çözümleri:

Sorun: Servis başlamıyor, “EADDRINUSE” hatası

3001 portu başka bir process tarafından kullanılıyor:

sudo lsof -i :3001
sudo kill -9 <PID>

Sorun: WebSocket bağlantısı kurulamıyor

Nginx konfigürasyonunda proxy_read_timeout 86400 satırını kontrol edin. Load balancer veya başka bir proxy kullanıyorsanız WebSocket timeout ayarlarını kontrol edin.

Sorun: Monitörler yanıt vermiyor ama site ayakta

Sunucunuzdan ilgili hedefe bağlantı olup olmadığını test edin:

curl -I https://hedef-site.com
telnet 10.0.1.5 3306

Uptime Kuma kendi konumundan izliyor, sizin bilgisayarınızdan değil. Sunucu IP’sinin hedef firewall’da bloklu olmadığını kontrol edin.

Performans Optimizasyonu

50’den fazla monitörünüz varsa birkaç optimizasyon yapabilirsiniz.

Node.js için memory limit ayarlayın. Systemd servis dosyasını güncelleyin:

Environment=NODE_OPTIONS=--max-old-space-size=512

SQLite veritabanı büyüdükçe yavaşlayabilir. Uptime Kuma’da Settings > General altında “Keep data for” seçeneğini ihtiyacınıza göre ayarlayın. 30 gün genellikle yeterli, 365 gün tutarsanız veritabanı şişer.

Çok sayıda monitörünüz varsa heartbeat interval’larını staggered yapın, yani hepsini 60 saniyeye ayarlayıp aynı anda sorgu patlaması yaratmak yerine 45, 60, 90 gibi farklı değerler kullanın.

Yedekleme Stratejisi

Production’da çalışan her şey gibi Uptime Kuma verisi de yedeklenmeli. Basit bir cron job ile günlük yedek alalım:

sudo crontab -e
0 2 * * * cp -r /home/uptimekuma/uptime-kuma/data /backup/uptime-kuma/$(date +%Y%m%d) && find /backup/uptime-kuma/ -maxdepth 1 -mtime +30 -type d -exec rm -rf {} ;

Bu job her gece 02:00’da yedek alıyor ve 30 günden eski yedekleri siliyor.

Yedekleri uzak sunucuya göndermek için rsync kullanabilirsiniz:

0 3 * * * rsync -avz /backup/uptime-kuma/ backup-user@yedek-sunucu:/backups/uptime-kuma/

Status Page Oluşturma

Uptime Kuma sadece iç izleme aracı olarak değil, müşterilerinize durum sayfası sunmak için de kullanılabilir. Status Page özelliği ile seçtiğiniz monitörlerin genel durumunu herkese açık bir sayfa üzerinden yayınlayabilirsiniz.

Dashboard üzerinden “Status Page” menüsüne gelin, yeni bir sayfa oluşturun. Hangi monitörlerin görüneceğini seçin, özel domain ekleyebilirsiniz. Müşterilerden “site çalışıyor mu” telefonu almak yerine onlara bu sayfanın linkini verin.

Bir yazılım şirketi için bunu uyguladık, destek ekibine gelen “site down mu” sorularının sayısı dramatik şekilde düştü. Müşteriler durumu kendileri görebilince gereksiz iletişim azaldı.

Sonuç

Uptime Kuma’yı Ubuntu’ya manuel olarak kurmak başlangıçta karmaşık görünebilir ama adımları takip ettiğinizde oldukça düzgün oturuyor. Systemd ile yönetilen, Nginx arkasında SSL ile çalışan, UFW ile korunan bir kurulum gerçek anlamda production-ready sayılabilir.

Bu kurulumla şunları elde ettiniz:

  • Sistem başlangıcında otomatik başlayan ve çökmede kendini yeniden başlatan bir servis
  • SSL/TLS ile şifrelenmiş erişim
  • Güvenlik duvarı ile korunan, sadece Nginx üzerinden erişilebilen uygulama
  • Düzenli yedekleme ile veri güvenliği
  • Telegram bildirimleri ile anlık uyarı sistemi

Uygulamayı bir süre çalıştırdıktan sonra hangi monitörlerin en çok alarm ürettiğini, hangi servislerin güvenilirlik sorunları yaşadığını göreceksiniz. Bu veriler altyapı kararlarında tahmine değil somut verilere dayanmanızı sağlıyor.

Günlük bakım açısından haftalık log kontrolü, aylık güncelleme kontrolü ve üç aylık yedek restore testi yapmanızı öneririm. Özellikle yedek restore testi atlanan bir adım, ta ki gerçekten ihtiyaç duyulana kadar.

Bir yanıt yazın

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