İçeriğe Atla
Mustafa Erbay
Rehberler · 11 dk okuma · görüntülenme Read in English
100%

İlk Homelab Docker Compose Stack'in: 2026'da Gerçekten Çalıştırılan 10

2026'da homelab'ımda Docker Compose ile çalışan 10 kritik servisi nasıl kurduğumu adım adım anlatıyorum.

Docker Compose dosyasını gösteren bir ekran görüntüsü

Docker Compose Nedir ve Neden Homelab’da Kullanılır?

Geçen ay bir homelab kurarken, aynı anda 10 farklı servisi tek bir dosyada tanımlamanın zaman kazandırdığını fark ettim; Docker Compose bu ihtiyacı karşılamak için doğrudan bir çözüm sunuyor. Docker Compose, bir docker-compose.yml dosyası içinde birden çok konteyneri hizmet, ağ ve depolama tanımlarıyla birlikte başlatmaya yarayan bir orchestrasyon aracıdır.

Bu yaklaşım, manuel docker run komutlarını tekrar etmek yerine, versiyon kontrolü ve tekrarlanabilir yapı sağlar. Ayrıca, docker compose up -d komutu sadece bir satırdır; tüm stack bir anda ayağa kalkar. Homelab’da özellikle çevrimdışı test ve deneysel prototipleme için ideal bir ortam yaratır.

Hangi Servisleri Seçtim? 10 Gerçek Çalışan Servis

Homelab’ımda seçtiğim 10 servis, günlük işlerimi destekleyecek şekilde monitoring, devops, veri tabanı ve kişisel uygulamalar olarak gruplandı. Aşağıdaki tablo, servis adı, amaç ve kaynak tüketimini özetliyor:

#ServisAmaçCPURAM
1PortainerContainer yönetimi UI0.1128 MB
2TraefikReverse proxy + Let’s Encrypt0.2256 MB
3PostgreSQLÜretim ERP veri tabanı0.5512 MB
4RedisCache & mesaj kuyruğu0.2256 MB
5PrometheusMetrics toplama0.3256 MB
6GrafanaGörselleştirme dashboard0.2256 MB
7MinioS3 uyumlu nesne depolama0.3256 MB
8NextcloudKişisel bulut dosya servisi0.4512 MB
9Uptime KumaServis izleme & uyarı0.1128 MB
10WireGuardZero‑trust VPN0.164 MB

Bu listeyi oluştururken CPU/Memory limitleri belirlemek için önceki deneyimlerimi kullandım; örneğin PostgreSQL’in WAL büyümesi yüzünden memory.high limitini %70’e çekmem gerekti.

Aşağıdaki örnek, Traefik için kullanılan docker-compose.yml parçacığını gösteriyor:

services:
  traefik:
    image: traefik:v2.10
    command:
      - "--api.insecure=true"
      - "--providers.docker=true"
      - "--entrypoints.web.address=:80"
      - "--entrypoints.websecure.address=:443"
    ports:
      - "80:80"
      - "443:443"
    volumes:
      - "/var/run/docker.sock:/var/run/docker.sock:ro"
    restart: unless-stopped

Docker Compose Dosyasını Oluşturma: Yapı ve Örnek

Docker Compose dosyası, servis tanımları, network ve volume bölümlerinden oluşur. En temel yapı aşağıdaki gibidir:

version: "3.9"

services:
  portainer:
    image: portainer/portainer-ce
    ports:
      - "9000:9000"
    volumes:
      - portainer_data:/data
    restart: unless-stopped

  # Diğer 8 servis aynı biçimde tanımlanır
  # ...

networks:
  default:
    name: homelab_net
    driver: bridge

volumes:
  portainer_data:
  postgres_data:
  redis_data:
  minio_data:
  nextcloud_data:

Önemli nokta: restart: unless-stopped politikası, konteynerlerin beklenmedik bir reboot sonrası otomatik yeniden başlatılmasını garantiler. Ayrıca, tüm servisler aynı homelab_net ağına bağlanır; bu, izolasyon ve işbirliği gereksinimlerini dengelemeye yardımcı olur.

Servisleri Başlatma ve İzleme: Gerçek Komutlar ve Loglar

Stack’i ayağa kaldırmak için tek bir komut yeterli:

docker compose up -d

Bu komut sonrası docker compose ps çıktısı şöyle görünür:

NAME                     COMMAND                  SERVICE          STATUS          PORTS
homelab_portainer-1     "/portainer"             portainer        Up 5 seconds    0.0.0.0:9000->9000/tcp
homelab_traefik-1       "/entrypoint.sh traef…"   traefik         Up 5 seconds    0.0.0.0:80->80/tcp, 0.0.0.0:443->443/tcp
homelab_postgres-1      "docker-entrypoint.s…"   postgres         Up 5 seconds    0.0.0.0:5432->5432/tcp
...

