Dokploy ve CasaOS ile Kendi Sunucularımı Yönetmek
Yıllar önce, self-hosting üzerine genel bir yazı paylaşmıştım. İnternette kullandığımız servisleri kendi sunucumuzda çalıştırmanın mantığını, avantajlarını ve nasıl başlanacağını anlatmıştım. O günden bu yana köprünün altından çok sular aktı ve kurulumum artık çok başka bir hâl aldı. Artık her şeyi tek bir kutuya sığdırmıyorum; iki farklı makine ve bunları yönetmek için iki farklı arayüz kullanıyorum. Bu yazıda yeni kurulumumu, neyin nerede ve neden çalıştığını detaylandırmak istiyorum.
İki sunucu, iki farklı görev
Sistemin merkezinde iki ana makine bulunuyor:
- Bir VPS (Virtual Private Server). Fransa’da bir veri merkezinde duran, eski ama emektar bir Intel Xeon ve 8 GB RAM. Teknik özelliklerinden ziyade asıl önemli olan konumu: 7/24 kesintisiz çalışması, sabit bir IP’ye sahip olması ve yüksek, simetrik bant genişliği sunması. Üzerinde Dokploy çalışıyor.
- Bir Raspberry Pi 5 (8 GB). Evde, oturma odasında. Standart ev internetine bağlı, NAT arkasında ve ev tipi IP’ye sahip. Üzerinde ise CasaOS kurulu.
Peki neden iki tane? Çünkü her işin kendine has bir yeri var. Herkese açık olması gereken, yüksek bant genişliği isteyen veya kesintisiz çalışması kritik olan her şey VPS’te. Eve özgü işler, düşük güç tüketen servisler veya —ilginç bir şekilde— sadece ev IP’si ile çalışan görevler ise evdeki Pi’de. Bu ayrımın ne kadar mantıklı olduğunu birazdan Letterboxd örneğinde daha iyi anlayacaksınız.
Neden sadece Docker değil de Dokploy?
Eskiden her şeyi manuel olarak docker-compose dosyalarıyla yönetiyordum. Üç beş servis varken keyifliydi; ancak uygulama sayısı artınca (şu an VPS’te 50’ye yakın konteyner var) ortalık karışmaya başladı. Hangi servis hangi portu kullanıyor, SSL sertifikaları yenilendi mi, bir şeyi güncellerken diğerini bozar mıyım gibi sorular tam bir kafa karışıklığına dönüştü.
Dokploy işte bu noktada kurtarıcı oldu. Açık kaynaklı ve kendi sunucunuza kurabileceğiniz bir PaaS (Platform as a Service) — Vercel veya Heroku’nun kendi kontrolünüzdeki hali gibi düşünebilirsiniz. Arka planda yine Docker ve Traefik (reverse proxy) kullanıyor ama bana şu kolaylıkları sağlıyor:
- Projeleri ve uygulamaları düzenli bir liste hâlinde görebiliyorum.
- Her uygulamaya otomatik alan adı ve otomatik HTTPS (Traefik + Let’s Encrypt sayesinde sertifikaları artık hiç düşünmüyorum).
- Deployment geçmişi tutuyor ve tek tıkla geri alma (rollback) imkânı veriyor.
- Loglar, ortam değişkenleri ve yeniden dağıtım işlemleri tek bir panelde.
Projeleri kategorilere ayırdım: Okul, Kişisel, Geliştirme, Bakım ve Medya. Bu ayrım tamamen düzen için; hepsi aynı sunucuda çalışıyor ama zihnimde ve panelde gruplanmış oluyorlar.
VPS üzerinde neler koşturuyorum?
Dokploy panelinde kategorize ettiğim şekliyle, VPS üzerinde çalışan servisler şunlar:
Okul
- LittleLink Server — Öğrenciler için hazırladığım bağlantı ve araç sayfası.
Kişisel
- memos (+ memogram Telegram köprüsü) — Hızlı not defteri.
- blinko — Yapay zekâ destekli not alma uygulaması.
- docmost — Wiki ve bilgi tabanı.
- Homepage — Widget destekli ana panel.
- Homer — Sade bir başlangıç paneli.
- changedetection.io — Web sayfası değişiklik takibi.
- n8n — Otomasyon akışları.
- domain-locker — Alan adı ve SSL bitiş takibi (lissy93’ün projesi;
.tralan adları için WHOIS desteğini ben ekledim ve kendi çatalımı çalıştırıyorum). - LittleLink — Kişisel “link in bio” sayfası.
- wg-easy — Web arayüzlü WireGuard VPN.
Geliştirme
- aprs — Amatör telsiz APRS aracı (kendi projem).
- DMRListManager — DMR kişi listesi yöneticisi (kendi projem).
- PocketBase — Hafif backend ve veritabanı.
- 13ft — Paywall engelini aşan “sonra oku” aracı.
- palmr — Kolay dosya paylaşımı.
- memos-mcp-server — Memos için MCP sunucusu.
Bakım
- Beszel (+ ajanı) — Sistem kaynaklarını ve uptime durumunu izleme merkezi.
- Cup — Konteyner güncelleme denetimi.
- Diun — Docker imaj güncelleme bildirimleri.
- Uptime Kuma — Durum ve uptime sayfası.
- Portainer — Docker yönetim arayüzü.
- RustDesk (hbbs + hbbr) — Kendi uzak masaüstü relay sunucum.
Medya
- Jellyfin — Medya sunucusu.
- Radarr — Film kütüphanesi yöneticisi.
- Sonarr — Dizi kütüphanesi yöneticisi.
- Bazarr — Altyazı yönetimi (yabancı içerikleri DeepSeek kullanarak Türkçeye çeviriyor).
- qBittorrent — Torrent istemcisi.
- watchstate — Plex ile Jellyfin izleme durumunu senkronize eder.
- recyclarr — TRaSH kalite rehberlerini otomatik uygular.
- decluttarr — Takılan indirmeleri temizler.
- cross-seed — Cross-seeding otomasyonu.
- Alternatrr — Sonarr için alternatif başlık aracı.
- whisper-openai-proxy — Whisper tabanlı altyazı ve çeviri proxy’si (kendi aracım).
- mediastarr — Medya otomasyon aracı.
- bookorbit — E-kitap kütüphanesi.
- Wizarr — Jellyfin/Plex davet yöneticisi.
- filebrowser — Web tabanlı dosya yöneticisi.
Tüm bu yapının arkasında Traefik (reverse proxy) ve Dokploy’un kendisi platform görevini üstleniyor. Uygulamaların çoğu ise kendi PostgreSQL veya Redis veritabanlarıyla birlikte çalışıyor. İşin medya kısmında ise dosyaları sunucuda tutmuyorum; her şey Google Drive üzerinde duruyor ve rclone ile sunucuya bağlanıyor. Yani Jellyfin kütüphanesi doğrudan buluttan akıyor. Medya yönetimini VPS’te tutmamın asıl sebebi de bu: Dosyalar zaten burada bağlı ve veri merkezinin yüksek bant genişliği sayesinde akış pürüzsüz oluyor.
Özetle, dışarıdan erişilmesi gereken veya kesintisiz çalışması beklenen her şeyi veri merkezinde tutuyorum.
CasaOS ve Raspberry Pi — Ev tarafı
CasaOS, Raspberry Pi gibi ufak cihazlar için geliştirilmiş, oldukça sade bir ev sunucusu arayüzü. Dokploy ile kıyaslayınca neredeyse çocuk oyuncağı gibi kalıyor. “Uygulama mağazası” mantığıyla çalışıyor; tek tıkla kurulum yapıp geçiyorsunuz. Evde kullanacağım birkaç basit servis için Dokploy gibi ağır bir sistemi kurmaya gerek yoktu, CasaOS işimi fazlasıyla gördü.
Pi üzerinde koşan servisler şunlar:
- Pi-hole — Ağ genelinde reklam engelleme.
- Home Assistant — Ev otomasyonu (evdeki cihazlara eriştiği için yeri burası).
- Plex — Ev tarafındaki medya sunucusu.
- Prowlarr — Kaynak (indexer) yöneticisi.
- Seerr — Medya istek yönetim paneli.
- FlareSolverr — Cloudflare engellerini aşmak için.
- FreshRSS — RSS okuyucu.
- Karakeep — Yer imi ve “sonra oku” yöneticisi.
- trakt-to-letterboxd — İzlenen filmleri Letterboxd’a aktaran araç.
- Cloudflared — Cloudflare tüneli.
- Tailscale — İki makineyi birleştiren özel ağ.
- Portainer — Docker yönetimi.
- Uptime Kuma — Yerel uptime takibi.
- Beszel ajanı — VPS’teki ana merkeze rapor veriyor.
Buradaki yerleşimin mantığı çok basit: Ev ağına veya cihazlarına dokunan her şey (Pi-hole, Home Assistant) ve ev IP’si gerektiren işler burada. En çarpıcı örnek Letterboxd senkronu: Letterboxd, veri merkezi IP’lerinden gelen otomatik girişleri bot korumasına takıyor. Aynı aracı VPS üzerinde denediğimde giriş ekranını bir türlü aşamamıştım; fakat evdeki standart kullanıcı IP’si ile sorunsuz çalışıyor.
Evde bir Plex’im olsa da asıl medya kütüphanesi ve otomasyon zinciri (Jellyfin + Radarr/Sonarr) bilerek VPS’te yaşıyor. Çünkü Pi’nin işlemcisi transcode (format dönüştürme) konusunda zayıf ve ev internetimin yükleme (upload) hızı sınırlı. Yani ağır işleri veri merkezine, eve dönük hafif işleri Pi’ye bırakıyorum.
İki makineyi nasıl birbirine bağladım: Tailscale
İki makinenin de birbiriyle konuşması gerekiyor. Örneğin VPS’teki Beszel’in evdeki Pi’yi izlemesi lazım. Ancak Pi, NAT arkasında olduğu için dışarıdan doğrudan erişilemez durumda.
Çözümü Tailscale’de buldum: WireGuard tabanlı, neredeyse hiç yapılandırma gerektirmeyen bir VPN. İki makineyi de kendi özel sanal ağıma dahil ediyor. Böylece VPS, Pi’ye sanki aynı odadalarmış gibi kendi özel IP’si üzerinden erişebiliyor. Ne dışa açık bir alan adına ne de port yönlendirmeye gerek kalıyor; tüm trafik uçtan uca şifreli akıyor.
Tailscale’in bir diğer harika yanı da Plex’te ortaya çıkıyor. Plex, ev ağının dışından yayın yapabilmek için normalde ücretli abonelik (Plex Pass) ister. Ancak Plex’e Tailscale üzerinden bağlandığımda sunucu beni aynı yerel ağdaymışım gibi gördüğü için bunu “uzak erişim” saymıyor. Yani nerede olursam olayım, Plex Pass’e gerek kalmadan kütüphaneme erişebiliyorum.
Güncelleme ve bakım süreci
- Cup, hangi konteynerların yeni sürümü olduğunu söylüyor. Ancak burada küçük bir detay var: Cup bazen diskte kalan eski imajları da listeye dahil edebiliyor. Yani “güncelleme var” uyarısı verenlerin bir kısmı aslında güncellenmiş konteynerların hayaletleri olabiliyor. Düzenli olarak
docker image pruneçalıştırınca liste normale dönüyor. - Büyük versiyon geçişlerinde (örneğin v1’den v2’ye geçiş) mutlaka verilerin yedeğini alıyorum. Bazı veritabanı göçleri (migration) tek yönlüdür ve geri dönüşü olmayabilir.
- Beszel ise kaynak kullanımı ve uptime izleme için kullanıyorum; hafif, sade ve tam ihtiyacım olanı veriyor.
Bu süreçte öğrendiklerim
Yıllar içinde biriktirdiğim ve keşke baştan bilseydim dediğim bazı notlar:
- Her işin doğal bir yeri var. Ev IP’si isteyen bir şeyi veri merkezinde çalıştırmaya zorlamak sadece vakit kaybı. Önce “bu iş nerede yaşamalı?” diye sormak gerekiyor.
- Bulutu mount etmek harika ama limitlere dikkat. Google Drive’ı
rcloneile bağlamak çok pratik; ancak aynı anda çok fazla tarama yapınca API limitlerine takılıp geçici yasak yiyebiliyorsunuz. - Basit olan kazanır. Ev tarafında Dokploy gibi karmaşık bir yapıya hiç ihtiyacım yoktu; CasaOS fazlasıyla yetti. Aracı ihtiyaca göre seçmek en doğrusu.
Özetle
Bugünkü kurulumum aslında tek bir cümleye sığıyor: Dışa açık, ağır ve kesintisiz çalışması gereken her şey veri merkezindeki VPS’te Dokploy ile; eve özel, hafif ve standart kullanıcı IP’si gerektiren işler ise evdeki Raspberry Pi üzerinde CasaOS ile çalışıyor. Tailscale sayesinde de hepsi sanki tek bir ağdaymış gibi birbirine bağlı.
2021’deki “her şeyi tek kutuda çalıştır” halimden, “her işi olması gereken yere koy” aşamasına geldim. Self-hosting’in en güzel yanı da bu: İhtiyaçlarınızla birlikte sisteminiz de büyüyor ve şekil değiştiriyor. Kendi düzeninizi kuruyorsanız veya merak ettiğiniz bir nokta olursa yorumlarda buluşalım.