Kendi sunucunuzda birkaç servis çalıştırmaya başladığınızda çok geçmeden aynı sorunla karşılaşırsınız: hangi uygulamanın hangi porttan çalıştığını, IP adreslerini ve arayüz bağlantılarını akılda tutmak imkânsız hale gelir. Bir gün bir dosya sunucusu, ertesi gün bir izleme aracı, sonra bir not uygulaması kurarsınız; iki hafta sonra tarayıcının yer imleri bölümü ezbere bildiğiniz ama düzeni kaçmış bir bağlantı yığınına döner. İşte Homepage tam olarak bu dağınıklığı ortadan kaldırmak için tasarlanmış bir açık kaynak başlangıç panosudur.
Homepage; tüm self-hosted servislerinizi, sık kullandığınız harici bağlantıları ve canlı bilgi kartlarını (hava durumu, sistem kaynakları, medya sunucusu istatistikleri gibi) tek bir sayfada toplar. Yapılandırması tamamen YAML dosyaları üzerinden yapılır, tarayıcıda tıklanacak karmaşık bir kurulum sihirbazı yoktur. Bu rehberde Homepage'in ne işe yaradığını, Docker ile nasıl kurulacağını, servis kartlarını ve widget'ları nasıl tanımlayacağınızı ve popüler rakibi Homarr ile nerede ayrıştığını uygulamalı örneklerle ele alacağız.
Homepage Nedir ve Neyi Çözer#
Homepage, kendi sunucunuzda barındırdığınız (self-hosted) uygulamalara ve harici servislere tek noktadan erişmenizi sağlayan hafif bir web panosudur. Tarayıcınızı açtığınızda karşınıza çıkan bu sayfadan tek tıkla Nextcloud'a, Portainer'a, medya sunucunuza ya da yönlendirici arayüzünüze geçebilirsiniz. Fikir basit ama günlük hayatta yarattığı fark büyüktür: dağınık portları ve IP'leri ezberlemek yerine düzenli, gruplanmış ve görsel bir giriş noktanız olur.
Homepage'i benzer araçlardan ayıran en belirgin özellik yapılandırmanın dosya tabanlı olmasıdır. Panoya bir servis eklemek için bir web arayüzünde form doldurmazsınız; services.yaml gibi bir metin dosyasına birkaç satır yazarsınız. Bu yaklaşım ilk bakışta zahmetli görünse de ciddi bir avantaj sağlar: tüm panonuz düz metin olarak versiyonlanabilir, Git deposunda tutulabilir, yedeklenebilir ve başka bir sunucuya olduğu gibi taşınabilir. "Tıklayarak kurdum ama nasıl geri getireceğimi bilmiyorum" sorunu Homepage'de yaşanmaz.
Performans tarafında da fark hissedilir. Homepage statik olarak derlenen, çok az kaynak tüketen bir uygulamadır; eski bir mini bilgisayarda ya da paylaşımlı bir VPS'te bile göz açıp kapayana kadar açılır. Verilerini bir veritabanında değil, doğrudan YAML dosyalarında ve çalışma anındaki ortam değişkenlerinde tuttuğu için ayakta tutulması gereken ek bir servis de yoktur.
Homepage'in Öne Çıkan Özellikleri#
Homepage'i sadece bir "bağlantı listesi" olarak görmek onu hafife almak olur. Sunduğu yetenekleri birkaç başlıkta toplayabiliriz:
- Servis kartları: Her uygulamanız için ikon, açıklama ve tıklanabilir bağlantı içeren düzenli kartlar oluşturur; bunları kategorilere gruplarsınız (örneğin "Medya", "Yönetim", "Ağ").
- Bilgi widget'ları: Panonun üst kısmına hava durumu, tarih-saat, arama kutusu, sistem kaynakları (CPU, RAM, disk) gibi canlı bilgi kartları eklersiniz.
- Servis widget'ları: Kartın kendisi, ilgili servisin API'sinden veri çekerek canlı istatistik gösterir. Örneğin bir indirme istemcisinin aktif indirme sayısını ya da bir medya sunucusunun izlenen dizi sayısını doğrudan kartın üzerinde görürsünüz.
- Docker entegrasyonu: Docker soketine bağlanarak konteynerlerin çalışıp çalışmadığını gösterir; hatta etiketlerle servisleri otomatik keşfeder.
- Durum göstergeleri: Bir servisin ayakta olup olmadığını periyodik "ping" ya da site kontrolü ile denetler ve kartta yeşil/kırmızı bir gösterge sunar.
- Tema ve özelleştirme: Açık/koyu tema, arka plan görseli, renk şeması ve düzen (sütun sayısı) ayarlanabilir.
- Çoklu dil ve klavye kısayolları: Türkçe dahil çok sayıda dil ve hızlı arama için kısayollar hazır gelir.
Bütün bu özellikler tek bir hedefe hizmet eder: sabah tarayıcıyı açtığınızda altyapınızın tamamını tek bakışta görmek. Servislerinizin canlı durumunu daha derinlemesine izlemek isterseniz Homepage'i bir kesinti izleme aracıyla birlikte kullanmak mantıklıdır; bu konuda Uptime Kuma rehberimize göz atabilirsiniz.
Docker ile Kurulum#
Homepage'i kurmanın en temiz yolu Docker'dır. Neredeyse tüm yapılandırma tek bir dizin altındaki dosyalarda toplandığı için, kurulum aslında "bir konteyner çalıştır ve bir yapılandırma klasörünü ona bağla" işleminden ibarettir. Önce yapılandırma dosyalarını tutacağımız bir dizin oluşturalım:
mkdir -p /opt/homepage/config
cd /opt/homepage
Ardından bir docker-compose.yml dosyası hazırlayalım. Aşağıdaki yapılandırma, panoyu 3000 portundan yayınlar ve az önce oluşturduğumuz config klasörünü konteynerin içine bağlar:
services:
homepage:
image: ghcr.io/gethomepage/homepage:latest
container_name: homepage
ports:
- "3000:3000"
volumes:
- ./config:/app/config
# Docker entegrasyonu için (isteğe bağlı):
- /var/run/docker.sock:/var/run/docker.sock:ro
environment:
- HOMEPAGE_ALLOWED_HOSTS=pano.ornekalanadi.com
- PUID=1000
- PGID=1000
restart: unless-stopped
Burada dikkat edilmesi gereken iki nokta var. Birincisi, güncel sürümler güvenlik amacıyla HOMEPAGE_ALLOWED_HOSTS değişkenini zorunlu tutar; panoya hangi alan adı veya IP üzerinden erişecekseniz onu buraya yazmalısınız, aksi halde tarayıcıda erişim reddi görürsünüz. İkincisi, Docker soketini yalnızca gerçekten konteyner durumu göstermek istiyorsanız bağlayın; salt okunur (:ro) bağlamak iyi bir alışkanlıktır. Şimdi servisi başlatalım:
docker compose up -d
docker compose logs -f homepage
Log akışında hata görmüyorsanız http://sunucu-ip:3000 adresini tarayıcıda açtığınızda örnek bir pano sizi karşılar. İlk açılışta config klasörünün içinde services.yaml, widgets.yaml, settings.yaml, bookmarks.yaml ve docker.yaml dosyaları otomatik oluşturulur. Bundan sonraki tüm özelleştirmeyi bu dosyaları düzenleyerek yaparsınız. Homepage'i genel internete açacaksanız önüne bir ters vekil (Nginx, Traefik veya Caddy) koyup HTTPS ve kimlik doğrulama eklemeniz şarttır; pano varsayılan olarak parola korumasıyla gelmez.
Konteynerlerinizi tek tek docker compose komutlarıyla değil de görsel bir arayüzle yönetmeyi tercih ediyorsanız, Homepage'in yanına bir de Portainer kurmanızı öneririm; ikisi self-hosted bir sunucuda çok iyi bir ikili oluşturur.
Servis Kartları Ekleme#
Panonun kalbi services.yaml dosyasıdır. Bu dosyada servislerinizi gruplar ve kartlar halinde tanımlarsınız. YAML'in girinti duyarlı olduğunu unutmayın; her seviye iki boşlukla ilerler. Basit bir örnekle başlayalım:
- Medya:
- Jellyfin:
icon: jellyfin.png
href: https://jellyfin.ornekalanadi.com
description: Medya sunucusu
- Radarr:
icon: radarr.png
href: http://192.168.1.20:7878
description: Film kütüphanesi
- Yönetim:
- Portainer:
icon: portainer.png
href: https://portainer.ornekalanadi.com
description: Konteyner yönetimi
- Router:
icon: mdi-router-wireless
href: http://192.168.1.1
description: Ağ geçidi arayüzü
Bu dosyayı kaydettiğiniz anda pano kendini yeniler ve iki grup halinde dört kart gösterir. icon alanı için Homepage'in geniş bir hazır ikon kütüphanesi vardır; jellyfin.png gibi bilinen servis adlarını doğrudan yazabilir ya da mdi- ön ekiyle Material Design ikonlarından herhangi birini kullanabilirsiniz. href kartın tıklandığında gideceği adrestir; hem alan adı hem de dahili IP:port yazabilirsiniz. description ise ikonun yanında görünen kısa açıklamadır.
Kartların düzeni tamamen sizin elinizdedir. Grup başlıklarını Türkçe yazabilir, sıralamayı dosyadaki sıraya göre belirleyebilir ve settings.yaml içinde her satırda kaç sütun görüneceğini ayarlayabilirsiniz. Örneğin ekranınız genişse dört sütunlu, dar bir tablette iki sütunlu bir düzen tercih edebilirsiniz. Bu esneklik, panoyu gerçekten "sizin" panonuz yapan şeydir.
Widget'lar ve Canlı Bilgi Kartları#
Homepage'de "widget" kavramı iki ayrı yerde karşımıza çıkar ve bu ikisini karıştırmamak önemlidir. Birincisi, panonun en üstünde yer alan bilgi widget'larıdır; bunlar widgets.yaml dosyasında tanımlanır ve tek bir servise bağlı değildir:
- resources:
cpu: true
memory: true
disk: /
- datetime:
text_size: xl
format:
dateStyle: long
timeStyle: short
- search:
provider: duckduckgo
target: _blank
Yukarıdaki yapılandırma panonun üstüne sistem kaynak kullanımını (CPU, bellek, disk), büyük puntolu bir tarih-saat göstergesini ve bir arama kutusunu ekler. Bu widget'lar dekoratif değildir; sunucunun diski dolmaya başladığında ya da bellek kritik seviyeye geldiğinde sabah panoya bakar bakmaz fark edersiniz.
İkinci tür ise servis widget'larıdır. Bunlar services.yaml içinde belirli bir kartın altına eklenir ve o servisin API'sinden canlı veri çeker. Örneğin bir indirme istemcisinin aktif ve tamamlanan indirme sayısını doğrudan kartın üzerinde görebilirsiniz:
- Medya:
- qBittorrent:
icon: qbittorrent.png
href: http://192.168.1.20:8080
widget:
type: qbittorrent
url: http://192.168.1.20:8080
username: admin
password: parola
Homepage yüzlerce servis için hazır widget tipiyle gelir; medya sunucuları, indirme istemcileri, güç kaynakları, DNS filtreleri ve daha fazlası. Bu widget'ların çektiği veriler tarayıcıda değil, konteynerin içinde sunucu tarafında alınır; yani API parolalarınız istemciye sızmaz. Yine de bu bilgileri düz metin YAML'de tutmamak için Homepage, ortam değişkenleri üzerinden gizli veri okumayı destekler: parola yerine {{HOMEPAGE_VAR_QBIT_PASS}} yazıp değeri bir .env dosyasında saklayabilirsiniz.
Docker Entegrasyonu ve Otomatik Keşif#
Homepage'in en pratik yeteneklerinden biri Docker ile derin entegrasyonudur. Compose dosyasında Docker soketini bağladıysanız, panoya konteynerlerinizin çalışıp çalışmadığını gösteren canlı bir durum ekleyebilirsiniz. Önce docker.yaml içinde soketi tanıtırsınız:
my-docker:
socket: /var/run/docker.sock
Ardından bir servis kartını bu Docker örneğine bağlarsınız. Böylece kartın üzerinde konteynerin CPU ve bellek kullanımı ile "çalışıyor/durmuş" durumu görünür:
- Yönetim:
- Nextcloud:
icon: nextcloud.png
href: https://bulut.ornekalanadi.com
server: my-docker
container: nextcloud-app
Daha da ileri gidip kartları tamamen elle yazmaktan kurtulabilirsiniz. Homepage, konteynerlerin etiketlerini (labels) okuyarak servisleri otomatik keşfedebilir. Bir konteynerin compose tanımına aşağıdaki etiketleri eklerseniz, o servis panoya kendiliğinden düşer:
services:
gitea:
image: gitea/gitea:latest
labels:
- homepage.group=Geliştirme
- homepage.name=Gitea
- homepage.icon=gitea.png
- homepage.href=https://git.ornekalanadi.com
- homepage.description=Kod deposu
Bu yaklaşımın güzelliği, yeni bir servis kurduğunuzda panoyu ayrıca düzenlemenize gerek kalmamasıdır; servisin kendi tanımı zaten panodaki yerini de içerir. Onlarca konteynerle çalışan bir sunucuda bu, ciddi bir bakım kolaylığı sağlar. Elle tanımlanan kartlarla etiketten gelen kartları aynı panoda karıştırarak kullanabilirsiniz.
Durum Göstergeleri ve Erişilebilirlik Kontrolü#
Homepage'i basit bir bağlantı listesinden ayıran bir diğer özellik, servislerin gerçekten ayakta olup olmadığını gösterebilmesidir. Bir kartın altına ping ya da siteMonitor alanı eklediğinizde, Homepage o adresi periyodik olarak yoklar ve kartın köşesinde küçük bir durum göstergesi (yeşil = erişilebilir, kırmızı = erişilemiyor, gecikme milisaniyesiyle birlikte) sunar:
- Ağ:
- Pi-hole:
icon: pi-hole.png
href: http://192.168.1.5/admin
ping: 192.168.1.5
- Web Sitesi:
icon: mdi-web
href: https://ornekalanadi.com
siteMonitor: https://ornekalanadi.com
Buradaki ayrımı bilmek işinize yarar: ping, bir ana bilgisayarın ağ üzerinden yanıt verip vermediğini kontrol eder; siteMonitor ise bir HTTP adresine istek atıp yanıt kodunu değerlendirir. Bir web servisinin gerçekten çalıştığını doğrulamak için genelde siteMonitor daha isabetlidir, çünkü sunucu ayakta olsa bile web uygulaması çökmüş olabilir.
Yalnız burada gerçekçi bir beklenti belirlemek gerekir. Homepage'in durum göstergeleri, panoyu açtığınız sırada yapılan anlık bir kontrolden ibarettir; tarihçe tutmaz, siz uyurken kesinti olduğunda size bildirim göndermez. Yani Homepage bir "izleme sistemi" değil, izlemenin görsel bir özetidir. Bir servisiniz gece yarısı düştüğünde e-posta ya da Telegram bildirimi almak istiyorsanız, panonun yanına gerçek bir kesinti izleyici koymalısınız. Clou.TR panelinde sunduğumuz Uptime Uyarıları özelliği ya da kendi sunucunuza kuracağınız bir izleme aracı bu boşluğu doldurur; Homepage ise bu araçlara tek tıkla erişeceğiniz vitrin görevini görür.
Homepage ile Homarr Karşılaştırması#
Self-hosted pano dünyasında Homepage'in en çok karşılaştırıldığı araç Homarr'dır. İkisi de aynı sorunu çözer ama felsefeleri belirgin biçimde ayrışır. Homarr, tarayıcıdan sürükle-bırak ile düzenlenen, veritabanı destekli ve daha "uygulama gibi" hissettiren bir araçtır. Homepage ise dosya tabanlı, minimal ve performans odaklıdır. Aşağıdaki tablo temel farkları özetliyor:
| Özellik | Homepage | Homarr |
|---|---|---|
| Yapılandırma | YAML dosyaları (metin) | Tarayıcıda sürükle-bırak arayüz |
| Veri saklama | Düz dosya, veritabanı yok | Veritabanı gerektirir |
| Kaynak tüketimi | Çok düşük | Orta |
| Öğrenme eğrisi | YAML bilmek gerekir | Yeni başlayana daha kolay |
| Versiyonlama / yedek | Git ile doğal | Veritabanı yedeği gerekir |
| Servis widget'ları | Çok sayıda, zengin | Var, gelişiyor |
| Docker otomatik keşif | Etiketlerle destekli | Destekli |
| Kimlik doğrulama | Yerleşik yok (vekil gerekir) | Yerleşik seçenekler var |
Özetle seçim, sizin çalışma tarzınıza bağlıdır. Terminalde rahatsanız, panonuzu Git'te tutmak istiyorsanız ve "tıkla-kur" yerine "yaz-versiyonla" yaklaşımını seviyorsanız Homepage doğru tercihtir. Buna karşılık ekranda fareyle sürükleyerek düzenlemeyi seven, YAML'e girmeden hızlıca bir pano isteyen kullanıcılar için Homarr daha davetkârdır. İkisi de açık kaynak ve ücretsiz olduğu için bir akşam ayırıp her ikisini de deneyip hangisinin size oturduğuna karar vermeniz en sağlıklısıdır.
Sıkça Sorulan Sorular#
Homepage'i kurmak için mutlaka Docker gerekir mi?#
Hayır, zorunlu değildir. Homepage bir Node.js uygulaması olduğu için doğrudan sunucuya kaynak koddan da kurulabilir ya da hazır ikili paketlerle çalıştırılabilir. Ancak pratikte en temiz ve taşınabilir yöntem Docker'dır; bağımlılık çakışması yaşamadan tek komutla ayağa kaldırır ve güncellemeyi kolaylaştırırsınız. Bu yüzden çoğu kullanıcı Docker ile kurmayı tercih eder.
Homepage panoma internetten güvenle erişebilir miyim?#
Homepage varsayılan olarak parola koruması ya da kimlik doğrulama ile gelmez, dolayısıyla doğrudan internete açmak sakıncalıdır. Doğru yöntem, panonun önüne Nginx, Traefik veya Caddy gibi bir ters vekil koyup HTTPS sertifikası ve bir kimlik doğrulama katmanı (temel yetkilendirme, Authelia benzeri bir SSO ya da yalnızca VPN üzerinden erişim) eklemektir. Bu katmanı kurmadan servis widget'larındaki API bilgilerini de açıkta bırakmış olursunuz.
Servis kartlarındaki API parolaları güvende mi?#
Servis widget'larının çektiği veriler tarayıcıda değil, sunucu tarafında konteynerin içinde alınır; yani parolalarınız istemciye gönderilmez. Yine de bu bilgileri düz metin olarak services.yaml içinde tutmak yerine ortam değişkenleri üzerinden okumak en iyi uygulamadır. Homepage, YAML içinde {{HOMEPAGE_VAR_...}} söz dizimini destekler; böylece gerçek değerleri ayrı bir .env dosyasında saklar ve yapılandırmanızı gönül rahatlığıyla yedekleyebilirsiniz.
Homepage bir izleme (monitoring) aracının yerini tutar mı?#
Tutmaz ve zaten bunu hedeflemez. Homepage'in ping ve siteMonitor göstergeleri yalnızca panoyu açtığınız andaki anlık durumu gösterir; tarihçe tutmaz, uptime yüzdesi hesaplamaz ve kesinti anında bildirim göndermez. Gerçek bir izleme için Homepage'i bir kesinti izleyiciyle birlikte kullanmanız gerekir. Panonun canlı durum göstergeleri hızlı bir bakış için yeterlidir, ama "gece düşerse haber ver" işlevi ayrı bir araca aittir.
Yapılandırma dosyalarımı nasıl yedeklerim?#
Homepage'in tüm ayarı config klasöründeki YAML dosyalarında durduğu için yedekleme son derece basittir; bu klasörü olduğu gibi kopyalamak ya da bir Git deposunda tutmak yeterlidir. Yeni bir sunucuya taşırken aynı klasörü konteynere bağlamanız panoyu birebir geri getirir. Veritabanı, göç betiği ya da dışa aktarma sihirbazı gibi ek adımlara ihtiyaç duymazsınız; dosya tabanlı olmanın en büyük avantajı tam olarak budur.
Panoya kaç servis ekleyebilirim, bir sınır var mı?#
Pratikte anlamlı bir üst sınır yoktur; onlarca hatta yüzlerce servisi gruplayarak rahatça ekleyebilirsiniz. Homepage kart sayısıyla ölçeklenir ve statik bir uygulama olduğu için çok sayıda kart bile performansı hissedilir biçimde etkilemez. Sınırı belirleyen tek şey okunabilirliktir; çok fazla kart olduğunda mantıklı gruplar ve birden fazla sekme/bölüm kullanarak düzeni korumak size kalmıştır.
Kapanış#
Homepage, kendi sunucunuzu ciddiye alıyorsanız kuracağınız ilk araçlardan biri olmayı hak ediyor. Dağınık portları ve IP'leri düzenli, canlı ve tek bir başlangıç sayfasında toplaması; üstelik bunu versiyonlanabilir düz metin dosyalarıyla yapması, onu hem yeni başlayanlar hem de deneyimli sistem yöneticileri için değerli kılıyor. Docker ile birkaç dakikada kurulur, YAML'e alıştıkça istediğiniz kadar zenginleşir ve bir kez düzgün kurduğunuzda uzun süre size hizmet eder.
Homepage gibi self-hosted uygulamaları rahatça çalıştırmak için sağlam bir alt yapıya ihtiyacınız var. Kendi panonuzu ve yanında Portainer, Nextcloud ya da medya sunucusu gibi servisleri barındırmak isterseniz, root erişimli ve kaynakları size ait bir VDS sunucu ideal başlangıç noktasıdır. Kurulum ve yönetim tarafında yalnız kalmak istemeyenler için sunucu yönetimi hizmetimizle güncelleme, güvenlik ve yedekleme yükünü üstümüze alıyoruz; tek tıkla kurulabilen açık kaynak uygulamalar için ise App Center sayfamıza göz atabilirsiniz. Clou.TR olarak, altyapınızı kurarken de büyürken de yanınızdayız.