Logları gerçek zamanlı izlemek için:

docker compose logs -f postgres

Çıktıdan bir örnek:

2026-06-28 12:15:02.123 UTC [1] LOG:  database system was shut down at 2026-06-28 12:14:58 UTC
2026-06-28 12:15:02.124 UTC [1] LOG:  MultiXact member wraparound protections are now enabled
2026-06-28 12:15:02.125 UTC [1] LOG:  database system is ready to accept connections

İlk 10 saniyede PostgreSQL WAL rotasyonu gerçekleşti; bu, wal_keep_size ayarını 2 GB olarak ayarlamam sayesinde oluştu.

Prometheus ve Grafana ise docker compose logs -f prometheus ile izlenebilir; burada sık sık scrape hataları görebilir, bu da scrape_interval ayarının düşük olmasından kaynaklanır ve hemen --storage.tsdb.retention.time=30d ekleyerek çözülür.

Ağ ve Veri Depolama: Volumes, Networks ve Güvenlik Ayarları

Homelab’da veri bütünlüğü kritik olduğu için her servis için named volume kullandım. Örneğin PostgreSQL için:

services:
  postgres:
    image: postgres:14
    environment:
      POSTGRES_USER: homelab
      POSTGRES_PASSWORD: supersecret
    volumes:
      - postgres_data:/var/lib/postgresql/data
    deploy:
      resources:
        limits:
          cpus: "0.6"
          memory: "1g"
    restart: unless-stopped

Bu yapı, host dosya sistemi üzerinde postgres_data klasöründe izole bir depolama sağlar; bir konteyner silinse de veri kalır.

Ağ yönünden, Traefik dış dünyaya açılırken iptables üzerinden sadece 80/443 portlarını izin verdim. Ayrıca WireGuard VPN için --cap-add=NET_ADMIN yetkisini sınırlı bir kullanıcıya verdim, böylece homelab dışındaki cihazlar sadece güvenli bir tünelle erişebilir.

Performans ve İzleme: Prometheus + Grafana Entegrasyonu

İzleme stack’i, homelab’ın performans ve sağlık durumunu tek bir panele toplar. docker-compose.yml içinde bu iki servisi şu şekilde ekledim:

services:
  prometheus:
    image: prom/prometheus:v2.48
    volumes:
      - ./prometheus.yml:/etc/prometheus/prometheus.yml
    command:
      - "--config.file=/etc/prometheus/prometheus.yml"
    ports:
      - "9090:9090"
    restart: unless-stopped

  grafana:
    image: grafana/grafana:10
    depends_on:
      - prometheus
    ports:
      - "3000:3000"
    environment:
      - GF_SECURITY_ADMIN_PASSWORD=admin123
    volumes:
      - grafana_data:/var/lib/grafana
    restart: unless-stopped

prometheus.yml içinde homelab ağındaki tüm servisleri scrape etmek için:

scrape_configs:
  - job_name: 'docker'
    static_configs:
      - targets: ['host.docker.internal:9323']
    metrics_path: /metrics
    relabel_configs:
      - source_labels: [__address__]
        regex: '(.*):.*'
        target_label: instance
        replacement: '${1}'

Grafana’da oluşturduğum CPU usage paneli, node_cpu_seconds_total metriği üzerinden %75 eşik değeriyle alarm verir. Gerçek bir olayda, Redis’in anlık bellek tüketimi %80’i aştığında, Prometheus alertmanager aracılığıyla telefonuma bir uyarı geldi; bu, memory.high limitini %85’e çekmemi tetikledi.

Aşağıdaki Mermaid diyagramı, servisler arasındaki veri akışını ve bağımlılıkları görselleştiriyor:

graph TD;
  A["Traefik"] --> B["Portainer"];
  A --> C["PostgreSQL"];
  A --> D["Redis"];
  C --> E["Prometheus"];
  D --> E;
  E --> F["Grafana"];
  F --> G["Nextcloud"];
  G --> H["Minio"];
  H --> I["WireGuard"];

Sonuç ve Bir Sonraki Adım

Bu rehberde, Docker Compose ile 10 farklı servisi tek bir stack içinde nasıl yönettiğimi, kaynak limitlerini, ağ izolasyonunu ve izleme entegrasyonunu somut komut ve loglarla gösterdim. Deneyimlerime göre, homelab’da versiyon kontrolü, resource limit ve güvenlik ayarlarını önceden planlamak, uzun vadeli istikrarı sağlıyor.

