Ana içeriğe geç
Kategoriye Dön

Uptime Kuma Kurulumu: Self-Hosted Uptime Monitoring

Uptime Kuma kurulumu Docker ile, HTTP/TCP/DNS/ping monitörleme, bildirim entegrasyonları (Telegram, Discord, email), status page oluşturma ve alert yapılandırması.

Okuma süresi: 12 dk Self-Hosting
uptime-kumamonitoringuptimeself-hostingdockerbildirimstatus page
Yazar
REXE Teknoloji Ağ ve Güvenlik Ekibi
Editör
REXE Teknoloji Teknik Yayın Editörü
İlk yayın
Son güncelleme

Uptime Kuma Kurulumu: Self-Hosted Uptime Monitoring

Uptime Kuma, servislerinizin ve web sitelerinizin çalışma durumunu izleyen, self-hosted bir uptime monitoring aracıdır. Güzel bir web arayüzü, çeşitli monitör türleri ve zengin bildirim entegrasyonlarıyla Uptime Robot'a harika bir alternatif sunar.

Uptime Kuma Nedir?

Uptime Kuma'nın öne çıkan özellikleri:

  • Monitör Türleri: HTTP(S), TCP, DNS, Ping, Docker Container, Steam Game Server
  • Bildirim Kanalları: Telegram, Discord, Slack, Email, PagerDuty, Webhook ve 90+ entegrasyon
  • Status Page: Özelleştirilebilir durum sayfası
  • SSL İzleme: Sertifika son kullanma tarihi takibi
  • Maintenance Window: Planlı bakım penceresi tanımlama
  • 2FA Desteği: İki faktörlü kimlik doğrulama
  • Çoklu Dil: Türkçe dahil 40+ dil

Kurulum

Docker ile Kurulum (Önerilen)

hljs bash
docker run -d \
  --name uptime-kuma \
  --restart=always \
  -p 3001:3001 \
  -v uptime-kuma:/app/data \
  louislam/uptime-kuma:latest

Kurulum tamamlandıktan sonra:

http://SUNUCU_IP:3001

Docker Compose ile Kurulum

hljs yaml
# docker-compose.yml
version: '3.8'
services:
  uptime-kuma:
    image: louislam/uptime-kuma:latest
    container_name: uptime-kuma
    restart: unless-stopped
    ports:
      - "3001:3001"
    volumes:
      - uptime-kuma:/app/data
    security_opt:
      - no-new-privileges:true

volumes:
  uptime-kuma:
hljs bash
docker compose up -d

Nginx Reverse Proxy ile HTTPS

hljs nginx
# /etc/nginx/sites-available/uptime.example.com
server {
    listen 80;
    server_name uptime.example.com;
    return 301 https://$host$request_uri;
}

server {
    listen 443 ssl http2;
    server_name uptime.example.com;

    ssl_certificate /etc/letsencrypt/live/uptime.example.com/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/uptime.example.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_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;
        proxy_cache_bypass $http_upgrade;
    }
}
hljs bash
sudo ln -s /etc/nginx/sites-available/uptime.example.com /etc/nginx/sites-enabled/
sudo certbot --nginx -d uptime.example.com
sudo nginx -t && sudo systemctl reload nginx

İlk Kurulum

Web arayüzüne ilk girişte admin hesabı oluşturun:

  1. Kullanıcı adı ve şifre belirleyin
  2. Giriş yapın
  3. Add New Monitor ile ilk monitörü ekleyin

Monitör Türleri

HTTP(S) Monitörü

Web sitesi ve API endpoint'lerini izlemek için:

Monitor Type: HTTP(S)
Friendly Name: Ana Sayfa
URL: https://example.com
Heartbeat Interval: 60 saniye
Retries: 3
Accepted Status Codes: 200-299

Gelişmiş HTTP ayarları:

hljs bash
# Keyword monitoring (sayfada belirli metin arama)
Monitor Type: HTTP(S) - Keyword
Keyword: "Hoş geldiniz"

# JSON Query monitoring (API response kontrolü)
Monitor Type: HTTP(S) - JSON Query
JSON Path: $.status
Expected Value: ok

