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.
