Merhaba arkadaşlar,
Siteniz çöktüğünde bunu ilk öğrenenin müşteriniz olmasını istemiyorsanız, dışarıdan çalışan bir uptime izleme sistemine ihtiyacınız var. UptimeRobot gibi servisler pratik olsa da, küçük ve orta ölçekli projeler için **Uptime Kuma** çok güçlü bir self-hosted alternatif.
Tek bir Docker container ile:
- Siteleri, API’leri, TCP portlarını ve DNS kayıtlarını izleyebilirsiniz.
- SSL sertifika bitiş tarihini takip edebilirsiniz.
- Telegram, Discord, Slack, e-posta ve webhook üzerinden uyarı alabilirsiniz.
- Müşterilerinize veya kullanıcılarınıza özel status sayfası yayınlayabilirsiniz.
- Cron job’larınızın sessizce çalışmayı bırakıp bırakmadığını kontrol edebilirsiniz.
Uptime Kuma, MIT lisansıyla yayınlanan ücretsiz ve açık kaynak bir izleme aracıdır; HTTP(S), TCP, Ping, DNS, WebSocket, Push ve Docker container izleme gibi birçok yöntemi destekler.[1][2]
## Neden Uptime Kuma?
Ücretsiz uptime servisleri genelde şu sınırları getirir:
- Sınırlı monitor sayısı
- Dakikalar bazında kontrol aralığı
- Ücretli status page
- Ücretli SMS veya gelişmiş bildirim
Uptime Kuma’da bu sınırlar sizin sunucu kaynağınıza bağlıdır. Tek container ile onlarca hatta yüzlerce monitor çalıştırabilir, kontrol aralığını 20 saniyeye kadar düşürebilirsiniz.[1][3]
Ayrıca Uptime Kuma, Prometheus gibi iç sistem metriklerini toplayan araçların yerine geçmez. Onun görevi daha basit ve kritik:
> “Kullanıcı siteye şu anda erişebiliyor mu?”
Prometheus nedenini gösterir; Uptime Kuma ise “kullanıcı şu anda erişemiyor” bilgisini verir. Bu iki yaklaşım birbirini tamamlar.[2]
## Gereksinimler
Başlangıç için şunlar yeterli:
- Ubuntu 22.04 / 24.04 veya Debian 12 kurulu küçük bir VPS
- Docker ve Docker Compose
- 512 MB RAM genelde yeterli; 1 GB daha rahat
- Telegram bot token’ı veya Discord webhook URL’si
- Tercihen izleme için ayrı bir VPS veya farklı lokasyonda sunucu
Uptime Kuma, SQLite tabanlı olduğu için ayrı bir veritabanı kurulumu gerektirmez. Ancak veri klasörü yerel diskte olmalıdır; NFS veya SMB gibi ağ dosya sistemleri SQLite veritabanını bozabilir.[1][3][4]
## 1. Docker Compose ile Kurulum
SSH ile sunucunuza bağlanın:
```bash
ssh root@sunucu_ip
```
Proje klasörü oluşturun:
```bash
mkdir -p /opt/uptime-kuma
cd /opt/uptime-kuma
```
`compose.yaml` dosyası oluşturun:
```bash
nano compose.yaml
```
Aşağıdaki yapılandırmayı ekleyin:
```yaml
services:
uptime-kuma:
image: louislam/uptime-kuma:2
container_name: uptime-kuma
restart: unless-stopped
volumes:
- ./data:/app/data
ports:
- "127.0.0.1:3001:3001"
```
Buradaki önemli nokta şu satır:
```yaml
- "127.0.0.1:3001:3001"
```
Bu, Uptime Kuma arayüzünü doğrudan internete açmak yerine yalnızca sunucunun kendisine bağlar. Dışarıdan erişim için Nginx veya Caddy gibi bir reverse proxy kullanacaksınız.[3][4]
Container’ı başlatın:
```bash
docker compose up -d
```
Durumu kontrol edin:
```bash
docker compose ps
```
## 2. Nginx ile HTTPS Erişimi
`status.siteniz.com` gibi bir subdomain kullanıyorsanız, DNS’te şu A kaydını oluşturun:
| Kayıt Türü | Ad | Değer |
|---|---|---|
| A | `status` | VPS IP adresiniz |
Ardından Nginx yapılandırması oluşturun:
```bash
sudo nano /etc/nginx/sites-available/uptime-kuma
```
Örnek yapılandırma:
```nginx
server {
listen 80;
server_name status.siteniz.com;
location / {
proxy_pass
http://127.0.0.1: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;
}
}
```
Siteyi etkinleştirin:
```bash
sudo ln -s /etc/nginx/sites-available/uptime-kuma /etc/nginx/sites-enabled/
sudo nginx -t
sudo systemctl reload nginx
```
Let’s Encrypt sertifikası için:
```bash
sudo apt install certbot python3-certbot-nginx -y
sudo certbot --nginx -d status.siteniz.com
```
Uptime Kuma arayüzü WebSocket kullandığı için Nginx’te `Upgrade` ve `Connection` header’ları şarttır. Bunlar olmadan panel açılabilir ancak sürekli “loading” durumunda kalabilir.[2][4]
## 3. İlk Kurulum ve Admin Hesabı
Tarayıcıdan şu adrese gidin:
```text
https://status.siteniz.com
```
İlk açılışta admin kullanıcı adı ve şifre oluşturmanız istenir. Uptime Kuma varsayılan bir admin hesabı ile gelmez; ilk erişen kişi hesabı oluşturur.
Bu nedenle paneli doğrudan internete açtıysanız, kurulumu hemen tamamlayın. Daha güvenli yöntem ise paneli yalnızca VPN, IP allowlist veya reverse proxy üzerinden erişilebilir tutmaktır.[3][4]
## 4. İlk Monitor’ü Ekleyin
**Add New Monitor** butonuna tıklayın.
### Website Monitor
| Alan | Değer |
|---|---|
| Monitor Type | HTTP(s) |
| Friendly Name | Ana Site |
| URL | `https://siteniz.com` |
| Heartbeat Interval | 60 saniye |
| Retries | 3 |
Retries değerini 3 yapmak, tek bir ağ dalgalanması nedeniyle yanlış alarm almanızı engeller.[2][4]
### API Monitor
API’nizin gerçekten çalıştığını kontrol etmek için sadece HTTP 200 yeterli olmayabilir. Sayfa açılıyor ama uygulama hata veriyor olabilir.
Bunun için **HTTP(s) – Keyword** monitor türünü kullanın.
Örnek:
```text
URL:
https://api.siteniz.com/health
Keyword: ok
```
API yanıtı içinde `ok` kelimesi geçmiyorsa monitor “down” olarak işaretlenir. Bu yöntem, beyaz ekran hatası veren ama HTTP 200 dönen uygulamaları yakalamak için çok faydalıdır.[2]
### SSL Sertifika Takibi
HTTP(S) monitor’ünde **Certificate Expiry Notification** seçeneğini açın.
Böylece SSL sertifikanızın bitmesine yakın uyarı alırsınız. Monitor detayında sertifikanın geçerlilik tarihi, kalan gün sayısı ve issuer bilgisi görünür.[3]
## 5. Telegram Bildirimi Kurun
**Settings > Notifications > Set Up Notification** bölümüne gidin.
1. Notification Type olarak **Telegram** seçin.
2. BotFather’dan aldığınız bot token’ını girin.
3. Chat ID’nizi girin.
4. **Test** butonuyla bildirimi deneyin.
5. Monitor’e bu bildirimi bağlayın.
Önemli ayrıntı: Bildirimi oluşturmak yetmez. Bildirimi ilgili monitor’e bağlamanız gerekir. Aksi halde test mesajı gelir ama gerçek bir kesinti olduğunda uyarı gitmez.[4]
## 6. Cron Job ve Yedekleme İzleme: Push Monitor
Uptime Kuma’nın en az bilinen ama en faydalı özelliklerinden biri **Push monitor** türüdür.
Normalde Uptime Kuma sizin sitenizi kontrol eder. Push monitor’de mantık tersine döner: sizin script, cron job veya yedekleme göreviniz belirli aralıklarla Uptime Kuma’ya “ben çalışıyorum” sinyali gönderir.
Örneğin her gece çalışan bir yedekleme script’iniz varsa:
1. Uptime Kuma’da **Push** türünde monitor oluşturun.
2. Size verilen özel URL’yi kopyalayın.
3. Yedekleme script’inin sonuna şu satırı ekleyin:
```bash
curl -fsS --retry 3 "https://status.siteniz.com/api/push/XXXXXXXX?status=up&msg=OK&ping="
```
Yedekleme bir gece çalışmazsa, Uptime Kuma belirli süre içinde sinyal alamaz ve sizi uyarır.
Bu yöntem, “sunucu ayakta ama yedekleme sessizce bozulmuş” durumunu yakalamak için idealdir.[2][5]
## 7. Müşteri İçin Status Page
Uptime Kuma, yönetim panelinden ayrı olarak public status page oluşturmanıza izin verir.
**Status Page > New Status Page** bölümünden:
- `status.siteniz.com` gibi bir adres tanımlayabilirsiniz.
- Hangi monitor’lerin görüneceğini seçebilirsiniz.
- Logo, başlık ve açıklama ekleyebilirsiniz.
- Kesinti sırasında müşteriye manuel bilgilendirme banner’ı koyabilirsiniz.
Müşteriye “sistemde sorun mu var?” sorusuyla gelmek yerine, doğrudan status sayfasını göstermek destek yükünü azaltabilir.[1][2]
## 8. Yedekleme: Sadece `data` Klasörü Yeterli
Uptime Kuma’nın tüm monitor tanımları, bildirim ayarları ve geçmiş verileri `/app/data` klasöründe saklanır.
Yedek almak için:
```bash
cd /opt/uptime-kuma
tar -czf uptime-kuma-backup-$(date +%F).tar.gz data/
```
Daha güvenli olması için bu yedeği sunucu dışına alın: başka bir VPS, S3 uyumlu storage veya Restic gibi şifreli bir yedekleme aracı kullanabilirsiniz.
Restic, şifreli ve deduplication destekli yedeklemeler için güçlü bir seçenektir; ancak yedek hedefinin sunucunun kendisi değil, ayrı bir makine veya object storage olması gerekir. Aynı sunucudaki yedek, disk arızası veya root erişimi ele geçirilmiş bir saldırı karşısında koruma sağlamaz.[5][6]
## Sık Yapılan Hatalar
### 1. `latest` etiketini kullanmak
`latest` etiketi Uptime Kuma v1’i işaret eder ve artık önerilmez. v2 için şu imajı kullanın:
```yaml
image: louislam/uptime-kuma:2
```
### 2. Veri klasörünü NFS’e koymak
SQLite, ağ dosya sistemi üzerinde güvenilir çalışmaz. `/app/data` klasörünü mutlaka VPS’in yerel diskinde tutun.[1][4]
### 3. Paneli doğrudan internete açmak
Port 3001’i herkese açık bırakmak yerine reverse proxy + HTTPS kullanın. Mümkünse admin panelini VPN veya IP kısıtlaması arkasında tutun.[3][4]
### 4. Docker socket’i gereksiz yere mount etmek
Docker container’larını izlemek için `/var/run/docker.sock` mount edilebilir; ancak bu, Uptime Kuma’ya Docker daemon üzerinde geniş yetki verir. Panel internete açıksa bu ciddi risk oluşturur.[3][4]
### 5. Monitoring sunucusunu aynı VPS’te tutmak
Uptime Kuma’yı izlediği sitenin bulunduğu VPS’e kurarsanız, o sunucu çöktüğünde hem siteniz hem izleme sistemi aynı anda erişilemez olur.
Mümkünse Uptime Kuma’yı farklı bir sağlayıcıda veya farklı lokasyondaki küçük bir VPS’te çalıştırın. Daha sağlam kurulum için iki ayrı lokasyonda iki Uptime Kuma örneği çalıştırıp birbirini izletebilirsiniz.[2][3]
## Önerilen Monitor Seti
Küçük bir ajans, freelance geliştirici veya birden fazla site yöneten biri için pratik bir başlangıç seti:
| Monitor | Tür | Amaç |
|---|---|---|
| Ana site | HTTP(s) | Site erişilebilir mi? |
| API health | HTTP(s) Keyword | Uygulama gerçekten sağlıklı mı? |
| MySQL/MariaDB | TCP | Veritabanı portu açık mı? |
| Redis | TCP | Cache servisi çalışıyor mu? |
| SSL sertifikası | HTTP(s) | Sertifika bitiyor mu? |
| Yedekleme script’i | Push | Yedekleme sessizce durdu mu? |
| Cron job | Push | Zamanlanmış görev çalışıyor mu? |
| DNS kaydı | DNS | Domain yönlendirmesi doğru mu? |
## Sonuç
Uptime Kuma, küçük ekipler, freelance geliştiriciler ve birden fazla müşteri sitesi yönetenler için yüksek getirili bir self-hosted araç. 30 dakikalık kurulumla; site kesintilerini, SSL bitişlerini, API hatalarını ve sessizce duran cron job’larını Telegram üzerinden takip edebilirsiniz.
En kritik üç kural:
1. Veri klasörünü yerel diskte tutun.
2. Paneli HTTPS reverse proxy arkasında çalıştırın.
3. İzleme sunucusunu, izlediğiniz sunucudan farklı bir yerde tutun.
## Kaynaklar
- Uptime Kuma Docker Hub — kurulum, `/app/data` volume ve monitor yapılandırması: [
https://hub.docker.com/hardened-imag...me-kuma/guides)[7]
- DeployLark — Uptime Kuma Docker kurulumu, Telegram bildirimi, reverse proxy ve sık hatalar: [
https://deploylark.com/posts/uptime-...-docker-setup/)[4]
- SelfHostLab — Uptime Kuma self-hosting rehberi, monitor türleri ve status page: [
https://selfhostlab.io/apps/uptime-k...s/uptime-kuma/)[1]
- Hostworld — Docker Compose ile Uptime Kuma kurulumu, SSL ve çoklu lokasyon izleme: [
https://hostworld.uk/guides/vps/self...g-uptime-kuma/)[3]
- Matthews Wong — Uptime Kuma production kullanımı, Push monitor ve Nginx WebSocket ayarları: [
https://www.matthewswong.com/en/blog...ma-monitoring/)[2]
- SSD Nodes — Restic ile VPS dışı şifreli yedekleme ve restore testi: [
https://www.ssdnodes.com/learn/resti...ic-backups-vps)[5]
Atıflar:
[1] Uptime Kuma: Self-Hosting Guide, License & Alternatives
https://selfhostlab.io/apps/uptime-kuma/
[2] Uptime Kuma: Self-Hosted Uptime Monitoring That Just Works
https://www.matthewswong.com/en/blog...ma-monitoring/
[3] How to self-host uptime monitoring with Uptime Kuma - Hostworld
https://hostworld.uk/guides/vps/self...g-uptime-kuma/
[4] Uptime Kuma Docker Setup: Install, Alerts and Common Fixes
https://deploylark.com/posts/uptime-kuma-docker-setup/
[5] Restic backups: get your VPS data off the box - SSD Nodes
https://www.ssdnodes.com/learn/restic-backups-vps
[6] Encrypted off-site VPS backups with Restic - GetVPS.net
https://getvps.net/blog/restic-encry...ffsite-backups
[7] Hardened Images catalog | Uptime Kuma | Guides - Docker Hub
https://hub.docker.com/hardened-imag...me-kuma/guides
[8] Use Docker Compose | Deploy - n8n Docs
https://docs.n8n.io/deploy/host-n8n/...docker-compose
[9] Optional: Turn on n8n Assistant
https://docs.n8n.io/deploy/host-n8n/...docker-compose
[10] Self-hosting n8n with Docker Compose in 2026
https://community.n8n.io/t/self-host...es-skip/321316
[11] How to Deploy Uptime Kuma via Portainer - A Practical Guide
https://oneuptime.com/blog/post/2026...time-kuma/view
[12] Docker compose example in docs no longer available - Questions
https://community.n8n.io/t/docker-co...ailable/312879