Raspberry Pi 5 ile Homelab
Raspberry Pi 5 (4GB) üzerinde Traefik, Cloudflare Tunnel ve AdGuard Home kullanarak profesyonel bir homelab ortamı kurma rehberi. Bonus: Örnek servis kurulumları (TriliumNext, n8n, MinIO)
Kurulum: Baştan Sona Rehber
Raspberry Pi 5, özellikle 4GB RAM versiyonu, küçük ölçekli homelab projeleri için mükemmel bir platform. Bu rehberde, Raspberry Pi 5 üzerinde Traefik reverse proxy, Cloudflare Tunnel ve AdGuard Home kullanarak profesyonel bir homelab ortamı kurmayı adım adım anlatacağım.
Homelab Nedir?
Homelab, ev ortamında kendi sunucu altyapınızı kurmak ve yönetmek anlamına gelir. Kendi servislerinizi çalıştırabilir, verilerinizi kendi kontrolünüz altında tutabilir ve öğrenme sürecinde pratik deneyim kazanabilirsiniz.
Bu Rehberin Kapsamı
Bu rehberde şunları öğreneceksiniz:
- Raspberry Pi 5 üzerinde Docker ve Docker Compose kurulumu
- Traefik reverse proxy yapılandırması
- Cloudflare Tunnel ile güvenli internet erişimi
- AdGuard Home ile DNS ve reklam engelleme
- Örnek servis kurulumları (TriliumNext, n8n, MinIO)
Gereksinimler
Donanım
- Raspberry Pi 5 (4GB RAM önerilir, 8GB daha iyi)
- MicroSD kart (32GB veya daha fazla, Class 10 veya üzeri)
- Güç kaynağı (Raspberry Pi 5 için resmi adaptör)
- Ethernet kablosu (Wi-Fi de kullanılabilir ama ethernet daha stabil)
- Soğutma (opsiyonel ama önerilir)
Yazılım
- Raspberry Pi OS (64-bit, Lite veya Desktop)
- Docker Engine (en son sürüm)
- Docker Compose v2
- Cloudflare hesabı (ücretsiz)
- Domain adı (opsiyonel ama önerilir)
Ön Hazırlık
- Raspberry Pi OS'u microSD karta yazın (Raspberry Pi Imager kullanarak)
- SSH'yi etkinleştirin (imager'da ayarlar bölümünden)
- İlk açılışta güncellemeleri yapın
Sistem Kurulumu
Raspberry Pi OS Kurulumu
Raspberry Pi Imager ile OS kurulumu yaparken:
- Raspberry Pi OS (64-bit) seçin
- Settings (⚙️) butonuna tıklayın
- SSH etkinleştirin ve kullanıcı adı/şifre belirleyin
- Wi-Fi ayarlarını yapın (veya ethernet kullanın)
- Locale settings ayarlayın (Türkçe klavye için)
- MicroSD karta yazın
İlk Giriş ve Güncellemeler
SSH ile bağlanın:
ssh kullanici@raspberry-pi-ip
Sistemi güncelleyin:
sudo apt update
sudo apt upgrade -y
sudo reboot
Temel Güvenlik Ayarları
Fail2ban Kurulumu (Brute-Force Koruması)
Fail2ban, başarısız giriş denemelerini izleyerek saldırgan IP'leri otomatik olarak banlar. SSH brute-force saldırılarına karşı kritik bir güvenlik katmanıdır.
Kurulum:
# Fail2ban'ı kur
sudo apt update
sudo apt install -y fail2ban
# Yapılandırma dosyalarını oluştur
sudo cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.conf.backup
Yapılandırma:
/etc/fail2ban/jail.local dosyasını oluşturun:
[DEFAULT]
# Ban süresi: 1 saat
bantime = 1h
# Başarısız deneme sayısı: 3 denemeden sonra ban
maxretry = 3
# Zaman penceresi: Son 10 dakika içindeki başarısız denemeler
findtime = 10m
# Backend: systemd kullan (journald logları için)
backend = systemd
# DNS lookup: Hayır (performans için)
usedns = no
# Ignore IP: Yerel ağ ve localhost
ignoreip = 127.0.0.1/8 ::1 192.168.1.0/24
# SSH Jail
[sshd]
enabled = true
port = ssh
filter = sshd
logpath = %(sshd_log)s
backend = %(sshd_backend)s
maxretry = 3
bantime = 1h
findtime = 10m
Servisi Başlat:
# Yapılandırmayı test et
sudo fail2ban-client -t
# Servisi yeniden başlat
sudo systemctl restart fail2ban
# Durumu kontrol et
sudo systemctl status fail2ban
sudo fail2ban-client status sshd
Kullanışlı Komutlar:
# Tüm jail'lerin durumunu göster
sudo fail2ban-client status
# SSH jail durumunu göster
sudo fail2ban-client status sshd
# Bir IP'yi manuel banla
sudo fail2ban-client set sshd banip <IP_ADRESI>
# Bir IP'yi unban yap
sudo fail2ban-client set sshd unbanip <IP_ADRESI>
# Logları izle
sudo tail -f /var/log/fail2ban.log
Not: Fail2ban yapılandırma dosyaları
~/homelab/fail2ban/klasöründe saklanmaktadır. Detaylı yapılandırma için~/homelab/fail2ban/README.mddosyasına bakabilirsiniz.
Docker ve Docker Compose Kurulumu
Docker Engine Kurulumu
Raspberry Pi için resmi Docker kurulum scriptini kullanın:
# Docker'ı kaldır (varsa)
sudo apt remove docker docker-engine docker.io containerd runc -y
# Resmi kurulum scriptini çalıştır
curl -fsSL https://get.docker.com -o get-docker.sh
sudo sh get-docker.sh
# Kullanıcıyı docker grubuna ekle
sudo usermod -aG docker $USER
# Yeni oturum açmak için
newgrp docker
# Docker'ın çalıştığını kontrol et
docker --version
Docker Compose v2 Kurulumu
Docker Compose v2, Docker CLI'nin bir parçası olarak gelir. Eğer yoksa:
# Docker Compose plugin'ini kur
sudo apt install docker-compose-plugin -y
# Kontrol et
docker compose version
Önemli: docker-compose (tire ile) değil, docker compose (boşluk ile) kullanılır.
Docker Network Oluşturma
Tüm servislerin aynı network'te iletişim kurabilmesi için bir network oluşturun:
docker network create homelab
Bu network, tüm servislerin birbirleriyle iletişim kurmasını sağlar.
Traefik Reverse Proxy Kurulumu
Traefik Nedir?
Traefik, modern bir reverse proxy ve load balancer'dır. Docker container'larını otomatik olarak keşfeder ve yapılandırır. Label-based routing sayesinde her servis için ayrı domain kullanabilirsiniz.
Traefik Klasör Yapısı
mkdir -p ~/homelab/traefik
cd ~/homelab/traefik
mkdir -p letsencrypt
docker-compose.yml
services:
traefik:
image: traefik:latest
container_name: traefik
restart: unless-stopped
environment:
- DOCKER_API_VERSION=1.52
ports:
- "80:80"
- "443:443"
- "8080:8080" # Dashboard
volumes:
- /var/run/docker.sock:/var/run/docker.sock:ro
- ./letsencrypt:/letsencrypt
- ./traefik.yml:/etc/traefik/traefik.yml:ro
networks:
- homelab
networks:
homelab:
external: true
traefik.yml (Static Configuration)
# Traefik Static Configuration
api:
insecure: true # Dashboard için (sadece yerel ağdan erişilebilir)
providers:
docker:
exposedByDefault: false # Sadece label'ı olan container'lar expose edilir
network: homelab
entryPoints:
web:
address: ":80"
http:
encodedCharacters:
allowEncodedSlash: true
allowEncodedHash: true
websecure:
address: ":443"
http:
encodedCharacters:
allowEncodedSlash: true
allowEncodedHash: true
certificatesResolvers:
letsencrypt:
acme:
httpChallenge:
entryPoint: web
email: kullanici@ornek.com # Let's Encrypt bildirimleri için
storage: /letsencrypt/acme.json
log:
level: INFO
accessLog: {}
Traefik'i Başlatma
cd ~/homelab/traefik
docker compose up -d
# Logları kontrol et
docker logs traefik
# Dashboard'a erişim
# http://raspberry-pi-ip:8080
Traefik Dashboard
Traefik dashboard'u http://raspberry-pi-ip:8080 adresinden erişilebilir. Burada tüm route'ları, servisleri ve middleware'leri görebilirsiniz.
Cloudflare Tunnel Kurulumu
Cloudflare Tunnel Nedir?
Cloudflare Tunnel (eski adıyla Argo Tunnel), sunucunuzda port açmadan servislerinizi internete açmanızı sağlar. Cloudflare'in edge network'ü üzerinden güvenli bir bağlantı oluşturur ve SSL/TLS otomatik olarak yönetilir.
Avantajları
- Port forwarding gerekmez - Router'da port açmaya gerek yok
- Otomatik SSL/TLS - Cloudflare SSL sağlar
- DDoS koruması - Cloudflare'in koruması
- Ücretsiz - Kişisel kullanım için ücretsiz
Cloudflare Zero Trust Hesabı Oluşturma
- https://one.dash.cloudflare.com/ adresine gidin
- Cloudflare hesabınızla giriş yapın (yoksa oluşturun)
- Networks > Tunnels bölümüne gidin
Tunnel Oluşturma
- Create a tunnel butonuna tıklayın
- Tunnel adı verin (örn:
homelab-tunnel) - Cloudflared connector'ı seçin
- Token oluşturun ve kopyalayın
Önemli: Token'ı güvenli bir yerde saklayın, bir daha gösterilmez.
Cloudflare Tunnel Kurulumu
mkdir -p ~/homelab/cloudflare
cd ~/homelab/cloudflare
docker-compose.yml dosyası oluşturun:
services:
cloudflared:
image: cloudflare/cloudflared:latest
container_name: cloudflared
restart: unless-stopped
command: tunnel --no-autoupdate run --token <TOKEN_BURAYA>
networks:
- homelab
networks:
homelab:
external: true
Güvenlik Notu: Token'ı doğrudan docker-compose.yml'ye yazmak yerine, environment variable veya secret management kullanabilirsiniz:
services:
cloudflared:
image: cloudflare/cloudflared:latest
container_name: cloudflared
restart: unless-stopped
command: tunnel --no-autoupdate run --token ${CLOUDFLARE_TUNNEL_TOKEN}
environment:
- TUNNEL_TOKEN=${CLOUDFLARE_TUNNEL_TOKEN}
networks:
- homelab
Sonra .env dosyası oluşturun:
echo "CLOUDFLARE_TUNNEL_TOKEN=token_buraya" > .env
Cloudflare Tunnel'ı Başlatma
docker compose up -d
# Logları kontrol et
docker logs cloudflared
Tunnel başarıyla bağlandıysa, loglarda "Connection established" mesajını göreceksiniz.
Route Yapılandırması
Cloudflare Dashboard'dan route ekleyin:
- Networks > Tunnels > Tunnel'ınızı seçin > Configure
- Public Hostname sekmesine gidin
- Add a public hostname butonuna tıklayın
- Ayarları girin:
- Subdomain:
servis(örn:not2,n8n2) - Domain:
ornek.com(kendi domain'iniz) - Service:
http://traefik:80 - Path: (boş bırakın)
- Subdomain:
- Save hostname
Not: Cloudflare Tunnel, Traefik container'ına traefik hostname'i ile erişebilir çünkü aynı Docker network'ündeler.
DNS Yönetimi
Cloudflare Dashboard'dan route eklediğinizde, DNS kaydı otomatik olarak oluşturulur. Manuel eklemek isterseniz:
- Cloudflare Dashboard > DNS bölümüne gidin
- CNAME kaydı ekleyin:
- Type: CNAME
- Name: subdomain (örn:
not2) - Target:
{tunnel-id}.cfargotunnel.com - Proxy status: Proxied (turuncu bulut)
AdGuard Home Kurulumu
AdGuard Home Nedir?
AdGuard Home, network seviyesinde DNS filtreleme ve reklam engelleme sağlar. Tüm cihazlarınızda reklamları engelleyebilir, DNS sorgularını yönetebilirsiniz.
Kurulum
mkdir -p ~/homelab/adguard
cd ~/homelab/adguard
mkdir -p work conf
docker-compose.yml dosyası:
services:
adguard:
image: adguard/adguardhome:latest
container_name: adguard
restart: unless-stopped
ports:
- "53:53/tcp" # DNS
- "53:53/udp" # DNS
- "853:853/tcp" # DNS-over-TLS
- "3000:3000/tcp" # İlk kurulum
- "8053:80/tcp" # Web UI (Traefik dışında)
volumes:
- ./work:/opt/adguardhome/work
- ./conf:/opt/adguardhome/conf
networks:
- homelab
networks:
homelab:
external: true
İlk Yapılandırma
-
Container'ı başlatın:
docker compose up -d -
Tarayıcıdan
http://raspberry-pi-ip:3000adresine gidin -
Kurulum sihirbazını tamamlayın:
- Admin kullanıcı adı ve şifre belirleyin
- Web arayüzü portu:
80(Traefik üzerinden erişilecek) - DNS portu:
53
DNS Yapılandırması
AdGuard Home web arayüzünden:
- Settings > DNS settings
- Upstream DNS servers ekleyin:
https://dns.quad9.net/dns-query https://cloudflare-dns.com/dns-query https://dns.google/dns-query - Bootstrap DNS servers:
9.9.9.10 149.112.112.10 1.1.1.1 1.0.0.1 - DNSSEC etkinleştirin
- DNS cache size:
4194304(4MB)
Reklam Engelleme
- Filters > DNS blocklists
- Varsayılan listeleri etkinleştirin veya özel liste ekleyin:
- AdGuard DNS filter (~120K kural)
- EasyList
- EasyPrivacy
Router DNS Ayarlama
Tüm cihazlarınızda AdGuard Home'u kullanmak için router'ınızda DNS ayarlayın:
- Router yönetim paneline girin (genellikle
192.168.1.1) - DHCP Settings > DNS Server
- DNS olarak Raspberry Pi'nin IP adresini girin (örn:
192.168.1.58) - Ayarları kaydedin ve router'ı yeniden başlatın
Alternatif: Tek bir cihazda DNS ayarlamak için:
- Windows: Ağ Ayarları > DNS >
192.168.1.58 - macOS: Sistem Tercihleri > Ağ > DNS >
192.168.1.58 - Android/iOS: Wi-Fi ayarları > DNS >
192.168.1.58
Örnek Servis Kurulumları
Artık altyapı hazır! Şimdi bazı örnek servisler kuralım.
TriliumNext (Not Alma)
TriliumNext, hiyerarşik not alma uygulamasıdır. Wiki benzeri yapıda notlar oluşturabilirsiniz.
Kurulum
mkdir -p ~/homelab/trillium
cd ~/homelab/trillium
mkdir -p data
docker-compose.yml:
services:
trillium:
image: triliumnext/trilium:latest
container_name: trillium
restart: unless-stopped
environment:
- TRILIUM_PORT=8181
volumes:
- ./data:/home/node/trilium-data
labels:
- "traefik.enable=true"
# HTTP router (Cloudflare Tunnel için)
- "traefik.http.routers.trillium.rule=Host(`not2.ornek.com`)"
- "traefik.http.routers.trillium.entrypoints=web"
- "traefik.http.routers.trillium.middlewares=trillium-headers"
- "traefik.http.middlewares.trillium-headers.headers.customrequestheaders.X-Forwarded-Proto=https"
- "traefik.http.services.trillium.loadbalancer.server.port=8181"
# HTTPS router (gelecekte doğrudan erişim için)
- "traefik.http.routers.trillium-secure.rule=Host(`not2.ornek.com`)"
- "traefik.http.routers.trillium-secure.entrypoints=websecure"
- "traefik.http.routers.trillium-secure.tls.certresolver=letsencrypt"
- "traefik.http.routers.trillium-secure.middlewares=trillium-headers"
networks:
- homelab
networks:
homelab:
external: true
Cloudflare Route Ekleme
Cloudflare Dashboard'dan:
- Subdomain:
not2 - Domain:
ornek.com - Service:
http://traefik:80
Başlatma
docker compose up -d
# İlk kurulumda admin kullanıcı oluşturun
# https://not2.ornek.com adresinden erişin
n8n (Workflow Otomasyon)
n8n, Zapier ve Make.com'a benzer bir workflow otomasyon aracıdır.
Kurulum
mkdir -p ~/homelab/n8n
cd ~/homelab/n8n
mkdir -p data
docker-compose.yml:
services:
n8n:
image: n8nio/n8n:latest
container_name: n8n
restart: unless-stopped
environment:
- N8N_HOST=n8n2.ornek.com
- N8N_PORT=5678
- N8N_PROTOCOL=https
- WEBHOOK_URL=https://n8n2.ornek.com/
- N8N_SECURE_COOKIE=true
- TZ=Europe/Istanbul
- N8N_TRUST_PROXY=true
volumes:
- ./data:/home/node/.n8n
labels:
- "traefik.enable=true"
# HTTP router (Cloudflare Tunnel için)
- "traefik.http.routers.n8n.rule=Host(`n8n2.ornek.com`)"
- "traefik.http.routers.n8n.entrypoints=web"
- "traefik.http.routers.n8n.middlewares=n8n-headers"
- "traefik.http.middlewares.n8n-headers.headers.customrequestheaders.X-Forwarded-Proto=https"
- "traefik.http.services.n8n.loadbalancer.server.port=5678"
# HTTPS router (TLS)
- "traefik.http.routers.n8n-secure.rule=Host(`n8n2.ornek.com`)"
- "traefik.http.routers.n8n-secure.entrypoints=websecure"
- "traefik.http.routers.n8n-secure.tls.certresolver=letsencrypt"
- "traefik.http.routers.n8n-secure.middlewares=n8n-headers"
networks:
- homelab
networks:
homelab:
external: true
Cloudflare Route
- Subdomain:
n8n2 - Domain:
ornek.com - Service:
http://traefik:80
Başlatma
docker compose up -d
# https://n8n2.ornek.com adresinden erişin
MinIO (Object Storage)
MinIO, S3 uyumlu object storage sunucusudur. Dosya depolama için kullanılabilir.
Kurulum
mkdir -p ~/homelab/minio
cd ~/homelab/minio
mkdir -p data
docker-compose.yml:
services:
minio:
image: minio/minio:latest
container_name: minio
restart: unless-stopped
environment:
- MINIO_ROOT_USER=minioadmin # Güvenli bir kullanıcı adı belirleyin
- MINIO_ROOT_PASSWORD=minioadmin123 # Güvenli bir şifre belirleyin
- MINIO_BROWSER_REDIRECT_URL=https://cs3.ornek.com
command: server /data --console-address ":9001"
volumes:
- ./data:/data
labels:
- "traefik.enable=true"
# MinIO API (S3) - HTTP router
- "traefik.http.routers.minio.rule=Host(`s3.ornek.com`)"
- "traefik.http.routers.minio.entrypoints=web"
- "traefik.http.routers.minio.service=minio"
- "traefik.http.routers.minio.middlewares=minio-headers"
- "traefik.http.middlewares.minio-headers.headers.customrequestheaders.X-Forwarded-Proto=https"
- "traefik.http.services.minio.loadbalancer.server.port=9000"
# MinIO Console (Web UI) - HTTP router
- "traefik.http.routers.minio-console.rule=Host(`cs3.ornek.com`)"
- "traefik.http.routers.minio-console.entrypoints=web"
- "traefik.http.routers.minio-console.service=minio-console"
- "traefik.http.routers.minio-console.middlewares=minio-console-headers"
- "traefik.http.middlewares.minio-console-headers.headers.customrequestheaders.X-Forwarded-Proto=https"
- "traefik.http.services.minio-console.loadbalancer.server.port=9001"
networks:
- homelab
networks:
homelab:
external: true
Güvenlik Notu: MinIO root credentials'ları mutlaka değiştirin. Güçlü şifreler kullanın.
Cloudflare Route'ları
İki route ekleyin:
-
S3 API:
- Subdomain:
s3 - Domain:
ornek.com - Service:
http://traefik:80
- Subdomain:
-
Console:
- Subdomain:
cs3 - Domain:
ornek.com - Service:
http://traefik:80
- Subdomain:
Başlatma
docker compose up -d
# https://cs3.ornek.com adresinden console'a erişin
# S3 API: https://s3.ornek.com
Sorun Giderme
Container Başlamıyor
# Logları kontrol et
docker logs <container_adı>
# Container durumunu kontrol et
docker ps -a | grep <container_adı>
# Network bağlantısını kontrol et
docker network inspect homelab
Traefik Route Çalışmıyor
# Traefik loglarını kontrol et
docker logs traefik --tail 50
# Traefik dashboard'dan kontrol et
# http://raspberry-pi-ip:8080
# Route'u manuel test et
curl -H "Host: servis.ornek.com" http://localhost
Cloudflare Tunnel Bağlanmıyor
# Cloudflare Tunnel loglarını kontrol et
docker logs cloudflared --tail 50
# Cloudflare Dashboard'dan kontrol et
# https://one.dash.cloudflare.com/ → Networks → Tunnels
# Token'ın geçerli olduğundan emin olun
Domain'e Erişilemiyor
-
Cloudflare Tunnel route'u kontrol edin:
- Dashboard'da route doğru mu?
- Service:
http://traefik:80olmalı
-
Traefik route'u kontrol edin:
- Dashboard'da route görünüyor mu?
- Service UP durumunda mı?
-
Container çalışıyor mu:
docker ps | grep <servis_adı> -
DNS yayılımı:
- Cloudflare Tunnel kullanıldığında DNS kayıtlarına gerek yok
- Birkaç dakika bekle (Tunnel yayılımı için)
AdGuard Home DNS Çalışmıyor
# AdGuard loglarını kontrol et
docker logs adguard
# DNS sorgusu test et
dig @raspberry-pi-ip google.com
# Port 53'ün açık olduğundan emin olun
sudo netstat -tulpn | grep 53
İzin Sorunları
Bazı servisler (n8n, trilium) belirli kullanıcı ID'leri gerektirir:
# Data klasörü izinlerini düzelt
sudo chown -R 1000:1000 ./data
# veya container'ın çalıştığı kullanıcıya göre
Sonuç ve İleri Adımlar
Artık Raspberry Pi 5 üzerinde profesyonel bir homelab ortamınız var! Bu altyapı üzerine istediğiniz servisleri ekleyebilirsiniz.
Sistem Yönetimi İpuçları
-
Düzenli güncellemeler:
# Tüm servisleri güncelle for dir in ~/homelab/*/; do if [ -f "$dir/docker-compose.yml" ]; then cd "$dir" docker compose pull docker compose up -d fi done -
Yedekleme:
# Tek servis yedekleme tar -czf trillium-backup-$(date +%Y%m%d).tar.gz ~/homelab/trillium/data # Tüm homelab yedekleme tar -czf homelab-backup-$(date +%Y%m%d).tar.gz ~/homelab -
Log yönetimi:
# Log rotasyonu için docker-compose.yml'ye ekleyin logging: driver: "json-file" options: max-size: "10m" max-file: "3"
Ek Servisler
Bu altyapı üzerine ekleyebileceğiniz diğer servisler:
- Vaultwarden - Bitwarden sunucusu
- Jellyfin - Medya sunucusu
- Uptime Kuma - Servis izleme
- Grafana - Dashboard ve metrikler
- Nextcloud - Dosya sync ve office
Kaynaklar
- Traefik Dokümantasyon
- Cloudflare Tunnel Dokümantasyon
- AdGuard Home Dokümantasyon
- Docker Dokümantasyon
- awesome-selfhosted - Self-hosted servisler listesi
ARM64 Uyumluluk Notları
Raspberry Pi 5 ARM64 mimarisinde çalışır. Bazı servisler ARM64'te çalışmayabilir. Kurulumdan önce image'ın ARM64 desteğini kontrol edin:
docker manifest inspect <image>:<tag> | grep architecture
Bu rehber, Raspberry Pi 5 üzerinde homelab kurulumu için temel bir başlangıç noktasıdır. Sorularınız veya önerileriniz varsa yorumlarda paylaşabilirsiniz!