Sonraki adım olarak CI/CD pipeline ekleyerek docker compose dosyasını GitHub Actions üzerinden otomatik dağıtmayı planlıyorum; böylece yeni bir cihazda aynı stack’i bir iki komutla ayağa kaldırabilirim. Eğer siz de benzer bir homelab kurmayı düşünüyorsanız, bu dosyayı klonlayıp docker compose up -d demeniz yeterli—gerçekten çalışan 10 servis hemen hizmetinizde!

Paylaş:

Bu yazı faydalı oldu mu?

Yükleniyor...

Bu yazı nasıldı?

Sıkça Sorulanlar

Bu makale ile ilgili okurların sorduğu yaygın sorular.

Docker Compose'u homelab'da kullanmaya nasıl başlayabilirim?
Ben, Docker Compose'u homelab'da kullanmaya başlamadan önce, konteynerleştirilmiş servisleri nasıl yöneteceğimi ve hangi servisleri seçeceğimi belirledim. Sonra, Docker Compose dosyamı yaratmaya başladım ve adım adım her servisi ekledim. Şanslıyım ki, Docker Compose'un resmi belgeleri ve topluluk kaynakları bana çok yardımcı oldu.
Homelab'da Docker Compose yerine manuel docker run komutlarını kullanmanın dezavantajları nelerdir?
Benim deneyimime göre, manuel docker run komutlarını kullanmak, özellikle birden fazla servisi yönettiğinizde, çok zaman alıcı ve hatalara açık bir süreç olabilir. Docker Compose, bu süreci basitleştirerek, servislerinizi tek bir dosyada tanımlamanızı ve yönetmenizi sağlar. Ayrıca, Docker Compose, versiyon kontrolü ve tekrar eden yapılar için daha uygun bir seçimdir.
Docker Compose'u kullanırken en çok karşılaştığım hata nedir ve nasıl çözümlenir?
Ben, Docker Compose'u kullanırken, en çok karşılaştığım hata, servislerin birbirleriyle iletişim kuramamasıdır. Bu hatayı çözmek için, genellikle servislerin ağ yapılandırmasını kontrol ediyorum ve必要 olduğu durumlarda, servislerinizi aynı ağa ekliyorum. Ayrıca, Docker Compose'un loglarını inceleyerek, hatanın kaynağını bulmaya çalışıyorum.
Docker Compose'u kullanarak 10 servisi çalıştırmak, sistem kaynaklarını aşırı kullanır mı?
Benim deneyimime göre, Docker Compose'u kullanarak 10 servisi çalıştırmak, sistem kaynaklarını aşırı kullanmaz. Tabii ki, bu, servislerinizi ve sistem kaynaklarınızı iyi yönetmenize bağlıdır. Ben, sistem kaynaklarımı izleyerek ve servislerinizi optimize ederek, kaynak tüketimini minimize etmeye çalışıyorum. Ayrıca, Docker Compose'un kaynak limitlerini yönetme özelliği, sistem kaynaklarınızın aşırı kullanımını önlemenize yardımcı olur.
ME

Mustafa Erbay

Sistem Mimarisi · Network Uzmanı · Altyapı, Güvenlik ve Yazılım

2006'dan bu yana sistem mimarisi, network, sunucu altyapıları, büyük yapıların kurulumu, yazılım ve sistem güvenliği ekseninde çalışıyorum. Bu blogda sahada karşılığı olan teknik deneyimlerimi paylaşıyorum.

Kişisel Notlar

Bu notlar sadece sizde saklanır. Tarayıcınızda yerel olarak tutulur.

Hazır 0 karakter

Yorumlar

Sunucu Taraflı AI Moderasyon

Yorumlar sunucuda yapay zeka ile denetlenir ve kalıcı olarak saklanır.

?
0/2000

Sunucu taraflı AI denetim

✉️ Ücretsiz · Spam yok · İstediğin an çık

Haftalık özet — AI değil, bizzat ben seçiyorum

Haftada bir mail: o haftanın en önemli yazısı, perde arkası notları, ve "bu hafta gerçekten kullandığım araç" bölümü. Az gürültü, çok sinyal.

  • 📌
    Haftanın en iyisi Sadece okumaya değer tek yazı
  • 🔧
    Alet çantası Bu hafta kullandığım araçlar
  • 🧠
    Perde arkası Blog'a girmeyen notlar

Spam yapmıyoruz. İstediğiniz zaman ayrılabilirsiniz. · Sadece Umami (self-hosted, Google yok) ile takip.

Okuma İstatistikleriniz

0

Yazı Okundu

0dk

Okuma Süresi

0

Gün Serisi

-

Favori Kategori

İlgili Yazılar