{"id":37694,"date":"2026-01-12T20:41:16","date_gmt":"2026-01-12T17:41:16","guid":{"rendered":"https:\/\/fatihsoysal.com\/blog\/?p=37694"},"modified":"2026-01-12T20:41:16","modified_gmt":"2026-01-12T17:41:16","slug":"python-wsgi-uygulamalarini-gunicorn-ve-nginx-ile-dagitma-kapsamli-bir-rehber","status":"publish","type":"post","link":"https:\/\/fatihsoysal.com\/blog\/python-wsgi-uygulamalarini-gunicorn-ve-nginx-ile-dagitma-kapsamli-bir-rehber\/","title":{"rendered":"Python WSGI Uygulamalar\u0131n\u0131 Gunicorn ve Nginx ile Da\u011f\u0131tma: Kapsaml\u0131 Bir Rehber"},"content":{"rendered":"<p><body><\/p>\n<h2>Python WSGI Uygulamalar\u0131n\u0131 Gunicorn ve Nginx ile Da\u011f\u0131tma: Kapsaml\u0131 Bir Rehber<\/h2>\n<h2>Giri\u015f<\/h2>\n<p>Modern web uygulamalar\u0131n\u0131n geli\u015ftirilmesi, Python gibi dinamik dillerle h\u0131zla ilerlese de, bu uygulamalar\u0131n \u00fcretim ortam\u0131nda g\u00fcvenilir, performansl\u0131 ve \u00f6l\u00e7eklenebilir bir \u015fekilde \u00e7al\u0131\u015ft\u0131r\u0131lmas\u0131 ayr\u0131 bir uzmanl\u0131k gerektirir. Python tabanl\u0131 web uygulamalar\u0131 genellikle Flask, Django gibi framework&#8217;ler kullan\u0131larak geli\u015ftirilir ve bu uygulamalar\u0131n web sunucular\u0131 ile etkile\u015fime girmesi i\u00e7in bir standart olan WSGI (Web Server Gateway Interface) kullan\u0131l\u0131r. Do\u011frudan bir web sunucusu olarak tasarlanmam\u0131\u015f olan Python uygulamalar\u0131, genellikle bir WSGI sunucusu (\u00f6rne\u011fin Gunicorn) arac\u0131l\u0131\u011f\u0131yla gelen istekleri i\u015fler. Ancak, bu WSGI sunucular\u0131n\u0131 do\u011frudan internete a\u00e7mak, g\u00fcvenlik ve performans a\u00e7\u0131s\u0131ndan ideal de\u011fildir. \u0130\u015fte bu noktada Nginx gibi y\u00fcksek performansl\u0131 bir ters proxy sunucusunun devreye girmesi kritik hale gelir.<\/p>\n<p>Bu makale, Python WSGI uygulamalar\u0131n\u0131z\u0131 Gunicorn HTTP sunucusu kullanarak da\u011f\u0131tmay\u0131 ve Nginx&#8217;i bu uygulaman\u0131n \u00f6n\u00fcne bir ters proxy olarak konumland\u0131rmay\u0131 ad\u0131m ad\u0131m ele alacakt\u0131r. Amac\u0131m\u0131z, geli\u015ftiricilere ve sistem y\u00f6neticilerine, Python web uygulamalar\u0131n\u0131 \u00fcretim ortam\u0131nda g\u00fcvenli, verimli ve \u00f6l\u00e7eklenebilir bir \u015fekilde nas\u0131l da\u011f\u0131tacaklar\u0131na dair kapsaml\u0131 bir rehber sunmakt\u0131r. WSGI&#8217;nin temel prensiplerinden ba\u015flayarak, Gunicorn ve Nginx&#8217;in rollerini, da\u011f\u0131t\u0131m mimarisini, ad\u0131m ad\u0131m kurulum ve yap\u0131land\u0131rma s\u00fcre\u00e7lerini, performans ipu\u00e7lar\u0131n\u0131 ve s\u0131k kar\u015f\u0131la\u015f\u0131lan sorunlar\u0131 detayl\u0131 bir \u015fekilde inceleyece\u011fiz.<\/p>\n<h2>WSGI Nedir ve Neden \u00d6nemlidir?<\/h2>\n<p>WSGI (Web Server Gateway Interface), Python web sunucular\u0131 ile Python web uygulamalar\u0131 veya framework&#8217;leri aras\u0131nda standart bir aray\u00fcz tan\u0131mlayan bir spesifikasyondur. Temel olarak, WSGI, web sunucusunun (\u00f6rne\u011fin, Nginx arac\u0131l\u0131\u011f\u0131yla gelen istekleri i\u015fleyen Gunicorn gibi bir WSGI sunucusu) bir Python uygulamas\u0131n\u0131 nas\u0131l \u00e7a\u011f\u0131raca\u011f\u0131n\u0131 ve uygulaman\u0131n sunucuya nas\u0131l yan\u0131t verece\u011fini belirler.<\/p>\n<p>WSGI&#8217;nin ortaya \u00e7\u0131k\u0131\u015f\u0131ndan \u00f6nce, Python web uygulamalar\u0131n\u0131 farkl\u0131 web sunucular\u0131yla entegre etmek karma\u015f\u0131k ve framework&#8217;e \u00f6zel \u00e7\u00f6z\u00fcmler gerektiriyordu. Her web sunucusu (Apache, IIS, vb.) ve her Python web framework&#8217;\u00fc (Django, Flask, vb.) kendi entegrasyon y\u00f6ntemine sahipti. Bu durum, geli\u015ftiriciler i\u00e7in esnekli\u011fi azalt\u0131yor ve farkl\u0131 da\u011f\u0131t\u0131m ortamlar\u0131 aras\u0131nda ge\u00e7i\u015fi zorla\u015ft\u0131r\u0131yordu.<\/p>\n<p>WSGI, bu sorunu \u00e7\u00f6zerek bir k\u00f6pr\u00fc g\u00f6revi g\u00f6r\u00fcr. Bir WSGI sunucusu (Gunicorn, uWSGI vb.) WSGI standard\u0131na uygun bir \u015fekilde HTTP isteklerini al\u0131r, bu istekleri bir Python s\u00f6zl\u00fc\u011f\u00fcne d\u00f6n\u00fc\u015ft\u00fcr\u00fcr ve WSGI standard\u0131na uygun bir Python uygulamas\u0131na iletir. Uygulama, bu s\u00f6zl\u00fc\u011f\u00fc kullanarak bir yan\u0131t olu\u015fturur ve bu yan\u0131t\u0131 yine WSGI standard\u0131na uygun olarak WSGI sunucusuna geri g\u00f6nderir. WSGI sunucusu da bu yan\u0131t\u0131 HTTP protokol\u00fcne uygun hale getirerek istemciye geri g\u00f6nderir.<\/p>\n<p><strong>WSGI&#8217;nin temel faydalar\u0131 \u015funlard\u0131r:<\/strong><br \/>\n*   <strong>Standardizasyon:<\/strong> Farkl\u0131 web sunucular\u0131 ve Python framework&#8217;leri aras\u0131nda tutarl\u0131 bir ileti\u015fim sa\u011flar.<br \/>\n*   <strong>Esneklik:<\/strong> Geli\u015ftiriciler, uygulamalar\u0131n\u0131 farkl\u0131 WSGI sunucular\u0131 ve web sunucular\u0131 ile kolayca da\u011f\u0131tabilir.<br \/>\n*   <strong>Mod\u00fclerlik:<\/strong> Uygulama katman\u0131 ile sunucu katman\u0131n\u0131 birbirinden ay\u0131rarak, her bir bile\u015fenin ba\u011f\u0131ms\u0131z olarak geli\u015ftirilmesine ve g\u00fcncellenmesine olanak tan\u0131r.<br \/>\n*   <strong>Performans:<\/strong> WSGI sunucular\u0131, Python uygulamalar\u0131n\u0131n performans\u0131n\u0131 optimize etmek i\u00e7in \u00f6zel olarak tasarlanm\u0131\u015ft\u0131r.<\/p>\n<p>K\u0131sacas\u0131, WSGI, Python web ekosisteminin temel bir yap\u0131 ta\u015f\u0131d\u0131r ve uygulamalar\u0131m\u0131z\u0131n \u00fcretim ortam\u0131nda sorunsuz bir \u015fekilde \u00e7al\u0131\u015fmas\u0131n\u0131 sa\u011flayan kritik bir arabirimdir.<\/p>\n<h2>Gunicorn&#8217;a Yak\u0131ndan Bak\u0131\u015f<\/h2>\n<p>Gunicorn (Green Unicorn), Python WSGI uygulamalar\u0131 i\u00e7in tasarlanm\u0131\u015f sa\u011flam, h\u0131zl\u0131 ve hafif bir HTTP sunucusudur. Genellikle &#8220;\u00f6nce \u00e7atallama&#8221; (pre-fork) modeli kullanan bir Unix WSGI HTTP sunucusu olarak tan\u0131mlan\u0131r. Bu, Gunicorn&#8217;\u0131n ana s\u00fcrecinin (master process) belirli say\u0131da i\u015f\u00e7i s\u00fcreci (worker processes) ba\u015flatmas\u0131 anlam\u0131na gelir. Gelen her istek, bu i\u015f\u00e7i s\u00fcre\u00e7lerinden biri taraf\u0131ndan i\u015flenir.<\/p>\n<p><strong>Gunicorn&#8217;\u0131n temel \u00f6zellikleri ve avantajlar\u0131 \u015funlard\u0131r:<\/strong><br \/>\n*   <strong>Basitlik:<\/strong> Kurulumu ve yap\u0131land\u0131rmas\u0131 olduk\u00e7a kolayd\u0131r. Minimal ba\u011f\u0131ml\u0131l\u0131klara sahiptir.<br \/>\n*   <strong>H\u0131z:<\/strong> C dilinde yaz\u0131lm\u0131\u015f baz\u0131 bile\u015fenleri sayesinde y\u00fcksek performans sunar.<br \/>\n*   <strong>Kararl\u0131l\u0131k:<\/strong> Uzun s\u00fcreli \u00fcretim ortam\u0131 kullan\u0131m\u0131 i\u00e7in tasarlanm\u0131\u015ft\u0131r ve olduk\u00e7a kararl\u0131d\u0131r.<br \/>\n*   <strong>WSGI Uyumlulu\u011fu:<\/strong> Flask, Django gibi t\u00fcm pop\u00fcler Python web framework&#8217;leri ile sorunsuz \u00e7al\u0131\u015f\u0131r.<br \/>\n*   <strong>Kaynak Y\u00f6netimi:<\/strong> Her worker s\u00fcreci ba\u011f\u0131ms\u0131z olarak \u00e7al\u0131\u015ft\u0131\u011f\u0131 i\u00e7in, bir worker&#8217;da meydana gelen bir hata di\u011ferlerini etkilemez ve master s\u00fcreci hatal\u0131 worker&#8217;\u0131 otomatik olarak yeniden ba\u015flatabilir.<br \/>\n*   <strong>\u00d6l\u00e7eklenebilirlik:<\/strong> Worker say\u0131s\u0131 kolayca ayarlanabilir, bu da uygulaman\u0131n gelen y\u00fcke g\u00f6re \u00f6l\u00e7eklenmesini sa\u011flar.<\/p>\n<p><strong>Gunicorn&#8217;\u0131n \u00e7al\u0131\u015fma modeli:<\/strong><br \/>\n1.  <strong>Master S\u00fcreci:<\/strong> Gunicorn ba\u015flat\u0131ld\u0131\u011f\u0131nda bir master s\u00fcreci olu\u015fur. Bu s\u00fcre\u00e7, worker s\u00fcre\u00e7lerini y\u00f6netmekten, onlar\u0131n sa\u011fl\u0131\u011f\u0131n\u0131 izlemekten ve gerekti\u011finde yeniden ba\u015flatmaktan sorumludur.<br \/>\n2.  <strong>Worker S\u00fcre\u00e7leri:<\/strong> Master s\u00fcreci, yap\u0131land\u0131rma dosyas\u0131nda belirtilen say\u0131da worker s\u00fcreci ba\u015flat\u0131r. Her worker s\u00fcreci, Python uygulamas\u0131n\u0131n bir kopyas\u0131n\u0131 y\u00fckler ve gelen HTTP isteklerini i\u015flemek i\u00e7in haz\u0131r bekler.<br \/>\n3.  <strong>\u0130stek \u0130\u015fleme:<\/strong> Gelen bir HTTP iste\u011fi, master s\u00fcreci taraf\u0131ndan uygun bir worker s\u00fcrecine y\u00f6nlendirilir. Worker, iste\u011fi i\u015fler, Python uygulamas\u0131ndan bir yan\u0131t al\u0131r ve bu yan\u0131t\u0131 istemciye geri g\u00f6nderir.<\/p>\n<p>Gunicorn, do\u011frudan internete a\u00e7\u0131lmak yerine genellikle Nginx gibi bir ters proxy&#8217;nin arkas\u0131nda \u00e7al\u0131\u015facak \u015fekilde tasarlanm\u0131\u015ft\u0131r. Bunun nedeni, Gunicorn&#8217;\u0131n statik dosya sunumu, SSL sonland\u0131rma, y\u00fck dengeleme gibi geli\u015fmi\u015f web sunucusu \u00f6zelliklerini sa\u011flamamas\u0131d\u0131r. Bu g\u00f6revler i\u00e7in Nginx \u00e7ok daha yetenekli ve optimize edilmi\u015ftir.<\/p>\n<h2>Nginx&#8217;in Rol\u00fc<\/h2>\n<p>Nginx (engine-x), y\u00fcksek performansl\u0131, a\u00e7\u0131k kaynakl\u0131 bir web sunucusu, ters proxy, y\u00fck dengeleyici ve HTTP \u00f6nbellekleyicisidir. \u00d6zellikle e\u015fzamanl\u0131 ba\u011flant\u0131lar\u0131 ve y\u00fcksek trafi\u011fi verimli bir \u015fekilde y\u00f6netme yetene\u011fiyle bilinir. Gunicorn&#8217;\u0131n arkas\u0131nda Nginx kullanmak, Python uygulamalar\u0131n\u0131z\u0131n \u00fcretim ortam\u0131nda \u00e7ok daha sa\u011flam ve performansl\u0131 olmas\u0131n\u0131 sa\u011flar.<\/p>\n<p><strong>Nginx&#8217;in Gunicorn&#8217;\u0131n \u00f6n\u00fcne konulmas\u0131n\u0131n temel nedenleri \u015funlard\u0131r:<\/strong><br \/>\n*   <strong>Statik Dosya Sunumu:<\/strong> Python web uygulamalar\u0131 genellikle HTML, CSS, JavaScript dosyalar\u0131 ve resimler gibi statik i\u00e7erikler i\u00e7erir. Gunicorn bu t\u00fcr dosyalar\u0131 sunmak i\u00e7in optimize edilmemi\u015ftir ve bunu yapmak performans kayb\u0131na yol a\u00e7ar. Nginx, statik dosyalar\u0131 do\u011frudan ve son derece verimli bir \u015fekilde sunabilir, bu da Gunicorn&#8217;\u0131n yaln\u0131zca dinamik istekleri i\u015flemesine olanak tan\u0131r.<br \/>\n*   <strong>SSL\/TLS Sonland\u0131rma:<\/strong> G\u00fcvenli ileti\u015fim i\u00e7in HTTPS gereklidir. Nginx, SSL\/TLS sertifikalar\u0131n\u0131 y\u00f6netebilir ve \u015fifreleme\/\u015fifre \u00e7\u00f6zme i\u015flemlerini \u00fcstlenebilir. Bu, Gunicorn&#8217;\u0131n bu ek y\u00fck\u00fc ta\u015f\u0131mak zorunda kalmamas\u0131n\u0131 sa\u011flar ve performans\u0131 art\u0131r\u0131r.<br \/>\n*   <strong>Y\u00fck Dengeleme:<\/strong> Birden fazla Gunicorn \u00f6rne\u011fi veya uygulama sunucusu \u00e7al\u0131\u015ft\u0131r\u0131yorsan\u0131z, Nginx gelen istekleri bu sunucular aras\u0131nda da\u011f\u0131tarak y\u00fck dengelemesi yapabilir. Bu, uygulaman\u0131z\u0131n \u00f6l\u00e7eklenebilirli\u011fini ve hata tolerans\u0131n\u0131 art\u0131r\u0131r.<br \/>\n*   <strong>\u00d6nbellekleme:<\/strong> Nginx, s\u0131k eri\u015filen i\u00e7erikleri \u00f6nbelle\u011fe alarak sunucuya olan y\u00fck\u00fc azaltabilir ve yan\u0131t s\u00fcrelerini iyile\u015ftirebilir.<br \/>\n*   <strong>G\u00fcvenlik:<\/strong> Nginx, \u00e7e\u015fitli g\u00fcvenlik \u00f6zellikleri sunar. \u00d6rne\u011fin, k\u00f6t\u00fc niyetli istekleri filtreleyebilir, DoS\/DDoS sald\u0131r\u0131lar\u0131na kar\u015f\u0131 bir tampon g\u00f6revi g\u00f6rebilir ve istek h\u0131z\u0131n\u0131 s\u0131n\u0131rlayabilir.<br \/>\n*   <strong>Gzip S\u0131k\u0131\u015ft\u0131rma:<\/strong> Nginx, istemciye g\u00f6nderilen metin tabanl\u0131 yan\u0131tlar\u0131 (HTML, CSS, JS) s\u0131k\u0131\u015ft\u0131rarak bant geni\u015fli\u011fi kullan\u0131m\u0131n\u0131 azaltabilir ve y\u00fckleme s\u00fcrelerini h\u0131zland\u0131rabilir.<br \/>\n*   <strong>Daha \u0130yi A\u011f Y\u00f6netimi:<\/strong> Nginx, a\u011f katman\u0131ndaki ba\u011flant\u0131lar\u0131 daha verimli y\u00f6netir ve binlerce e\u015fzamanl\u0131 ba\u011flant\u0131y\u0131 d\u00fc\u015f\u00fck kaynak t\u00fcketimiyle idare edebilir.<\/p>\n<p>\u00d6zetle, Nginx, bir ters proxy olarak Gunicorn&#8217;a gelen t\u00fcm d\u0131\u015f istekleri kar\u015f\u0131lar. Statik dosyalar\u0131 do\u011frudan sunar, SSL&#8217;i sonland\u0131r\u0131r ve di\u011fer t\u00fcm dinamik istekleri Gunicorn&#8217;a y\u00f6nlendirir. Bu mimari, hem performans hem de g\u00fcvenlik a\u00e7\u0131s\u0131ndan en iyi uygulamay\u0131 temsil eder.<\/p>\n<h2>Da\u011f\u0131t\u0131m Mimarisi<\/h2>\n<p>Python WSGI uygulaman\u0131z\u0131 Gunicorn ve Nginx ile da\u011f\u0131t\u0131rken, tipik mimari a\u015fa\u011f\u0131daki gibidir:<\/p>\n<p>1.  <strong>Kullan\u0131c\u0131\/\u0130stemci:<\/strong> Taray\u0131c\u0131 veya ba\u015fka bir uygulama arac\u0131l\u0131\u011f\u0131yla web uygulaman\u0131za HTTP\/HTTPS iste\u011fi g\u00f6nderir.<br \/>\n2.  <strong>Nginx (Ters Proxy):<\/strong><br \/>\n    *   \u0130stemciden gelen t\u00fcm istekleri ilk olarak Nginx kar\u015f\u0131lar.<br \/>\n    *   SSL\/TLS sonland\u0131rmas\u0131 burada ger\u00e7ekle\u015fir (HTTPS kullan\u0131l\u0131yorsa).<br \/>\n    *   Gelen iste\u011fin bir statik dosya (CSS, JS, resimler vb.) olup olmad\u0131\u011f\u0131n\u0131 kontrol eder. E\u011fer statik bir dosya ise, Nginx bu dosyay\u0131 do\u011frudan kendi dosya sisteminden istemciye sunar.<br \/>\n    *   E\u011fer istek dinamik bir uygulama iste\u011fiyse, Nginx bu iste\u011fi bir dahili a\u011f soketi (Unix soketi veya TCP soketi) \u00fczerinden Gunicorn&#8217;a iletir.<br \/>\n3.  <strong>Gunicorn (WSGI Sunucusu):<\/strong><br \/>\n    *   Nginx&#8217;ten gelen dinamik istekleri al\u0131r.<br \/>\n    *   Bu istekleri WSGI standard\u0131na uygun bir \u015fekilde Python uygulaman\u0131za iletir.<br \/>\n    *   Python uygulamas\u0131ndan gelen yan\u0131t\u0131 al\u0131r.<br \/>\n    *   Yan\u0131t\u0131 Nginx&#8217;e geri g\u00f6nderir.<br \/>\n4.  <strong>Python WSGI Uygulamas\u0131 (Flask\/Django):<\/strong><br \/>\n    *   Gunicorn&#8217;dan gelen istekleri i\u015fler.<br \/>\n    *   Gerekirse veritaban\u0131 veya di\u011fer servislerle etkile\u015fime girer.<br \/>\n    *   \u0130ste\u011fe uygun dinamik i\u00e7eri\u011fi (HTML, JSON vb.) olu\u015fturur.<br \/>\n    *   Olu\u015fturulan yan\u0131t\u0131 Gunicorn&#8217;a geri g\u00f6nderir.<\/p>\n<p>Bu mimari, her bile\u015fenin kendi \u00f6zel g\u00f6revine odaklanmas\u0131n\u0131 sa\u011flar ve b\u00f6ylece sistemin genel verimlili\u011fini, g\u00fcvenli\u011fini ve \u00f6l\u00e7eklenebilirli\u011fini art\u0131r\u0131r. Nginx, internete bakan \u00f6n cephe g\u00f6revi g\u00f6r\u00fcrken, Gunicorn ve Python uygulamas\u0131 arka planda g\u00fcvenli bir \u015fekilde \u00e7al\u0131\u015f\u0131r.<\/p>\n<h2>\u00d6n Ko\u015fullar ve Kurulum<\/h2>\n<p>Bu rehberde Ubuntu\/Debian tabanl\u0131 bir sunucu ortam\u0131n\u0131 temel alaca\u011f\u0131z. Ad\u0131mlara ba\u015flamadan \u00f6nce a\u015fa\u011f\u0131daki \u00f6n ko\u015fullar\u0131n yerine getirildi\u011finden emin olun:<\/p>\n<p>*   <strong>Bir Linux Sunucusu:<\/strong> Tercihen Ubuntu 20.04 veya \u00fczeri. SSH eri\u015fimine sahip olmal\u0131s\u0131n\u0131z.<br \/>\n*   <strong>Root Olmayan Bir Kullan\u0131c\u0131:<\/strong> G\u00fcvenlik nedeniyle <code>sudo<\/code> yetkilerine sahip root olmayan bir kullan\u0131c\u0131 ile \u00e7al\u0131\u015fman\u0131z \u00f6nerilir.<br \/>\n*   <strong>Python 3 ve pip:<\/strong> Modern Python uygulamalar\u0131 genellikle Python 3 kullan\u0131r.<br \/>\n*   <strong>Virtual Environment (Sanal Ortam):<\/strong> Proje ba\u011f\u0131ml\u0131l\u0131klar\u0131n\u0131 izole etmek i\u00e7in \u015fiddetle tavsiye edilir.<\/p>\n<p><strong>Kurulum Ad\u0131mlar\u0131:<\/strong><\/p>\n<p>1.  <strong>Sistem G\u00fcncellemesi:<\/strong><\/p>\n<pre><code class=\"language-bash\">sudo apt update\n    sudo apt upgrade -y<\/code><\/pre>\n<p>2.  <strong>Python 3 ve Gerekli Ara\u00e7lar\u0131n Kurulumu:<\/strong><\/p>\n<pre><code class=\"language-bash\">sudo apt install python3 python3-pip python3-venv build-essential libssl-dev libffi-dev python3-dev -y<\/code><\/pre>\n<p>    Bu komut, Python 3, pip, sanal ortam mod\u00fcl\u00fc ve baz\u0131 derleme ara\u00e7lar\u0131n\u0131 kurar.<\/p>\n<p>3.  <strong>Proje Dizini Olu\u015fturma ve Sanal Ortam Kurulumu:<\/strong><br \/>\n    Genellikle <code>\/var\/www\/<\/code> alt\u0131nda proje dizinleri olu\u015fturulur.<\/p>\n<pre><code class=\"language-bash\">sudo mkdir -p \/var\/www\/myproject\n    sudo chown -R $USER:$USER \/var\/www\/myproject # Kullan\u0131c\u0131n\u0131za izin verin\n    cd \/var\/www\/myproject\n    python3 -m venv venv\n    source venv\/bin\/activate<\/code><\/pre>\n<p>    Art\u0131k sanal ortam\u0131n\u0131z aktif ve terminalinizde <code>(venv)<\/code> \u00f6n eki g\u00f6r\u00fcnmeli.<\/p>\n<p>4.  <strong>\u00d6rnek Bir Flask Uygulamas\u0131 Olu\u015fturma:<\/strong><br \/>\n    Uygulaman\u0131z\u0131n k\u00f6k dizininde <code>app.py<\/code> ad\u0131nda bir dosya olu\u015fturun:<\/p>\n<pre><code class=\"language-bash\"># \/var\/www\/myproject\/app.py\n    from flask import Flask, render_template_string\n\n    app = Flask(__name__)\n\n    @app.route('\/')\n    def home():\n        return render_template_string(\"<p>Bu bir Python Flask uygulamas\u0131d\u0131r.<\/p>\")\n\n    @app.route('\/hello\/<name>')\n    def hello(name):\n        return f\"<p>Gunicorn ve Nginx ile da\u011f\u0131t\u0131ld\u0131.<\/p>\"\n\n    if __name__ == '__main__':\n        app.run(debug=True)<\/code><\/pre>\n<p>    Ayr\u0131ca <code>requirements.txt<\/code> dosyas\u0131n\u0131 olu\u015fturun:<\/p>\n<pre><code class=\"language-bash\"># \/var\/www\/myproject\/requirements.txt\n    Flask\n    gunicorn<\/code><\/pre>\n<p>    Ba\u011f\u0131ml\u0131l\u0131klar\u0131 y\u00fckleyin:<\/p>\n<pre><code class=\"language-bash\">pip install -r requirements.txt<\/code><\/pre>\n<p>5.  <strong>Nginx Kurulumu:<\/strong><\/p>\n<pre><code class=\"language-bash\">sudo apt install nginx -y\n    sudo ufw allow 'Nginx HTTP' # Firewall'dan Nginx'e izin ver\n    sudo systemctl start nginx\n    sudo systemctl enable nginx<\/code><\/pre>\n<p>    Taray\u0131c\u0131n\u0131zda sunucunuzun IP adresine giderek Nginx&#8217;in varsay\u0131lan ho\u015f geldiniz sayfas\u0131n\u0131 g\u00f6rmelisiniz.<\/p>\n<h2>Ad\u0131m Ad\u0131m Da\u011f\u0131t\u0131m S\u00fcreci<\/h2>\n<h3>1. Python Uygulamas\u0131n\u0131 Haz\u0131rlama<\/h3>\n<p>Yukar\u0131daki &#8220;\u00d6n Ko\u015fullar ve Kurulum&#8221; b\u00f6l\u00fcm\u00fcnde zaten basit bir Flask uygulamas\u0131 (<code>app.py<\/code>) ve <code>requirements.txt<\/code> dosyas\u0131 olu\u015fturduk. Sanal ortam\u0131 etkinle\u015ftirdi\u011finizden ve ba\u011f\u0131ml\u0131l\u0131klar\u0131 y\u00fckledi\u011finizden emin olun:<\/p>\n<pre><code class=\"language-bash\">cd \/var\/www\/myproject\nsource venv\/bin\/activate\npip install -r requirements.txt<\/code><\/pre>\n<p>Bu ad\u0131mlar, uygulaman\u0131z\u0131n Gunicorn taraf\u0131ndan \u00e7al\u0131\u015ft\u0131r\u0131lmaya haz\u0131r olmas\u0131n\u0131 sa\u011flar.<\/p>\n<h3>2. Gunicorn&#8217;\u0131 Test Etme<\/h3>\n<p>Sanal ortam\u0131n\u0131z aktifken, uygulaman\u0131z\u0131 Gunicorn ile manuel olarak \u00e7al\u0131\u015ft\u0131rarak test edebilirsiniz:<\/p>\n<pre><code class=\"language-bash\">gunicorn --workers 3 --bind 0.0.0.0:8000 app:app<\/code><\/pre>\n<p><em>   <code>--workers 3<\/code>: Gunicorn&#8217;\u0131n 3 worker s\u00fcreci ba\u015flatmas\u0131n\u0131 s\u00f6yler. Genellikle <code>(2 <\/em> CPU \u00e7ekirde\u011fi say\u0131s\u0131) + 1<\/code> form\u00fcl\u00fc \u00f6nerilir.<br \/>\n*   <code>--bind 0.0.0.0:8000<\/code>: Gunicorn&#8217;\u0131n t\u00fcm a\u011f aray\u00fczlerinde 8000 numaral\u0131 porttan gelen ba\u011flant\u0131lar\u0131 dinlemesini sa\u011flar.<br \/>\n*   <code>app:app<\/code>: \u0130lk <code>app<\/code> mod\u00fcl ad\u0131d\u0131r (<code>app.py<\/code> dosyan\u0131z). \u0130kinci <code>app<\/code> ise mod\u00fcl i\u00e7indeki Flask uygulama nesnesinin ad\u0131d\u0131r (<code>app = Flask(__name__)<\/code>).<\/p>\n<p>Taray\u0131c\u0131n\u0131zda <code>http:\/\/SUNUCU_IP_ADRES\u0130:8000<\/code> adresine giderek uygulaman\u0131z\u0131n \u00e7al\u0131\u015ft\u0131\u011f\u0131n\u0131 g\u00f6rmelisiniz. Bu test, Gunicorn&#8217;\u0131n uygulaman\u0131z\u0131 ba\u015far\u0131yla ba\u015flatabildi\u011fini do\u011frular. Ctrl+C ile Gunicorn&#8217;\u0131 durdurabilirsiniz.<\/p>\n<h3>3. Gunicorn&#8217;\u0131 Bir Systemd Servisi Olarak Yap\u0131land\u0131rma<\/h3>\n<p>Uygulaman\u0131z\u0131n sunucu yeniden ba\u015flat\u0131ld\u0131\u011f\u0131nda otomatik olarak ba\u015flamas\u0131, \u00e7\u00f6kt\u00fc\u011f\u00fcnde yeniden ba\u015flat\u0131lmas\u0131 ve loglar\u0131n\u0131n y\u00f6netilmesi i\u00e7in Gunicorn&#8217;\u0131 bir <code>systemd<\/code> servisi olarak yap\u0131land\u0131rmak en iyi yakla\u015f\u0131md\u0131r.<\/p>\n<p>Bir <code>systemd<\/code> servis dosyas\u0131 olu\u015ftural\u0131m:<\/p>\n<pre><code class=\"language-bash\">sudo nano \/etc\/systemd\/system\/myproject.service<\/code><\/pre>\n<p>Dosyan\u0131n i\u00e7ine a\u015fa\u011f\u0131daki i\u00e7eri\u011fi yap\u0131\u015ft\u0131r\u0131n (kendi kullan\u0131c\u0131 ad\u0131n\u0131z\u0131, grup ad\u0131n\u0131z\u0131 ve proje yolunuzu g\u00fcncelledi\u011finizden emin olun):<\/p>\n<pre><code class=\"language-ini\">[Unit]\nDescription=Gunicorn instance to serve myproject\nAfter=network.target\n\n[Service]\nUser=your_username # SSH ile ba\u011fland\u0131\u011f\u0131n\u0131z kullan\u0131c\u0131 ad\u0131n\u0131z\nGroup=www-data\nWorkingDirectory=\/var\/www\/myproject\nExecStart=\/var\/www\/myproject\/venv\/bin\/gunicorn --workers 3 --bind unix:\/var\/www\/myproject\/myproject.sock -m 007 app:app\nRestart=always\n\n[Install]\nWantedBy=multi-user.target<\/code><\/pre>\n<p><strong>A\u00e7\u0131klamalar:<\/strong><br \/>\n*   <code>User<\/code> ve <code>Group<\/code>: Gunicorn&#8217;\u0131n hangi kullan\u0131c\u0131 ve grup izinleriyle \u00e7al\u0131\u015faca\u011f\u0131n\u0131 belirtir. <code>www-data<\/code> genellikle web sunucusu s\u00fcre\u00e7leri i\u00e7in kullan\u0131lan gruptur.<br \/>\n*   <code>WorkingDirectory<\/code>: Projenizin k\u00f6k dizini.<br \/>\n*   <code>ExecStart<\/code>: Gunicorn&#8217;\u0131 ba\u015flatan komut. Burada <code>--bind<\/code> parametresi olarak bir Unix soketi (<code>unix:\/var\/www\/myproject\/myproject.sock<\/code>) kullan\u0131yoruz. Nginx ile ileti\u015fim kurarken TCP portu yerine Unix soketi kullanmak genellikle daha performansl\u0131 ve g\u00fcvenlidir, \u00e7\u00fcnk\u00fc ayn\u0131 makine \u00fczerindeki iki s\u00fcre\u00e7 aras\u0131nda do\u011frudan dosya sistemi \u00fczerinden ileti\u015fim kurar. <code>-m 007<\/code> soket izinlerini ayarlar.<br \/>\n*   <code>Restart=always<\/code>: Gunicorn s\u00fcreci \u00e7\u00f6kerse veya beklenmedik bir \u015fekilde durursa, <code>systemd<\/code> onu otomatik olarak yeniden ba\u015flat\u0131r.<\/p>\n<p>Dosyay\u0131 kaydedin ve kapat\u0131n (Ctrl+O, Enter, Ctrl+X).<\/p>\n<p>\u015eimdi <code>systemd<\/code> servisini etkinle\u015ftirin ve ba\u015flat\u0131n:<\/p>\n<pre><code class=\"language-bash\">sudo systemctl daemon-reload\nsudo systemctl start myproject\nsudo systemctl enable myproject<\/code><\/pre>\n<p>Servisin durumunu kontrol edin:<\/p>\n<pre><code class=\"language-bash\">sudo systemctl status myproject<\/code><\/pre>\n<p>\u00c7\u0131kt\u0131da <code>active (running)<\/code> ve herhangi bir hata g\u00f6rmemelisiniz. Ayr\u0131ca, projenizin k\u00f6k dizininde <code>myproject.sock<\/code> dosyas\u0131n\u0131n olu\u015ftu\u011funu kontrol edebilirsiniz:<\/p>\n<pre><code class=\"language-bash\">ls -l \/var\/www\/myproject\/myproject.sock<\/code><\/pre>\n<h3>4. Nginx&#8217;i Yap\u0131land\u0131rma<\/h3>\n<p>Nginx&#8217;i, gelen web isteklerini Gunicorn&#8217;a y\u00f6nlendirecek \u015fekilde yap\u0131land\u0131rmam\u0131z gerekiyor.<\/p>\n<p>Yeni bir Nginx sunucu blo\u011fu dosyas\u0131 olu\u015ftural\u0131m:<\/p>\n<pre><code class=\"language-bash\">sudo nano \/etc\/nginx\/sites-available\/myproject<\/code><\/pre>\n<p>Dosyan\u0131n i\u00e7ine a\u015fa\u011f\u0131daki i\u00e7eri\u011fi yap\u0131\u015ft\u0131r\u0131n (kendi alan ad\u0131n\u0131z\u0131 veya IP adresinizi g\u00fcncelleyin):<\/p>\n<pre><code class=\"language-nginx\">server {\n    listen 80;\n    server_name your_domain.com www.your_domain.com your_server_ip; # Alan ad\u0131n\u0131z\u0131 veya IP adresinizi buraya yaz\u0131n\n\n    root \/var\/www\/myproject; # Statik dosyalar\u0131n\u0131z\u0131n k\u00f6k dizini\n\n    location \/static\/ {\n        alias \/var\/www\/myproject\/static\/; # Statik dosyalar\u0131n\u0131z\u0131n ger\u00e7ek yolu\n    }\n\n    location \/ {\n        include proxy_params;\n        proxy_pass http:\/\/unix:\/var\/www\/myproject\/myproject.sock;\n    }\n}<\/code><\/pre>\n<p><strong>A\u00e7\u0131klamalar:<\/strong><br \/>\n*   <code>listen 80;<\/code>: Nginx&#8217;in HTTP istekleri i\u00e7in 80 numaral\u0131 portu dinlemesini sa\u011flar.<br \/>\n*   <code>server_name<\/code>: Alan ad\u0131n\u0131z\u0131 veya sunucunuzun IP adresini buraya ekleyin.<br \/>\n*   <code>root \/var\/www\/myproject;<\/code>: Nginx&#8217;in varsay\u0131lan olarak hangi dizinde dosya arayaca\u011f\u0131n\u0131 belirtir. Bu, \u00f6zellikle <code>location \/static\/<\/code> blo\u011fu tan\u0131mlanmad\u0131\u011f\u0131nda veya hata sayfalar\u0131 gibi durumlarda kullan\u0131labilir.<br \/>\n*   <code>location \/static\/<\/code>: Uygulaman\u0131z\u0131n statik dosyalar\u0131n\u0131 (CSS, JS, resimler) do\u011frudan Nginx \u00fczerinden sunmak i\u00e7in kullan\u0131l\u0131r. <code>alias<\/code> y\u00f6nergesi, <code>\/static\/<\/code> ile ba\u015flayan t\u00fcm isteklerin <code>\/var\/www\/myproject\/static\/<\/code> dizininden al\u0131nmas\u0131n\u0131 sa\u011flar. <strong>Bu dizini projenizde olu\u015fturmay\u0131 unutmay\u0131n!<\/strong><\/p>\n<pre><code class=\"language-bash\">mkdir -p \/var\/www\/myproject\/static<\/code><\/pre>\n<p>    Test i\u00e7in i\u00e7ine basit bir <code>test.html<\/code> koyabilirsiniz.<br \/>\n*   <code>location \/<\/code>: <code>\/static\/<\/code> ile e\u015fle\u015fmeyen di\u011fer t\u00fcm isteklerin Gunicorn&#8217;a y\u00f6nlendirilmesini sa\u011flar.<br \/>\n*   <code>include proxy_params;<\/code>: Nginx&#8217;in proxy mod\u00fcl\u00fc i\u00e7in standart ba\u015fl\u0131klar\u0131 i\u00e7erir (\u00f6rne\u011fin, <code>Host<\/code>, <code>X-Real-IP<\/code>). Bu dosya <code>\/etc\/nginx\/proxy_params<\/code> yolunda bulunur.<br \/>\n*   <code>proxy_pass http:\/\/unix:\/var\/www\/myproject\/myproject.sock;<\/code>: \u0130stekleri Gunicorn&#8217;\u0131n dinledi\u011fi Unix soketine iletir.<\/p>\n<p>Dosyay\u0131 kaydedin ve kapat\u0131n.<\/p>\n<p>\u015eimdi bu yap\u0131land\u0131rmay\u0131 etkinle\u015ftirmek i\u00e7in bir sembolik ba\u011flant\u0131 olu\u015fturun:<\/p>\n<pre><code class=\"language-bash\">sudo ln -s \/etc\/nginx\/sites-available\/myproject \/etc\/nginx\/sites-enabled<\/code><\/pre>\n<p>Nginx&#8217;in varsay\u0131lan yap\u0131land\u0131rma dosyas\u0131n\u0131 devre d\u0131\u015f\u0131 b\u0131rakmak iyi bir uygulamad\u0131r:<\/p>\n<pre><code class=\"language-bash\">sudo rm \/etc\/nginx\/sites-enabled\/default<\/code><\/pre>\n<p>Nginx yap\u0131land\u0131rman\u0131z\u0131n s\u00f6zdizimini test edin:<\/p>\n<pre><code class=\"language-bash\">sudo nginx -t<\/code><\/pre>\n<p>E\u011fer <code>test is successful<\/code> mesaj\u0131n\u0131 g\u00f6r\u00fcrseniz, Nginx&#8217;i yeniden ba\u015flat\u0131n:<\/p>\n<pre><code class=\"language-bash\">sudo systemctl restart nginx<\/code><\/pre>\n<p>Art\u0131k taray\u0131c\u0131n\u0131zda sunucunuzun IP adresine veya alan ad\u0131na giderek Flask uygulaman\u0131z\u0131n Nginx \u00fczerinden \u00e7al\u0131\u015ft\u0131\u011f\u0131n\u0131 g\u00f6rmelisiniz!<\/p>\n<h3>5. G\u00fcvenlik ve SSL\/TLS (Opsiyonel ama \u00d6nemli)<\/h3>\n<p>\u00dcretim ortam\u0131nda uygulaman\u0131z\u0131n HTTPS \u00fczerinden g\u00fcvenli bir \u015fekilde \u00e7al\u0131\u015fmas\u0131 hayati \u00f6neme sahiptir. Let&#8217;s Encrypt ve Certbot, \u00fccretsiz SSL\/TLS sertifikalar\u0131 sa\u011flamak i\u00e7in harika bir \u00e7\u00f6z\u00fcmd\u00fcr.<\/p>\n<p>1.  <strong>Certbot Kurulumu:<\/strong><\/p>\n<pre><code class=\"language-bash\">sudo snap install core\n    sudo snap refresh core\n    sudo snap install --classic certbot\n    sudo ln -s \/snap\/bin\/certbot \/usr\/bin\/certbot<\/code><\/pre>\n<p>2.  <strong>SSL Sertifikas\u0131 Alma ve Nginx Entegrasyonu:<\/strong><\/p>\n<pre><code class=\"language-bash\">sudo certbot --nginx -d your_domain.com -d www.your_domain.com<\/code><\/pre>\n<p>    Certbot, Nginx yap\u0131land\u0131rman\u0131z\u0131 otomatik olarak g\u00fcncelleyerek HTTPS&#8217;i etkinle\u015ftirecek ve HTTP isteklerini HTTPS&#8217;e y\u00f6nlendirecektir. \u0130\u015flem s\u0131ras\u0131nda e-posta adresi ve hizmet \u015fartlar\u0131n\u0131 kabul etmeniz istenecektir.<\/p>\n<p>3.  <strong>Firewall (UFW) Yap\u0131land\u0131rmas\u0131:<\/strong><br \/>\n    Daha \u00f6nce sadece HTTP&#8217;ye izin vermi\u015ftik. \u015eimdi HTTPS&#8217;e de izin vermeliyiz:<\/p>\n<pre><code class=\"language-bash\">sudo ufw allow 'Nginx HTTPS'\n    sudo ufw delete allow 'Nginx HTTP' # \u0130ste\u011fe ba\u011fl\u0131, HTTP'yi tamamen kapatmak isterseniz\n    sudo ufw reload<\/code><\/pre>\n<p>    <code>sudo ufw status<\/code> komutuyla firewall durumunu kontrol edebilirsiniz.<\/p>\n<p>Bu ad\u0131mlardan sonra uygulaman\u0131z art\u0131k <code>https:\/\/your_domain.com<\/code> \u00fczerinden g\u00fcvenli bir \u015fekilde eri\u015filebilir olacakt\u0131r.<\/p>\n<h2>Performans ve \u00d6l\u00e7eklenebilirlik \u0130pu\u00e7lar\u0131<\/h2>\n<p>Uygulaman\u0131z\u0131n \u00fcretim ortam\u0131nda en iyi performans\u0131 g\u00f6stermesi i\u00e7in baz\u0131 ek optimizasyonlar yapabilirsiniz:<\/p>\n<p><em>   <strong>Gunicorn Worker Say\u0131s\u0131:<\/strong> <code>(2 <\/em> CPU \u00e7ekirde\u011fi say\u0131s\u0131) + 1<\/code> genel bir kural olsa da, uygulaman\u0131z\u0131n bellek t\u00fcketimine ve CPU kullan\u0131m\u0131na g\u00f6re bu say\u0131y\u0131 ayarlaman\u0131z gerekebilir. Daha fazla worker, daha fazla bellek t\u00fcketimi anlam\u0131na gelir. Y\u00fcksek I\/O yo\u011funluklu uygulamalarda daha fazla worker faydal\u0131 olabilirken, CPU yo\u011fun uygulamalarda CPU \u00e7ekirde\u011fi say\u0131s\u0131na yak\u0131n bir de\u011fer daha iyi olabilir.<br \/>\n*   <strong>Gunicorn Timeout Ayar\u0131:<\/strong> Uzun s\u00fcren istekler i\u00e7in <code>gunicorn --timeout 300<\/code> gibi bir ayar ekleyebilirsiniz. Ancak, uzun s\u00fcren istekler genellikle uygulaman\u0131zda bir sorun oldu\u011funa i\u015faret eder.<br \/>\n*   <strong>Nginx \u00d6nbellekleme:<\/strong> Nginx&#8217;i s\u0131k eri\u015filen statik dosyalar veya nadiren de\u011fi\u015fen dinamik i\u00e7erikler i\u00e7in \u00f6nbellekleme yapacak \u015fekilde yap\u0131land\u0131rabilirsiniz.<br \/>\n*   <strong>Statik Dosyalar \u0130\u00e7in CDN:<\/strong> E\u011fer uygulaman\u0131z \u00e7ok say\u0131da statik dosya bar\u0131nd\u0131r\u0131yorsa ve k\u00fcresel bir kitleye hitap ediyorsa, statik dosyalar\u0131 bir CDN (Content Delivery Network) \u00fczerinden sunmak performans\u0131 \u00f6nemli \u00f6l\u00e7\u00fcde art\u0131rabilir.<br \/>\n*   <strong>Veritaban\u0131 Optimizasyonu:<\/strong> Uygulama performans\u0131n\u0131n \u00e7o\u011fu zaman veritaban\u0131 sorgular\u0131ndan kaynakland\u0131\u011f\u0131 unutulmamal\u0131d\u0131r. Veritaban\u0131 indeksleri, sorgu optimizasyonu ve ba\u011flant\u0131 havuzlar\u0131 kullanmak performans\u0131 art\u0131r\u0131r.<br \/>\n*   <strong>Loglama ve \u0130zleme:<\/strong> Uygulaman\u0131z\u0131n, Gunicorn&#8217;\u0131n ve Nginx&#8217;in loglar\u0131n\u0131 d\u00fczenli olarak izleyin. Prometheus, Grafana, ELK Stack gibi ara\u00e7larla sistem kaynaklar\u0131n\u0131 ve uygulama metriklerini izlemek, performans darbo\u011fazlar\u0131n\u0131 tespit etmenize yard\u0131mc\u0131 olur.<br \/>\n*   <strong>Gzip S\u0131k\u0131\u015ft\u0131rma:<\/strong> Nginx yap\u0131land\u0131rman\u0131za Gzip s\u0131k\u0131\u015ft\u0131rmay\u0131 etkinle\u015ftiren y\u00f6nergeler ekleyerek bant geni\u015fli\u011fi kullan\u0131m\u0131n\u0131 azaltabilir ve y\u00fckleme s\u00fcrelerini h\u0131zland\u0131rabilirsiniz.<\/p>\n<pre><code class=\"language-nginx\">gzip on;\n    gzip_types text\/plain text\/css application\/json application\/javascript text\/xml application\/xml application\/xml+rss text\/javascript;<\/code><\/pre>\n<p>*   <strong>Soket Yeri:<\/strong> Unix soketi yerine TCP soketi kullanmay\u0131 d\u00fc\u015f\u00fcnebilirsiniz (<code>--bind 127.0.0.1:8000<\/code>). Bu, Gunicorn ve Nginx&#8217;in farkl\u0131 sunucularda \u00e7al\u0131\u015ft\u0131\u011f\u0131 durumlarda gereklidir. Ayn\u0131 sunucuda ise Unix soketleri genellikle daha h\u0131zl\u0131d\u0131r.<\/p>\n<h2>S\u0131k Kar\u015f\u0131la\u015f\u0131lan Sorunlar ve \u00c7\u00f6z\u00fcmleri<\/h2>\n<p>Da\u011f\u0131t\u0131m s\u00fcrecinde kar\u015f\u0131la\u015f\u0131labilecek baz\u0131 yayg\u0131n sorunlar ve bunlar\u0131n \u00e7\u00f6z\u00fcmleri:<\/p>\n<p>*   <strong>502 Bad Gateway Hatas\u0131:<\/strong><br \/>\n    *   <strong>Neden:<\/strong> Nginx, Gunicorn&#8217;a istek g\u00f6nderemiyor veya Gunicorn&#8217;dan ge\u00e7erli bir yan\u0131t alam\u0131yor.<br \/>\n    *   <strong>\u00c7\u00f6z\u00fcm:<\/strong><br \/>\n        *   Gunicorn servisinin \u00e7al\u0131\u015f\u0131p \u00e7al\u0131\u015fmad\u0131\u011f\u0131n\u0131 kontrol edin: <code>sudo systemctl status myproject<\/code>.<br \/>\n        *   Gunicorn loglar\u0131n\u0131 kontrol edin: <code>sudo journalctl -u myproject<\/code>.<br \/>\n        *   Gunicorn soket dosyas\u0131n\u0131n do\u011fru yerde ve do\u011fru izinlerle olu\u015fturuldu\u011fundan emin olun: <code>ls -l \/var\/www\/myproject\/myproject.sock<\/code>.<br \/>\n        *   Nginx yap\u0131land\u0131rmas\u0131ndaki <code>proxy_pass<\/code> y\u00f6nergesinin soket yolunu do\u011fru i\u015faret etti\u011finden emin olun.<br \/>\n        *   Gunicorn&#8217;\u0131n yeterli belle\u011fe sahip oldu\u011fundan veya uygulaman\u0131z\u0131n ba\u015flat\u0131l\u0131rken bir hatayla kar\u015f\u0131la\u015fmad\u0131\u011f\u0131ndan emin olun.<\/p>\n<p>*   <strong>500 Internal Server Error Hatas\u0131:<\/strong><br \/>\n    *   <strong>Neden:<\/strong> Python uygulaman\u0131zda bir hata (istisna) meydana geldi.<br \/>\n    *   <strong>\u00c7\u00f6z\u00fcm:<\/strong><br \/>\n        *   Gunicorn servisinin loglar\u0131n\u0131 kontrol edin: <code>sudo journalctl -u myproject<\/code>. Genellikle Python traceback&#8217;leri burada g\u00f6r\u00fcn\u00fcr.<br \/>\n        *   Uygulaman\u0131z\u0131 geli\u015ftirme ortam\u0131nda <code>debug=True<\/code> ile \u00e7al\u0131\u015ft\u0131rarak hatay\u0131 yeniden \u00fcretmeye \u00e7al\u0131\u015f\u0131n.<\/p>\n<p>*   <strong>Statik Dosyalar\u0131n Y\u00fcklenmemesi (404 Not Found):<\/strong><br \/>\n    *   <strong>Neden:<\/strong> Nginx, statik dosyalar\u0131n\u0131z\u0131 bulam\u0131yor veya do\u011fru \u015fekilde yap\u0131land\u0131r\u0131lmam\u0131\u015f.<br \/>\n    *   <strong>\u00c7\u00f6z\u00fcm:<\/strong><br \/>\n        *   Nginx yap\u0131land\u0131rmas\u0131ndaki <code>location \/static\/<\/code> blo\u011funun do\u011fru <code>alias<\/code> yolunu i\u015faret etti\u011finden emin olun.<br \/>\n        *   Statik dosyalar\u0131n ger\u00e7ekten belirtilen yolda (<code>\/var\/www\/myproject\/static\/<\/code>) bulundu\u011fundan emin olun.<br \/>\n        *   Dosya ve dizin izinlerini kontrol edin. Nginx&#8217;in statik dosyalara eri\u015fim izni olmal\u0131 (<code>sudo chown -R www-data:www-data \/var\/www\/myproject\/static<\/code>).<\/p>\n<p>*   <strong>\u0130zin Sorunlar\u0131:<\/strong><br \/>\n    *   <strong>Neden:<\/strong> Gunicorn veya Nginx, belirli dosyalara veya dizinlere eri\u015fim iznine sahip de\u011fil.<br \/>\n    *   <strong>\u00c7\u00f6z\u00fcm:<\/strong><br \/>\n        *   Proje dizininin ve soket dosyas\u0131n\u0131n <code>www-data<\/code> grubuna ait oldu\u011fundan ve okuma\/yazma izinlerine sahip oldu\u011fundan emin olun:<\/p>\n<pre><code class=\"language-bash\">sudo chown -R your_username:www-data \/var\/www\/myproject\n            sudo chmod -R 775 \/var\/www\/myproject\n            sudo chmod g+s \/var\/www\/myproject # Yeni dosyalar\u0131n ayn\u0131 grup izinleriyle olu\u015fturulmas\u0131n\u0131 sa\u011flar<\/code><\/pre>\n<p>        *   Gunicorn servis dosyas\u0131ndaki <code>User<\/code> ve <code>Group<\/code> ayarlar\u0131n\u0131n do\u011fru oldu\u011fundan emin olun.<\/p>\n<p>*   <strong>Port \u00c7ak\u0131\u015fmalar\u0131:<\/strong><br \/>\n    *   <strong>Neden:<\/strong> Ba\u015fka bir servis (\u00f6rne\u011fin Apache) zaten Nginx&#8217;in dinlemeye \u00e7al\u0131\u015ft\u0131\u011f\u0131 portu (80 veya 443) kullan\u0131yor.<br \/>\n    *   <strong>\u00c7\u00f6z\u00fcm:<\/strong><br \/>\n        *   Hangi servislerin hangi portlar\u0131 kulland\u0131\u011f\u0131n\u0131 kontrol edin: <code>sudo netstat -tulnp<\/code>.<br \/>\n        *   \u00c7ak\u0131\u015fan servisi durdurun veya Nginx&#8217;in farkl\u0131 bir port dinlemesini sa\u011flay\u0131n (genellikle \u00f6nerilmez).<\/p>\n<h2>Sonu\u00e7<\/h2>\n<p>Python WSGI uygulamalar\u0131n\u0131 Gunicorn HTTP sunucusu ve Nginx ters proxy ile da\u011f\u0131tmak, modern web uygulamalar\u0131 i\u00e7in kan\u0131tlanm\u0131\u015f, g\u00fcvenilir ve y\u00fcksek performansl\u0131 bir \u00e7\u00f6z\u00fcmd\u00fcr. Bu makale, WSGI&#8217;nin temel prensiplerinden ba\u015flayarak, Gunicorn ve Nginx&#8217;in rollerini, da\u011f\u0131t\u0131m mimarisini ve ad\u0131m ad\u0131m kurulum ile yap\u0131land\u0131rma s\u00fcre\u00e7lerini detayl\u0131 bir \u015fekilde a\u00e7\u0131klam\u0131\u015ft\u0131r.<\/p>\n<p>Bu rehberdeki ad\u0131mlar\u0131 takip ederek, Python tabanl\u0131 Flask veya Django uygulamalar\u0131n\u0131z\u0131 \u00fcretim ortam\u0131nda g\u00fcvenli, \u00f6l\u00e7eklenebilir ve verimli bir \u015fekilde \u00e7al\u0131\u015ft\u0131rabilirsiniz. Nginx&#8217;in statik dosya sunumu, SSL sonland\u0131rma ve y\u00fck dengeleme yetenekleri ile Gunicorn&#8217;\u0131n sa\u011flam WSGI sunucu i\u015flevselli\u011fini birle\u015ftirerek, uygulaman\u0131z\u0131n y\u00fcksek trafik y\u00fckleri alt\u0131nda bile sorunsuz \u00e7al\u0131\u015fmas\u0131n\u0131 sa\u011flayacak g\u00fc\u00e7l\u00fc bir altyap\u0131 olu\u015fturmu\u015f olursunuz.<\/p>\n<p>Unutmay\u0131n ki da\u011f\u0131t\u0131m s\u00fcreci, uygulaman\u0131n kendisi kadar \u00f6nemlidir. Do\u011fru yap\u0131land\u0131rma, performans optimizasyonlar\u0131 ve d\u00fczenli izleme, uygulaman\u0131z\u0131n uzun vadeli ba\u015far\u0131s\u0131 i\u00e7in kritik \u00f6neme sahiptir. Bu temel bilgileri edinerek, Python web geli\u015ftirme ve da\u011f\u0131t\u0131m yolculu\u011funuzda \u00f6nemli bir ad\u0131m atm\u0131\u015f olacaks\u0131n\u0131z. Gelecekte, Docker konteynerizasyonu veya Kubernetes gibi daha geli\u015fmi\u015f da\u011f\u0131t\u0131m y\u00f6ntemlerini ke\u015ffederek bu mimariyi daha da ileriye ta\u015f\u0131yabilirsiniz.<br \/>\n<\/body><\/p>\n","protected":false},"excerpt":{"rendered":"Python WSGI Uygulamalar\u0131n\u0131 Gunicorn ve Nginx ile Da\u011f\u0131tma: Kapsaml\u0131 Bir Rehber\nGiri\u015f\nModern web uygulamalar\u0131n\u0131n geli\u015ftirilmesi, Python gibi","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":[1504],"tags":[],"class_list":{"0":"post-37694","1":"post","2":"type-post","3":"status-publish","4":"format-standard","6":"category-nginx","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>Python WSGI Uygulamalar\u0131n\u0131 Gunicorn ve Nginx ile Da\u011f\u0131tma: Kapsaml\u0131 Bir Rehber - 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\/python-wsgi-uygulamalarini-gunicorn-ve-nginx-ile-dagitma-kapsamli-bir-rehber\/\" \/>\n<meta property=\"og:locale\" content=\"tr_TR\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Python WSGI Uygulamalar\u0131n\u0131 Gunicorn ve Nginx ile Da\u011f\u0131tma: Kapsaml\u0131 Bir Rehber\" \/>\n<meta property=\"og:description\" content=\"Python WSGI Uygulamalar\u0131n\u0131 Gunicorn ve Nginx ile Da\u011f\u0131tma: Kapsaml\u0131 Bir Rehber Giri\u015f Modern web uygulamalar\u0131n\u0131n geli\u015ftirilmesi, Python gibi\" \/>\n<meta property=\"og:url\" content=\"https:\/\/fatihsoysal.com\/blog\/python-wsgi-uygulamalarini-gunicorn-ve-nginx-ile-dagitma-kapsamli-bir-rehber\/\" \/>\n<meta property=\"og:site_name\" content=\"Kodlar\u0131n Gizemli D\u00fcnyas\u0131\" \/>\n<meta property=\"article:published_time\" content=\"2026-01-12T17: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=\"21 dakika\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/python-wsgi-uygulamalarini-gunicorn-ve-nginx-ile-dagitma-kapsamli-bir-rehber\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/python-wsgi-uygulamalarini-gunicorn-ve-nginx-ile-dagitma-kapsamli-bir-rehber\/\"},\"author\":{\"name\":\"Fatih Soysal\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1\"},\"headline\":\"Python WSGI Uygulamalar\u0131n\u0131 Gunicorn ve Nginx ile Da\u011f\u0131tma: Kapsaml\u0131 Bir Rehber\",\"datePublished\":\"2026-01-12T17:41:16+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/python-wsgi-uygulamalarini-gunicorn-ve-nginx-ile-dagitma-kapsamli-bir-rehber\/\"},\"wordCount\":3501,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1\"},\"articleSection\":[\"Nginx\"],\"inLanguage\":\"tr\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/fatihsoysal.com\/blog\/python-wsgi-uygulamalarini-gunicorn-ve-nginx-ile-dagitma-kapsamli-bir-rehber\/#respond\"]}],\"copyrightYear\":\"2026\",\"copyrightHolder\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#organization\"}},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/python-wsgi-uygulamalarini-gunicorn-ve-nginx-ile-dagitma-kapsamli-bir-rehber\/\",\"url\":\"https:\/\/fatihsoysal.com\/blog\/python-wsgi-uygulamalarini-gunicorn-ve-nginx-ile-dagitma-kapsamli-bir-rehber\/\",\"name\":\"Python WSGI Uygulamalar\u0131n\u0131 Gunicorn ve Nginx ile Da\u011f\u0131tma: Kapsaml\u0131 Bir Rehber - Kodlar\u0131n Gizemli D\u00fcnyas\u0131\",\"isPartOf\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#website\"},\"datePublished\":\"2026-01-12T17:41:16+00:00\",\"breadcrumb\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/python-wsgi-uygulamalarini-gunicorn-ve-nginx-ile-dagitma-kapsamli-bir-rehber\/#breadcrumb\"},\"inLanguage\":\"tr\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/fatihsoysal.com\/blog\/python-wsgi-uygulamalarini-gunicorn-ve-nginx-ile-dagitma-kapsamli-bir-rehber\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/python-wsgi-uygulamalarini-gunicorn-ve-nginx-ile-dagitma-kapsamli-bir-rehber\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Anasayfa\",\"item\":\"https:\/\/fatihsoysal.com\/blog\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Python WSGI Uygulamalar\u0131n\u0131 Gunicorn ve Nginx ile Da\u011f\u0131tma: Kapsaml\u0131 Bir Rehber\"}]},{\"@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":"Python WSGI Uygulamalar\u0131n\u0131 Gunicorn ve Nginx ile Da\u011f\u0131tma: Kapsaml\u0131 Bir Rehber - 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\/python-wsgi-uygulamalarini-gunicorn-ve-nginx-ile-dagitma-kapsamli-bir-rehber\/","og_locale":"tr_TR","og_type":"article","og_title":"Python WSGI Uygulamalar\u0131n\u0131 Gunicorn ve Nginx ile Da\u011f\u0131tma: Kapsaml\u0131 Bir Rehber","og_description":"Python WSGI Uygulamalar\u0131n\u0131 Gunicorn ve Nginx ile Da\u011f\u0131tma: Kapsaml\u0131 Bir Rehber Giri\u015f Modern web uygulamalar\u0131n\u0131n geli\u015ftirilmesi, Python gibi","og_url":"https:\/\/fatihsoysal.com\/blog\/python-wsgi-uygulamalarini-gunicorn-ve-nginx-ile-dagitma-kapsamli-bir-rehber\/","og_site_name":"Kodlar\u0131n Gizemli D\u00fcnyas\u0131","article_published_time":"2026-01-12T17:41:16+00:00","author":"Fatih Soysal","twitter_card":"summary_large_image","twitter_misc":{"Yazan:":"Fatih Soysal","Tahmini okuma s\u00fcresi":"21 dakika"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/fatihsoysal.com\/blog\/python-wsgi-uygulamalarini-gunicorn-ve-nginx-ile-dagitma-kapsamli-bir-rehber\/#article","isPartOf":{"@id":"https:\/\/fatihsoysal.com\/blog\/python-wsgi-uygulamalarini-gunicorn-ve-nginx-ile-dagitma-kapsamli-bir-rehber\/"},"author":{"name":"Fatih Soysal","@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1"},"headline":"Python WSGI Uygulamalar\u0131n\u0131 Gunicorn ve Nginx ile Da\u011f\u0131tma: Kapsaml\u0131 Bir Rehber","datePublished":"2026-01-12T17:41:16+00:00","mainEntityOfPage":{"@id":"https:\/\/fatihsoysal.com\/blog\/python-wsgi-uygulamalarini-gunicorn-ve-nginx-ile-dagitma-kapsamli-bir-rehber\/"},"wordCount":3501,"commentCount":0,"publisher":{"@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1"},"articleSection":["Nginx"],"inLanguage":"tr","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/fatihsoysal.com\/blog\/python-wsgi-uygulamalarini-gunicorn-ve-nginx-ile-dagitma-kapsamli-bir-rehber\/#respond"]}],"copyrightYear":"2026","copyrightHolder":{"@id":"https:\/\/fatihsoysal.com\/blog\/#organization"}},{"@type":"WebPage","@id":"https:\/\/fatihsoysal.com\/blog\/python-wsgi-uygulamalarini-gunicorn-ve-nginx-ile-dagitma-kapsamli-bir-rehber\/","url":"https:\/\/fatihsoysal.com\/blog\/python-wsgi-uygulamalarini-gunicorn-ve-nginx-ile-dagitma-kapsamli-bir-rehber\/","name":"Python WSGI Uygulamalar\u0131n\u0131 Gunicorn ve Nginx ile Da\u011f\u0131tma: Kapsaml\u0131 Bir Rehber - Kodlar\u0131n Gizemli D\u00fcnyas\u0131","isPartOf":{"@id":"https:\/\/fatihsoysal.com\/blog\/#website"},"datePublished":"2026-01-12T17:41:16+00:00","breadcrumb":{"@id":"https:\/\/fatihsoysal.com\/blog\/python-wsgi-uygulamalarini-gunicorn-ve-nginx-ile-dagitma-kapsamli-bir-rehber\/#breadcrumb"},"inLanguage":"tr","potentialAction":[{"@type":"ReadAction","target":["https:\/\/fatihsoysal.com\/blog\/python-wsgi-uygulamalarini-gunicorn-ve-nginx-ile-dagitma-kapsamli-bir-rehber\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/fatihsoysal.com\/blog\/python-wsgi-uygulamalarini-gunicorn-ve-nginx-ile-dagitma-kapsamli-bir-rehber\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Anasayfa","item":"https:\/\/fatihsoysal.com\/blog\/"},{"@type":"ListItem","position":2,"name":"Python WSGI Uygulamalar\u0131n\u0131 Gunicorn ve Nginx ile Da\u011f\u0131tma: Kapsaml\u0131 Bir Rehber"}]},{"@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\/37694","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=37694"}],"version-history":[{"count":1,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/posts\/37694\/revisions"}],"predecessor-version":[{"id":37695,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/posts\/37694\/revisions\/37695"}],"wp:attachment":[{"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/media?parent=37694"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/categories?post=37694"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/tags?post=37694"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}