# Basic Auth gerektiren endpoint
Authentication: Basic Auth
Username: api_user
Password: api_password

TCP Port Monitörü

Monitor Type: TCP Port
Friendly Name: MySQL Veritabanı
Hostname: db.example.com
Port: 3306
Heartbeat Interval: 120 saniye

DNS Monitörü

Monitor Type: DNS
Friendly Name: DNS Kontrolü
Hostname: example.com
Resolver Server: 8.8.8.8
DNS Resolve Type: A
Expected Value: 1.2.3.4

Ping Monitörü

Monitor Type: Ping
Friendly Name: Sunucu Ping
Hostname: 192.168.1.1
Heartbeat Interval: 60 saniye

Docker Container Monitörü

hljs bash
# Docker container durumunu izle
Monitor Type: Docker Container
Container Name / ID: nginx
Docker Host: /var/run/docker.sock

SSL Sertifika İzleme

Monitor Type: HTTP(S)
URL: https://example.com
# SSL sekmesinde:
Enable SSL Certificate Expiry Notification: ON
Notify Before (days): 30

Bildirim Entegrasyonları

Telegram Bildirimi

hljs bash
# 1. BotFather'dan bot oluşturun
# /newbot komutuyla bot adı ve username belirleyin
# Bot Token alın: 1234567890:ABCdefGHIjklMNOpqrSTUvwxYZ

# 2. Chat ID öğrenin
# Bota mesaj gönderin, ardından:
curl https://api.telegram.org/bot<TOKEN>/getUpdates
# "chat":{"id":123456789} değerini not alın

Uptime Kuma'da Telegram ayarları:

Notification Type: Telegram
Bot Token: 1234567890:ABCdefGHIjklMNOpqrSTUvwxYZ
Chat ID: 123456789
Message Thread ID: (opsiyonel, grup konusu için)

Discord Bildirimi

hljs bash
# Discord'da Webhook oluşturma:
# Server Settings → Integrations → Webhooks → New Webhook
# Webhook URL kopyala
Notification Type: Discord
Discord Webhook URL: https://discord.com/api/webhooks/...
Username: Uptime Kuma
Prefix: [ALERT]

Slack Bildirimi

Notification Type: Slack
Slack Webhook URL: https://hooks.slack.com/services/...
Channel: #alerts
Username: Uptime Kuma
Icon Emoji: :warning:

Email (SMTP) Bildirimi

Notification Type: Email (SMTP)
From Email: alerts@example.com
To Email: admin@example.com
SMTP Host: smtp.gmail.com
SMTP Port: 587
SMTP Username: alerts@example.com
SMTP Password: uygulama-sifresi
Security: STARTTLS

Webhook Bildirimi

hljs bash
# Özel webhook ile herhangi bir servise bildirim gönder
Notification Type: Webhook
Post URL: https://api.example.com/alerts
Content Type: application/json

# Örnek payload:
{
  "monitor": "{{monitorName}}",
  "status": "{{status}}",
  "message": "{{msg}}",
  "time": "{{time}}"
}

Status Page Oluşturma

Yeni Status Page

  1. Status PagesNew Status Page
  2. Sayfa adı ve slug belirleyin: status.example.com
  3. Logo ve başlık ekleyin
  4. Monitörleri gruplara ekleyin
  5. Save ile kaydedin

Status Page Özelleştirme

hljs bash
# Status Page ayarları:
Title: REXE Servis Durumu
Description: Tüm servislerimizin anlık durumu
Theme: Auto (Light/Dark)
Custom CSS: (özel stil)
Footer Text: © 2024 REXE Teknoloji

# Domain bağlama:
Custom Domain: status.example.com
# DNS: CNAME status.example.com → uptime.example.com

Incident Yönetimi

hljs bash
# Status page'de incident oluşturma:
# Status Pages → Edit → Incidents → Create Incident
Title: Planlı Bakım
Content: 02:00-04:00 arası bakım yapılacaktır.
Style: info / warning / danger

Maintenance Window

Planlı bakım sürelerinde yanlış alarm almamak için:

