Açık Kaynak Uygulamalar

    Traefik Nedir ve Modern Ters Proxy Kurulumu

    Docker konteynerlerini otomatik keşfeden, dinamik yapılandırmalı modern açık kaynak ters proxy Traefik rehberi.

    11 dk okuma Güncellendi: 10 Temmuz 2026

    Bir sunucuda tek bir uygulama çalıştırdığınızda hayat basittir; ancak gerçek dünyada aynı makinede bir WordPress sitesi, bir n8n otomasyon aracı, bir Ghost blogu ve birkaç API servisi yan yana yaşar. Bu servislerin hepsi 80 ve 443 numaralı portları paylaşmak, kendi alan adlarına yanıt vermek ve HTTPS sertifikalarına sahip olmak ister. İşte bu noktada bir ters proxy devreye girer ve gelen trafiği doğru konteynere yönlendirir. Traefik, tam olarak bu işi konteyner dünyasının doğasına uygun biçimde yapan, modern ve açık kaynaklı bir ters proxy ile yük dengeleyicidir.

    Traefik'i klasik Nginx veya Apache yapılandırmasından ayıran temel fikir şudur: siz elle yapılandırma dosyası yazmazsınız, Traefik ortamı sürekli dinler. Yeni bir Docker konteyneri ayağa kalktığında, üzerine yapıştırdığınız etiketleri okur ve ilgili yönlendirme kurallarını saniyeler içinde canlıya alır. Konteyneri durdurduğunuzda kural da kaybolur. Bu dinamik keşif yaklaşımı, onlarca servisi elle takip etme yükünü ortadan kaldırır ve Traefik'i özellikle mikroservis ve self-hosted uygulama yığınları için cazip kılar. Bu rehberde Traefik'in çalışma mantığını, Docker ile kurulumunu, etiket tabanlı yapılandırmayı, Let's Encrypt ile otomatik SSL üretimini ve Nginx Proxy Manager gibi alternatiflerle farkını uygulamalı olarak ele alacağız.

    Traefik Nedir ve Neden Farklıdır#

    Traefik, Go dilinde yazılmış, tek bir çalıştırılabilir dosya olarak dağıtılan bir kenar yönlendiricisidir (edge router). Görevi, dış dünyadan gelen HTTP, HTTPS ve TCP/UDP trafiğini alıp arka plandaki servislere dağıtmaktır. Nginx ve HAProxy da benzer işi görür, ancak onlarda yapılandırma statiktir: bir metin dosyası yazar, servisi yeniden yükler ve değişikliğin devreye girmesini beklersiniz. Traefik ise yapılandırmayı iki katmana ayırır ve dinamik katmanı otomatikleştirir.

    Birincisi statik yapılandırmadır; Traefik'in kendisinin nasıl başlayacağını tanımlar. EntryPoint'ler, hangi sağlayıcıları (Docker, Kubernetes, dosya) dinleyeceği ve sertifika ayarları burada yer alır. Bu dosya yalnızca Traefik yeniden başlatıldığında okunur. İkincisi dinamik yapılandırmadır; hangi alan adının hangi servise gideceği, hangi ara katmanların uygulanacağı gibi kuralları içerir. İşte bu ikinci katman, Docker etiketleri veya izlenen bir dosya aracılığıyla anlık olarak güncellenir. Bir konteyner eklediğinizde Traefik'i yeniden başlatmanıza gerek kalmaması, bu ayrımın doğrudan sonucudur.

    Traefik'in bir diğer güçlü yanı, yerleşik bir kontrol paneli sunmasıdır. Tarayıcıdan açtığınızda hangi router'ların aktif olduğunu, hangi servislere bağlandığını ve sertifikaların durumunu görsel olarak izleyebilirsiniz. Bu şeffaflık, "trafik neden bu konteynere gitmiyor" gibi sorunları ayıklarken çok zaman kazandırır.

    Temel Kavramlar EntryPoint Router Service ve Middleware#

    Traefik'i verimli kullanmak için dört kavramı netleştirmek gerekir. Bunlar aynı zamanda bir isteğin sistemin içinden geçerken uğradığı duraklardır.

    EntryPoint, Traefik'in dış dünyayı dinlediği kapıdır. Tipik olarak web adında 80 numaralı port ve websecure adında 443 numaralı port tanımlarsınız. Her gelen bağlantı önce bir EntryPoint'e düşer.

    Router, gelen isteğin hangi kurala uyduğuna bakar. Bir kural genellikle alan adına dayanır, örneğin Host(\blog.ornek.com`)`. Router, isteği eşleştirdikten sonra onu bir Service'e devreder ve isteğe bağlı olarak arada Middleware'lerden geçirir.

    Service, isteğin ulaşacağı arka uçtur; yani asıl uygulamanızı çalıştıran konteynerdir. Traefik, aynı servisin birden fazla kopyası varsa aralarında yük dengelemesi yapar.

    Middleware, istek servise ulaşmadan önce araya giren işlem katmanıdır. HTTP'den HTTPS'e yönlendirme, temel kimlik doğrulama, hız sınırlama (rate limiting), yol ön eki temizleme veya güvenlik başlıkları ekleme gibi işler middleware ile yapılır. Bir router'a birden fazla middleware sırayla bağlanabilir.

    Bu zinciri tek cümlede özetlersek: istek bir EntryPoint'ten girer, kuralına uyan bir Router tarafından yakalanır, gerekiyorsa Middleware'lerden geçer ve nihayet bir Service'e teslim edilir. Etiketleri yazarken hep bu akışı düşünün.

    Docker ile Traefik Kurulumu#

    Traefik'i çalıştırmanın en yaygın yolu Docker Compose'dur. Öncelikle Traefik'in kendi trafiğini taşıyacağı bir Docker ağı oluşturalım; bu ağ, proxy ile arkasındaki uygulamaların birbirini görmesini sağlar.

    # Traefik ve arkasındaki servislerin paylaşacağı ortak ağ
    docker network create traefik-proxy
    

    Şimdi statik yapılandırmayı ve konteyneri tanımlayan bir docker-compose.yml yazalım. Aşağıdaki örnek; kontrol panelini açar, 80 ve 443 portlarını dinler ve Docker sağlayıcısını etkinleştirir.

    services:
      traefik:
        image: traefik:v3.1
        container_name: traefik
        restart: unless-stopped
        command:
          # Docker'ı sağlayıcı olarak dinle
          - "--providers.docker=true"
          # Etiket olmayan konteynerleri otomatik yayınlama
          - "--providers.docker.exposedbydefault=false"
          # EntryPoint tanımları
          - "--entrypoints.web.address=:80"
          - "--entrypoints.websecure.address=:443"
          # Kontrol paneli (üretimde koruyun)
          - "--api.dashboard=true"
          - "--log.level=INFO"
        ports:
          - "80:80"
          - "443:443"
        volumes:
          # Traefik'in Docker olaylarını dinlemesi için soket
          - "/var/run/docker.sock:/var/run/docker.sock:ro"
          - "./letsencrypt:/letsencrypt"
        networks:
          - traefik-proxy
    
    networks:
      traefik-proxy:
        external: true
    

    Buradaki en kritik satır exposedbydefault=false ayarıdır. Bu sayede Traefik, yalnızca açıkça traefik.enable=true etiketi taşıyan konteynerleri yayınlar; geri kalan tüm konteynerleriniz dış dünyaya kapalı kalır. Bu, güvenlik açısından yanlışlıkla bir veritabanını internete açmanızı engelleyen küçük ama hayati bir tedbirdir.

    Docker soketini yalnızca okuma (:ro) izniyle bağladığımıza dikkat edin. Traefik'in konteyner olaylarını dinlemesi için bu erişim gereklidir, ancak soket güçlü bir yetkidir; ilerideki bölümde bunu daha da sıkılaştırmanın yolundan bahsedeceğiz. Kurulumu başlatmak için:

    docker compose up -d
    docker compose logs -f traefik
    

    Loglarda hata görmüyorsanız Traefik ayaktadır ve yeni konteynerleri dinlemeye hazırdır. Docker ve konteyner yönetimini görsel bir arayüzden takip etmeyi seviyorsanız, Portainer nedir yazımızdaki kuruluma da göz atabilirsiniz; Traefik ile birlikte oldukça uyumlu çalışır.

    Docker Etiketleriyle Otomatik Servis Keşfi#

    Traefik'in ışıltısının ortaya çıktığı yer burasıdır. Bir uygulamayı yayınlamak için ayrı bir yapılandırma dosyası düzenlemek yerine, konteynerin kendisine etiketler ekliyorsunuz. Traefik bu etiketleri okuyup router ve service'i otomatik oluşturuyor. Basit bir web uygulamasını ele alalım.

    services:
      blog:
        image: ghost:5
        container_name: blog
        restart: unless-stopped
        environment:
          - url=https://blog.ornek.com
        networks:
          - traefik-proxy
        labels:
          - "traefik.enable=true"
          # blog adında bir router tanımla, alan adı kuralı ver
          - "traefik.http.routers.blog.rule=Host(`blog.ornek.com`)"
          # Hangi EntryPoint üzerinden dinlensin
          - "traefik.http.routers.blog.entrypoints=websecure"
          # Konteynerin iç portu (Ghost varsayılan 2368)
          - "traefik.http.services.blog.loadbalancer.server.port=2368"
    
    networks:
      traefik-proxy:
        external: true
    

    Bu birkaç satırın anlamını çözelim. traefik.enable=true konteyneri Traefik'e "beni yayınla" der. routers.blog.rule satırı blog.ornek.com adresine gelen isteklerin bu konteynere gitmesini söyler. entrypoints=websecure isteğin 443 portundan geleceğini belirtir. Son satır ise Traefik'e konteynerin içinde uygulamanın hangi portta dinlediğini bildirir; Ghost için bu 2368'dir. Dikkat edilmesi gereken nokta, bu portu dışarıya ports ile açmamanızdır. Trafik Traefik'in içinden, yani traefik-proxy ağı üzerinden akar, dolayısıyla konteynerin portunu ana makineye publish etmeye gerek yoktur ve etmemek daha güvenlidir.

    Aynı router ismini birden çok etikette tekrar kullandığımıza dikkat edin. Traefik, blog ismini gördüğü tüm etiketleri tek bir router altında toplar. Yeni bir uygulama eklemek istediğinizde tek yapmanız gereken, farklı bir isim ve alan adıyla aynı kalıbı kopyalamaktır. Örneğin bir n8n servisi için routers.n8n.rule=Host(\otomasyon.ornek.com`)` yazarsınız ve Traefik onu da anında canlıya alır. Bu tür uygulamaların hazır kataloğuna App Center sayfamızdan ulaşabilir, konteyner temelli kurulumları hızlandırabilirsiniz.

    Middleware eklemek de aynı kadar basittir. Örneğin 80 portundan gelen isteği otomatik olarak HTTPS'e yönlendirmek isterseniz:

        labels:
          - "traefik.enable=true"
          # HTTP router: yalnızca web (80) EntryPoint'i
          - "traefik.http.routers.blog-http.rule=Host(`blog.ornek.com`)"
          - "traefik.http.routers.blog-http.entrypoints=web"
          - "traefik.http.routers.blog-http.middlewares=https-yonlendir"
          # Yönlendirme middleware tanımı
          - "traefik.http.middlewares.https-yonlendir.redirectscheme.scheme=https"
    

    Let's Encrypt ile Otomatik SSL#

    Traefik'in en sevilen özelliklerinden biri, TLS sertifikalarını Let's Encrypt üzerinden otomatik alması ve süresi dolmadan yenilemesidir. Bunun için "certificate resolver" adı verilen bir çözümleyici tanımlarsınız. En pratik doğrulama yöntemi, HTTP-01 challenge'ıdır; Let's Encrypt, alan adınızın gerçekten size ait olduğunu 80 portu üzerinden doğrular.

    Statik yapılandırmaya, yani Traefik konteynerinin command bölümüne şu satırları ekleyin:

        command:
          # ... önceki satırlar ...
          # Let's Encrypt çözümleyicisi
          - "--certificatesresolvers.leresolver.acme.httpchallenge=true"
          - "--certificatesresolvers.leresolver.acme.httpchallenge.entrypoint=web"
          - "[email protected]"
          - "--certificatesresolvers.leresolver.acme.storage=/letsencrypt/acme.json"
    

    acme.json dosyasının kalıcı bir volume üzerinde saklandığından emin olun; aksi halde her yeniden başlatmada yeni sertifika talep edersiniz ve Let's Encrypt'in haftalık limitine takılabilirsiniz. Bu dosyanın izinlerini de kısıtlamak iyi bir alışkanlıktır.

    # İlk oluşturmada dosya izinlerini sıkılaştırın
    touch ./letsencrypt/acme.json
    chmod 600 ./letsencrypt/acme.json
    

    Artık her uygulamanın etiketlerine tek bir satır ekleyerek sertifika talebini tetiklersiniz:

        labels:
          - "traefik.http.routers.blog.tls=true"
          - "traefik.http.routers.blog.tls.certresolver=leresolver"
    

    Bu iki etiketi gören Traefik, blog.ornek.com için Let's Encrypt'ten bir sertifika ister, kurar ve yenileme takvimini kendisi yönetir. Wildcard sertifika gibi daha ileri senaryolarda DNS-01 challenge'a geçmeniz gerekir; bu yöntem alan adı sağlayıcınızın API'sini kullanır ve tek bir sertifikayla tüm alt alan adlarını kapsar. Alan adınızı henüz almadıysanız alan adı sayfamızdan başlayabilir, DNS yönetimini oradan yapabilirsiniz. Kurumsal ölçekte sertifika ve trafik güvenliğini tek elden yönetmek istiyorsanız SSL çözümlerimiz ile ek bir güvence katmanı da ekleyebilirsiniz.

    Bir uyarı: HTTP-01 challenge'ın çalışması için 80 portunun internetten erişilebilir olması ve alan adının A kaydının sunucunuzun IP'sine bakması şarttır. Sertifika alınamıyorsa ilk bakılacak yer bu iki koşuldur.

    Traefik ve Nginx Proxy Manager Karşılaştırması#

    Self-hosted dünyasında Traefik'in en sık kıyaslandığı araç Nginx Proxy Manager'dır (NPM). NPM, Nginx üzerine oturan, web arayüzünden proxy hostları ve sertifikaları yöneten kullanıcı dostu bir panel sunar. İkisi de otomatik SSL sağlar, ama felsefeleri farklıdır. Traefik altyapıyı kod ve etiket olarak tanımlamayı benimserken, NPM tıkla-yapılandır yaklaşımını benimser.

    ÖzellikTraefikNginx Proxy Manager
    Yapılandırma yöntemiEtiket ve dosya (kod olarak)Web arayüzü (tıklama)
    Otomatik servis keşfiVar (Docker olaylarını dinler)Yok (her hostu elle eklersiniz)
    Öğrenme eğrisiOrta ile dik arasıDüşük
    Dinamik güncellemeAnında, yeniden başlatmasızPanelden kaydedince
    Middleware zinciriZengin ve esnekSınırlı (temel seçenekler)
    Sürüm kontrolüne uygunlukYüksek (Compose dosyasında)Düşük (durum panelde)
    TCP/UDP yönlendirmeVarKısıtlı
    İdeal kullanıcıKonteyner yığını büyüyenlerAz sayıda site yönetenler

    Pratik bir öneri şudur: sunucunuzda üç beş sabit site varsa ve grafik arayüz sizi rahatlatıyorsa NPM fazlasıyla yeterlidir. Ancak konteyner sayınız arttıkça, uygulamaları sık sık ekleyip çıkardıkça ve tüm altyapıyı Git'te versiyonlamak istedikçe Traefik'in etiket temelli, kendi kendini keşfeden yaklaşımı zamandan büyük tasarruf sağlar. Klasik Nginx yapılandırmasına aşina olmak isterseniz Nginx kurulumu rehberimiz temel proxy mantığını kavramanıza yardımcı olur; iki dünyanın mantığını anlamak, doğru aracı seçmenizi kolaylaştırır.

    Üretim Ortamı için Güvenlik ve İpuçları#

    Traefik'i canlıya alırken birkaç noktaya dikkat etmek, ileride başınızı ağrıtacak sorunları baştan önler. İlk kural kontrol panelini korumaktır. Varsayılan olarak dashboard'u internete açık bırakmak, altyapınızın haritasını herkese göstermek anlamına gelir. Onu ya iç ağa kapatın ya da bir temel kimlik doğrulama middleware'i ile koruyun.

        labels:
          - "traefik.enable=true"
          - "traefik.http.routers.dashboard.rule=Host(`traefik.ornek.com`)"
          - "traefik.http.routers.dashboard.entrypoints=websecure"
          - "traefik.http.routers.dashboard.tls.certresolver=leresolver"
          - "traefik.http.routers.dashboard.service=api@internal"
          - "traefik.http.routers.dashboard.middlewares=panel-auth"
          # htpasswd ile üretilmiş kullanıcı:parola çifti
          - "traefik.http.middlewares.panel-auth.basicauth.users=admin:$$apr1$$xyz$$..."
    

    İkinci kural, güvenlik başlıklarını standartlaştırmaktır. Tüm servislerinizde ortak bir middleware tanımlayıp HSTS, X-Frame-Options ve içerik türü koruması gibi başlıkları merkezi olarak uygulamak, her uygulamada ayrı ayrı uğraşmaktan iyidir. Üçüncü olarak, Docker soketini ham haliyle bağlamak yerine bir soket proxy'si (docker-socket-proxy gibi) kullanmayı değerlendirin; bu, Traefik'e yalnızca ihtiyaç duyduğu okuma erişimini verir ve olası bir güvenlik açığında hasarı sınırlar.

    Katmanlı savunma açısından Traefik'i tek başına bir güvenlik duvarı gibi görmemek gerekir. Uygulama seviyesindeki saldırılara karşı bir WAF çözümü, hacim tabanlı saldırılara karşı ise DDoS koruması Traefik'in önünde ayrı bir kalkan görevi görür. Traefik'te temel hız sınırlama middleware'i bulunur ancak bu, profesyonel bir güvenlik katmanının yerini tutmaz.

    Son olarak izleme konusunu ihmal etmeyin. Traefik, Prometheus formatında metrik yayınlayabilir; istek sayıları, yanıt süreleri ve hata oranlarını bir panele bağlamak, sorunları müşteriniz fark etmeden yakalamanızı sağlar. Sunucu bakımını kendiniz üstlenmek istemiyorsanız, sunucu yönetimi hizmetimiz kapsamında bu tür izleme ve güncelleme işlerini uzman ekibe bırakabilirsiniz.

    Sıkça Sorulan Sorular#

    Traefik ücretsiz mi yoksa lisans mı gerekiyor?#

    Traefik'in çekirdek sürümü tamamen açık kaynak ve ücretsizdir; bu rehberdeki tüm özellikler, otomatik keşif ve Let's Encrypt entegrasyonu dahil, ücretsiz sürümde mevcuttur. Şirket, ek kurumsal özellikler sunan Traefik Hub ve ticari destek paketleri de sunar, ancak çoğu self-hosted senaryosunda açık kaynak sürüm fazlasıyla yeterlidir ve üretimde gönül rahatlığıyla kullanılabilir.

    Traefik yalnızca Docker ile mi çalışır?#

    Hayır, Docker en popüler kullanım biçimi olsa da Traefik birçok sağlayıcıyı destekler. Kubernetes, Docker Swarm, Consul ve düz yapılandırma dosyaları gibi kaynaklardan servis keşfi yapabilir. Docker kullanmayan geleneksel bir sunucuda bile, izlenen bir YAML veya TOML dosyasına yönlendirme kuralları yazarak Traefik'i klasik bir ters proxy gibi çalıştırabilirsiniz.

    Sertifika alınamıyor, nereye bakmalıyım?#

    İlk kontrol edilecek nokta alan adının DNS A kaydının sunucunuzun genel IP adresine bakıp bakmadığıdır. Let's Encrypt'in HTTP-01 doğrulaması 80 portu üzerinden yapıldığı için bu portun internetten erişilebilir olması, güvenlik duvarında engellenmemesi ve acme.json dosyasının kalıcı bir volume üzerinde 600 izinle durması gerekir. Traefik loglarında ACME ile ilgili satırlar, genellikle sorunun tam nedenini açıkça gösterir.

    Traefik mevcut Nginx kurulumumun yerini alabilir mi?#

    Evet, Traefik bir ters proxy olarak Nginx'in kenar yönlendirme görevini üstlenebilir ve konteyner ortamlarında genellikle daha az bakım gerektirir. Ancak Nginx'i bir web sunucusu olarak statik dosya sunmak veya PHP-FPM çalıştırmak için kullanıyorsanız, bu rolü Traefik doğrudan devralmaz. Yaygın bir yaklaşım, Traefik'i en dış katmanda yönlendirici olarak konumlandırıp arkasında ihtiyaç duyulan yerlerde Nginx konteynerlerini çalıştırmaktır.

    Aynı anda kaç servisi yönetebilir?#

    Traefik Go dilinde yazıldığı ve düşük kaynak tükettiği için, mütevazı bir sunucuda dahi onlarca hatta yüzlerce servisi rahatlıkla yönlendirebilir. Performans darboğazı genellikle Traefik'in kendisinde değil, arkasındaki uygulamaların ve sunucunun kaynaklarında ortaya çıkar. Servis sayınız arttıkça bellek ve CPU'yu izlemek, gerektiğinde daha güçlü bir sanal sunucuya geçmek yeterli olur.

    Kapanış#

    Traefik, konteyner tabanlı altyapılarda ters proxy yönetimini elle yapılandırma yükünden kurtaran, dinamik ve zarif bir çözümdür. EntryPoint, router, service ve middleware kavramlarını bir kez oturttuğunuzda, yeni bir uygulamayı yayınlamak birkaç etiket satırı yazmak kadar kolaylaşır. Let's Encrypt entegrasyonu sayesinde SSL sertifikaları artık takip etmeniz gereken bir iş olmaktan çıkar; ekleyip çıkardığınız her serviste HTTPS otomatik olarak devreye girer. Nginx Proxy Manager gibi arayüz odaklı alternatifler basit senaryolarda işinizi görür, ancak konteyner yığınınız büyüdükçe Traefik'in kod-olarak-yapılandırma yaklaşımı gerçek bir güç kazandırır.

    Bu mimariyi hayata geçirmek için sağlam ve tam yetkili bir zemine ihtiyacınız var. Traefik ve Docker tabanlı yığınlarınızı özgürce çalıştırmak için VDS sunucularımıza veya esnek sanal sunucu seçeneklerimize göz atabilir; kaynak ihtiyacınıza göre ölçeklenen bir altyapı kurabilirsiniz. Hazır konteyner uygulamalarını hızlıca ayağa kaldırmak isterseniz App Center kataloğumuz ve tüm hosting çözümlerimiz size zaman kazandıracak bir başlangıç noktası sunar. Kurulum, göç veya bakım süreçlerinde yalnız kalmayın; Clou.TR ekibi doğru mimariyi kurmanız için yanınızda.

    proxyself-hosted

    Uygulamaya geçmeye hazır mısınız?

    NVMe SSD, ücretsiz SSL ve %99.9 uptime garantisiyle Clou.TR hosting ve sunucu çözümleriyle projenizi hayata geçirin.