{"id":36403,"date":"2025-12-15T20:41:16","date_gmt":"2025-12-15T17:41:16","guid":{"rendered":"https:\/\/fatihsoysal.com\/blog\/?p=36403"},"modified":"2025-12-15T20:41:16","modified_gmt":"2025-12-15T17:41:16","slug":"traefiki-ubuntu-18-04-uzerinde-docker-konteynerleri-icin-ters-proxy-olarak-kullanma-rehberi","status":"publish","type":"post","link":"https:\/\/fatihsoysal.com\/blog\/traefiki-ubuntu-18-04-uzerinde-docker-konteynerleri-icin-ters-proxy-olarak-kullanma-rehberi\/","title":{"rendered":"Traefik&#8217;i Ubuntu 18.04 \u00dczerinde Docker Konteynerleri \u0130\u00e7in Ters Proxy Olarak Kullanma Rehberi"},"content":{"rendered":"<p><body><\/p>\n<h2>Traefik&#8217;i Ubuntu 18.04 \u00dczerinde Docker Konteynerleri \u0130\u00e7in Ters Proxy Olarak Kullanma Rehberi<\/h2>\n<p>Bu makale, modern web uygulamalar\u0131n\u0131n da\u011f\u0131t\u0131m\u0131nda ve y\u00f6netiminde merkezi bir rol oynayan ters proxy kavram\u0131n\u0131, \u00f6zellikle Traefik&#8217;in Docker konteynerleri ile entegrasyonunu ve Ubuntu 18.04 i\u015fletim sistemi \u00fczerindeki kurulumunu detayl\u0131 bir \u015fekilde ele almaktad\u0131r. Geli\u015ftiriciler ve sistem y\u00f6neticileri i\u00e7in dinamik, otomatik SSL sertifikas\u0131 y\u00f6netimi ve kolay yap\u0131land\u0131rma imkanlar\u0131 sunan Traefik, Docker ekosistemiyle m\u00fckemmel bir uyum i\u00e7inde \u00e7al\u0131\u015farak uygulama da\u011f\u0131t\u0131m s\u00fcre\u00e7lerini b\u00fcy\u00fck \u00f6l\u00e7\u00fcde basitle\u015ftirir.<\/p>\n<h3>Giri\u015f: Ters Proxy, Traefik ve Dinamik Yap\u0131land\u0131rma<\/h3>\n<p>G\u00fcn\u00fcm\u00fcz\u00fcn mikroservis tabanl\u0131 mimarilerinde ve konteynerize edilmi\u015f uygulamalar\u0131nda, gelen trafi\u011fi do\u011fru servislere y\u00f6nlendirmek, y\u00fck dengelemesi yapmak, SSL\/TLS sonland\u0131rmas\u0131 ger\u00e7ekle\u015ftirmek ve g\u00fcvenlik politikalar\u0131 uygulamak kritik \u00f6neme sahiptir. \u0130\u015fte tam bu noktada bir ters proxy devreye girer. Ters proxy, istemciden gelen istekleri al\u0131r ve bu istekleri arkas\u0131ndaki bir veya daha fazla sunucuya (bu durumda Docker konteynerlerine) iletir. Bu sayede, arka u\u00e7 servislerinin do\u011frudan internete a\u00e7\u0131k olmas\u0131 engellenir, g\u00fcvenlik art\u0131r\u0131l\u0131r ve karma\u015f\u0131k da\u011f\u0131t\u0131m senaryolar\u0131 y\u00f6netilebilir hale gelir.<\/p>\n<p>Traefik, &#8220;Edge Router&#8221; olarak bilinen modern bir ters proxy ve y\u00fck dengeleyici \u00e7\u00f6z\u00fcm\u00fcd\u00fcr. \u00d6zellikle Docker, Kubernetes, Swarm gibi dinamik orkestrasyon ortamlar\u0131yla entegre \u00e7al\u0131\u015fmak \u00fczere tasarlanm\u0131\u015ft\u0131r. Traefik&#8217;in en b\u00fcy\u00fck avantajlar\u0131ndan biri, yap\u0131land\u0131rma dosyalar\u0131n\u0131 manuel olarak d\u00fczenlemek yerine, orkestrasyon platformlar\u0131ndan (\u00f6rne\u011fin Docker etiketleri) bilgileri do\u011frudan \u00e7ekerek kendini otomatik olarak yap\u0131land\u0131rmas\u0131d\u0131r. Bu dinamik yap\u0131land\u0131rma yetene\u011fi, yeni bir konteyner ba\u015flat\u0131ld\u0131\u011f\u0131nda veya durduruldu\u011funda Traefik&#8217;in an\u0131nda g\u00fcncellenmesini sa\u011flar, b\u00f6ylece manuel m\u00fcdahaleye gerek kalmaz. Ayr\u0131ca, Let&#8217;s Encrypt ile entegrasyonu sayesinde otomatik SSL sertifikas\u0131 y\u00f6netimi sunarak HTTPS&#8217;i uygulamalar\u0131n\u0131za kolayca entegre etmenizi sa\u011flar.<\/p>\n<p>Neden Traefik ve Docker ikilisi tercih edilmeli? \u00c7\u00fcnk\u00fc Docker, uygulamalar\u0131 izole edilmi\u015f konteynerler i\u00e7inde paketleyerek ta\u015f\u0131nabilirlik ve tutarl\u0131l\u0131k sa\u011flarken, Traefik bu konteynerlere gelen trafi\u011fi ak\u0131ll\u0131ca y\u00f6netir. Bir uygulama konteynerini ba\u015flatt\u0131\u011f\u0131n\u0131zda, Traefik etiketlerini kullanarak bu uygulamaya bir alan ad\u0131 atayabilir, SSL sertifikas\u0131 sa\u011flayabilir ve hatta trafik kurallar\u0131n\u0131 belirleyebilirsiniz. T\u00fcm bunlar, ek bir yap\u0131land\u0131rma dosyas\u0131 de\u011fi\u015fikli\u011fi yapmadan ger\u00e7ekle\u015fir. Ubuntu 18.04 ise, sunucu taraf\u0131nda yayg\u0131n olarak kullan\u0131lan, stabil ve iyi belgelenmi\u015f bir i\u015fletim sistemi oldu\u011fu i\u00e7in bu rehber i\u00e7in ideal bir temel sunmaktad\u0131r. Bu makalede, Traefik&#8217;i Ubuntu 18.04 \u00fczerinde Docker konteynerleriniz i\u00e7in nas\u0131l kuraca\u011f\u0131n\u0131z\u0131, yap\u0131land\u0131raca\u011f\u0131n\u0131z\u0131 ve kullanaca\u011f\u0131n\u0131z\u0131 ad\u0131m ad\u0131m g\u00f6sterece\u011fiz.<\/p>\n<h3>\u00d6n Gereksinimler<\/h3>\n<p>Traefik&#8217;i Ubuntu 18.04 \u00fczerinde Docker konteynerleriyle kullanmaya ba\u015flamadan \u00f6nce baz\u0131 temel \u00f6n gereksinimlerin kar\u015f\u0131land\u0131\u011f\u0131ndan emin olmal\u0131y\u0131z. Bu ad\u0131mlar, sorunsuz bir kurulum ve yap\u0131land\u0131rma s\u00fcreci i\u00e7in zemin haz\u0131rlayacakt\u0131r.<\/p>\n<h4>Ubuntu 18.04 Sunucusu<\/h4>\n<p>Bu rehber, Ubuntu 18.04 LTS (Bionic Beaver) i\u015fletim sistemi y\u00fckl\u00fc bir sunucu \u00fczerinde \u00e7al\u0131\u015ft\u0131r\u0131lmak \u00fczere tasarlanm\u0131\u015ft\u0131r. E\u011fer farkl\u0131 bir Ubuntu s\u00fcr\u00fcm\u00fc kullan\u0131yorsan\u0131z, komutlarda veya paket adlar\u0131nda k\u00fc\u00e7\u00fck farkl\u0131l\u0131klar olabilir. Sunucunuza SSH eri\u015fiminizin olmas\u0131 ve <code>sudo<\/code> yetkilerine sahip bir kullan\u0131c\u0131 hesab\u0131n\u0131z\u0131n bulunmas\u0131 gerekmektedir.<\/p>\n<h4>SSH Eri\u015fimi ve Sudo Yetkileri<\/h4>\n<p>Sunucunuza uzaktan ba\u011flanabilmek i\u00e7in SSH (Secure Shell) eri\u015fimine sahip olman\u0131z \u015fartt\u0131r. Ayr\u0131ca, sistem \u00e7ap\u0131nda de\u011fi\u015fiklikler yapaca\u011f\u0131m\u0131z i\u00e7in, kullanaca\u011f\u0131n\u0131z hesab\u0131n <code>sudo<\/code> komutuyla y\u00f6netici yetkilerini kullanabilmesi gerekmektedir. Genellikle, yeni bir Ubuntu sunucusu kurdu\u011funuzda olu\u015fturdu\u011funuz ilk kullan\u0131c\u0131 hesab\u0131 bu yetkilere sahip olur.<\/p>\n<h4>Docker ve Docker Compose Kurulumu<\/h4>\n<p>Traefik ve y\u00f6netece\u011fi uygulamalar Docker konteynerleri olarak \u00e7al\u0131\u015faca\u011f\u0131 i\u00e7in, Docker Engine ve Docker Compose&#8217;un sunucunuzda kurulu olmas\u0131 gerekmektedir. Docker Engine, konteynerleri \u00e7al\u0131\u015ft\u0131rmak i\u00e7in temel platformu sa\u011flarken, Docker Compose birden fazla Docker konteynerini tan\u0131mlayan ve \u00e7al\u0131\u015ft\u0131ran ara\u00e7t\u0131r. Bu rehberde, Traefik&#8217;i ve \u00f6rnek uygulamalar\u0131 Docker Compose ile y\u00f6netece\u011fiz.<\/p>\n<h4>Alan Ad\u0131 ve DNS Ayarlar\u0131<\/h4>\n<p>Traefik&#8217;i ters proxy olarak kullanmak i\u00e7in, internet \u00fczerinden eri\u015filebilir bir alan ad\u0131na ihtiyac\u0131n\u0131z olacakt\u0131r. Bu alan ad\u0131n\u0131 (\u00f6rne\u011fin <code>example.com<\/code>) veya bir alt alan ad\u0131n\u0131 (\u00f6rne\u011fin <code>app.example.com<\/code>) Traefik&#8217;in y\u00f6netecek oldu\u011fu uygulamalara y\u00f6nlendireceksiniz. Alan ad\u0131 sa\u011flay\u0131c\u0131n\u0131z\u0131n kontrol panelinden, sunucunuzun genel IP adresine i\u015faret eden bir A kayd\u0131 veya CNAME kayd\u0131 olu\u015fturman\u0131z gerekecektir. Let&#8217;s Encrypt ile otomatik SSL sertifikalar\u0131 alabilmek i\u00e7in bu ad\u0131m zorunludur.<\/p>\n<p>*   <strong>A Kayd\u0131:<\/strong> <code>example.com<\/code> veya <code>www.example.com<\/code> gibi ana alan adlar\u0131n\u0131 do\u011frudan sunucunuzun IP adresine y\u00f6nlendirir.<br \/>\n*   <strong>CNAME Kayd\u0131:<\/strong> Bir alt alan ad\u0131n\u0131 (\u00f6rne\u011fin <code>app.example.com<\/code>) ba\u015fka bir alan ad\u0131na veya A kayd\u0131na y\u00f6nlendirir.<br \/>\n<em>   <strong>Wildcard Sertifikalar \u0130\u00e7in DNS Challenge:<\/strong> E\u011fer <code><\/em>.example.com<\/code> gibi wildcard sertifikalar kullanmay\u0131 planl\u0131yorsan\u0131z, Let&#8217;s Encrypt&#8217;in DNS challenge y\u00f6ntemini kullanman\u0131z gerekecektir. Bu, alan ad\u0131 sa\u011flay\u0131c\u0131n\u0131z\u0131n API&#8217;si arac\u0131l\u0131\u011f\u0131yla DNS kay\u0131tlar\u0131n\u0131 otomatik olarak do\u011frulamas\u0131n\u0131 gerektirir.<\/p>\n<h4>G\u00fcvenlik Duvar\u0131 Ayarlar\u0131 (UFW)<\/h4>\n<p>Sunucunuzun g\u00fcvenli\u011fini sa\u011flamak i\u00e7in g\u00fcvenlik duvar\u0131n\u0131 yap\u0131land\u0131rman\u0131z \u00f6nemlidir. Ubuntu&#8217;da yayg\u0131n olarak kullan\u0131lan g\u00fcvenlik duvar\u0131 arac\u0131 UFW (Uncomplicated Firewall) olarak bilinir. Traefik&#8217;in d\u00fczg\u00fcn \u00e7al\u0131\u015fabilmesi i\u00e7in 80 (HTTP) ve 443 (HTTPS) portlar\u0131n\u0131n d\u0131\u015far\u0131dan eri\u015fime a\u00e7\u0131k olmas\u0131 gerekmektedir. Ayr\u0131ca, SSH eri\u015fiminiz i\u00e7in 22 numaral\u0131 portun da a\u00e7\u0131k olmas\u0131 \u00f6nemlidir.<\/p>\n<pre><code class=\"language-bash\">sudo ufw allow OpenSSH\nsudo ufw allow 'Nginx Full' # Veya 80\/tcp ve 443\/tcp\nsudo ufw enable\nsudo ufw status<\/code><\/pre>\n<p>Bu \u00f6n gereksinimleri tamamlad\u0131ktan sonra, Traefik kurulumuna ve yap\u0131land\u0131rmas\u0131na ge\u00e7meye haz\u0131r olacaks\u0131n\u0131z.<\/p>\n<h3>Docker ve Docker Compose Kurulumu<\/h3>\n<p>Traefik&#8217;i konteynerize edilmi\u015f bir uygulama olarak \u00e7al\u0131\u015ft\u0131raca\u011f\u0131m\u0131z ve di\u011fer uygulamalar\u0131m\u0131z\u0131 da Docker konteynerleri olarak da\u011f\u0131taca\u011f\u0131m\u0131z i\u00e7in, sunucunuzda Docker ve Docker Compose&#8217;un kurulu olmas\u0131 hayati \u00f6nem ta\u015f\u0131r. \u0130\u015fte Ubuntu 18.04 \u00fczerinde bu bile\u015fenleri kurmak i\u00e7in ad\u0131mlar:<\/p>\n<h4>Docker Engine Kurulumu<\/h4>\n<p>\u0130lk olarak, mevcut paket listesini g\u00fcncelleyelim ve gerekli ba\u011f\u0131ml\u0131l\u0131klar\u0131 y\u00fckleyelim:<\/p>\n<pre><code class=\"language-bash\">sudo apt update\nsudo apt install apt-transport-https ca-certificates curl software-properties-common -y<\/code><\/pre>\n<p>Ard\u0131ndan, Docker&#8217;\u0131n resmi GPG anahtar\u0131n\u0131 sisteminize ekleyelim:<\/p>\n<pre><code class=\"language-bash\">curl -fsSL https:\/\/download.docker.com\/linux\/ubuntu\/gpg | sudo apt-key add -<\/code><\/pre>\n<p>Docker deposunu APT kaynaklar\u0131na ekleyelim:<\/p>\n<pre><code class=\"language-bash\">sudo add-apt-repository \"deb [arch=amd64] https:\/\/download.docker.com\/linux\/ubuntu bionic stable\"<\/code><\/pre>\n<p>Paket listesini tekrar g\u00fcncelleyelim ve Docker Engine&#8217;i kural\u0131m:<\/p>\n<pre><code class=\"language-bash\">sudo apt update\nsudo apt install docker-ce docker-ce-cli containerd.io -y<\/code><\/pre>\n<p>Docker servisinin \u00e7al\u0131\u015ft\u0131\u011f\u0131n\u0131 do\u011frulayal\u0131m:<\/p>\n<pre><code class=\"language-bash\">sudo systemctl status docker<\/code><\/pre>\n<p>\u00c7\u0131kt\u0131da <code>active (running)<\/code> ibaresini g\u00f6rmelisiniz.<\/p>\n<h4>Kullan\u0131c\u0131y\u0131 <code>docker<\/code> Grubuna Ekleme<\/h4>\n<p><code>sudo<\/code> kullanmadan Docker komutlar\u0131n\u0131 \u00e7al\u0131\u015ft\u0131rabilmek i\u00e7in, mevcut kullan\u0131c\u0131n\u0131z\u0131 <code>docker<\/code> grubuna eklemeniz \u00f6nerilir. Bu, Docker ile \u00e7al\u0131\u015f\u0131rken her seferinde <code>sudo<\/code> yazma zahmetinden kurtar\u0131r.<\/p>\n<pre><code class=\"language-bash\">sudo usermod -aG docker ${USER}<\/code><\/pre>\n<p>Bu komutu \u00e7al\u0131\u015ft\u0131rd\u0131ktan sonra, de\u011fi\u015fikli\u011fin etkili olmas\u0131 i\u00e7in oturumu kapat\u0131p tekrar a\u00e7man\u0131z (veya sunucuyu yeniden ba\u015flatman\u0131z) gerekmektedir. Oturumunuzu yeniden ba\u015flatt\u0131ktan sonra, <code>docker run hello-world<\/code> komutunu <code>sudo<\/code> kullanmadan \u00e7al\u0131\u015ft\u0131rarak kurulumu test edebilirsiniz.<\/p>\n<h4>Docker Compose Kurulumu<\/h4>\n<p>Docker Compose, Docker&#8217;\u0131n resmi GitHub deposundan indirilen bir ikili dosyad\u0131r. Kurulum i\u00e7in a\u015fa\u011f\u0131daki ad\u0131mlar\u0131 izleyin:<\/p>\n<p>En son kararl\u0131 Docker Compose s\u00fcr\u00fcm\u00fcn\u00fc indirin. (S\u00fcr\u00fcm numaras\u0131n\u0131 kontrol etmek i\u00e7in [Docker Compose GitHub Releases](https:\/\/github.com\/docker\/compose\/releases) sayfas\u0131n\u0131 ziyaret edebilirsiniz.)<\/p>\n<pre><code class=\"language-bash\">sudo curl -L \"https:\/\/github.com\/docker\/compose\/releases\/download\/1.29.2\/docker-compose-$(uname -s)-$(uname -m)\" -o \/usr\/local\/bin\/docker-compose<\/code><\/pre>\n<p>\u0130ndirilen dosyaya y\u00fcr\u00fctme izinleri verin:<\/p>\n<pre><code class=\"language-bash\">sudo chmod +x \/usr\/local\/bin\/docker-compose<\/code><\/pre>\n<p>Docker Compose kurulumunu do\u011frulay\u0131n:<\/p>\n<pre><code class=\"language-bash\">docker-compose --version<\/code><\/pre>\n<p>\u00c7\u0131kt\u0131da y\u00fckl\u00fc olan Docker Compose s\u00fcr\u00fcm\u00fcn\u00fc g\u00f6rmelisiniz, \u00f6rne\u011fin <code>docker-compose version 1.29.2, build 5becea4c<\/code>.<\/p>\n<p>Art\u0131k Docker ve Docker Compose sunucunuzda ba\u015far\u0131yla kurulu oldu\u011funa g\u00f6re, Traefik&#8217;i yap\u0131land\u0131rmaya ba\u015flayabiliriz.<\/p>\n<h3>Traefik Kurulumu ve Temel Yap\u0131land\u0131rma<\/h3>\n<p>Traefik&#8217;i Docker konteynerleri i\u00e7in ters proxy olarak kurman\u0131n en yayg\u0131n ve \u00f6nerilen yolu, onu bir Docker konteyneri olarak Docker Compose ile \u00e7al\u0131\u015ft\u0131rmakt\u0131r. Bu yakla\u015f\u0131m, Traefik&#8217;in kendi ya\u015fam d\u00f6ng\u00fcs\u00fcn\u00fc Docker taraf\u0131ndan y\u00f6netilmesini sa\u011flar ve di\u011fer uygulamalar\u0131n\u0131zla tutarl\u0131 bir da\u011f\u0131t\u0131m modeli sunar.<\/p>\n<h4>Traefik \u0130\u00e7in <code>docker-compose.yml<\/code> Dosyas\u0131 Olu\u015fturma<\/h4>\n<p>Traefik&#8217;in yap\u0131land\u0131rmas\u0131n\u0131 ve \u00e7al\u0131\u015fmas\u0131n\u0131 tan\u0131mlayacak bir <code>docker-compose.yml<\/code> dosyas\u0131 olu\u015ftural\u0131m. Bu dosya, Traefik&#8217;in hangi portlar\u0131 dinleyece\u011fini, Docker ile nas\u0131l etkile\u015fim kuraca\u011f\u0131n\u0131 ve Let&#8217;s Encrypt sertifikalar\u0131n\u0131 nas\u0131l y\u00f6netece\u011fini belirleyecektir.<\/p>\n<p>\u00d6ncelikle, Traefik i\u00e7in bir dizin olu\u015ftural\u0131m ve i\u00e7ine girelim:<\/p>\n<pre><code class=\"language-bash\">mkdir traefik && cd traefik<\/code><\/pre>\n<p>\u015eimdi <code>docker-compose.yml<\/code> dosyas\u0131n\u0131 olu\u015ftural\u0131m ve d\u00fczenleyelim:<\/p>\n<pre><code class=\"language-bash\">nano docker-compose.yml<\/code><\/pre>\n<p>Dosyan\u0131n i\u00e7eri\u011fi a\u015fa\u011f\u0131daki gibi olmal\u0131d\u0131r:<\/p>\n<pre><code class=\"language-yaml\">version: '3.8'\n\nservices:\n  traefik:\n    image: traefik:v2.9 # Traefik'in en son kararl\u0131 s\u00fcr\u00fcm\u00fcn\u00fc kullan\u0131n\n    container_name: traefik\n    restart: unless-stopped\n    security_opt:\n      - no-new-privileges:true\n    networks:\n      - web\n    ports:\n      - \"80:80\"   # HTTP istekleri i\u00e7in\n      - \"443:443\" # HTTPS istekleri i\u00e7in\n      # Dashboard'a d\u0131\u015far\u0131dan eri\u015fim i\u00e7in portu a\u00e7abilirsiniz, ancak g\u00fcvenlik \u00f6nlemleri almal\u0131s\u0131n\u0131z\n      # - \"8080:8080\" # Traefik Dashboard i\u00e7in (yaln\u0131zca dahili a\u011fda veya g\u00fcvenli bir \u015fekilde eri\u015fin)\n    volumes:\n      - \/etc\/localtime:\/etc\/localtime:ro # Zaman senkronizasyonu\n      - \/var\/run\/docker.sock:\/var\/run\/docker.sock:ro # Docker API'sine eri\u015fim\n      - .\/traefik.yml:\/etc\/traefik\/traefik.yml:ro # Ana Traefik yap\u0131land\u0131rma dosyas\u0131\n      - .\/acme.json:\/etc\/traefik\/acme.json # Let's Encrypt sertifikalar\u0131 i\u00e7in\n    labels:\n      # Traefik Dashboard i\u00e7in etiketler\n      - \"traefik.enable=true\"\n      - \"traefik.http.routers.traefik-dashboard.entrypoints=websecure\"\n      - \"traefik.http.routers.traefik-dashboard.rule=Host(<code>traefik.example.com<\/code>)\" # Kendi alan ad\u0131n\u0131z\u0131 kullan\u0131n\n      - \"traefik.http.routers.traefik-dashboard.tls=true\"\n      - \"traefik.http.routers.traefik-dashboard.tls.certresolver=myresolver\"\n      - \"traefik.http.routers.traefik-dashboard.service=api@internal\"\n      # Dashboard'a eri\u015fimi \u015fifre ile koruyun (user:hashed_password)\n      # 'htpasswd -nb user password' komutuyla olu\u015fturabilirsiniz\n      # \u00d6rne\u011fin: traefikuser:$apr1$D9f2\/q.S$QxR8C0o\/y1.W4uE0m.B2Y\/\n      - \"traefik.http.routers.traefik-dashboard.middlewares=traefik-auth\"\n      - \"traefik.http.middlewares.traefik-auth.basicauth.users=traefikuser:$$apr1$$D9f2\/q.S$$QxR8C0o\/y1.W4uE0m.B2Y\/\" # Kendi kullan\u0131c\u0131 ad\u0131\/\u015fifrenizi kullan\u0131n\n      # HTTP'den HTTPS'e y\u00f6nlendirme middleware'\u0131\n      - \"traefik.http.routers.http-catchall.rule=HostRegexp(<code>{host:.+}<\/code>)\"\n      - \"traefik.http.routers.http-catchall.entrypoints=web\"\n      - \"traefik.http.routers.http-catchall.middlewares=redirect-to-https\"\n      - \"traefik.http.middlewares.redirect-to-https.redirectscheme.scheme=https\"\n\nnetworks:\n  web:\n    external: true # Traefik'in di\u011fer konteynerlerle ileti\u015fim kuraca\u011f\u0131 a\u011f<\/code><\/pre>\n<p><strong>A\u00e7\u0131klamalar:<\/strong><\/p>\n<p>*   <code>image: traefik:v2.9<\/code>: Traefik&#8217;in belirli bir s\u00fcr\u00fcm\u00fcn\u00fc kullan\u0131r\u0131z. <code>v2.x<\/code> serisi i\u00e7in etiketler (labels) ile yap\u0131land\u0131rma \u00f6nemlidir.<br \/>\n*   <code>ports<\/code>: 80 (HTTP) ve 443 (HTTPS) portlar\u0131n\u0131 d\u0131\u015far\u0131ya a\u00e7ar\u0131z. Bu portlar \u00fczerinden gelen t\u00fcm web trafi\u011fini Traefik dinleyecektir.<br \/>\n*   <code>volumes<\/code>:<br \/>\n    *   <code>\/var\/run\/docker.sock:\/var\/run\/docker.sock:ro<\/code>: Traefik&#8217;in Docker API&#8217;sine salt okunur eri\u015fim sa\u011flamas\u0131 i\u00e7in gereklidir. Bu sayede Traefik, yeni konteynerleri ve onlar\u0131n etiketlerini alg\u0131layabilir.<br \/>\n    *   <code>.\/traefik.yml:\/etc\/traefik\/traefik.yml:ro<\/code>: Traefik&#8217;in ana yap\u0131land\u0131rma dosyas\u0131n\u0131 belirtiriz.<br \/>\n    *   <code>.\/acme.json:\/etc\/traefik\/acme.json<\/code>: Let&#8217;s Encrypt taraf\u0131ndan al\u0131nan SSL sertifikalar\u0131n\u0131n sakland\u0131\u011f\u0131 dosyad\u0131r. Bu dosyan\u0131n izinleri \u00f6nemlidir (<code>chmod 600 acme.json<\/code>).<br \/>\n*   <code>networks<\/code>: Traefik&#8217;in di\u011fer uygulamalar\u0131n konteynerleriyle ileti\u015fim kurabilmesi i\u00e7in <code>web<\/code> ad\u0131nda bir Docker a\u011f\u0131 tan\u0131mlar\u0131z. Bu a\u011f, di\u011fer uygulamalar\u0131n da ba\u011flanaca\u011f\u0131 bir k\u00f6pr\u00fc g\u00f6revi g\u00f6recektir. <code>external: true<\/code> olarak i\u015faretlenmesi, bu a\u011f\u0131n Docker Compose taraf\u0131ndan de\u011fil, manuel olarak veya ba\u015fka bir <code>docker-compose.yml<\/code> taraf\u0131ndan olu\u015fturulaca\u011f\u0131 anlam\u0131na gelir.<br \/>\n*   <code>labels<\/code>: Traefik&#8217;in kendisini yap\u0131land\u0131rmas\u0131 i\u00e7in kullan\u0131lan etiketlerdir. Burada Traefik Dashboard&#8217;u i\u00e7in bir router tan\u0131mlan\u0131r, Let&#8217;s Encrypt ile SSL sa\u011flan\u0131r ve basic authentication (temel kimlik do\u011frulama) ile korunur. <code>traefikuser:$$apr1$$D9f2\/q.S$$QxR8C0o\/y1.W4uE0m.B2Y\/<\/code> k\u0131sm\u0131n\u0131 kendi kullan\u0131c\u0131 ad\u0131n\u0131z ve \u015fifrenizle de\u011fi\u015ftirmelisiniz. \u015eifrenizi olu\u015fturmak i\u00e7in <code>htpasswd -nb traefikuser YOUR_PASSWORD<\/code> komutunu kullanabilirsiniz. (\u00d6nce <code>sudo apt install apache2-utils<\/code> ile <code>htpasswd<\/code> arac\u0131n\u0131 kurman\u0131z gerekebilir). Ayr\u0131ca HTTP&#8217;den HTTPS&#8217;e y\u00f6nlendirme i\u00e7in bir <code>redirect-to-https<\/code> middleware&#8217;\u0131 ve <code>http-catchall<\/code> router&#8217;\u0131 tan\u0131mlanm\u0131\u015ft\u0131r.<\/p>\n<h4><code>traefik.yml<\/code> Ana Yap\u0131land\u0131rma Dosyas\u0131<\/h4>\n<p><code>docker-compose.yml<\/code> dosyas\u0131nda referans g\u00f6sterdi\u011fimiz <code>traefik.yml<\/code> dosyas\u0131n\u0131 olu\u015ftural\u0131m:<\/p>\n<pre><code class=\"language-bash\">nano traefik.yml<\/code><\/pre>\n<p>Dosyan\u0131n i\u00e7eri\u011fi a\u015fa\u011f\u0131daki gibi olmal\u0131d\u0131r:<\/p>\n<pre><code class=\"language-yaml\">api:\n  dashboard: true\n  insecure: false # Dashboard'a g\u00fcvenli eri\u015fim i\u00e7in false olarak ayarlay\u0131n\n\nentrypoints:\n  web:\n    address: \":80\"\n    http:\n      redirections:\n        entryPoint:\n          to: websecure\n          scheme: https\n          permanent: true\n  websecure:\n    address: \":443\"\n\nproviders:\n  docker:\n    endpoint: \"unix:\/\/\/var\/run\/docker.sock\"\n    exposedByDefault: false # Varsay\u0131lan olarak hi\u00e7bir konteyner Traefik taraf\u0131ndan g\u00f6sterilmeyecektir\n    network: web # Traefik'in dinleyece\u011fi Docker a\u011f\u0131\n    swarmMode: false # Swarm modu kullanm\u0131yorsan\u0131z false b\u0131rak\u0131n\n\ncertificatesResolvers:\n  myresolver:\n    acme:\n      email: your-email@example.com # Let's Encrypt bildirimleri i\u00e7in kendi e-posta adresinizi kullan\u0131n\n      storage: acme.json\n      # HTTP Challenge kullanmak istemiyorsan\u0131z, DNS Challenge kullanabilirsiniz\n      httpChallenge:\n        entryPoint: web\n      # DNS Challenge \u00f6rne\u011fi (Cloudflare i\u00e7in)\n      # dnsChallenge:\n      #   provider: cloudflare\n      #   resolvers:\n      #     - \"1.1.1.1:53\"\n      #     - \"8.8.8.8:53\"\n      #   delayBeforeCheck: 0 # Genellikle gerekli de\u011fildir, ancak baz\u0131 DNS sa\u011flay\u0131c\u0131lar\u0131 i\u00e7in gecikme gerekebilir<\/code><\/pre>\n<p><strong>A\u00e7\u0131klamalar:<\/strong><\/p>\n<p>*   <code>api.dashboard: true<\/code>: Traefik Dashboard&#8217;u etkinle\u015ftirir.<br \/>\n*   <code>entrypoints<\/code>: Traefik&#8217;in dinleyece\u011fi portlar\u0131 ve protokolleri tan\u0131mlar. <code>web<\/code> (HTTP) ve <code>websecure<\/code> (HTTPS) olmak \u00fczere iki giri\u015f noktas\u0131 vard\u0131r. <code>web<\/code> giri\u015f noktas\u0131, t\u00fcm HTTP isteklerini otomatik olarak HTTPS&#8217;e y\u00f6nlendirecek \u015fekilde yap\u0131land\u0131r\u0131lm\u0131\u015ft\u0131r.<br \/>\n*   <code>providers.docker<\/code>: Traefik&#8217;in Docker ile nas\u0131l entegre olaca\u011f\u0131n\u0131 belirtir.<br \/>\n    *   <code>endpoint: \"unix:\/\/\/var\/run\/docker.sock\"<\/code>: Docker soketinin yolunu g\u00f6sterir.<br \/>\n    *   <code>exposedByDefault: false<\/code>: Bu \u00f6nemli bir g\u00fcvenlik ayar\u0131d\u0131r. Varsay\u0131lan olarak hi\u00e7bir Docker konteyneri Traefik taraf\u0131ndan g\u00f6sterilmeyecektir. Yaln\u0131zca <code>traefik.enable=true<\/code> etiketi olan konteynerler i\u015flenecektir.<br \/>\n    *   <code>network: web<\/code>: Traefik&#8217;in uygulama konteynerlerini bulmak i\u00e7in kullanaca\u011f\u0131 Docker a\u011f\u0131n\u0131 belirtir.<br \/>\n*   <code>certificatesResolvers.myresolver.acme<\/code>: Let&#8217;s Encrypt ile SSL sertifikas\u0131 y\u00f6netimini yap\u0131land\u0131r\u0131r.<br \/>\n    *   <code>email: your-email@example.com<\/code>: Let&#8217;s Encrypt&#8217;ten gelen bildirimler i\u00e7in kullan\u0131lacak e-posta adresiniz.<br \/>\n    *   <code>storage: acme.json<\/code>: Sertifikalar\u0131n saklanaca\u011f\u0131 dosya.<br \/>\n    *   <code>httpChallenge.entryPoint: web<\/code>: Let&#8217;s Encrypt&#8217;in HTTP do\u011frulama y\u00f6ntemini kullan\u0131r. Bu, 80 numaral\u0131 portun d\u0131\u015far\u0131dan eri\u015filebilir olmas\u0131n\u0131 gerektirir.<br \/>\n    *   <code>dnsChallenge<\/code>: Wildcard sertifikalar veya 80 numaral\u0131 portun kapal\u0131 oldu\u011fu durumlar i\u00e7in DNS do\u011frulama y\u00f6ntemini kullan\u0131r. \u00d6rne\u011fin Cloudflare gibi bir DNS sa\u011flay\u0131c\u0131s\u0131yla entegrasyon i\u00e7in API anahtarlar\u0131 gibi ek ortam de\u011fi\u015fkenleri gerektirir. (\u00d6rnek olarak yorum sat\u0131r\u0131na al\u0131nm\u0131\u015ft\u0131r).<\/p>\n<h4><code>acme.json<\/code> Dosyas\u0131 ve \u0130zinleri<\/h4>\n<p>Let&#8217;s Encrypt sertifikalar\u0131n\u0131n saklanaca\u011f\u0131 <code>acme.json<\/code> dosyas\u0131n\u0131 olu\u015ftural\u0131m ve do\u011fru izinleri verelim. Bu dosya, Traefik taraf\u0131ndan yaz\u0131labilir olmal\u0131 ancak di\u011fer kullan\u0131c\u0131lar taraf\u0131ndan okunamaz olmal\u0131d\u0131r.<\/p>\n<pre><code class=\"language-bash\">touch acme.json\nchmod 600 acme.json<\/code><\/pre>\n<h4>Docker A\u011f\u0131 Olu\u015fturma<\/h4>\n<p><code>docker-compose.yml<\/code> dosyas\u0131nda <code>external: true<\/code> olarak tan\u0131mlad\u0131\u011f\u0131m\u0131z <code>web<\/code> a\u011f\u0131n\u0131 manuel olarak olu\u015ftural\u0131m:<\/p>\n<pre><code class=\"language-bash\">docker network create web<\/code><\/pre>\n<h4>Traefik&#8217;i Ba\u015flatma<\/h4>\n<p>T\u00fcm yap\u0131land\u0131rma dosyalar\u0131 haz\u0131r oldu\u011funa g\u00f6re, Traefik&#8217;i Docker Compose ile ba\u015flatabiliriz:<\/p>\n<pre><code class=\"language-bash\">docker-compose up -d<\/code><\/pre>\n<p><code>up -d<\/code> komutu, konteyneri arka planda (detached mode) ba\u015flat\u0131r.<\/p>\n<p>Traefik&#8217;in \u00e7al\u0131\u015ft\u0131\u011f\u0131n\u0131 do\u011frulamak i\u00e7in:<\/p>\n<pre><code class=\"language-bash\">docker-compose ps<\/code><\/pre>\n<p>Veya loglar\u0131n\u0131 kontrol etmek i\u00e7in:<\/p>\n<pre><code class=\"language-bash\">docker-compose logs traefik<\/code><\/pre>\n<p>E\u011fer her \u015fey yolundaysa, Traefik Dashboard&#8217;unu <code>https:\/\/traefik.example.com<\/code> (kendi alan ad\u0131n\u0131zla) adresinden, belirledi\u011finiz kullan\u0131c\u0131 ad\u0131 ve \u015fifre ile eri\u015febilirsiniz. \u0130lk ba\u015fta Let&#8217;s Encrypt sertifikas\u0131n\u0131n al\u0131nmas\u0131 biraz zaman alabilir.<\/p>\n<h3>\u00d6rnek Uygulama ile Traefik&#8217;i Test Etme<\/h3>\n<p>Traefik&#8217;i ba\u015far\u0131yla kurduktan sonra, \u015fimdi basit bir web uygulamas\u0131 (\u00f6rne\u011fin Whoami) konteynerini Traefik \u00fczerinden eri\u015filebilir hale getirerek \u00e7al\u0131\u015fmas\u0131n\u0131 test edelim. Bu, Traefik&#8217;in dinamik yap\u0131land\u0131rma yeteneklerini ve Let&#8217;s Encrypt entegrasyonunu anlamak i\u00e7in harika bir yoldur.<\/p>\n<p>Traefik dizininden \u00e7\u0131kal\u0131m ve yeni bir uygulama i\u00e7in bir dizin olu\u015ftural\u0131m:<\/p>\n<pre><code class=\"language-bash\">cd ..\nmkdir my-app && cd my-app<\/code><\/pre>\n<p>\u015eimdi <code>docker-compose.yml<\/code> dosyas\u0131n\u0131 olu\u015ftural\u0131m:<\/p>\n<pre><code class=\"language-bash\">nano docker-compose.yml<\/code><\/pre>\n<p>Dosyan\u0131n i\u00e7eri\u011fi a\u015fa\u011f\u0131daki gibi olmal\u0131d\u0131r:<\/p>\n<pre><code class=\"language-yaml\">version: '3.8'\n\nservices:\n  whoami:\n    image: traefik\/whoami # Basit bir web sunucusu uygulamas\u0131\n    container_name: whoami\n    restart: unless-stopped\n    networks:\n      - web # Traefik'in ba\u011fl\u0131 oldu\u011fu a\u011fa ba\u011flan\u0131n\n    labels:\n      - \"traefik.enable=true\" # Bu konteynerin Traefik taraf\u0131ndan i\u015flenmesini sa\u011flar\n      - \"traefik.http.routers.whoami.rule=Host(<code>whoami.example.com<\/code>)\" # Uygulaman\u0131n alan ad\u0131\n      - \"traefik.http.routers.whoami.entrypoints=websecure\" # HTTPS \u00fczerinden eri\u015fim\n      - \"traefik.http.routers.whoami.tls.certresolver=myresolver\" # Let's Encrypt sertifika \u00e7\u00f6z\u00fcmleyici\n      - \"traefik.http.services.whoami.loadbalancer.server.port=80\" # Uygulaman\u0131n dinledi\u011fi port\n      # HTTP'den HTTPS'e y\u00f6nlendirme middleware'\u0131n\u0131 kullanmak i\u00e7in:\n      # - \"traefik.http.routers.whoami-http.rule=Host(<code>whoami.example.com<\/code>)\"\n      # - \"traefik.http.routers.whoami-http.entrypoints=web\"\n      # - \"traefik.http.routers.whoami-http.middlewares=redirect-to-https\"\n      # redirect-to-https middleware'\u0131 traefik'in kendi docker-compose.yml dosyas\u0131nda tan\u0131ml\u0131 oldu\u011fu i\u00e7in,\n      # bu etiketler traefik'in otomatik y\u00f6nlendirme mekanizmas\u0131yla \u00e7ak\u0131\u015fabilir.\n      # Traefik'in ana yap\u0131land\u0131rmas\u0131ndaki otomatik y\u00f6nlendirme, \u00e7o\u011fu durumda yeterlidir.\n\nnetworks:\n  web:\n    external: true # Traefik'in kulland\u0131\u011f\u0131 harici a\u011f\u0131 kullan\u0131n<\/code><\/pre>\n<p><strong>A\u00e7\u0131klamalar:<\/strong><\/p>\n<p>*   <code>image: traefik\/whoami<\/code>: Traefik&#8217;in sa\u011flad\u0131\u011f\u0131 basit bir &#8220;whoami&#8221; uygulamas\u0131n\u0131 kullan\u0131r\u0131z. Bu uygulama, iste\u011fi g\u00f6nderen istemcinin IP adresi ve HTTP ba\u015fl\u0131klar\u0131 gibi bilgileri g\u00f6sterir.<br \/>\n*   <code>networks: - web<\/code>: Uygulama konteynerini, Traefik&#8217;in de ba\u011fl\u0131 oldu\u011fu <code>web<\/code> a\u011f\u0131na ba\u011flar\u0131z. Bu, Traefik&#8217;in bu konteyneri ke\u015ffetmesini sa\u011flar.<br \/>\n*   <code>labels<\/code>: Bu etiketler, Traefik&#8217;e bu konteyner hakk\u0131nda bilgi verir:<br \/>\n    *   <code>traefik.enable=true<\/code>: Traefik&#8217;in bu servisi izlemesini sa\u011flar. <code>exposedByDefault: false<\/code> ayar\u0131n\u0131 yapt\u0131\u011f\u0131m\u0131z i\u00e7in bu etiket zorunludur.<br \/>\n    *   <code>traefik.http.routers.whoami.rule=Host(<\/code>whoami.example.com<code>)<\/code>: Bu router&#8217;\u0131n hangi alan ad\u0131na gelen istekleri yakalayaca\u011f\u0131n\u0131 belirtir. <code>whoami.example.com<\/code> yerine kendi alt alan ad\u0131n\u0131z\u0131 kullanmal\u0131s\u0131n\u0131z.<br \/>\n    *   <code>traefik.http.routers.whoami.entrypoints=websecure<\/code>: Bu router&#8217;\u0131n <code>websecure<\/code> (HTTPS) giri\u015f noktas\u0131n\u0131 kullanmas\u0131n\u0131 sa\u011flar.<br \/>\n    *   <code>traefik.http.routers.whoami.tls.certresolver=myresolver<\/code>: Bu router i\u00e7in SSL sertifikas\u0131n\u0131 <code>myresolver<\/code> adl\u0131 Let&#8217;s Encrypt \u00e7\u00f6z\u00fcmleyicisi arac\u0131l\u0131\u011f\u0131yla almas\u0131n\u0131 sa\u011flar.<br \/>\n    *   <code>traefik.http.services.whoami.loadbalancer.server.port=80<\/code>: <code>whoami<\/code> konteynerinin dahili olarak 80 numaral\u0131 portta \u00e7al\u0131\u015ft\u0131\u011f\u0131n\u0131 Traefik&#8217;e bildirir.<\/p>\n<h4>DNS Ayarlar\u0131n\u0131 G\u00fcncelleme<\/h4>\n<p><code>whoami.example.com<\/code> (veya sizin se\u00e7ti\u011finiz alt alan ad\u0131) i\u00e7in alan ad\u0131 sa\u011flay\u0131c\u0131n\u0131z\u0131n kontrol panelinden sunucunuzun IP adresine i\u015faret eden bir A kayd\u0131 olu\u015fturdu\u011funuzdan emin olun.<\/p>\n<h4>Uygulamay\u0131 Ba\u015flatma<\/h4>\n<p><code>docker-compose.yml<\/code> dosyas\u0131n\u0131 kaydettikten sonra, uygulamay\u0131 ba\u015flat\u0131n:<\/p>\n<pre><code class=\"language-bash\">docker-compose up -d<\/code><\/pre>\n<p>Birka\u00e7 dakika bekledikten sonra (Let&#8217;s Encrypt sertifikas\u0131n\u0131n al\u0131nmas\u0131 ve DNS yay\u0131l\u0131m\u0131 i\u00e7in), web taray\u0131c\u0131n\u0131zdan <code>https:\/\/whoami.example.com<\/code> adresine gidin. Uygulaman\u0131n ba\u015far\u0131yla \u00e7al\u0131\u015ft\u0131\u011f\u0131n\u0131 ve HTTPS \u00fczerinden eri\u015filebilir oldu\u011funu g\u00f6rmelisiniz. Ayr\u0131ca, Traefik Dashboard&#8217;undan da <code>whoami<\/code> servisini ve router&#8217;\u0131n\u0131 kontrol edebilirsiniz.<\/p>\n<p>Bu \u00f6rnek, Traefik&#8217;in Docker etiketleri arac\u0131l\u0131\u011f\u0131yla nas\u0131l dinamik olarak yap\u0131land\u0131r\u0131labilece\u011fini ve otomatik SSL sertifikas\u0131 y\u00f6netimini nas\u0131l sa\u011flad\u0131\u011f\u0131n\u0131 a\u00e7\u0131k\u00e7a g\u00f6stermektedir. Yeni bir uygulama eklemek veya mevcut bir uygulamay\u0131 g\u00fcncellemek i\u00e7in tek yapman\u0131z gereken, <code>docker-compose.yml<\/code> dosyas\u0131ndaki etiketleri d\u00fczenlemek ve konteyneri yeniden ba\u015flatmakt\u0131r; Traefik geri kalan\u0131n\u0131 halleder.<\/p>\n<h3>Geli\u015fmi\u015f Traefik Yap\u0131land\u0131rmalar\u0131<\/h3>\n<p>Traefik&#8217;in g\u00fcc\u00fc sadece temel ters proxy i\u015flevselli\u011fiyle s\u0131n\u0131rl\u0131 de\u011fildir. Geli\u015fmi\u015f yap\u0131land\u0131rmalar sayesinde daha karma\u015f\u0131k senaryolar\u0131 y\u00f6netebilir, g\u00fcvenli\u011fi art\u0131rabilir ve trafik ak\u0131\u015f\u0131n\u0131 optimize edebilirsiniz.<\/p>\n<h4>HTTP&#8217;den HTTPS&#8217;e Y\u00f6nlendirme (HTTP to HTTPS Redirection)<\/h4>\n<p>G\u00fcvenlik nedeniyle t\u00fcm trafi\u011fin HTTPS \u00fczerinden ge\u00e7mesi istenir. Traefik, bu y\u00f6nlendirmeyi otomatik olarak yapacak middleware&#8217;lar ve router&#8217;lar tan\u0131mlaman\u0131za olanak tan\u0131r. \u00d6nceki <code>traefik.yml<\/code> dosyas\u0131nda <code>web<\/code> giri\u015f noktas\u0131 i\u00e7in zaten bir y\u00f6nlendirme tan\u0131mlam\u0131\u015ft\u0131k:<\/p>\n<pre><code class=\"language-yaml\">entrypoints:\n  web:\n    address: \":80\"\n    http:\n      redirections:\n        entryPoint:\n          to: websecure\n          scheme: https\n          permanent: true<\/code><\/pre>\n<p>Bu yap\u0131land\u0131rma, <code>web<\/code> (80 portu) \u00fczerinden gelen t\u00fcm istekleri <code>websecure<\/code> (443 portu) giri\u015f noktas\u0131na ve HTTPS \u015femas\u0131na kal\u0131c\u0131 olarak y\u00f6nlendirir. Bu sayede, her uygulaman\u0131n <code>docker-compose.yml<\/code> dosyas\u0131nda ayr\u0131 ayr\u0131 y\u00f6nlendirme etiketleri tan\u0131mlaman\u0131za gerek kalmaz.<\/p>\n<h4>Birden Fazla Uygulama ve Alt Alan Adlar\u0131<\/h4>\n<p>Traefik, ayn\u0131 sunucu \u00fczerinde birden fazla Docker uygulamas\u0131n\u0131 farkl\u0131 alt alan adlar\u0131 \u00fczerinden y\u00f6netmek i\u00e7in idealdir. Her uygulama i\u00e7in ayr\u0131 bir <code>docker-compose.yml<\/code> dosyas\u0131 olu\u015fturup, bunlar\u0131 ayn\u0131 <code>web<\/code> a\u011f\u0131na ba\u011flayarak ve farkl\u0131 <code>Host<\/code> kurallar\u0131 tan\u0131mlayarak bunu yapabilirsiniz.<\/p>\n<p>\u00d6rne\u011fin, <code>my-app<\/code> dizininden \u00e7\u0131k\u0131p <code>another-app<\/code> ad\u0131nda yeni bir uygulama i\u00e7in dizin olu\u015ftural\u0131m:<\/p>\n<pre><code class=\"language-bash\">cd ..\nmkdir another-app && cd another-app\nnano docker-compose.yml<\/code><\/pre>\n<pre><code class=\"language-yaml\">version: '3.8'\n\nservices:\n  nginx:\n    image: nginx:latest\n    container_name: another-app-nginx\n    restart: unless-stopped\n    networks:\n      - web\n    labels:\n      - \"traefik.enable=true\"\n      - \"traefik.http.routers.another-app.rule=Host(<code>another.example.com<\/code>)\"\n      - \"traefik.http.routers.another-app.entrypoints=websecure\"\n      - \"traefik.http.routers.another-app.tls.certresolver=myresolver\"\n      - \"traefik.http.services.another-app.loadbalancer.server.port=80\"\n\nnetworks:\n  web:\n    external: true<\/code><\/pre>\n<p><code>another.example.com<\/code> i\u00e7in DNS kayd\u0131n\u0131z\u0131 g\u00fcncelledikten sonra, bu uygulamay\u0131 da <code>docker-compose up -d<\/code> ile ba\u015flatabilirsiniz. Traefik otomatik olarak bu yeni uygulamay\u0131 ke\u015ffedecek, <code>another.example.com<\/code> i\u00e7in bir Let&#8217;s Encrypt sertifikas\u0131 alacak ve trafi\u011fi Nginx konteynerine y\u00f6nlendirecektir.<\/p>\n<h4>G\u00fcvenlik<\/h4>\n<p>Traefik, \u00e7e\u015fitli g\u00fcvenlik \u00f6zelliklerini middleware&#8217;lar arac\u0131l\u0131\u011f\u0131yla uygulaman\u0131za entegre etmenizi sa\u011flar.<\/p>\n<h5>Traefik Dashboard \u0130\u00e7in Temel Kimlik Do\u011frulama (BasicAuth)<\/h5>\n<p>Yukar\u0131daki <code>docker-compose.yml<\/code> dosyas\u0131nda Traefik Dashboard i\u00e7in zaten <code>basicauth<\/code> middleware&#8217;\u0131n\u0131 kullanm\u0131\u015ft\u0131k. Bu, hassas bilgilerin bulundu\u011fu paneli yetkisiz eri\u015fime kar\u015f\u0131 korur.<\/p>\n<pre><code class=\"language-yaml\">- \"traefik.http.middlewares.traefik-auth.basicauth.users=traefikuser:$$apr1$$D9f2\/q.S$$QxR8C0o\/y1.W4uE0m.B2Y\/\"<\/code><\/pre>\n<h5>Rate Limiting (Oran S\u0131n\u0131rlama)<\/h5>\n<p>Uygulamalar\u0131n\u0131z\u0131 DDoS sald\u0131r\u0131lar\u0131ndan veya k\u00f6t\u00fcye kullan\u0131mdan korumak i\u00e7in oran s\u0131n\u0131rlama uygulayabilirsiniz.<\/p>\n<pre><code class=\"language-yaml\"># Uygulaman\u0131z\u0131n docker-compose.yml dosyas\u0131nda\nservices:\n  my-app:\n    # ...\n    labels:\n      # ...\n      - \"traefik.http.routers.my-app.middlewares=rate-limit\"\n      - \"traefik.http.middlewares.rate-limit.ratelimit.average=100\" # Saniyede ortalama 100 istek\n      - \"traefik.http.middlewares.rate-limit.ratelimit.burst=50\" # Maksimum 50 iste\u011fe kadar patlama<\/code><\/pre>\n<p>Bu etiketleri <code>my-app<\/code> servisine ekleyip yeniden ba\u015flatt\u0131\u011f\u0131n\u0131zda, bu uygulama i\u00e7in oran s\u0131n\u0131rlamas\u0131 aktif olacakt\u0131r.<\/p>\n<h5>IP Beyaz Listesi\/Kara Listesi<\/h5>\n<p>Belirli IP adreslerinden gelen eri\u015fimi k\u0131s\u0131tlayabilirsiniz.<\/p>\n<pre><code class=\"language-yaml\"># Uygulaman\u0131z\u0131n docker-compose.yml dosyas\u0131nda\nservices:\n  my-app:\n    # ...\n    labels:\n      # ...\n      - \"traefik.http.routers.my-app.middlewares=ip-whitelist\"\n      - \"traefik.http.middlewares.ip-whitelist.ipwhitelist.sourcerange=192.168.1.0\/24,10.0.0.1\" # \u0130zin verilen IP'ler<\/code><\/pre>\n<h5>Header Ekleme\/\u00c7\u0131karma<\/h5>\n<p>G\u00fcvenlik ba\u015fl\u0131klar\u0131 ekleyerek veya gereksiz ba\u015fl\u0131klar\u0131 kald\u0131rarak uygulaman\u0131z\u0131n g\u00fcvenli\u011fini art\u0131rabilirsiniz.<\/p>\n<pre><code class=\"language-yaml\"># Uygulaman\u0131z\u0131n docker-compose.yml dosyas\u0131nda\nservices:\n  my-app:\n    # ...\n    labels:\n      # ...\n      - \"traefik.http.routers.my-app.middlewares=secure-headers\"\n      - \"traefik.http.middlewares.secure-headers.headers.framedeny=true\"\n      - \"traefik.http.middlewares.secure-headers.headers.contentsecuritypolicy=frame-ancestors 'self'\"\n      - \"traefik.http.middlewares.secure-headers.headers.sslredirect=true\"\n      - \"traefik.http.middlewares.secure-headers.headers.stsseconds=31536000\"\n      - \"traefik.http.middlewares.secure-headers.headers.stspreload=true\"\n      - \"traefik.http.middlewares.secure-headers.headers.stsincludessubdomains=true\"\n      - \"traefik.http.middlewares.secure-headers.headers.contenttypeNosniff=true\"\n      - \"traefik.http.middlewares.secure-headers.headers.browserxssfilter=true\"<\/code><\/pre>\n<p>Bu middleware&#8217;lar, <code>docker-compose.yml<\/code> dosyalar\u0131ndaki <code>labels<\/code> arac\u0131l\u0131\u011f\u0131yla tan\u0131mlan\u0131r ve router&#8217;lara atan\u0131r.<\/p>\n<h4>Let&#8217;s Encrypt DNS Challenge (DNS Sorgulama ile Sertifika Alma)<\/h4>\n<p>HTTP challenge, 80 numaral\u0131 portun a\u00e7\u0131k olmas\u0131n\u0131 ve alan ad\u0131n\u0131n do\u011frudan sunucuya i\u015faret etmesini gerektirir. E\u011fer wildcard sertifikalar (<code>*.example.com<\/code>) almak istiyorsan\u0131z veya 80 numaral\u0131 portu a\u00e7am\u0131yorsan\u0131z, DNS challenge y\u00f6ntemini kullanman\u0131z gerekir. Bu y\u00f6ntem, Let&#8217;s Encrypt&#8217;in alan ad\u0131 sa\u011flay\u0131c\u0131n\u0131z\u0131n DNS kay\u0131tlar\u0131n\u0131 do\u011frulamas\u0131n\u0131 sa\u011flar.<\/p>\n<p>DNS challenge kullanmak i\u00e7in <code>traefik.yml<\/code> dosyan\u0131z\u0131 g\u00fcncellemeniz gerekir. \u00d6rne\u011fin Cloudflare i\u00e7in:<\/p>\n<pre><code class=\"language-yaml\">certificatesResolvers:\n  myresolver:\n    acme:\n      email: your-email@example.com\n      storage: acme.json\n      dnsChallenge:\n        provider: cloudflare # Kulland\u0131\u011f\u0131n\u0131z DNS sa\u011flay\u0131c\u0131s\u0131\n        resolvers:\n          - \"1.1.1.1:53\"\n          - \"8.8.8.8:53\"\n        # delayBeforeCheck: 0 # Gerekirse gecikme ekleyebilirsiniz<\/code><\/pre>\n<p>Ayr\u0131ca, Traefik konteynerine DNS sa\u011flay\u0131c\u0131n\u0131z\u0131n API kimlik bilgilerini ortam de\u011fi\u015fkenleri olarak sa\u011flaman\u0131z gerekir. \u00d6rne\u011fin Cloudflare i\u00e7in:<\/p>\n<pre><code class=\"language-yaml\"># traefik'in docker-compose.yml dosyas\u0131nda\nservices:\n  traefik:\n    # ...\n    environment:\n      - CF_API_EMAIL=your-cloudflare-email@example.com\n      - CF_API_KEY=your-cloudflare-api-key # G\u00fcvenlik i\u00e7in bu anahtar\u0131 bir s\u0131r olarak saklaman\u0131z \u00f6nerilir\n    # ...<\/code><\/pre>\n<p>Bu anahtarlar, DNS sa\u011flay\u0131c\u0131n\u0131z\u0131n kontrol panelinden al\u0131nmal\u0131d\u0131r. G\u00fcvenlik a\u00e7\u0131s\u0131ndan, bu t\u00fcr hassas bilgileri do\u011frudan <code>docker-compose.yml<\/code> dosyas\u0131na yazmak yerine Docker Secrets veya ortam de\u011fi\u015fkenleri arac\u0131l\u0131\u011f\u0131yla y\u00f6netmek daha g\u00fcvenlidir. Bu de\u011fi\u015fikliklerden sonra Traefik konteynerini yeniden ba\u015flatmay\u0131 unutmay\u0131n (<code>docker-compose up -d<\/code>).<\/p>\n<h3>S\u0131k Kar\u015f\u0131la\u015f\u0131lan Sorunlar ve \u00c7\u00f6z\u00fcmleri<\/h3>\n<p>Traefik kurulumu ve yap\u0131land\u0131rmas\u0131 s\u0131ras\u0131nda baz\u0131 yayg\u0131n sorunlarla kar\u015f\u0131la\u015f\u0131labilir. \u0130\u015fte bunlardan baz\u0131lar\u0131 ve olas\u0131 \u00e7\u00f6z\u00fcmleri:<\/p>\n<h4>DNS \u00c7\u00f6z\u00fcmleme Sorunlar\u0131<\/h4>\n<p>*   <strong>Belirti:<\/strong> Uygulaman\u0131za alan ad\u0131n\u0131z \u00fczerinden eri\u015femiyorsunuz.<br \/>\n*   <strong>\u00c7\u00f6z\u00fcm:<\/strong> Alan ad\u0131 sa\u011flay\u0131c\u0131n\u0131z\u0131n kontrol panelinden A kayd\u0131n\u0131n veya CNAME kayd\u0131n\u0131n do\u011fru IP adresine i\u015faret etti\u011finden emin olun. DNS yay\u0131l\u0131m\u0131 biraz zaman alabilir (birka\u00e7 dakika ila birka\u00e7 saat). <code>dig yourdomain.com<\/code> veya <code>nslookup yourdomain.com<\/code> komutlar\u0131yla DNS kay\u0131tlar\u0131n\u0131 kontrol edebilirsiniz.<\/p>\n<h4>Port \u00c7ak\u0131\u015fmalar\u0131<\/h4>\n<p>*   <strong>Belirti:<\/strong> Traefik konteyneri ba\u015flat\u0131lam\u0131yor veya 80\/443 portlar\u0131 zaten kullan\u0131mda hatas\u0131 veriyor.<br \/>\n*   <strong>\u00c7\u00f6z\u00fcm:<\/strong> Ba\u015fka bir uygulaman\u0131n (\u00f6rne\u011fin Nginx, Apache) 80 veya 443 portlar\u0131n\u0131 kullan\u0131p kullanmad\u0131\u011f\u0131n\u0131 kontrol edin: <code>sudo lsof -i :80<\/code> veya <code>sudo lsof -i :443<\/code>. \u00c7ak\u0131\u015fan servisi durdurun veya kald\u0131r\u0131n.<\/p>\n<h4>Let&#8217;s Encrypt Sertifika Hatalar\u0131<\/h4>\n<p>*   <strong>Belirti:<\/strong> Uygulaman\u0131za HTTPS \u00fczerinden eri\u015filemiyor, taray\u0131c\u0131 sertifika hatas\u0131 veriyor veya Traefik loglar\u0131nda ACME (Let&#8217;s Encrypt) ile ilgili hatalar g\u00f6r\u00fcn\u00fcyor.<br \/>\n*   <strong>\u00c7\u00f6z\u00fcm:<\/strong><br \/>\n    *   <strong>E-posta Adresi:<\/strong> <code>traefik.yml<\/code> dosyas\u0131ndaki <code>email<\/code> adresinin do\u011fru ve ge\u00e7erli oldu\u011fundan emin olun.<br \/>\n    *   <strong>DNS Kayd\u0131:<\/strong> Alan ad\u0131n\u0131z\u0131n do\u011fru IP adresine i\u015faret etti\u011finden emin olun. Let&#8217;s Encrypt, alan ad\u0131n\u0131n sunucunuza \u00e7\u00f6z\u00fcmlenmesini gerektirir.<br \/>\n    *   <strong>Port 80 Eri\u015fimi:<\/strong> HTTP challenge kullan\u0131yorsan\u0131z, 80 numaral\u0131 portun d\u0131\u015far\u0131dan eri\u015filebilir oldu\u011fundan emin olun (g\u00fcvenlik duvar\u0131 ayarlar\u0131).<br \/>\n    *   <strong>Rate Limits:<\/strong> \u00c7ok fazla sertifika denemesi yapt\u0131ysan\u0131z Let&#8217;s Encrypt&#8217;in oran s\u0131n\u0131rlamalar\u0131na tak\u0131lm\u0131\u015f olabilirsiniz. Bir s\u00fcre bekleyin ve tekrar deneyin.<br \/>\n    *   <strong><code>acme.json<\/code> \u0130zinleri:<\/strong> <code>acme.json<\/code> dosyas\u0131n\u0131n izinlerinin <code>600<\/code> oldu\u011fundan emin olun: <code>chmod 600 acme.json<\/code>.<br \/>\n    *   <strong>Traefik Loglar\u0131:<\/strong> <code>docker-compose logs traefik<\/code> komutunu kullanarak Traefik loglar\u0131n\u0131 detayl\u0131ca inceleyin. Hata mesajlar\u0131 genellikle sorunun kayna\u011f\u0131n\u0131 g\u00f6sterir.<\/p>\n<h4>Traefik Dashboard Eri\u015fim Sorunlar\u0131<\/h4>\n<p>*   <strong>Belirti:<\/strong> Dashboard&#8217;a eri\u015filemiyor veya kimlik do\u011frulama ba\u015far\u0131s\u0131z oluyor.<br \/>\n*   <strong>\u00c7\u00f6z\u00fcm:<\/strong><br \/>\n    *   <strong>Alan Ad\u0131:<\/strong> <code>traefik.example.com<\/code> i\u00e7in DNS kayd\u0131n\u0131n do\u011fru oldu\u011fundan emin olun.<br \/>\n    *   <strong>BasicAuth \u015eifresi:<\/strong> <code>docker-compose.yml<\/code> dosyas\u0131ndaki <code>basicauth.users<\/code> etiketindeki kullan\u0131c\u0131 ad\u0131 ve \u015fifre hash&#8217;inin do\u011fru oldu\u011fundan emin olun. <code>htpasswd -nb user password<\/code> komutuyla do\u011fru hash&#8217;i olu\u015fturdu\u011funuzdan emin olun.<br \/>\n    *   <strong>Portlar:<\/strong> Traefik&#8217;in 443 portunu dinledi\u011finden emin olun.<\/p>\n<h4>Konteynerlerin Traefik A\u011f\u0131na Ba\u011fl\u0131 Olmamas\u0131<\/h4>\n<p>*   <strong>Belirti:<\/strong> Uygulama konteyneri \u00e7al\u0131\u015f\u0131yor ancak Traefik \u00fczerinden eri\u015filemiyor. Traefik Dashboard&#8217;da servisi g\u00f6remiyorsunuz.<br \/>\n*   <strong>\u00c7\u00f6z\u00fcm:<\/strong> Uygulama konteynerinin <code>docker-compose.yml<\/code> dosyas\u0131nda <code>networks: - web<\/code> sat\u0131r\u0131n\u0131n oldu\u011fundan ve <code>web<\/code> a\u011f\u0131n\u0131n <code>external: true<\/code> olarak do\u011fru tan\u0131mland\u0131\u011f\u0131ndan emin olun. Ayr\u0131ca, uygulama konteynerinin <code>traefik.enable=true<\/code> etiketine sahip oldu\u011fundan emin olun.<\/p>\n<h4>Traefik Loglar\u0131n\u0131 \u0130nceleme<\/h4>\n<p>Herhangi bir sorunla kar\u015f\u0131la\u015ft\u0131\u011f\u0131n\u0131zda ba\u015fvurman\u0131z gereken ilk yer Traefik&#8217;in loglar\u0131d\u0131r.<\/p>\n<pre><code class=\"language-bash\">docker-compose logs traefik<\/code><\/pre>\n<p>Bu komut, Traefik konteynerinin t\u00fcm \u00e7\u0131kt\u0131lar\u0131n\u0131 g\u00f6sterecektir. \u00d6zellikle <code>ERROR<\/code> veya <code>WARN<\/code> seviyesindeki mesajlara dikkat edin. Loglardaki detayl\u0131 bilgiler, sorunun nedenini anlaman\u0131za ve \u00e7\u00f6zmenize yard\u0131mc\u0131 olacakt\u0131r. <code>docker-compose logs -f traefik<\/code> komutuyla loglar\u0131 ger\u00e7ek zamanl\u0131 olarak takip edebilirsiniz.<\/p>\n<p>Bu sorun giderme ad\u0131mlar\u0131, Traefik ile \u00e7al\u0131\u015f\u0131rken kar\u015f\u0131la\u015fabilece\u011finiz \u00e7o\u011fu yayg\u0131n sorunu \u00e7\u00f6zmenize yard\u0131mc\u0131 olacakt\u0131r. Unutmay\u0131n, Traefik&#8217;in dinamik yap\u0131s\u0131 nedeniyle, bir yap\u0131land\u0131rma de\u011fi\u015fikli\u011fi yapt\u0131\u011f\u0131n\u0131zda veya bir konteyneri yeniden ba\u015flatt\u0131\u011f\u0131n\u0131zda Traefik&#8217;in bu de\u011fi\u015fiklikleri alg\u0131lamas\u0131 birka\u00e7 saniye s\u00fcrebilir.<\/p>\n<h3>Sonu\u00e7<\/h3>\n<p>Bu kapsaml\u0131 rehber boyunca, Traefik&#8217;i Ubuntu 18.04 \u00fczerinde Docker konteynerleri i\u00e7in g\u00fc\u00e7l\u00fc ve dinamik bir ters proxy olarak nas\u0131l kuraca\u011f\u0131n\u0131z\u0131 ve yap\u0131land\u0131raca\u011f\u0131n\u0131z\u0131 ad\u0131m ad\u0131m inceledik. Ters proxy kavram\u0131n\u0131n temel prensiplerinden ba\u015flayarak, Traefik&#8217;in dinamik yap\u0131land\u0131rma yeteneklerini, Let&#8217;s Encrypt ile otomatik SSL sertifikas\u0131 y\u00f6netimini ve Docker ekosistemiyle olan m\u00fckemmel entegrasyonunu ke\u015ffettik.<\/p>\n<p>Traefik, uygulama da\u011f\u0131t\u0131m s\u00fcre\u00e7lerini otomatize etme ve basitle\u015ftirme konusunda geli\u015ftiriciler ve sistem y\u00f6neticileri i\u00e7in paha bi\u00e7ilmez bir ara\u00e7t\u0131r. Docker etiketleri arac\u0131l\u0131\u011f\u0131yla yap\u0131lan yap\u0131land\u0131rma, yeni bir servis devreye al\u0131nd\u0131\u011f\u0131nda veya mevcut bir servis g\u00fcncellendi\u011finde manuel m\u00fcdahaleye olan ihtiyac\u0131 ortadan kald\u0131r\u0131r. Bu, \u00f6zellikle mikroservis mimarileri ve s\u00fcrekli entegrasyon\/s\u00fcrekli teslimat (CI\/CD) s\u00fcre\u00e7leri i\u00e7in b\u00fcy\u00fck bir avantaj sa\u011flar. Otomatik HTTP&#8217;den HTTPS&#8217;e y\u00f6nlendirme ve Let&#8217;s Encrypt entegrasyonu sayesinde, uygulamalar\u0131n\u0131z\u0131 g\u00fcvenli ve g\u00fcncel SSL sertifikalar\u0131yla yay\u0131nlamak hi\u00e7 bu kadar kolay olmam\u0131\u015ft\u0131.<\/p>\n<p>Geli\u015fmi\u015f yap\u0131land\u0131rma se\u00e7enekleri, oran s\u0131n\u0131rlamalar\u0131, IP beyaz\/kara listeleri ve \u00f6zel ba\u015fl\u0131k y\u00f6netimi gibi \u00f6zelliklerle Traefik, uygulamalar\u0131n\u0131z\u0131n g\u00fcvenli\u011fini ve performans\u0131n\u0131 art\u0131rmak i\u00e7in kapsaml\u0131 bir \u00e7\u00f6z\u00fcm sunar. Kar\u015f\u0131la\u015f\u0131labilecek yayg\u0131n sorunlara y\u00f6nelik \u00e7\u00f6z\u00fcm \u00f6nerileri ise, kurulum ve y\u00f6netim s\u00fcrecini daha sorunsuz hale getirmeye yard\u0131mc\u0131 olacakt\u0131r.<\/p>\n<p>Traefik&#8217;in bu esnek ve g\u00fc\u00e7l\u00fc yetenekleri, onu yaln\u0131zca Docker konteynerleri i\u00e7in de\u011fil, ayn\u0131 zamanda Kubernetes ve di\u011fer konteyner orkestrasyon platformlar\u0131 i\u00e7in de tercih edilen bir ters proxy \u00e7\u00f6z\u00fcm\u00fc haline getirmektedir. Bu rehber, Traefik ile modern web uygulamalar\u0131n\u0131z i\u00e7in sa\u011flam, g\u00fcvenli ve otomatik bir trafik y\u00f6netim altyap\u0131s\u0131 olu\u015fturman\u0131z i\u00e7in gerekli temel bilgileri ve pratik ad\u0131mlar\u0131 sa\u011flam\u0131\u015ft\u0131r. Gelecekte, Traefik&#8217;in sundu\u011fu daha bir\u00e7ok geli\u015fmi\u015f \u00f6zelli\u011fi ke\u015ffederek altyap\u0131n\u0131z\u0131 daha da optimize edebilirsiniz.<\/body><\/p>\n","protected":false},"excerpt":{"rendered":"Traefik&#8217;i Ubuntu 18.04 \u00dczerinde Docker Konteynerleri \u0130\u00e7in Ters Proxy Olarak Kullanma Rehberi\nBu makale, modern web uygulamalar\u0131n\u0131n da\u011f\u0131t\u0131m\u0131n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"csco_page_header_type":"","csco_page_load_nextpost":"","csco_page_subscribe_form":"","csco_page_contact_form":"","footnotes":""},"categories":[1468],"tags":[],"class_list":{"0":"post-36403","1":"post","2":"type-post","3":"status-publish","4":"format-standard","6":"category-ubuntu","7":"cs-entry","8":"cs-video-wrap"},"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v20.5 (Yoast SEO v25.3.1) - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>Traefik&#039;i Ubuntu 18.04 \u00dczerinde Docker Konteynerleri \u0130\u00e7in Ters Proxy Olarak Kullanma Rehberi - Kodlar\u0131n Gizemli D\u00fcnyas\u0131<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/fatihsoysal.com\/blog\/traefiki-ubuntu-18-04-uzerinde-docker-konteynerleri-icin-ters-proxy-olarak-kullanma-rehberi\/\" \/>\n<meta property=\"og:locale\" content=\"tr_TR\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Traefik&#039;i Ubuntu 18.04 \u00dczerinde Docker Konteynerleri \u0130\u00e7in Ters Proxy Olarak Kullanma Rehberi\" \/>\n<meta property=\"og:description\" content=\"Traefik&#039;i Ubuntu 18.04 \u00dczerinde Docker Konteynerleri \u0130\u00e7in Ters Proxy Olarak Kullanma Rehberi Bu makale, modern web uygulamalar\u0131n\u0131n da\u011f\u0131t\u0131m\u0131n\" \/>\n<meta property=\"og:url\" content=\"https:\/\/fatihsoysal.com\/blog\/traefiki-ubuntu-18-04-uzerinde-docker-konteynerleri-icin-ters-proxy-olarak-kullanma-rehberi\/\" \/>\n<meta property=\"og:site_name\" content=\"Kodlar\u0131n Gizemli D\u00fcnyas\u0131\" \/>\n<meta property=\"article:published_time\" content=\"2025-12-15T17:41:16+00:00\" \/>\n<meta name=\"author\" content=\"Fatih Soysal\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Yazan:\" \/>\n\t<meta name=\"twitter:data1\" content=\"Fatih Soysal\" \/>\n\t<meta name=\"twitter:label2\" content=\"Tahmini okuma s\u00fcresi\" \/>\n\t<meta name=\"twitter:data2\" content=\"26 dakika\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/traefiki-ubuntu-18-04-uzerinde-docker-konteynerleri-icin-ters-proxy-olarak-kullanma-rehberi\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/traefiki-ubuntu-18-04-uzerinde-docker-konteynerleri-icin-ters-proxy-olarak-kullanma-rehberi\/\"},\"author\":{\"name\":\"Fatih Soysal\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1\"},\"headline\":\"Traefik&#8217;i Ubuntu 18.04 \u00dczerinde Docker Konteynerleri \u0130\u00e7in Ters Proxy Olarak Kullanma Rehberi\",\"datePublished\":\"2025-12-15T17:41:16+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/traefiki-ubuntu-18-04-uzerinde-docker-konteynerleri-icin-ters-proxy-olarak-kullanma-rehberi\/\"},\"wordCount\":3845,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1\"},\"articleSection\":[\"Ubuntu\"],\"inLanguage\":\"tr\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/fatihsoysal.com\/blog\/traefiki-ubuntu-18-04-uzerinde-docker-konteynerleri-icin-ters-proxy-olarak-kullanma-rehberi\/#respond\"]}],\"copyrightYear\":\"2025\",\"copyrightHolder\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#organization\"}},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/traefiki-ubuntu-18-04-uzerinde-docker-konteynerleri-icin-ters-proxy-olarak-kullanma-rehberi\/\",\"url\":\"https:\/\/fatihsoysal.com\/blog\/traefiki-ubuntu-18-04-uzerinde-docker-konteynerleri-icin-ters-proxy-olarak-kullanma-rehberi\/\",\"name\":\"Traefik'i Ubuntu 18.04 \u00dczerinde Docker Konteynerleri \u0130\u00e7in Ters Proxy Olarak Kullanma Rehberi - Kodlar\u0131n Gizemli D\u00fcnyas\u0131\",\"isPartOf\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#website\"},\"datePublished\":\"2025-12-15T17:41:16+00:00\",\"breadcrumb\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/traefiki-ubuntu-18-04-uzerinde-docker-konteynerleri-icin-ters-proxy-olarak-kullanma-rehberi\/#breadcrumb\"},\"inLanguage\":\"tr\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/fatihsoysal.com\/blog\/traefiki-ubuntu-18-04-uzerinde-docker-konteynerleri-icin-ters-proxy-olarak-kullanma-rehberi\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/traefiki-ubuntu-18-04-uzerinde-docker-konteynerleri-icin-ters-proxy-olarak-kullanma-rehberi\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Anasayfa\",\"item\":\"https:\/\/fatihsoysal.com\/blog\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Traefik&#8217;i Ubuntu 18.04 \u00dczerinde Docker Konteynerleri \u0130\u00e7in Ters Proxy Olarak Kullanma Rehberi\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#website\",\"url\":\"https:\/\/fatihsoysal.com\/blog\/\",\"name\":\"Fatihsoysal.com\",\"description\":\"Blog - Yaz\u0131l\u0131m D\u00fcnyas\u0131 Tecr\u00fcbelerim\",\"publisher\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/fatihsoysal.com\/blog\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"tr\"},{\"@type\":[\"Person\",\"Organization\"],\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1\",\"name\":\"Fatih Soysal\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"tr\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/fatihsoysal.com\/blog\/wp-content\/uploads\/2024\/04\/cropped-replicate-prediction-3kgg1hgjn5rgp0cf0p5tr0jw7w-1.png\",\"contentUrl\":\"https:\/\/fatihsoysal.com\/blog\/wp-content\/uploads\/2024\/04\/cropped-replicate-prediction-3kgg1hgjn5rgp0cf0p5tr0jw7w-1.png\",\"width\":512,\"height\":512,\"caption\":\"Fatih Soysal\"},\"logo\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/image\/\"},\"description\":\"Kullan\u0131m ve kodlama m\u00fckemmeliyetini odak alan uygulamalar olu\u015fturma deneyimine sahip, profesyonel olarak 15+ y\u0131l \u00fczeri deneyime sahip bir yaz\u0131l\u0131m m\u00fchendisi.\",\"url\":\"https:\/\/fatihsoysal.com\/blog\/author\/fatihsoysal\/\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"Traefik'i Ubuntu 18.04 \u00dczerinde Docker Konteynerleri \u0130\u00e7in Ters Proxy Olarak Kullanma Rehberi - Kodlar\u0131n Gizemli D\u00fcnyas\u0131","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/fatihsoysal.com\/blog\/traefiki-ubuntu-18-04-uzerinde-docker-konteynerleri-icin-ters-proxy-olarak-kullanma-rehberi\/","og_locale":"tr_TR","og_type":"article","og_title":"Traefik'i Ubuntu 18.04 \u00dczerinde Docker Konteynerleri \u0130\u00e7in Ters Proxy Olarak Kullanma Rehberi","og_description":"Traefik'i Ubuntu 18.04 \u00dczerinde Docker Konteynerleri \u0130\u00e7in Ters Proxy Olarak Kullanma Rehberi Bu makale, modern web uygulamalar\u0131n\u0131n da\u011f\u0131t\u0131m\u0131n","og_url":"https:\/\/fatihsoysal.com\/blog\/traefiki-ubuntu-18-04-uzerinde-docker-konteynerleri-icin-ters-proxy-olarak-kullanma-rehberi\/","og_site_name":"Kodlar\u0131n Gizemli D\u00fcnyas\u0131","article_published_time":"2025-12-15T17:41:16+00:00","author":"Fatih Soysal","twitter_card":"summary_large_image","twitter_misc":{"Yazan:":"Fatih Soysal","Tahmini okuma s\u00fcresi":"26 dakika"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/fatihsoysal.com\/blog\/traefiki-ubuntu-18-04-uzerinde-docker-konteynerleri-icin-ters-proxy-olarak-kullanma-rehberi\/#article","isPartOf":{"@id":"https:\/\/fatihsoysal.com\/blog\/traefiki-ubuntu-18-04-uzerinde-docker-konteynerleri-icin-ters-proxy-olarak-kullanma-rehberi\/"},"author":{"name":"Fatih Soysal","@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1"},"headline":"Traefik&#8217;i Ubuntu 18.04 \u00dczerinde Docker Konteynerleri \u0130\u00e7in Ters Proxy Olarak Kullanma Rehberi","datePublished":"2025-12-15T17:41:16+00:00","mainEntityOfPage":{"@id":"https:\/\/fatihsoysal.com\/blog\/traefiki-ubuntu-18-04-uzerinde-docker-konteynerleri-icin-ters-proxy-olarak-kullanma-rehberi\/"},"wordCount":3845,"commentCount":0,"publisher":{"@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1"},"articleSection":["Ubuntu"],"inLanguage":"tr","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/fatihsoysal.com\/blog\/traefiki-ubuntu-18-04-uzerinde-docker-konteynerleri-icin-ters-proxy-olarak-kullanma-rehberi\/#respond"]}],"copyrightYear":"2025","copyrightHolder":{"@id":"https:\/\/fatihsoysal.com\/blog\/#organization"}},{"@type":"WebPage","@id":"https:\/\/fatihsoysal.com\/blog\/traefiki-ubuntu-18-04-uzerinde-docker-konteynerleri-icin-ters-proxy-olarak-kullanma-rehberi\/","url":"https:\/\/fatihsoysal.com\/blog\/traefiki-ubuntu-18-04-uzerinde-docker-konteynerleri-icin-ters-proxy-olarak-kullanma-rehberi\/","name":"Traefik'i Ubuntu 18.04 \u00dczerinde Docker Konteynerleri \u0130\u00e7in Ters Proxy Olarak Kullanma Rehberi - Kodlar\u0131n Gizemli D\u00fcnyas\u0131","isPartOf":{"@id":"https:\/\/fatihsoysal.com\/blog\/#website"},"datePublished":"2025-12-15T17:41:16+00:00","breadcrumb":{"@id":"https:\/\/fatihsoysal.com\/blog\/traefiki-ubuntu-18-04-uzerinde-docker-konteynerleri-icin-ters-proxy-olarak-kullanma-rehberi\/#breadcrumb"},"inLanguage":"tr","potentialAction":[{"@type":"ReadAction","target":["https:\/\/fatihsoysal.com\/blog\/traefiki-ubuntu-18-04-uzerinde-docker-konteynerleri-icin-ters-proxy-olarak-kullanma-rehberi\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/fatihsoysal.com\/blog\/traefiki-ubuntu-18-04-uzerinde-docker-konteynerleri-icin-ters-proxy-olarak-kullanma-rehberi\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Anasayfa","item":"https:\/\/fatihsoysal.com\/blog\/"},{"@type":"ListItem","position":2,"name":"Traefik&#8217;i Ubuntu 18.04 \u00dczerinde Docker Konteynerleri \u0130\u00e7in Ters Proxy Olarak Kullanma Rehberi"}]},{"@type":"WebSite","@id":"https:\/\/fatihsoysal.com\/blog\/#website","url":"https:\/\/fatihsoysal.com\/blog\/","name":"Fatihsoysal.com","description":"Blog - Yaz\u0131l\u0131m D\u00fcnyas\u0131 Tecr\u00fcbelerim","publisher":{"@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/fatihsoysal.com\/blog\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"tr"},{"@type":["Person","Organization"],"@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1","name":"Fatih Soysal","image":{"@type":"ImageObject","inLanguage":"tr","@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/image\/","url":"https:\/\/fatihsoysal.com\/blog\/wp-content\/uploads\/2024\/04\/cropped-replicate-prediction-3kgg1hgjn5rgp0cf0p5tr0jw7w-1.png","contentUrl":"https:\/\/fatihsoysal.com\/blog\/wp-content\/uploads\/2024\/04\/cropped-replicate-prediction-3kgg1hgjn5rgp0cf0p5tr0jw7w-1.png","width":512,"height":512,"caption":"Fatih Soysal"},"logo":{"@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/image\/"},"description":"Kullan\u0131m ve kodlama m\u00fckemmeliyetini odak alan uygulamalar olu\u015fturma deneyimine sahip, profesyonel olarak 15+ y\u0131l \u00fczeri deneyime sahip bir yaz\u0131l\u0131m m\u00fchendisi.","url":"https:\/\/fatihsoysal.com\/blog\/author\/fatihsoysal\/"}]}},"yoast_meta":{"yoast_wpseo_title":"","yoast_wpseo_metadesc":"","yoast_wpseo_canonical":""},"amp_enabled":true,"_links":{"self":[{"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/posts\/36403","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/comments?post=36403"}],"version-history":[{"count":1,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/posts\/36403\/revisions"}],"predecessor-version":[{"id":36404,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/posts\/36403\/revisions\/36404"}],"wp:attachment":[{"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/media?parent=36403"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/categories?post=36403"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/tags?post=36403"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}