Maintenance → Add Maintenance
Title: Haftalık Bakım
Strategy: Recurring
Start Time: Pazar 02:00
End Time: Pazar 04:00
Timezone: Europe/Istanbul
Affected Monitors: Tüm monitörler

Uptime Kuma Güncelleme

hljs bash
# Docker ile güncelleme
docker stop uptime-kuma
docker rm uptime-kuma
docker pull louislam/uptime-kuma:latest

# Yeniden başlat (veriler volume'da korunur)
docker run -d \
  --name uptime-kuma \
  --restart=always \
  -p 3001:3001 \
  -v uptime-kuma:/app/data \
  louislam/uptime-kuma:latest

Yedekleme

hljs bash
# Uptime Kuma verilerini yedekle
docker exec uptime-kuma tar -czf /tmp/backup.tar.gz /app/data
docker cp uptime-kuma:/tmp/backup.tar.gz ./uptime-kuma-backup-$(date +%Y%m%d).tar.gz

# Geri yükleme
docker cp ./uptime-kuma-backup.tar.gz uptime-kuma:/tmp/
docker exec uptime-kuma tar -xzf /tmp/backup.tar.gz -C /

REXE sunucularınızda çalışan tüm servisleri Uptime Kuma ile izleyebilirsiniz. Telegram bildirimleri sayesinde servis kesintilerinden anında haberdar olursunuz.

Sık Sorulan Sorular

Uptime Kuma kurulumundan sonra 3001 portuna erişemiyorum.

Firewall'da 3001 portunu açın: 'ufw allow 3001/tcp'. Container'ın çalıştığını 'docker ps | grep uptime-kuma' ile kontrol edin. Nginx reverse proxy kullanıyorsanız proxy_pass ayarlarını ve SSL sertifikasını kontrol edin.

Telegram bildirimleri gelmiyor.

Bot token'ın doğru olduğunu kontrol edin. Chat ID'yi doğrulamak için 'curl https://api.telegram.org/bot<TOKEN>/getUpdates' komutunu çalıştırın. Bota en az bir mesaj göndermiş olmanız gerekir. Grup kullanıyorsanız botu gruba ekleyin ve admin yapın. Test bildirimi göndermek için Notification ayarlarında 'Test' butonunu kullanın.

HTTP monitörüm sürekli 'down' gösteriyor ama site çalışıyor.

Accepted Status Codes ayarını kontrol edin (varsayılan: 200-299). Siteniz 301/302 redirect dönüyorsa bunu da ekleyin. SSL sertifika hatası varsa 'Ignore TLS/SSL error' seçeneğini etkinleştirin. Timeout süresini artırın. Uptime Kuma'nın çalıştığı sunucudan siteye erişilebildiğini doğrulayın.

Status page'i özel domain'e nasıl bağlarım?

Status page ayarlarında 'Custom Domain' alanına domain adınızı girin (örn: status.example.com). DNS'te CNAME kaydı oluşturun: status.example.com → uptime.example.com. Eğer Nginx reverse proxy kullanıyorsanız yeni bir server block ekleyin. Let's Encrypt ile SSL sertifikası alın.

Uptime Kuma'da çok sayıda monitör var, performans sorunları yaşıyorum.

Heartbeat interval'ı artırın (60 saniye yerine 120-300 saniye). Gereksiz monitörleri devre dışı bırakın. Uptime Kuma container'ına daha fazla kaynak tahsis edin. SQLite veritabanı büyüdüğünde yavaşlayabilir; düzenli olarak eski kayıtları temizleyin. 'Settings → Database → Shrink Database' seçeneğini kullanın.

SSL sertifika son kullanma tarihi bildirimi nasıl ayarlarım?

HTTP(S) monitörü oluştururken veya düzenlerken 'SSL' sekmesine gidin. 'Enable SSL Certificate Expiry Notification' seçeneğini etkinleştirin. Kaç gün önce bildirim almak istediğinizi belirleyin (örn: 30 gün). Bildirim kanalınızın (Telegram, email vb.) yapılandırılmış olduğundan emin olun.

İlgili Makaleler

Ağ TrafiğiGelen GbpsGiden Gbps