Mehmet Deniz Aydın Full Stack Developer
EN
← Açık kaynak

Sunucu aracı

Observi

Küçük, kendi sunucunda çalışan bir uptime izleyici. Raspberry Pi'de çalışır.

Observi, kendi sunucunda çalıştırdığın bir uptime izleyici. HTTP, anahtar kelime ve TCP port kontrollerini yapar, canlı bir panelde gösterir ve Telegram, e-posta ve webhook ile haber verir.

Panelin içinde gömülü olduğu tek bir Rust programı olarak yazdım; veritabanı sunucusu istemez ve yaklaşık 20 MB bellek kullanır. Rollü kullanıcı hesapları, izleyici grupları, İngilizce ve Türkçe arayüz var; Uptime Kuma’dan izleyicileri içe aktarabilir.

Rust, React ve SQLite kullandım.

Ne yapar

  • HTTP(s), anahtar kelime ve TCP port kontrolleri. Bir izleyici düştü sayılmadan önce yeniden deneme ve bekleme durumu var.
  • Birden fazla hesap. Superadmin her şeyi yönetir; diğer kullanıcılar yalnızca yetki verdiğin izleyicileri ya da izleyici gruplarını görür.
  • Yanıt süresi grafikleri ve 24 saat, 7 gün, 30 günlük erişilebilirlik oranıyla canlı bir panel.
  • Telegram, SMTP e-posta ve webhook ile bildirim (genel JSON, Discord, Slack).
  • Ayarlardan kendi ürün adın ve logon, İngilizce ve Türkçe arayüz, bildirimler için ayrı dil seçimi.
  • WAL kipinde SQLite ve toplu yazılan sinyaller; SD karta yük bindirmez.

Kurulum

Linux sunucularda (x86_64) ve 64 bit işletim sistemi olan Raspberry Pi’de (Pi 3, 4, 5 ve Zero 2 W) çalışır. systemd olan her makine olur.

curl -fsSL https://raw.githubusercontent.com/mdenizay/observi/main/install.sh | sudo bash

Betik makinene uygun sürümü indirir ve sağlama toplamını doğrular. observi adında bir sistem kullanıcısı oluşturur, systemd servisini kurup başlatır ve ilk superadmin’i açar. Kullanıcı adı admin; parola üretilir ve yalnızca bir kez gösterilir, bir yere not al.

Seçenekler -s -- sonrasına yazılır. --listen nerede dinleyeceğini (varsayılan 127.0.0.1:3001, yalnızca yerel makine), --lang bildirim dilini (en ya da tr) belirler.

curl -fsSL https://raw.githubusercontent.com/mdenizay/observi/main/install.sh | sudo bash -s -- \
  --listen 0.0.0.0:3001 --lang tr --admin-user me --admin-password 'uzun-bir-parola'

Betiği yeniden çalıştırmak mevcut kurulumu verilerini koruyarak günceller. install.sh --uninstall servisi kaldırır, --purge verileri de siler.

Program /usr/local/bin/observi altında, veriler /var/lib/observi altında, ayarlar /etc/observi/observi.env içinde durur.

Alan adına bağlama

Observi varsayılan olarak yalnızca yerelde dinler; önüne bir ters vekil ya da tünel koy. Caddy ile:

status.example.com {
    reverse_proxy 127.0.0.1:3001
}

nginx’te tamponlamayı kapat, çünkü panel sunucu gönderimli olaylarla güncelleniyor:

location / {
    proxy_pass http://127.0.0.1:3001;
    proxy_set_header Host $host;
    proxy_set_header X-Forwarded-Proto $scheme;
    proxy_set_header X-Forwarded-For $remote_addr;
    proxy_buffering off;
}

http://localhost:3001 adresine bakan bir Cloudflare Tunnel de olur. Ben evdeki Raspberry Pi’de böyle çalıştırıyorum. Hangisini kullanırsan kullan, oturum çerezleri Secure bayrağı alsın diye X-Forwarded-Proto başlığını, giriş denemesi sınırı gerçek IP’leri görsün diye istemci adresini (CF-Connecting-IP ya da X-Forwarded-For) ilettiğinden emin ol.

Ayarlar

Bunları /etc/observi/observi.env içine yaz, sonra sudo systemctl restart observi çalıştır.

  • OBSERVI_DB: SQLite dosyası. Varsayılan ./observi.db.
  • OBSERVI_LISTEN: dinleme adresi. Varsayılan 127.0.0.1:3001.
  • OBSERVI_RETENTION: sinyallerin kaç gün saklanacağı. Varsayılan 90.
  • OBSERVI_LANG: bildirim dili, en ya da tr. Varsayılan en.
  • RUST_LOG: günlük düzeyi. Varsayılan info.

Komut satırı

observi serve                                  sunucuyu başlatır (varsayılan)
observi user-add <kullanici> <ad> [superadmin|user]
observi passwd <kullanici>                     parolayı sıfırlar
observi import-kuma <kuma.db>                  Uptime Kuma'dan izleyicileri alır
observi --version

user-add ve passwd parolayı OBSERVI_PASSWORD değişkeninden alır; yoksa üretip yazdırır. Betikle kurulmuş bir makinede bunları servis kullanıcısıyla çalıştır:

sudo -u observi env OBSERVI_DB=/var/lib/observi/observi.db observi passwd admin

Uptime Kuma’dan geçiş

kuma.db dosyasını, varsa -wal ve -shm dosyalarıyla birlikte servis kullanıcısının okuyabileceği bir yere kopyala ve observi import-kuma kuma.db çalıştır. HTTP, anahtar kelime ve TCP port izleyicileri aktarılır. Bildirim ayarları aktarılmaz.

Kaynaktan derleme

Rust (kararlı sürüm), Node 20 ya da üstü ve pnpm gerekir. Web arayüzü derleme sırasında programın içine gömülür, o yüzden önce onu derle.

git clone https://github.com/mdenizay/observi.git
cd observi
cd web && pnpm install --frozen-lockfile && pnpm build && cd ..
cargo build --release

Program target/release/observi altında çıkar. Sürümlerde kullanılan statik program için musl hedefini ekle (rustup target add x86_64-unknown-linux-musl ve musl-tools) ve --target ile derle.

Geliştirmek için web klasöründe pnpm dev ile arayüzü çalıştır (5173 portu, /api isteklerini 3001’e yollar), OBSERVI_PASSWORD=changeme123 cargo run -- user-add admin Admin superadmin ile kullanıcı oluştur, sonra cargo run ile API’yi başlat.