{"id":31119,"date":"2025-10-06T00:41:07","date_gmt":"2025-10-05T21:41:07","guid":{"rendered":"https:\/\/fatihsoysal.com\/blog\/?p=31119"},"modified":"2025-10-06T00:41:07","modified_gmt":"2025-10-05T21:41:07","slug":"flask-uygulamalarini-gunicorn-ve-nginx-ile-ubuntu-14-04-uzerinde-dagitma","status":"publish","type":"post","link":"https:\/\/fatihsoysal.com\/blog\/flask-uygulamalarini-gunicorn-ve-nginx-ile-ubuntu-14-04-uzerinde-dagitma\/","title":{"rendered":"Flask Uygulamalar\u0131n\u0131 Gunicorn ve Nginx ile Ubuntu 14.04 \u00dczerinde Da\u011f\u0131tma"},"content":{"rendered":"<p><body><\/p>\n<h2>Flask Uygulamalar\u0131n\u0131 Gunicorn ve Nginx ile Ubuntu 14.04 \u00dczerinde Da\u011f\u0131tma<\/h2>\n<p>Bu kapsaml\u0131 teknik makalede, bir Flask web uygulamas\u0131n\u0131 \u00fcretim ortam\u0131nda Gunicorn ve Nginx kullanarak Ubuntu 14.04 sunucusunda nas\u0131l da\u011f\u0131taca\u011f\u0131n\u0131z\u0131 ad\u0131m ad\u0131m \u00f6\u011freneceksiniz. Flask, Python ile h\u0131zl\u0131 ve verimli web uygulamalar\u0131 geli\u015ftirmek i\u00e7in pop\u00fcler bir mikro-\u00e7er\u00e7evedir. Ancak, geli\u015ftirme sunucusu (Flask&#8217;\u0131n kendi i\u00e7erisinde gelen <code>app.run()<\/code>) yaln\u0131zca geli\u015ftirme ama\u00e7l\u0131d\u0131r ve \u00fcretim ortam\u0131nda kullan\u0131lmamal\u0131d\u0131r. \u00dcretim ortam\u0131nda, uygulaman\u0131z\u0131n trafi\u011fi g\u00fcvenli, \u00f6l\u00e7eklenebilir ve performansl\u0131 bir \u015fekilde y\u00f6netilmesi i\u00e7in \u00f6zel ara\u00e7lara ihtiyac\u0131n\u0131z vard\u0131r. \u0130\u015fte bu noktada Gunicorn bir WSGI sunucusu olarak ve Nginx ise bir ters proxy sunucusu olarak devreye girer.<\/p>\n<p>Ubuntu 14.04, eski bir LTS (Uzun S\u00fcreli Destek) s\u00fcr\u00fcm\u00fc olmas\u0131na ra\u011fmen, bir\u00e7ok kurulu\u015fta hala aktif olarak kullan\u0131lmaktad\u0131r. Bu makale, \u00f6zellikle bu belirli i\u015fletim sistemi s\u00fcr\u00fcm\u00fcne odaklanarak, Gunicorn&#8217;\u0131n bir Upstart hizmeti olarak nas\u0131l yap\u0131land\u0131r\u0131laca\u011f\u0131n\u0131 ve Nginx&#8217;in gelen istekleri bu hizmete nas\u0131l y\u00f6nlendirece\u011fini ayr\u0131nt\u0131l\u0131 olarak a\u00e7\u0131klayacakt\u0131r.<\/p>\n<h3>Giri\u015f: Neden Gunicorn ve Nginx?<\/h3>\n<p>Flask gibi Python tabanl\u0131 web \u00e7er\u00e7eveleri, HTTP isteklerini do\u011frudan i\u015flemek i\u00e7in tasarlanmam\u0131\u015ft\u0131r. Bunun yerine, &#8220;Web Sunucusu A\u011f Ge\u00e7idi Aray\u00fcz\u00fc&#8221; (WSGI) ad\u0131 verilen bir standard\u0131 kullanarak web sunucular\u0131yla ileti\u015fim kurarlar. Gunicorn (Green Unicorn), Python WSGI uygulamalar\u0131 i\u00e7in sa\u011flam, h\u0131zl\u0131 ve kullan\u0131m\u0131 kolay bir \u00fcretim sunucusudur. Flask uygulaman\u0131z ile Nginx aras\u0131nda bir k\u00f6pr\u00fc g\u00f6revi g\u00f6r\u00fcr, uygulaman\u0131z\u0131n birden fazla \u00f6rne\u011fini \u00e7al\u0131\u015ft\u0131rabilir ve istekleri bunlara da\u011f\u0131tabilir.<\/p>\n<p>Nginx ise y\u00fcksek performansl\u0131, a\u00e7\u0131k kaynakl\u0131 bir web sunucusu ve ters proxy&#8217;dir. Flask uygulaman\u0131z\u0131 do\u011frudan internete a\u00e7mak yerine, Nginx&#8217;i bir ters proxy olarak kullanmak bir\u00e7ok avantaj sa\u011flar:<\/p>\n<p>*   <strong>Performans:<\/strong> Nginx, statik dosyalar\u0131 (CSS, JavaScript, resimler) do\u011frudan sunarak Flask uygulaman\u0131z\u0131n bu t\u00fcr isteklerle u\u011fra\u015fmas\u0131n\u0131 engeller, bu da performans\u0131 art\u0131r\u0131r.<br \/>\n*   <strong>G\u00fcvenlik:<\/strong> Nginx, uygulaman\u0131z ile d\u0131\u015f d\u00fcnya aras\u0131nda bir katman olu\u015fturarak \u00e7e\u015fitli g\u00fcvenlik tehditlerine kar\u015f\u0131 koruma sa\u011flar.<br \/>\n*   <strong>Y\u00fck Dengeleme:<\/strong> Birden fazla Gunicorn \u00f6rne\u011fi \u00e7al\u0131\u015ft\u0131r\u0131yorsan\u0131z, Nginx gelen istekleri bu \u00f6rneklere da\u011f\u0131tarak y\u00fck dengelemesi yapabilir.<br \/>\n*   <strong>SSL\/TLS \u015eifreleme:<\/strong> Nginx, HTTPS trafi\u011fini y\u00f6netmek ve SSL sertifikalar\u0131n\u0131 sonland\u0131rmak i\u00e7in idealdir.<br \/>\n*   <strong>S\u0131k\u0131\u015ft\u0131rma ve \u00d6nbellekleme:<\/strong> Nginx, yan\u0131tlar\u0131 s\u0131k\u0131\u015ft\u0131rabilir ve \u00f6nbelle\u011fe alabilir, bu da bant geni\u015fli\u011fini azalt\u0131r ve yan\u0131t s\u00fcrelerini iyile\u015ftirir.<\/p>\n<p>Bu k\u0131lavuz, Ubuntu 14.04&#8217;te bu ara\u00e7lar\u0131 kullanarak Flask uygulaman\u0131z\u0131 g\u00fcvenli ve verimli bir \u015fekilde nas\u0131l da\u011f\u0131taca\u011f\u0131n\u0131z\u0131 ad\u0131m ad\u0131m g\u00f6sterecektir.<\/p>\n<h3>\u00d6n Gereksinimler<\/h3>\n<p>Bu k\u0131lavuzu takip etmek i\u00e7in a\u015fa\u011f\u0131daki \u00f6n gereksinimlere sahip olman\u0131z gerekmektedir:<\/p>\n<p>*   Ubuntu 14.04 y\u00fckl\u00fc bir sunucu (SSH eri\u015fimi ile).<br \/>\n*   Temel Linux komut sat\u0131r\u0131 bilgisi.<br \/>\n*   Sunucunuzda <code>sudo<\/code> yetkilerine sahip bir kullan\u0131c\u0131.<br \/>\n*   \u0130ste\u011fe ba\u011fl\u0131 olarak, sunucunuzu i\u015faret eden bir alan ad\u0131 (aksi takdirde IP adresi ile eri\u015fim sa\u011flayabilirsiniz).<\/p>\n<h3>Sunucu Haz\u0131rl\u0131\u011f\u0131 ve Python Ortam\u0131 Kurulumu<\/h3>\n<p>\u0130lk ad\u0131m, sunucunuzu haz\u0131rlamak ve Flask uygulaman\u0131z i\u00e7in gerekli Python ortam\u0131n\u0131 kurmakt\u0131r.<\/p>\n<h4>Sistem G\u00fcncellemesi ve Temel Paketlerin Kurulumu<\/h4>\n<p>Sunucunuzdaki paket listelerini g\u00fcncelleyerek ve y\u00fckl\u00fc paketleri y\u00fckselterek ba\u015flay\u0131n:<\/p>\n<pre><code class=\"language-bash\">sudo apt-get update\nsudo apt-get upgrade<\/code><\/pre>\n<p>Ard\u0131ndan, Python uygulamalar\u0131 geli\u015ftirmek ve \u00e7al\u0131\u015ft\u0131rmak i\u00e7in gerekli olan <code>pip<\/code> (Python paket y\u00f6neticisi) ve di\u011fer geli\u015ftirme ara\u00e7lar\u0131n\u0131 y\u00fckleyin:<\/p>\n<pre><code class=\"language-bash\">sudo apt-get install python-pip python-dev build-essential<\/code><\/pre>\n<p>Ubuntu 14.04 varsay\u0131lan olarak Python 2.7 ile gelir. E\u011fer Python 3 kullanmak istiyorsan\u0131z, <code>python3-pip<\/code> ve <code>python3-dev<\/code> gibi paketleri y\u00fcklemeniz gerekebilir. Bu k\u0131lavuz Python 2.7&#8217;yi varsayacakt\u0131r, ancak ad\u0131mlar Python 3 i\u00e7in de benzerdir (sadece <code>python<\/code> yerine <code>python3<\/code>, <code>pip<\/code> yerine <code>pip3<\/code> kullanman\u0131z gerekebilir).<\/p>\n<h4>Uygulama Kullan\u0131c\u0131s\u0131 ve Dizini Olu\u015fturma<\/h4>\n<p>G\u00fcvenlik a\u00e7\u0131s\u0131ndan, web uygulaman\u0131z\u0131 do\u011frudan <code>root<\/code> kullan\u0131c\u0131s\u0131 alt\u0131nda \u00e7al\u0131\u015ft\u0131rmamak en iyi uygulamad\u0131r. Uygulaman\u0131z i\u00e7in \u00f6zel bir sistem kullan\u0131c\u0131s\u0131 ve dizini olu\u015ftural\u0131m.<\/p>\n<pre><code class=\"language-bash\">sudo adduser --system --no-create-home flask_user\nsudo mkdir -p \/var\/www\/myflaskapp\nsudo chown -R flask_user:flask_user \/var\/www\/myflaskapp<\/code><\/pre>\n<p>Burada <code>flask_user<\/code> ad\u0131nda ev dizini olmayan bir sistem kullan\u0131c\u0131s\u0131 olu\u015fturduk ve uygulaman\u0131z\u0131n dosyalar\u0131n\u0131 bar\u0131nd\u0131racak <code>\/var\/www\/myflaskapp<\/code> dizinini olu\u015fturup sahibini <code>flask_user<\/code> olarak ayarlad\u0131k.<\/p>\n<p>\u015eimdi, uygulaman\u0131z\u0131n dizinine gidin ve sanal bir Python ortam\u0131 olu\u015fturun. Sanal ortamlar, projenizin ba\u011f\u0131ml\u0131l\u0131klar\u0131n\u0131 sistem genelindeki Python kurulumundan izole etmenizi sa\u011flar.<\/p>\n<pre><code class=\"language-bash\">cd \/var\/www\/myflaskapp\nsudo pip install virtualenv # E\u011fer y\u00fckl\u00fc de\u011filse\nvirtualenv venv<\/code><\/pre>\n<p>Sanal ortam\u0131 etkinle\u015ftirin:<\/p>\n<pre><code class=\"language-bash\">source venv\/bin\/activate<\/code><\/pre>\n<p>Art\u0131k komut isteminizin ba\u015f\u0131nda <code>(venv)<\/code> ifadesini g\u00f6rmelisiniz, bu da sanal ortam\u0131n etkin oldu\u011funu g\u00f6sterir.<\/p>\n<h3>Flask Uygulamas\u0131 Olu\u015fturma<\/h3>\n<p>\u015eimdi, da\u011f\u0131taca\u011f\u0131m\u0131z basit bir Flask uygulamas\u0131 olu\u015ftural\u0131m.<\/p>\n<h4>\u00d6rnek Flask Uygulamas\u0131<\/h4>\n<p><code>\/var\/www\/myflaskapp<\/code> dizini i\u00e7inde <code>app.py<\/code> ad\u0131nda bir dosya olu\u015fturun:<\/p>\n<pre><code class=\"language-bash\">nano app.py<\/code><\/pre>\n<p>\u0130\u00e7eri\u011fini a\u015fa\u011f\u0131daki gibi yap\u0131\u015ft\u0131r\u0131n:<\/p>\n<pre><code class=\"language-python\">from flask import Flask, render_template_string, send_from_directory\nimport os\n\napp = Flask(__name__)\n\n<h2>Basit bir ana sayfa<\/h2>\n@app.route('\/')\ndef home():\n    return render_template_string('<p>Bu bir Flask uygulamas\u0131n\u0131n \u00fcretim da\u011f\u0131t\u0131m\u0131d\u0131r.<\/p><p><img decoding=\"async\" src=\"\/static\/logo.png\" alt=\"Flask Logo\"><\/p>')\n\n<h2>Statik dosyalar i\u00e7in bir \u00f6rnek<\/h2>\n@app.route('\/static\/<path:filename>')\ndef static_files(filename):\n    return send_from_directory(app.root_path + '\/static', filename)\n\nif __name__ == '__main__':\n    app.run(debug=True)<\/code><\/pre>\n<p>Bu \u00f6rnek, ana dizinde basit bir &#8220;Merhaba&#8221; mesaj\u0131 d\u00f6nd\u00fcren ve <code>\/static<\/code> URL&#8217;sinden statik dosyalar\u0131 sunan bir Flask uygulamas\u0131d\u0131r. Statik dosyalar\u0131 test etmek i\u00e7in, <code>\/var\/www\/myflaskapp\/static<\/code> dizini olu\u015fturup i\u00e7ine bir <code>logo.png<\/code> veya herhangi bir resim dosyas\u0131 koyabilirsiniz.<\/p>\n<pre><code class=\"language-bash\">mkdir static\n<h2>\u015eimdi bu dizine bir logo.png dosyas\u0131 kopyalay\u0131n, \u00f6rne\u011fin scp ile.<\/h2>\n<h2>scp \/path\/to\/local\/logo.png user@your_server_ip:\/var\/www\/myflaskapp\/static\/<\/code><\/pre>\n<\/h2>\n<h4>Ba\u011f\u0131ml\u0131l\u0131klar\u0131 Y\u00fckleme<\/h4>\n<p>Uygulaman\u0131z\u0131n ihtiya\u00e7 duydu\u011fu Python paketlerini (bu durumda sadece <code>Flask<\/code>) listeleyen bir <code>requirements.txt<\/code> dosyas\u0131 olu\u015fturun:<\/p>\n<pre><code class=\"language-bash\">nano requirements.txt<\/code><\/pre>\n<p>\u0130\u00e7eri\u011fi:<\/p>\n<pre><code class=\"language-\">Flask<\/code><\/pre>\n<p>\u015eimdi bu ba\u011f\u0131ml\u0131l\u0131klar\u0131 sanal ortam\u0131n\u0131za y\u00fckleyin:<\/p>\n<pre><code class=\"language-bash\">pip install -r requirements.txt<\/code><\/pre>\n<h4>Uygulamay\u0131 Test Etme<\/h4>\n<p>Uygulaman\u0131z\u0131n d\u00fczg\u00fcn \u00e7al\u0131\u015ft\u0131\u011f\u0131ndan emin olmak i\u00e7in Gunicorn ile yerel olarak test edebilirsiniz. \u00d6nce sanal ortam\u0131n\u0131z\u0131n etkin oldu\u011fundan emin olun (<code>source venv\/bin\/activate<\/code>).<\/p>\n<pre><code class=\"language-bash\">gunicorn --bind 0.0.0.0:5000 app:app<\/code><\/pre>\n<p>Bu komut, Gunicorn&#8217;\u0131 uygulaman\u0131z\u0131 5000 numaral\u0131 portta t\u00fcm aray\u00fczlerde dinleyecek \u015fekilde ba\u015flat\u0131r. <code>app:app<\/code> ifadesi, <code>app.py<\/code> dosyas\u0131ndaki (mod\u00fcl ad\u0131 <code>app<\/code>) <code>app<\/code> adl\u0131 Flask uygulama \u00f6rne\u011fini belirtir.<\/p>\n<p>\u015eimdi sunucunuzun IP adresi ve 5000 portu \u00fczerinden (\u00f6rn. <code>http:\/\/your_server_ip:5000<\/code>) bir web taray\u0131c\u0131s\u0131yla eri\u015fmeye \u00e7al\u0131\u015f\u0131n. &#8220;Merhaba Gunicorn ve Nginx ile Flask!&#8221; mesaj\u0131n\u0131 g\u00f6rmelisiniz. Testi bitirdi\u011finizde <code>Ctrl+C<\/code> ile Gunicorn&#8217;\u0131 durdurabilirsiniz.<\/p>\n<h3>Gunicorn Kurulumu ve Yap\u0131land\u0131rmas\u0131 (Upstart ile)<\/h3>\n<p>Gunicorn&#8217;\u0131 bir \u00fcretim sunucusu olarak \u00e7al\u0131\u015ft\u0131rmak i\u00e7in, onu bir Upstart hizmeti olarak yap\u0131land\u0131rmam\u0131z gerekiyor. Ubuntu 14.04, <code>systemd<\/code> yerine <code>Upstart<\/code> kullan\u0131r.<\/p>\n<h4>Gunicorn Kurulumu<\/h4>\n<p>Sanal ortam\u0131n\u0131z etkin durumdayken Gunicorn&#8217;\u0131 y\u00fckleyin:<\/p>\n<pre><code class=\"language-bash\">pip install gunicorn<\/code><\/pre>\n<h4>Upstart Servisi Olu\u015fturma<\/h4>\n<p>Gunicorn&#8217;\u0131 bir Upstart servisi olarak y\u00f6netmek i\u00e7in <code>\/etc\/init\/myflaskapp.conf<\/code> ad\u0131nda bir dosya olu\u015fturun:<\/p>\n<pre><code class=\"language-bash\">sudo nano \/etc\/init\/myflaskapp.conf<\/code><\/pre>\n<p>\u0130\u00e7eri\u011fini a\u015fa\u011f\u0131daki gibi yap\u0131\u015ft\u0131r\u0131n:<\/p>\n<pre><code class=\"language-\">description \"Gunicorn server for myflaskapp\"\n\nstart on runlevel [2345]\nstop on runlevel [!2345]\n\nrespawn\nrespawn limit 10 5\n\nsetuid flask_user\nsetgid www-data\n\nchdir \/var\/www\/myflaskapp\n\nexec \/var\/www\/myflaskapp\/venv\/bin\/gunicorn --workers 3 --bind unix:\/tmp\/myflaskapp.sock app:app<\/code><\/pre>\n<p>Bu Upstart yap\u0131land\u0131rma dosyas\u0131 a\u015fa\u011f\u0131daki anlamlara gelir:<\/p>\n<p>*   <code>description<\/code>: Servisin k\u0131sa bir a\u00e7\u0131klamas\u0131.<br \/>\n*   <code>start on runlevel [2345]<\/code>: Servisin \u00e7ok kullan\u0131c\u0131l\u0131 grafiksel olmayan veya grafiksel ortamda otomatik olarak ba\u015flamas\u0131n\u0131 sa\u011flar.<br \/>\n*   <code>stop on runlevel [!2345]<\/code>: Servisin bu \u00e7al\u0131\u015fma seviyeleri d\u0131\u015f\u0131nda durdurulmas\u0131n\u0131 sa\u011flar (\u00f6rn. kapanma veya tek kullan\u0131c\u0131 modu).<br \/>\n*   <code>respawn<\/code>: Servis beklenmedik bir \u015fekilde durursa otomatik olarak yeniden ba\u015flat\u0131l\u0131r.<br \/>\n*   <code>respawn limit 10 5<\/code>: 5 saniye i\u00e7inde 10&#8217;dan fazla yeniden ba\u015flatma denemesi ba\u015far\u0131s\u0131z olursa servisi durdurur.<br \/>\n*   <code>setuid flask_user<\/code>: Gunicorn s\u00fcrecini <code>flask_user<\/code> kullan\u0131c\u0131s\u0131 olarak \u00e7al\u0131\u015ft\u0131r\u0131r.<br \/>\n*   <code>setgid www-data<\/code>: Gunicorn s\u00fcrecini <code>www-data<\/code> grubuna atar. Bu, Nginx&#8217;in Gunicorn soketine eri\u015febilmesi i\u00e7in \u00f6nemlidir.<br \/>\n*   <code>chdir \/var\/www\/myflaskapp<\/code>: Gunicorn&#8217;\u0131n \u00e7al\u0131\u015faca\u011f\u0131 dizini belirtir.<br \/>\n*   <code>exec ...<\/code>: \u00c7al\u0131\u015ft\u0131r\u0131lacak komutu belirtir. Burada sanal ortamdaki Gunicorn&#8217;\u0131, 3 \u00e7al\u0131\u015fan s\u00fcre\u00e7le (<code>--workers 3<\/code>), Nginx ile ileti\u015fim kurmak i\u00e7in bir Unix soket dosyas\u0131na (<code>--bind unix:\/tmp\/myflaskapp.sock<\/code>) ba\u011flanarak ve <code>app.py<\/code> dosyas\u0131ndaki <code>app<\/code> uygulamas\u0131n\u0131 kullanarak ba\u015flat\u0131yoruz.<\/p>\n<p>\u00c7al\u0131\u015fan say\u0131s\u0131 (<code>--workers<\/code>), sunucunuzun CPU \u00e7ekirdek say\u0131s\u0131na g\u00f6re ayarlanmal\u0131d\u0131r. Genel bir kural olarak <code>(2 * CPU_\u00e7ekirdek_say\u0131s\u0131) + 1<\/code> form\u00fcl\u00fc kullan\u0131labilir.<\/p>\n<h4>Gunicorn Servisini Ba\u015flatma<\/h4>\n<p>\u015eimdi Gunicorn servisini ba\u015flat\u0131n:<\/p>\n<pre><code class=\"language-bash\">sudo start myflaskapp<\/code><\/pre>\n<p>Servisin durumunu kontrol edebilirsiniz:<\/p>\n<pre><code class=\"language-bash\">sudo status myflaskapp<\/code><\/pre>\n<p>\u00c7\u0131kt\u0131da <code>myflaskapp start\/running<\/code> gibi bir ifade g\u00f6rmelisiniz. Ayr\u0131ca, Gunicorn&#8217;\u0131n Unix soket dosyas\u0131n\u0131 olu\u015fturup olu\u015fturmad\u0131\u011f\u0131n\u0131 da kontrol edin:<\/p>\n<pre><code class=\"language-bash\">ls -l \/tmp\/myflaskapp.sock<\/code><\/pre>\n<p>\u00c7\u0131kt\u0131da <code>srwxrwxr-x<\/code> ile ba\u015flayan bir dosya g\u00f6rmelisiniz, bu bir Unix soketi oldu\u011funu ve do\u011fru izinlere sahip oldu\u011funu g\u00f6sterir.<\/p>\n<h3>Nginx Kurulumu ve Yap\u0131land\u0131rmas\u0131<\/h3>\n<p>Gunicorn servisi art\u0131k arka planda \u00e7al\u0131\u015f\u0131yor ve Flask uygulaman\u0131z\u0131 Unix soketi \u00fczerinden sunmaya haz\u0131r. \u015eimdi Nginx&#8217;i kurup yap\u0131land\u0131rarak gelen web isteklerini bu sokete y\u00f6nlendirece\u011fiz.<\/p>\n<h4>Nginx Kurulumu<\/h4>\n<p>Nginx&#8217;i y\u00fckleyin:<\/p>\n<pre><code class=\"language-bash\">sudo apt-get install nginx<\/code><\/pre>\n<p>Nginx y\u00fcklendikten sonra otomatik olarak ba\u015flayacakt\u0131r. Taray\u0131c\u0131n\u0131zdan sunucunuzun IP adresine giderek varsay\u0131lan Nginx kar\u015f\u0131lama sayfas\u0131n\u0131 g\u00f6rmelisiniz.<\/p>\n<h4>Nginx Varsay\u0131lan Yap\u0131land\u0131rmas\u0131n\u0131 Devre D\u0131\u015f\u0131 B\u0131rakma<\/h4>\n<p>Varsay\u0131lan Nginx yap\u0131land\u0131rmas\u0131n\u0131 devre d\u0131\u015f\u0131 b\u0131rak\u0131n, b\u00f6ylece kendi yap\u0131land\u0131rmam\u0131z\u0131 kullanabiliriz:<\/p>\n<pre><code class=\"language-bash\">sudo rm \/etc\/nginx\/sites-enabled\/default<\/code><\/pre>\n<h4>Nginx Sunucu Blo\u011fu Olu\u015fturma<\/h4>\n<p>Uygulaman\u0131z i\u00e7in yeni bir Nginx sunucu blo\u011fu yap\u0131land\u0131rma dosyas\u0131 olu\u015fturun:<\/p>\n<pre><code class=\"language-bash\">sudo nano \/etc\/nginx\/sites-available\/myflaskapp<\/code><\/pre>\n<p>\u0130\u00e7eri\u011fini a\u015fa\u011f\u0131daki gibi yap\u0131\u015ft\u0131r\u0131n. <code>your_domain.com<\/code> ve <code>www.your_domain.com<\/code> yerine kendi alan ad\u0131n\u0131z\u0131 veya sunucunuzun IP adresini yazmay\u0131 unutmay\u0131n.<\/p>\n<pre><code class=\"language-nginx\">server {\n    listen 80;\n    server_name your_domain.com www.your_domain.com your_server_ip;\n\n    # Flask uygulamas\u0131n\u0131n statik dosyalar\u0131n\u0131 Nginx \u00fczerinden sun\n    location \/static {\n        alias \/var\/www\/myflaskapp\/static;\n        expires 30d; # Statik dosyalar i\u00e7in \u00f6nbellekleme\n        add_header Cache-Control \"public, no-transform\";\n    }\n\n    # Gelen t\u00fcm di\u011fer istekleri Gunicorn'a y\u00f6nlendir\n    location \/ {\n        include proxy_params;\n        proxy_pass http:\/\/unix:\/tmp\/myflaskapp.sock;\n        proxy_set_header Host $host;\n        proxy_set_header X-Real-IP $remote_addr;\n        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;\n        proxy_set_header X-Forwarded-Proto $scheme;\n    }\n}<\/code><\/pre>\n<p>Bu Nginx yap\u0131land\u0131rma dosyas\u0131 a\u015fa\u011f\u0131daki anlamlara gelir:<\/p>\n<p>*   <code>listen 80;<\/code>: Nginx&#8217;in 80 numaral\u0131 portu (HTTP) dinlemesini sa\u011flar.<br \/>\n*   <code>server_name ...;<\/code>: Bu sunucu blo\u011funun hangi alan adlar\u0131 veya IP adresleri i\u00e7in ge\u00e7erli oldu\u011funu belirtir.<br \/>\n*   <code>location \/static { ... }<\/code>: <code>\/static<\/code> ile ba\u015flayan URL&#8217;ler i\u00e7in Nginx&#8217;in <code>\/var\/www\/myflaskapp\/static<\/code> dizinindeki dosyalar\u0131 do\u011frudan sunmas\u0131n\u0131 sa\u011flar. Bu, Flask uygulaman\u0131z\u0131n statik dosyalarla u\u011fra\u015fmas\u0131n\u0131 engeller ve performans\u0131 art\u0131r\u0131r. <code>expires<\/code> ve <code>add_header<\/code> y\u00f6nergeleri, taray\u0131c\u0131 \u00f6nbelleklemesini etkinle\u015ftirir.<br \/>\n*   <code>location \/ { ... }<\/code>: Di\u011fer t\u00fcm gelen istekler i\u00e7in Nginx&#8217;in bu blo\u011fu kullanmas\u0131n\u0131 sa\u011flar.<br \/>\n*   <code>include proxy_params;<\/code>: Nginx&#8217;in Gunicorn&#8217;a iletmesi gereken standart proxy ba\u015fl\u0131klar\u0131n\u0131 i\u00e7erir. Bu dosya genellikle <code>\/etc\/nginx\/proxy_params<\/code> veya <code>\/etc\/nginx\/fastcgi_params<\/code> gibi bir yerde bulunur ve <code>Host<\/code>, <code>X-Real-IP<\/code> gibi \u00f6nemli ba\u015fl\u0131klar\u0131 ayarlar.<br \/>\n*   <code>proxy_pass http:\/\/unix:\/tmp\/myflaskapp.sock;<\/code>: Gelen istekleri Gunicorn&#8217;\u0131n dinledi\u011fi Unix soketine y\u00f6nlendirir.<br \/>\n*   <code>proxy_set_header ...;<\/code>: Bu ba\u015fl\u0131klar, orijinal istemci bilgilerini Gunicorn&#8217;a iletir, bu da uygulaman\u0131z\u0131n do\u011fru IP adresini ve protokol\u00fc bilmesini sa\u011flar.<\/p>\n<h4>Nginx Yap\u0131land\u0131rmas\u0131n\u0131 Etkinle\u015ftirme<\/h4>\n<p>Olu\u015fturdu\u011funuz yap\u0131land\u0131rma dosyas\u0131n\u0131 <code>sites-enabled<\/code> dizinine sembolik bir ba\u011flant\u0131 olu\u015fturarak etkinle\u015ftirin:<\/p>\n<pre><code class=\"language-bash\">sudo ln -s \/etc\/nginx\/sites-available\/myflaskapp \/etc\/nginx\/sites-enabled<\/code><\/pre>\n<h4>Nginx Yap\u0131land\u0131rmas\u0131n\u0131 Test Etme ve Yeniden Ba\u015flatma<\/h4>\n<p>Nginx yap\u0131land\u0131rman\u0131zda herhangi bir s\u00f6zdizimi hatas\u0131 olup olmad\u0131\u011f\u0131n\u0131 kontrol edin:<\/p>\n<pre><code class=\"language-bash\">sudo nginx -t<\/code><\/pre>\n<p>E\u011fer \u00e7\u0131kt\u0131 <code>syntax is ok<\/code> ve <code>test is successful<\/code> diyorsa, Nginx&#8217;i yeniden ba\u015flatarak yeni yap\u0131land\u0131rmay\u0131 uygulay\u0131n:<\/p>\n<pre><code class=\"language-bash\">sudo service nginx restart<\/code><\/pre>\n<h4>G\u00fcvenlik Duvar\u0131n\u0131 Ayarlama (UFW)<\/h4>\n<p>E\u011fer sunucunuzda UFW (Uncomplicated Firewall) etkinse, Nginx&#8217;in gelen HTTP isteklerini almas\u0131na izin vermeniz gerekir:<\/p>\n<pre><code class=\"language-bash\">sudo ufw allow 'Nginx HTTP'\nsudo ufw enable # E\u011fer etkin de\u011filse<\/code><\/pre>\n<h3>Uygulaman\u0131n Test Edilmesi<\/h3>\n<p>Art\u0131k her \u015fey ayarland\u0131\u011f\u0131na g\u00f6re, Flask uygulaman\u0131za bir web taray\u0131c\u0131s\u0131 \u00fczerinden eri\u015febilirsiniz. Taray\u0131c\u0131n\u0131zda <code>http:\/\/your_domain.com<\/code> veya <code>http:\/\/your_server_ip<\/code> adresine gidin.<\/p>\n<p>&#8220;Merhaba Gunicorn ve Nginx ile Flask!&#8221; mesaj\u0131n\u0131 ve e\u011fer eklediyseniz statik resminizi g\u00f6rmelisiniz.<\/p>\n<h3>Sorun Giderme<\/h3>\n<p>E\u011fer uygulaman\u0131za eri\u015femiyorsan\u0131z veya hata al\u0131yorsan\u0131z, a\u015fa\u011f\u0131daki ad\u0131mlar\u0131 kontrol edin:<\/p>\n<p>*   <strong>Nginx Hata G\u00fcnl\u00fckleri:<\/strong> Nginx&#8217;in hata g\u00fcnl\u00fcklerini kontrol edin: <code>sudo tail -f \/var\/log\/nginx\/error.log<\/code>.<br \/>\n*   <strong>Gunicorn G\u00fcnl\u00fckleri:<\/strong> Upstart servisinin g\u00fcnl\u00fcklerini kontrol edin. Genellikle <code>\/var\/log\/upstart\/myflaskapp.log<\/code> konumundad\u0131r.<br \/>\n*   <strong>Gunicorn Durumu:<\/strong> Gunicorn servisinin \u00e7al\u0131\u015f\u0131p \u00e7al\u0131\u015fmad\u0131\u011f\u0131n\u0131 kontrol edin: <code>sudo status myflaskapp<\/code>.<br \/>\n*   <strong>Soket Dosyas\u0131:<\/strong> Gunicorn soket dosyas\u0131n\u0131n (<code>\/tmp\/myflaskapp.sock<\/code>) varl\u0131\u011f\u0131n\u0131 ve izinlerini kontrol edin. Nginx&#8217;in bu dosyaya eri\u015febilmesi i\u00e7in <code>www-data<\/code> grubunun eri\u015fim izni olmas\u0131 gerekir (Gunicorn Upstart yap\u0131land\u0131rmas\u0131nda <code>setgid www-data<\/code> ile sa\u011flan\u0131r).<br \/>\n*   <strong>Nginx Yap\u0131land\u0131rmas\u0131:<\/strong> Nginx yap\u0131land\u0131rma dosyan\u0131z\u0131n do\u011fru oldu\u011fundan emin olun (<code>sudo nginx -t<\/code>).<br \/>\n*   <strong>G\u00fcvenlik Duvar\u0131:<\/strong> Nginx&#8217;in 80 numaral\u0131 portu dinlemesine izin verildi\u011finden emin olun (<code>sudo ufw status<\/code>).<br \/>\n*   <strong>Alan Ad\u0131 \u00c7\u00f6z\u00fcmlemesi:<\/strong> Alan ad\u0131n\u0131z\u0131n sunucunuzun IP adresine do\u011fru \u015fekilde i\u015faret etti\u011finden emin olun (DNS kay\u0131tlar\u0131n\u0131z\u0131 kontrol edin).<\/p>\n<h3>Ek G\u00fcvenlik ve \u0130yile\u015ftirmeler<\/h3>\n<p>Uygulaman\u0131z\u0131 \u00fcretim ortam\u0131nda daha da g\u00fc\u00e7lendirmek i\u00e7in a\u015fa\u011f\u0131daki iyile\u015ftirmeleri d\u00fc\u015f\u00fcnebilirsiniz:<\/p>\n<h4>SSL\/TLS \u015eifrelemesi (HTTPS)<\/h4>\n<p>Web uygulaman\u0131z\u0131n g\u00fcvenli\u011fini art\u0131rmak i\u00e7in HTTPS kullanmak \u00e7ok \u00f6nemlidir. Let&#8217;s Encrypt ve Certbot, \u00fccretsiz SSL\/TLS sertifikalar\u0131 sa\u011flaman\u0131n ve Nginx ile otomatik olarak yap\u0131land\u0131rman\u0131n kolay bir yolunu sunar.<\/p>\n<p>1.  <strong>Certbot Kurulumu:<\/strong><\/p>\n<pre><code class=\"language-bash\">sudo apt-get install software-properties-common\n    sudo add-apt-repository ppa:certbot\/certbot\n    sudo apt-get update\n    sudo apt-get install python-certbot-nginx<\/code><\/pre>\n<p>2.  <strong>Sertifika Alma:<\/strong><\/p>\n<pre><code class=\"language-bash\">sudo certbot --nginx -d your_domain.com -d www.your_domain.com<\/code><\/pre>\n<p>    Bu komut, Certbot&#8217;u Nginx yap\u0131land\u0131rman\u0131z\u0131 otomatik olarak g\u00fcncelleyerek SSL sertifikalar\u0131n\u0131 almas\u0131n\u0131 ve HTTPS&#8217;i etkinle\u015ftirmesini sa\u011flar.<\/p>\n<h4>Gunicorn \u00c7al\u0131\u015fan Say\u0131s\u0131 Optimizasyonu<\/h4>\n<p>Gunicorn yap\u0131land\u0131rman\u0131zdaki <code>--workers<\/code> parametresi, uygulaman\u0131z\u0131n performans\u0131n\u0131 do\u011frudan etkiler. Genellikle <code>(2 * CPU_\u00e7ekirdek_say\u0131s\u0131) + 1<\/code> form\u00fcl\u00fc iyi bir ba\u015flang\u0131\u00e7 noktas\u0131d\u0131r. Sunucunuzun CPU \u00e7ekirdek say\u0131s\u0131n\u0131 <code>grep -c processor \/proc\/cpuinfo<\/code> komutuyla bulabilirsiniz. Daha fazla \u00e7al\u0131\u015fan, daha fazla e\u015fzamanl\u0131 iste\u011fi i\u015fleyebilir, ancak ayn\u0131 zamanda daha fazla bellek t\u00fcketir. Uygulaman\u0131z\u0131n performans\u0131n\u0131 izleyerek en uygun de\u011feri bulmal\u0131s\u0131n\u0131z.<\/p>\n<h4>Ortam De\u011fi\u015fkenleri Kullan\u0131m\u0131<\/h4>\n<p>Hassas bilgileri (veritaban\u0131 kimlik bilgileri, API anahtarlar\u0131 vb.) do\u011frudan kodunuzda saklamak yerine ortam de\u011fi\u015fkenleri olarak ayarlamak daha g\u00fcvenlidir. Upstart yap\u0131land\u0131rma dosyas\u0131nda <code>env<\/code> komutunu kullanarak ortam de\u011fi\u015fkenlerini ayarlayabilirsiniz:<\/p>\n<pre><code class=\"language-\"># \/etc\/init\/myflaskapp.conf i\u00e7ine eklenecek\nenv MY_SECRET_KEY=\"supersecretkey\"<\/code><\/pre>\n<p>Ard\u0131ndan Flask uygulaman\u0131zda <code>os.environ.get('MY_SECRET_KEY')<\/code> ile bu de\u011fi\u015fkenlere eri\u015febilirsiniz.<\/p>\n<h4>Statik Dosyalar \u0130\u00e7in Daha \u0130yi Y\u00f6netim<\/h4>\n<p>Nginx&#8217;in statik dosyalar\u0131 do\u011frudan sunmas\u0131 performans\u0131 art\u0131r\u0131r. Flask&#8217;\u0131n <code>url_for('static', filename='...')<\/code> fonksiyonunu kullanarak HTML \u015fablonlar\u0131n\u0131zda statik dosyalar\u0131n\u0131za do\u011fru yollarla referans verdi\u011finizden emin olun.<\/p>\n<h4>Geli\u015fmi\u015f Nginx Yap\u0131land\u0131rmas\u0131<\/h4>\n<p>Nginx, s\u0131k\u0131\u015ft\u0131rma (gzip), \u00f6nbellekleme, IP beyaz listeleme\/kara listeleme gibi daha bir\u00e7ok geli\u015fmi\u015f \u00f6zelli\u011fi destekler. Performans\u0131 ve g\u00fcvenli\u011fi art\u0131rmak i\u00e7in Nginx yap\u0131land\u0131rman\u0131z\u0131 daha da optimize edebilirsiniz.<\/p>\n<h3>Sonu\u00e7<\/h3>\n<p>Bu makalede, bir Flask uygulamas\u0131n\u0131 Ubuntu 14.04 sunucusunda Gunicorn ve Nginx kullanarak nas\u0131l da\u011f\u0131taca\u011f\u0131n\u0131z\u0131 ad\u0131m ad\u0131m \u00f6\u011frendiniz. Gunicorn, Flask uygulaman\u0131z i\u00e7in sa\u011flam bir WSGI sunucusu sa\u011flarken, Nginx ise ters proxy, statik dosya sunumu, y\u00fck dengeleme ve SSL sonland\u0131rma gibi \u00f6nemli g\u00f6revleri \u00fcstlenir. Bu mimari, Flask uygulaman\u0131z\u0131n \u00fcretim ortam\u0131nda g\u00fcvenli, performansl\u0131 ve \u00f6l\u00e7eklenebilir bir \u015fekilde \u00e7al\u0131\u015fmas\u0131n\u0131 sa\u011flar.<\/p>\n<p>Upstart ile Gunicorn servisini yap\u0131land\u0131rmak ve Nginx&#8217;i gelen istekleri bu servise y\u00f6nlendirecek \u015fekilde ayarlamak, Ubuntu 14.04 gibi belirli bir i\u015fletim sistemi s\u00fcr\u00fcm\u00fcnde da\u011f\u0131t\u0131m yaparken kritik ad\u0131mlard\u0131r. Art\u0131k uygulaman\u0131z yay\u0131nda oldu\u011funa g\u00f6re, performans\u0131n\u0131 izlemeye, g\u00fcvenlik \u00f6nlemlerini s\u00fcrekli g\u00fcncel tutmaya ve gerekti\u011finde ek \u00f6zellikler veya optimizasyonlar eklemeye devam edebilirsiniz. Bu temel kurulum, daha karma\u015f\u0131k ve \u00f6l\u00e7eklenebilir da\u011f\u0131t\u0131mlar i\u00e7in sa\u011flam bir zemin olu\u015fturur.<\/body><\/p>\n","protected":false},"excerpt":{"rendered":"Flask Uygulamalar\u0131n\u0131 Gunicorn ve Nginx ile Ubuntu 14.04 \u00dczerinde Da\u011f\u0131tma\nBu kapsaml\u0131 teknik makalede, bir Flask web uygulamas\u0131n\u0131 \u00fcretim orta","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-31119","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>Flask Uygulamalar\u0131n\u0131 Gunicorn ve Nginx ile Ubuntu 14.04 \u00dczerinde Da\u011f\u0131tma - 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\/flask-uygulamalarini-gunicorn-ve-nginx-ile-ubuntu-14-04-uzerinde-dagitma\/\" \/>\n<meta property=\"og:locale\" content=\"tr_TR\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Flask Uygulamalar\u0131n\u0131 Gunicorn ve Nginx ile Ubuntu 14.04 \u00dczerinde Da\u011f\u0131tma\" \/>\n<meta property=\"og:description\" content=\"Flask Uygulamalar\u0131n\u0131 Gunicorn ve Nginx ile Ubuntu 14.04 \u00dczerinde Da\u011f\u0131tma Bu kapsaml\u0131 teknik makalede, bir Flask web uygulamas\u0131n\u0131 \u00fcretim orta\" \/>\n<meta property=\"og:url\" content=\"https:\/\/fatihsoysal.com\/blog\/flask-uygulamalarini-gunicorn-ve-nginx-ile-ubuntu-14-04-uzerinde-dagitma\/\" \/>\n<meta property=\"og:site_name\" content=\"Kodlar\u0131n Gizemli D\u00fcnyas\u0131\" \/>\n<meta property=\"article:published_time\" content=\"2025-10-05T21:41:07+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=\"15 dakika\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/flask-uygulamalarini-gunicorn-ve-nginx-ile-ubuntu-14-04-uzerinde-dagitma\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/flask-uygulamalarini-gunicorn-ve-nginx-ile-ubuntu-14-04-uzerinde-dagitma\/\"},\"author\":{\"name\":\"Fatih Soysal\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1\"},\"headline\":\"Flask Uygulamalar\u0131n\u0131 Gunicorn ve Nginx ile Ubuntu 14.04 \u00dczerinde Da\u011f\u0131tma\",\"datePublished\":\"2025-10-05T21:41:07+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/flask-uygulamalarini-gunicorn-ve-nginx-ile-ubuntu-14-04-uzerinde-dagitma\/\"},\"wordCount\":2355,\"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\/flask-uygulamalarini-gunicorn-ve-nginx-ile-ubuntu-14-04-uzerinde-dagitma\/#respond\"]}],\"copyrightYear\":\"2025\",\"copyrightHolder\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#organization\"}},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/flask-uygulamalarini-gunicorn-ve-nginx-ile-ubuntu-14-04-uzerinde-dagitma\/\",\"url\":\"https:\/\/fatihsoysal.com\/blog\/flask-uygulamalarini-gunicorn-ve-nginx-ile-ubuntu-14-04-uzerinde-dagitma\/\",\"name\":\"Flask Uygulamalar\u0131n\u0131 Gunicorn ve Nginx ile Ubuntu 14.04 \u00dczerinde Da\u011f\u0131tma - Kodlar\u0131n Gizemli D\u00fcnyas\u0131\",\"isPartOf\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#website\"},\"datePublished\":\"2025-10-05T21:41:07+00:00\",\"breadcrumb\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/flask-uygulamalarini-gunicorn-ve-nginx-ile-ubuntu-14-04-uzerinde-dagitma\/#breadcrumb\"},\"inLanguage\":\"tr\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/fatihsoysal.com\/blog\/flask-uygulamalarini-gunicorn-ve-nginx-ile-ubuntu-14-04-uzerinde-dagitma\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/flask-uygulamalarini-gunicorn-ve-nginx-ile-ubuntu-14-04-uzerinde-dagitma\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Anasayfa\",\"item\":\"https:\/\/fatihsoysal.com\/blog\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Flask Uygulamalar\u0131n\u0131 Gunicorn ve Nginx ile Ubuntu 14.04 \u00dczerinde Da\u011f\u0131tma\"}]},{\"@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":"Flask Uygulamalar\u0131n\u0131 Gunicorn ve Nginx ile Ubuntu 14.04 \u00dczerinde Da\u011f\u0131tma - 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\/flask-uygulamalarini-gunicorn-ve-nginx-ile-ubuntu-14-04-uzerinde-dagitma\/","og_locale":"tr_TR","og_type":"article","og_title":"Flask Uygulamalar\u0131n\u0131 Gunicorn ve Nginx ile Ubuntu 14.04 \u00dczerinde Da\u011f\u0131tma","og_description":"Flask Uygulamalar\u0131n\u0131 Gunicorn ve Nginx ile Ubuntu 14.04 \u00dczerinde Da\u011f\u0131tma Bu kapsaml\u0131 teknik makalede, bir Flask web uygulamas\u0131n\u0131 \u00fcretim orta","og_url":"https:\/\/fatihsoysal.com\/blog\/flask-uygulamalarini-gunicorn-ve-nginx-ile-ubuntu-14-04-uzerinde-dagitma\/","og_site_name":"Kodlar\u0131n Gizemli D\u00fcnyas\u0131","article_published_time":"2025-10-05T21:41:07+00:00","author":"Fatih Soysal","twitter_card":"summary_large_image","twitter_misc":{"Yazan:":"Fatih Soysal","Tahmini okuma s\u00fcresi":"15 dakika"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/fatihsoysal.com\/blog\/flask-uygulamalarini-gunicorn-ve-nginx-ile-ubuntu-14-04-uzerinde-dagitma\/#article","isPartOf":{"@id":"https:\/\/fatihsoysal.com\/blog\/flask-uygulamalarini-gunicorn-ve-nginx-ile-ubuntu-14-04-uzerinde-dagitma\/"},"author":{"name":"Fatih Soysal","@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1"},"headline":"Flask Uygulamalar\u0131n\u0131 Gunicorn ve Nginx ile Ubuntu 14.04 \u00dczerinde Da\u011f\u0131tma","datePublished":"2025-10-05T21:41:07+00:00","mainEntityOfPage":{"@id":"https:\/\/fatihsoysal.com\/blog\/flask-uygulamalarini-gunicorn-ve-nginx-ile-ubuntu-14-04-uzerinde-dagitma\/"},"wordCount":2355,"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\/flask-uygulamalarini-gunicorn-ve-nginx-ile-ubuntu-14-04-uzerinde-dagitma\/#respond"]}],"copyrightYear":"2025","copyrightHolder":{"@id":"https:\/\/fatihsoysal.com\/blog\/#organization"}},{"@type":"WebPage","@id":"https:\/\/fatihsoysal.com\/blog\/flask-uygulamalarini-gunicorn-ve-nginx-ile-ubuntu-14-04-uzerinde-dagitma\/","url":"https:\/\/fatihsoysal.com\/blog\/flask-uygulamalarini-gunicorn-ve-nginx-ile-ubuntu-14-04-uzerinde-dagitma\/","name":"Flask Uygulamalar\u0131n\u0131 Gunicorn ve Nginx ile Ubuntu 14.04 \u00dczerinde Da\u011f\u0131tma - Kodlar\u0131n Gizemli D\u00fcnyas\u0131","isPartOf":{"@id":"https:\/\/fatihsoysal.com\/blog\/#website"},"datePublished":"2025-10-05T21:41:07+00:00","breadcrumb":{"@id":"https:\/\/fatihsoysal.com\/blog\/flask-uygulamalarini-gunicorn-ve-nginx-ile-ubuntu-14-04-uzerinde-dagitma\/#breadcrumb"},"inLanguage":"tr","potentialAction":[{"@type":"ReadAction","target":["https:\/\/fatihsoysal.com\/blog\/flask-uygulamalarini-gunicorn-ve-nginx-ile-ubuntu-14-04-uzerinde-dagitma\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/fatihsoysal.com\/blog\/flask-uygulamalarini-gunicorn-ve-nginx-ile-ubuntu-14-04-uzerinde-dagitma\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Anasayfa","item":"https:\/\/fatihsoysal.com\/blog\/"},{"@type":"ListItem","position":2,"name":"Flask Uygulamalar\u0131n\u0131 Gunicorn ve Nginx ile Ubuntu 14.04 \u00dczerinde Da\u011f\u0131tma"}]},{"@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\/31119","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=31119"}],"version-history":[{"count":1,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/posts\/31119\/revisions"}],"predecessor-version":[{"id":31120,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/posts\/31119\/revisions\/31120"}],"wp:attachment":[{"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/media?parent=31119"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/categories?post=31119"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/tags?post=31119"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}