{"id":33989,"date":"2025-11-09T17:40:51","date_gmt":"2025-11-09T14:40:51","guid":{"rendered":"https:\/\/fatihsoysal.com\/blog\/?p=33989"},"modified":"2025-11-09T17:40:51","modified_gmt":"2025-11-09T14:40:51","slug":"flask-uygulamalarini-uwsgi-ve-nginx-ile-ubuntu-14-04-uzerinde-dagitma","status":"publish","type":"post","link":"https:\/\/fatihsoysal.com\/blog\/flask-uygulamalarini-uwsgi-ve-nginx-ile-ubuntu-14-04-uzerinde-dagitma\/","title":{"rendered":"Flask Uygulamalar\u0131n\u0131 uWSGI ve Nginx ile Ubuntu 14.04 \u00dczerinde Da\u011f\u0131tma"},"content":{"rendered":"<p><body><\/p>\n<h2>Flask Uygulamalar\u0131n\u0131 uWSGI ve Nginx ile Ubuntu 14.04 \u00dczerinde Da\u011f\u0131tma<\/h2>\n<h3>Giri\u015f<\/h3>\n<p>Web uygulamas\u0131 geli\u015ftirme s\u00fcrecinde, uygulamay\u0131 geli\u015ftirme ortam\u0131nda \u00e7al\u0131\u015ft\u0131rmak genellikle basit bir komutla m\u00fcmk\u00fcnken, bu uygulamay\u0131 ger\u00e7ek d\u00fcnya kullan\u0131c\u0131lar\u0131na sunmak (yani &#8220;da\u011f\u0131tmak&#8221;) \u00e7ok daha karma\u015f\u0131k bir s\u00fcre\u00e7tir. Geli\u015ftirme sunucular\u0131 (\u00f6rne\u011fin Flask&#8217;\u0131n kendi dahili sunucusu), genellikle tek i\u015f par\u00e7ac\u0131kl\u0131 ve tek s\u00fcre\u00e7li olduklar\u0131 i\u00e7in \u00fcretim ortamlar\u0131n\u0131n yo\u011fun y\u00fck\u00fcn\u00fc ve g\u00fcvenlik gereksinimlerini kar\u015f\u0131layamazlar. Bu nedenle, Flask gibi Python tabanl\u0131 web \u00e7er\u00e7evelerini \u00fcretimde \u00e7al\u0131\u015ft\u0131rmak i\u00e7in daha sa\u011flam ve performansl\u0131 \u00e7\u00f6z\u00fcmlere ihtiya\u00e7 duyar\u0131z. Bu makalede, Flask uygulamalar\u0131n\u0131z\u0131 Ubuntu 14.04 i\u015fletim sistemi \u00fczerinde uWSGI ve Nginx kullanarak nas\u0131l da\u011f\u0131taca\u011f\u0131n\u0131z\u0131 ad\u0131m ad\u0131m detayl\u0131 bir \u015fekilde a\u00e7\u0131klayaca\u011f\u0131z.<\/p>\n<h4>Web Sunucusu Mimarisine Genel Bak\u0131\u015f<\/h4>\n<p>Bir web uygulamas\u0131n\u0131n \u00fcretim ortam\u0131nda \u00e7al\u0131\u015ft\u0131r\u0131lmas\u0131 genellikle \u00fc\u00e7 ana bile\u015fenin i\u015fbirli\u011fini gerektirir:<\/p>\n<ol>\n<li><b>Web Uygulamas\u0131:<\/b> Flask uygulaman\u0131z\u0131n kendisi, i\u015f mant\u0131\u011f\u0131n\u0131 ve kullan\u0131c\u0131 aray\u00fcz\u00fcn\u00fc bar\u0131nd\u0131r\u0131r.<\/li>\n<li><b>WSGI Sunucusu:<\/b> Web Server Gateway Interface (WSGI), Python web uygulamalar\u0131 ile web sunucular\u0131 aras\u0131nda standart bir aray\u00fcz tan\u0131mlar. uWSGI gibi WSGI sunucular\u0131, gelen HTTP isteklerini Python uygulamas\u0131na iletmekten ve uygulaman\u0131n yan\u0131tlar\u0131n\u0131 geri al\u0131p web sunucusuna g\u00f6ndermekten sorumludur. Bu sunucular, uygulaman\u0131z\u0131n birden fazla kopyas\u0131n\u0131 \u00e7al\u0131\u015ft\u0131rarak e\u015fzamanl\u0131 istekleri y\u00f6netebilir ve uygulama hatalar\u0131n\u0131 izleyebilir.<\/li>\n<li><b>Ters Proxy (Reverse Proxy) \/ Web Sunucusu:<\/b> Nginx gibi bir web sunucusu, do\u011frudan internetten gelen istekleri kar\u015f\u0131lar. Statik dosyalar\u0131 (CSS, JavaScript, resimler) do\u011frudan sunabilir ve dinamik istekleri (Flask uygulaman\u0131zdan gelenler) WSGI sunucusuna y\u00f6nlendirir. Nginx, y\u00fck dengeleme, SSL sonland\u0131rma, s\u0131k\u0131\u015ft\u0131rma ve \u00f6nbellekleme gibi geli\u015fmi\u015f \u00f6zellikler sunarak uygulaman\u0131z\u0131n performans\u0131n\u0131 ve g\u00fcvenli\u011fini art\u0131r\u0131r.<\/li>\n<\/ol>\n<p>Bu mimari, her bile\u015fenin kendi \u00f6zel g\u00f6revine odaklanmas\u0131n\u0131 sa\u011flayarak sistemi daha verimli, \u00f6l\u00e7eklenebilir ve g\u00fcvenli hale getirir.<\/p>\n<h4>Neden uWSGI ve Nginx?<\/h4>\n<p><b>uWSGI:<\/b> Python uygulamalar\u0131 i\u00e7in pop\u00fcler ve y\u00fcksek performansl\u0131 bir WSGI sunucusudur. \u00c7ok \u00e7e\u015fitli yap\u0131land\u0131rma se\u00e7enekleri sunar, farkl\u0131 protokolleri (HTTP, uwsgi) destekler ve uygulaman\u0131z\u0131n s\u00fcre\u00e7lerini ve i\u015f par\u00e7ac\u0131klar\u0131n\u0131 etkili bir \u015fekilde y\u00f6netir. \u00d6l\u00e7eklenebilirlik ve g\u00fcvenilirlik a\u00e7\u0131s\u0131ndan end\u00fcstri standard\u0131 \u00e7\u00f6z\u00fcmlerden biridir.<\/p>\n<p><b>Nginx:<\/b> Hafif, y\u00fcksek performansl\u0131 ve olay tabanl\u0131 mimarisi sayesinde ayn\u0131 anda binlerce ba\u011flant\u0131y\u0131 i\u015fleyebilen pop\u00fcler bir web sunucusudur. Statik dosya sunumu konusunda olduk\u00e7a h\u0131zl\u0131d\u0131r ve ters proxy olarak uWSGI ile m\u00fckemmel bir uyum i\u00e7inde \u00e7al\u0131\u015f\u0131r. Y\u00fck dengeleme, SSL\/TLS sonland\u0131rma ve geli\u015fmi\u015f y\u00f6nlendirme kurallar\u0131 gibi \u00f6zellikleriyle modern web uygulamalar\u0131 i\u00e7in vazge\u00e7ilmezdir.<\/p>\n<h4>Ubuntu 14.04 Se\u00e7imi<\/h4>\n<p>Ubuntu 14.04, &#8220;Trusty Tahr&#8221; kod adl\u0131 bir LTS (Uzun S\u00fcreli Destek) s\u00fcr\u00fcm\u00fcd\u00fcr. Her ne kadar daha yeni Ubuntu s\u00fcr\u00fcmleri mevcut olsa da, bir\u00e7ok eski sunucu altyap\u0131s\u0131 hala bu s\u00fcr\u00fcm\u00fc kullanmaktad\u0131r. Bu makale, \u00f6zellikle bu eski ama hala yayg\u0131n olan ortamda \u00e7al\u0131\u015fan geli\u015ftiriciler ve sistem y\u00f6neticileri i\u00e7in haz\u0131rlanm\u0131\u015ft\u0131r. Bu s\u00fcr\u00fcmde kullan\u0131lan sistem ara\u00e7lar\u0131 (\u00f6rne\u011fin Upstart) ve paket s\u00fcr\u00fcmleri, daha yeni Ubuntu s\u00fcr\u00fcmlerinden farkl\u0131l\u0131k g\u00f6sterebilir, bu y\u00fczden spesifik olarak 14.04&#8217;e odaklanmak \u00f6nemlidir.<\/p>\n<h3>\u00d6nko\u015fullar<\/h3>\n<p>Kuruluma ba\u015flamadan \u00f6nce, sunucunuzun temel gereksinimleri kar\u015f\u0131lad\u0131\u011f\u0131ndan emin olmal\u0131y\u0131z. Bu ad\u0131mlar, temiz bir Ubuntu 14.04 sunucusu varsay\u0131larak yap\u0131lm\u0131\u015ft\u0131r.<\/p>\n<h4>Sistem G\u00fcncelleme<\/h4>\n<p>\u0130lk olarak, sunucunuzdaki paket listelerini g\u00fcncelleyip mevcut paketleri y\u00fckseltmek iyi bir uygulamad\u0131r. Bu, en son g\u00fcvenlik yamalar\u0131na sahip olman\u0131z\u0131 ve ba\u011f\u0131ml\u0131l\u0131k sorunlar\u0131n\u0131 \u00f6nlemenizi sa\u011flar.<\/p>\n<pre><code class=\"language-bash\">sudo apt-get update\nsudo apt-get upgrade -y<\/code><\/pre>\n<h4>Gerekli Paketlerin Kurulumu<\/h4>\n<p>Python uygulamalar\u0131 geli\u015ftirmek i\u00e7in Python&#8217;\u0131n yan\u0131 s\u0131ra, paket y\u00f6netim arac\u0131 <code>pip<\/code>&#8216;e ve sanal ortamlar olu\u015fturmak i\u00e7in <code>virtualenv<\/code>&#8216;e ihtiyac\u0131m\u0131z olacak. Ayr\u0131ca Nginx&#8217;i de kurmal\u0131y\u0131z.<\/p>\n<pre><code class=\"language-bash\">sudo apt-get install python-pip python-dev nginx -y\nsudo pip install virtualenv<\/code><\/pre>\n<p>*   <code>python-pip<\/code>: Python paketlerini kurmak i\u00e7in kullan\u0131lan ara\u00e7.<br \/>\n*   <code>python-dev<\/code>: Python geli\u015ftirmesi i\u00e7in gerekli ba\u015fl\u0131k dosyalar\u0131n\u0131 ve statik k\u00fct\u00fcphaneleri i\u00e7erir. Bu, uWSGI gibi baz\u0131 Python paketlerinin derlenmesi i\u00e7in gereklidir.<br \/>\n*   <code>nginx<\/code>: Ters proxy ve web sunucusu olarak kullanaca\u011f\u0131m\u0131z Nginx.<br \/>\n*   <code>virtualenv<\/code>: Python projeleri i\u00e7in izole geli\u015ftirme ortamlar\u0131 olu\u015fturmay\u0131 sa\u011flayan ara\u00e7. Bu, proje ba\u011f\u0131ml\u0131l\u0131klar\u0131n\u0131n sistem genelindeki Python kurulumunu etkilemesini engeller ve farkl\u0131 projelerin farkl\u0131 ba\u011f\u0131ml\u0131l\u0131k s\u00fcr\u00fcmlerini kullanmas\u0131na olanak tan\u0131r.<\/p>\n<h3>Flask Uygulamas\u0131 Olu\u015fturma<\/h3>\n<p>\u015eimdi basit bir Flask uygulamas\u0131 olu\u015ftural\u0131m. Bu uygulama, uWSGI ve Nginx ile entegrasyonu test etmek i\u00e7in kullan\u0131lacakt\u0131r.<\/p>\n<h4>Proje Dizini Olu\u015fturma<\/h4>\n<p>Uygulaman\u0131z i\u00e7in bir proje dizini olu\u015ftural\u0131m ve bu dizine ge\u00e7elim. Genellikle uygulamalar <code>\/var\/www\/<\/code> alt\u0131nda veya kullan\u0131c\u0131n\u0131n ana dizininde (<code>\/home\/kullanici\/<\/code>) tutulur. Biz <code>\/var\/www\/<\/code> alt\u0131n\u0131 tercih edelim.<\/p>\n<pre><code class=\"language-bash\">sudo mkdir -p \/var\/www\/myflaskapp\nsudo chown -R $USER:$USER \/var\/www\/myflaskapp # Kullan\u0131c\u0131ya sahiplik ver\ncd \/var\/www\/myflaskapp<\/code><\/pre>\n<p>Bu komutlar, <code>\/var\/www\/myflaskapp<\/code> ad\u0131nda bir dizin olu\u015fturur, bu dizinin sahipli\u011fini mevcut kullan\u0131c\u0131ya verir ve o dizine ge\u00e7i\u015f yapar.<\/p>\n<h4>Sanal Ortam Kurulumu<\/h4>\n<p>Olu\u015fturdu\u011fumuz proje dizini i\u00e7inde bir sanal ortam olu\u015ftural\u0131m ve bu ortam\u0131 etkinle\u015ftirelim.<\/p>\n<pre><code class=\"language-bash\">virtualenv venv\nsource venv\/bin\/activate<\/code><\/pre>\n<p><code>venv<\/code> ad\u0131nda bir sanal ortam olu\u015fturulur ve <code>source venv\/bin\/activate<\/code> komutu ile etkinle\u015ftirilir. Komut istemcinizin ba\u015f\u0131nda <code>(venv)<\/code> gibi bir ibare g\u00f6rmelisiniz, bu sanal ortam\u0131n etkin oldu\u011funu g\u00f6sterir.<\/p>\n<h4>Flask Kurulumu<\/h4>\n<p>Sanal ortam etkinle\u015ftirildikten sonra Flask&#8217;\u0131 kurabiliriz.<\/p>\n<pre><code class=\"language-bash\">pip install Flask<\/code><\/pre>\n<h4>Basit Bir Flask Uygulamas\u0131 Yazma (<code>app.py<\/code>)<\/h4>\n<p>\u015eimdi <code>app.py<\/code> ad\u0131nda bir dosya olu\u015ftural\u0131m ve i\u00e7ine basit bir Flask uygulamas\u0131 yazal\u0131m.<\/p>\n<pre><code class=\"language-bash\">nano app.py<\/code><\/pre>\n<p>\u0130\u00e7ine a\u015fa\u011f\u0131daki kodu yap\u0131\u015ft\u0131r\u0131n:<\/p>\n<pre><code class=\"language-python\"># app.py\nfrom flask import Flask\n\napp = Flask(__name__)\n\n@app.route('\/')\ndef hello_world():\n    return 'Merhaba, Flask Uygulamam uWSGI ve Nginx ile \u00c7al\u0131\u015f\u0131yor!'\n\nif __name__ == '__main__':\n    app.run(debug=True)<\/code><\/pre>\n<p>Bu basit uygulama, k\u00f6k URL&#8217;ye (<code>\/<\/code>) yap\u0131lan isteklere &#8220;Merhaba, Flask Uygulamam uWSGI ve Nginx ile \u00c7al\u0131\u015f\u0131yor!&#8221; mesaj\u0131n\u0131 d\u00f6nd\u00fcr\u00fcr. <code>if __name__ == '__main__':<\/code> blo\u011fu, bu dosya do\u011frudan \u00e7al\u0131\u015ft\u0131r\u0131ld\u0131\u011f\u0131nda Flask&#8217;\u0131n dahili geli\u015ftirme sunucusunu ba\u015flat\u0131r, ancak \u00fcretimde uWSGI taraf\u0131ndan \u00e7a\u011fr\u0131laca\u011f\u0131 i\u00e7in bu blok \u00e7al\u0131\u015fmayacakt\u0131r.<\/p>\n<h4><code>wsgi.py<\/code> Dosyas\u0131 Olu\u015fturma<\/h4>\n<p>uWSGI, Flask uygulaman\u0131z\u0131 do\u011frudan <code>app.py<\/code> dosyas\u0131ndan \u00e7a\u011f\u0131rmak yerine, genellikle bir <code>wsgi.py<\/code> dosyas\u0131n\u0131 arar. Bu dosya, uygulaman\u0131z\u0131n WSGI uyumlu bir nesnesini (genellikle <code>app<\/code> de\u011fi\u015fkeni) d\u0131\u015fa aktar\u0131r.<\/p>\n<pre><code class=\"language-bash\">nano wsgi.py<\/code><\/pre>\n<p>\u0130\u00e7ine a\u015fa\u011f\u0131daki kodu yap\u0131\u015ft\u0131r\u0131n:<\/p>\n<pre><code class=\"language-python\"># wsgi.py\nfrom app import app\n\nif __name__ == '__main__':\n    app.run()<\/code><\/pre>\n<p>Bu dosya, <code>app.py<\/code> dosyas\u0131ndan <code>app<\/code> nesnesini i\u00e7eri aktar\u0131r ve uWSGI&#8217;nin bu nesneyi bulmas\u0131n\u0131 sa\u011flar.<\/p>\n<p>Sanal ortamdan \u00e7\u0131kmak i\u00e7in:<\/p>\n<pre><code class=\"language-bash\">deactivate<\/code><\/pre>\n<p>Art\u0131k Flask uygulamam\u0131z haz\u0131r.<\/p>\n<h3>uWSGI Kurulumu ve Yap\u0131land\u0131rmas\u0131<\/h3>\n<p>Flask uygulamas\u0131n\u0131 \u00fcretim ortam\u0131nda \u00e7al\u0131\u015ft\u0131rmak i\u00e7in uWSGI&#8217;yi kurmal\u0131 ve yap\u0131land\u0131rmal\u0131y\u0131z.<\/p>\n<h4>uWSGI Kurulumu<\/h4>\n<p>uWSGI&#8217;yi sanal ortamda de\u011fil, sistem genelinde kurmak daha iyidir, \u00e7\u00fcnk\u00fc uWSGI genellikle sistem servisi olarak \u00e7al\u0131\u015f\u0131r ve birden fazla sanal ortamdaki uygulamalara hizmet verebilir. Ancak, Python paketlerinin derlenmesi i\u00e7in <code>python-dev<\/code> paketinin kurulu oldu\u011fundan emin olun.<\/p>\n<pre><code class=\"language-bash\"># E\u011fer sanal ortamdaysan\u0131z \u00e7\u0131k\u0131n\ndeactivate\n\n<h2>uWSGI'yi sistem genelinde kurun<\/h2>\nsudo pip install uwsgi<\/code><\/pre>\n<p>Baz\u0131 durumlarda, <code>pip<\/code> yerine <code>apt-get<\/code> ile uWSGI kurmak isteyebilirsiniz (<code>sudo apt-get install uwsgi<\/code>). Ancak, <code>pip<\/code> ile kurulan s\u00fcr\u00fcm genellikle daha g\u00fcnceldir ve daha fazla \u00f6zelli\u011fi destekler. <code>pip<\/code> ile kurulan uWSGI&#8217;nin y\u00fcr\u00fct\u00fclebilir dosyas\u0131 <code>\/usr\/local\/bin\/uwsgi<\/code> konumunda olacakt\u0131r.<\/p>\n<h4>uWSGI ile Flask Uygulamas\u0131n\u0131 Test Etme<\/h4>\n<p>Nginx&#8217;i devreye sokmadan \u00f6nce uWSGI&#8217;nin Flask uygulaman\u0131zla d\u00fczg\u00fcn \u00e7al\u0131\u015ft\u0131\u011f\u0131ndan emin olmak iyi bir fikirdir.<\/p>\n<pre><code class=\"language-bash\"># Proje dizinine gidin\ncd \/var\/www\/myflaskapp\n\n<h2>Sanal ortam\u0131 etkinle\u015ftirin<\/h2>\nsource venv\/bin\/activate\n\n<h2>uWSGI'yi HTTP modunda \u00e7al\u0131\u015ft\u0131rarak test edin<\/h2>\nuwsgi --http :8000 --module wsgi --callable app<\/code><\/pre>\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 kontrol edin. E\u011fer &#8220;Merhaba, Flask Uygulamam uWSGI ve Nginx ile \u00c7al\u0131\u015f\u0131yor!&#8221; mesaj\u0131n\u0131 g\u00f6r\u00fcyorsan\u0131z, uWSGI uygulaman\u0131z\u0131 ba\u015far\u0131yla \u00e7al\u0131\u015ft\u0131r\u0131yor demektir. Testi sonland\u0131rmak i\u00e7in <code>Ctrl+C<\/code> tu\u015flar\u0131na bas\u0131n.<br \/>\nSanal ortamdan \u00e7\u0131kmay\u0131 unutmay\u0131n: <code>deactivate<\/code>.<\/p>\n<h4>uWSGI Yap\u0131land\u0131rma Dosyas\u0131 Olu\u015fturma (<code>.ini<\/code>)<\/h4>\n<p>uWSGI&#8217;yi bir komutla \u00e7al\u0131\u015ft\u0131rmak yerine, kal\u0131c\u0131 bir yap\u0131land\u0131rma dosyas\u0131 kullanarak daha d\u00fczenli bir \u015fekilde y\u00f6netebiliriz. Bu dosya genellikle <code>.ini<\/code> uzant\u0131s\u0131na sahiptir. <code>\/etc\/uwsgi\/sites\/<\/code> dizini alt\u0131nda bir yap\u0131land\u0131rma dosyas\u0131 olu\u015ftural\u0131m.<\/p>\n<pre><code class=\"language-bash\">sudo mkdir -p \/etc\/uwsgi\/sites\nsudo nano \/etc\/uwsgi\/sites\/myflaskapp.ini<\/code><\/pre>\n<p>\u0130\u00e7ine a\u015fa\u011f\u0131daki yap\u0131land\u0131rmay\u0131 yap\u0131\u015ft\u0131r\u0131n:<\/p>\n<pre><code class=\"language-ini\">[uwsgi]\nmodule = wsgi:app\nmaster = true\nprocesses = 5\nsocket = \/tmp\/myflaskapp.sock\nchmod-socket = 660\nvacuum = true\ndie-on-term = true\nlogto = \/var\/log\/uwsgi\/myflaskapp.log\nuid = www-data\ngid = www-data\nchdir = \/var\/www\/myflaskapp\nvirtualenv = \/var\/www\/myflaskapp\/venv<\/code><\/pre>\n<p>Bu yap\u0131land\u0131rma dosyas\u0131ndaki \u00f6nemli parametreler \u015funlard\u0131r:<br \/>\n*   <code>module = wsgi:app<\/code>: uWSGI&#8217;ye <code>wsgi.py<\/code> dosyas\u0131ndaki <code>app<\/code> adl\u0131 WSGI uygulamas\u0131n\u0131 y\u00fcklemesini s\u00f6yler.<br \/>\n*   <code>master = true<\/code>: Ana uWSGI s\u00fcrecini etkinle\u015ftirir. Bu s\u00fcre\u00e7, i\u015f\u00e7i s\u00fcre\u00e7lerini y\u00f6netir.<br \/>\n*   <code>processes = 5<\/code>: Uygulamay\u0131 i\u015fleyecek 5 i\u015f\u00e7i s\u00fcreci ba\u015flat\u0131r. Bu say\u0131y\u0131 sunucunuzun CPU \u00e7ekirdek say\u0131s\u0131na ve uygulaman\u0131z\u0131n ihtiya\u00e7lar\u0131na g\u00f6re ayarlayabilirsiniz.<br \/>\n*   <code>socket = \/tmp\/myflaskapp.sock<\/code>: Nginx ile ileti\u015fim kurmak i\u00e7in kullan\u0131lacak Unix soketinin yolunu belirtir. Bu, HTTP yerine daha h\u0131zl\u0131 ve g\u00fcvenli bir ileti\u015fim y\u00f6ntemidir.<br \/>\n*   <code>chmod-socket = 660<\/code>: Soket dosyas\u0131 i\u00e7in izinleri ayarlar. <code>660<\/code>, soket dosyas\u0131n\u0131n sahibi ve grup \u00fcyelerinin okuma\/yazma iznine sahip olmas\u0131n\u0131 sa\u011flar. <code>www-data<\/code> grubunun bu sokete eri\u015febilmesi i\u00e7in \u00f6nemlidir.<br \/>\n*   <code>vacuum = true<\/code>: uWSGI durdu\u011funda soket dosyas\u0131n\u0131 ve di\u011fer ge\u00e7ici dosyalar\u0131 temizler.<br \/>\n*   <code>die-on-term = true<\/code>: uWSGI&#8217;nin SIGTERM sinyali ald\u0131\u011f\u0131nda temiz bir \u015fekilde kapanmas\u0131n\u0131 sa\u011flar.<br \/>\n*   <code>logto = \/var\/log\/uwsgi\/myflaskapp.log<\/code>: uWSGI g\u00fcnl\u00fcklerini belirtilen dosyaya yazar. Bu dosyan\u0131n ve dizinin var oldu\u011fundan ve uWSGI&#8217;nin yazma iznine sahip oldu\u011fundan emin olun.<br \/>\n*   <code>uid = www-data<\/code>: uWSGI s\u00fcre\u00e7lerinin <code>www-data<\/code> kullan\u0131c\u0131s\u0131 olarak \u00e7al\u0131\u015fmas\u0131n\u0131 sa\u011flar. Bu, g\u00fcvenlik a\u00e7\u0131s\u0131ndan \u00f6nemlidir.<br \/>\n*   <code>gid = www-data<\/code>: uWSGI s\u00fcre\u00e7lerinin <code>www-data<\/code> grubu olarak \u00e7al\u0131\u015fmas\u0131n\u0131 sa\u011flar.<br \/>\n*   <code>chdir = \/var\/www\/myflaskapp<\/code>: uWSGI&#8217;nin bu dizinde \u00e7al\u0131\u015fmas\u0131n\u0131 sa\u011flar. Bu, g\u00f6receli yollar\u0131n do\u011fru \u00e7\u00f6z\u00fcmlenmesi i\u00e7in \u00f6nemlidir.<br \/>\n*   <code>virtualenv = \/var\/www\/myflaskapp\/venv<\/code>: Uygulaman\u0131n sanal ortam\u0131n\u0131 belirtir. Bu, uWSGI&#8217;nin do\u011fru Python ba\u011f\u0131ml\u0131l\u0131klar\u0131n\u0131 kullanmas\u0131n\u0131 sa\u011flar.<\/p>\n<p>Log dizinini olu\u015ftural\u0131m ve sahipli\u011fini ayarlayal\u0131m:<\/p>\n<pre><code class=\"language-bash\">sudo mkdir -p \/var\/log\/uwsgi\nsudo chown -R www-data:www-data \/var\/log\/uwsgi<\/code><\/pre>\n<h4>uWSGI&#8217;yi Daemon Olarak \u00c7al\u0131\u015ft\u0131rma (Upstart ile)<\/h4>\n<p>Ubuntu 14.04, sistem servislerini y\u00f6netmek i\u00e7in Upstart kullan\u0131r (daha yeni s\u00fcr\u00fcmler systemd kullan\u0131r). uWSGI&#8217;nin sunucu ba\u015flad\u0131\u011f\u0131nda otomatik olarak ba\u015flamas\u0131 ve arka planda \u00e7al\u0131\u015fmas\u0131 i\u00e7in bir Upstart yap\u0131land\u0131rma dosyas\u0131 olu\u015ftural\u0131m.<\/p>\n<pre><code class=\"language-bash\">sudo nano \/etc\/init\/uwsgi.conf<\/code><\/pre>\n<p>\u0130\u00e7ine a\u015fa\u011f\u0131daki kodu yap\u0131\u015ft\u0131r\u0131n:<\/p>\n<pre><code class=\"language-ini\"># \/etc\/init\/uwsgi.conf\ndescription \"uWSGI server\"\n\nstart on runlevel [2345]\nstop on runlevel [!2345]\n\nrespawn\nrespawn limit 10 5\n\nexec \/usr\/local\/bin\/uwsgi --ini \/etc\/uwsgi\/sites\/myflaskapp.ini<\/code><\/pre>\n<p>Bu Upstart beti\u011fi:<br \/>\n*   <code>description<\/code>: Servisin a\u00e7\u0131klamas\u0131n\u0131 belirtir.<br \/>\n*   <code>start on runlevel [2345]<\/code>: Sunucu normal \u00e7ok kullan\u0131c\u0131l\u0131 modda ba\u015flad\u0131\u011f\u0131nda uWSGI servisini ba\u015flat\u0131r.<br \/>\n*   <code>stop on runlevel [!2345]<\/code>: Sunucu kapan\u0131rken veya tek kullan\u0131c\u0131l\u0131 moda ge\u00e7erken uWSGI servisini durdurur.<br \/>\n*   <code>respawn<\/code>: uWSGI s\u00fcreci beklenmedik bir \u015fekilde durursa otomatik olarak yeniden ba\u015flat\u0131r.<br \/>\n*   <code>respawn limit 10 5<\/code>: 5 saniye i\u00e7inde 10 kez yeniden ba\u015flatma denemesi yap\u0131ld\u0131ktan sonra yeniden ba\u015flatmay\u0131 durdurur. Bu, sonsuz d\u00f6ng\u00fcleri \u00f6nler.<br \/>\n*   <code>exec \/usr\/local\/bin\/uwsgi --ini \/etc\/uwsgi\/sites\/myflaskapp.ini<\/code>: uWSGI y\u00fcr\u00fct\u00fclebilir dosyas\u0131n\u0131 belirtilen yap\u0131land\u0131rma dosyas\u0131yla \u00e7al\u0131\u015ft\u0131r\u0131r. <code>\/usr\/local\/bin\/uwsgi<\/code> yolu, <code>pip<\/code> ile kurulan uWSGI&#8217;nin varsay\u0131lan yoludur. E\u011fer <code>apt-get<\/code> ile kurduysan\u0131z, yol <code>\/usr\/bin\/uwsgi<\/code> olabilir.<\/p>\n<p>\u015eimdi uWSGI servisini ba\u015flatal\u0131m:<\/p>\n<pre><code class=\"language-bash\">sudo start uwsgi<\/code><\/pre>\n<p>Servisin durumunu kontrol etmek i\u00e7in:<\/p>\n<pre><code class=\"language-bash\">sudo status uwsgi<\/code><\/pre>\n<p>Loglar\u0131 kontrol etmek i\u00e7in:<\/p>\n<pre><code class=\"language-bash\">tail -f \/var\/log\/uwsgi\/myflaskapp.log<\/code><\/pre>\n<p>E\u011fer her \u015fey yolundaysa, uWSGI art\u0131k arka planda \u00e7al\u0131\u015f\u0131yor ve Flask uygulaman\u0131z\u0131 dinliyor olmal\u0131.<\/p>\n<h3>Nginx Kurulumu ve Yap\u0131land\u0131rmas\u0131<\/h3>\n<p>uWSGI uygulamam\u0131z\u0131 dinlerken, Nginx&#8217;in de gelen HTTP isteklerini al\u0131p uWSGI&#8217;ye y\u00f6nlendirmesi gerekiyor.<\/p>\n<h4>Nginx Kurulumu<\/h4>\n<p>Nginx&#8217;i daha \u00f6nce kurmu\u015ftuk (<code>sudo apt-get install nginx<\/code>). \u015eimdi Nginx yap\u0131land\u0131rmas\u0131n\u0131 ayarlayal\u0131m.<\/p>\n<h4>Nginx Yap\u0131land\u0131rma Dosyas\u0131 Olu\u015fturma<\/h4>\n<p>Nginx, sitelerin yap\u0131land\u0131rmalar\u0131n\u0131 <code>\/etc\/nginx\/sites-available\/<\/code> dizininde tutar ve etkin siteler i\u00e7in bu dosyalar\u0131n <code>\/etc\/nginx\/sites-enabled\/<\/code> dizinine sembolik ba\u011flant\u0131lar\u0131n\u0131 kullan\u0131r. Uygulamam\u0131z i\u00e7in yeni bir yap\u0131land\u0131rma dosyas\u0131 olu\u015ftural\u0131m:<\/p>\n<pre><code class=\"language-bash\">sudo nano \/etc\/nginx\/sites-available\/myflaskapp<\/code><\/pre>\n<p>\u0130\u00e7ine a\u015fa\u011f\u0131daki yap\u0131land\u0131rmay\u0131 yap\u0131\u015ft\u0131r\u0131n:<\/p>\n<pre><code class=\"language-nginx\">server {\n    listen 80;\n    server_name your_domain_or_ip; # Kendi alan ad\u0131n\u0131z\u0131 veya IP adresinizi buraya yaz\u0131n\n\n    location \/ {\n        include uwsgi_params;\n        uwsgi_pass unix:\/\/\/tmp\/myflaskapp.sock;\n    }\n\n    location \/static {\n        alias \/var\/www\/myflaskapp\/static; # Flask uygulaman\u0131z\u0131n statik dosyalar\u0131 i\u00e7in dizin\n    }\n\n    error_page 500 502 503 504 \/50x.html;\n    location = \/50x.html {\n        root \/usr\/share\/nginx\/html;\n    }\n}<\/code><\/pre>\n<p>Bu yap\u0131land\u0131rmadaki \u00f6nemli noktalar:<br \/>\n*   <code>listen 80;<\/code>: Nginx&#8217;in 80 numaral\u0131 portu dinlemesini sa\u011flar (standart HTTP portu).<br \/>\n*   <code>server_name your_domain_or_ip;<\/code>: Sunucunuzun alan ad\u0131n\u0131 veya IP adresini buraya yaz\u0131n. \u00d6rne\u011fin, <code>server_name example.com www.example.com 192.168.1.100;<\/code>.<br \/>\n*   <code>location \/<\/code>: T\u00fcm gelen istekler i\u00e7in bu blo\u011fu kullan\u0131r.<br \/>\n    *   <code>include uwsgi_params;<\/code>: Nginx&#8217;in uWSGI ile ileti\u015fim kurmak i\u00e7in ihtiya\u00e7 duydu\u011fu parametreleri i\u00e7erir. Bu dosya genellikle <code>\/etc\/nginx\/uwsgi_params<\/code> konumunda bulunur.<br \/>\n    *   <code>uwsgi_pass unix:\/\/\/tmp\/myflaskapp.sock;<\/code>: Gelen istekleri, uWSGI&#8217;nin dinledi\u011fi Unix soketine y\u00f6nlendirir. Bu yol, uWSGI yap\u0131land\u0131rma dosyas\u0131ndaki <code>socket<\/code> parametresiyle ayn\u0131 olmal\u0131d\u0131r.<br \/>\n*   <code>location \/static<\/code>: E\u011fer Flask uygulaman\u0131zda statik dosyalar (CSS, JS, resimler) varsa, Nginx&#8217;in bunlar\u0131 do\u011frudan sunmas\u0131n\u0131 sa\u011flayabilirsiniz. Bu, Nginx&#8217;in bu t\u00fcr dosyalar\u0131 WSGI sunucusuna y\u00f6nlendirmeden daha h\u0131zl\u0131 bir \u015fekilde sunmas\u0131n\u0131 sa\u011flar. <code>\/var\/www\/myflaskapp\/static<\/code> dizinini olu\u015fturman\u0131z ve statik dosyalar\u0131n\u0131z\u0131 buraya koyman\u0131z gerekir.<\/p>\n<p>Statik dizini olu\u015ftural\u0131m (\u015fimdilik bo\u015f olabilir):<\/p>\n<pre><code class=\"language-bash\">sudo mkdir -p \/var\/www\/myflaskapp\/static<\/code><\/pre>\n<h4>Sembolik Ba\u011flant\u0131 Olu\u015fturma ve Varsay\u0131lan Yap\u0131land\u0131rmay\u0131 Devre D\u0131\u015f\u0131 B\u0131rakma<\/h4>\n<p>Yeni yap\u0131land\u0131rma dosyam\u0131z\u0131 etkinle\u015ftirmek i\u00e7in <code>\/etc\/nginx\/sites-enabled\/<\/code> dizinine bir sembolik ba\u011flant\u0131 olu\u015ftural\u0131m ve Nginx&#8217;in varsay\u0131lan yap\u0131land\u0131rmas\u0131n\u0131 devre d\u0131\u015f\u0131 b\u0131rakal\u0131m (\u00e7ak\u0131\u015fmalar\u0131 \u00f6nlemek i\u00e7in).<\/p>\n<pre><code class=\"language-bash\">sudo ln -s \/etc\/nginx\/sites-available\/myflaskapp \/etc\/nginx\/sites-enabled\/\nsudo rm \/etc\/nginx\/sites-enabled\/default<\/code><\/pre>\n<h4>Nginx Yap\u0131land\u0131rmas\u0131n\u0131 Test Etme<\/h4>\n<p>Nginx yap\u0131land\u0131rman\u0131zda herhangi bir hata olup olmad\u0131\u011f\u0131n\u0131 kontrol etmek \u00f6nemlidir.<\/p>\n<pre><code class=\"language-bash\">sudo nginx -t<\/code><\/pre>\n<p>E\u011fer <code>test is successful<\/code> veya <code>syntax is ok<\/code> mesajlar\u0131n\u0131 g\u00f6r\u00fcrseniz, yap\u0131land\u0131rman\u0131zda bir sorun yok demektir. Herhangi bir hata durumunda, hatay\u0131 d\u00fczeltip tekrar test edin.<\/p>\n<h4>Nginx&#8217;i Yeniden Ba\u015flatma<\/h4>\n<p>Yap\u0131land\u0131rma de\u011fi\u015fikliklerinin etkili olmas\u0131 i\u00e7in Nginx&#8217;i yeniden ba\u015flat\u0131n.<\/p>\n<pre><code class=\"language-bash\">sudo service nginx restart<\/code><\/pre>\n<h3>Sistemi Ba\u015flatma ve Test Etme<\/h3>\n<p>\u015eimdi uWSGI ve Nginx&#8217;in birlikte \u00e7al\u0131\u015f\u0131p \u00e7al\u0131\u015fmad\u0131\u011f\u0131n\u0131 test edelim.<\/p>\n<h4>uWSGI Servisini Ba\u015flatma<\/h4>\n<p>Daha \u00f6nce ba\u015flatm\u0131\u015ft\u0131k, ancak emin olmak i\u00e7in tekrar kontrol edelim:<\/p>\n<pre><code class=\"language-bash\">sudo start uwsgi # E\u011fer durduysa\nsudo status uwsgi # Durumunu kontrol et<\/code><\/pre>\n<h4>Nginx Servisini Ba\u015flatma<\/h4>\n<p>Nginx&#8217;i de yeniden ba\u015flatt\u0131k, ancak emin olmak i\u00e7in kontrol edelim:<\/p>\n<pre><code class=\"language-bash\">sudo service nginx restart # E\u011fer durduysa\nsudo service nginx status # Durumunu kontrol et<\/code><\/pre>\n<h4>Uygulamay\u0131 Taray\u0131c\u0131dan Test Etme<\/h4>\n<p>Taray\u0131c\u0131n\u0131z\u0131 a\u00e7\u0131n ve sunucunuzun IP adresine veya alan ad\u0131na gidin (\u00f6rne\u011fin, <code>http:\/\/your_domain_or_ip<\/code>).<br \/>\nE\u011fer &#8220;Merhaba, Flask Uygulamam uWSGI ve Nginx ile \u00c7al\u0131\u015f\u0131yor!&#8221; mesaj\u0131n\u0131 g\u00f6r\u00fcyorsan\u0131z, tebrikler! Flask uygulaman\u0131z uWSGI ve Nginx ile Ubuntu 14.04 \u00fczerinde ba\u015far\u0131yla da\u011f\u0131t\u0131ld\u0131.<\/p>\n<h4>Log Dosyalar\u0131n\u0131 Kontrol Etme<\/h4>\n<p>Herhangi bir sorunla kar\u015f\u0131la\u015f\u0131rsan\u0131z, log dosyalar\u0131n\u0131 kontrol etmek sorun giderme i\u00e7in ilk ad\u0131md\u0131r:<\/p>\n<p>*   <b>Nginx Hata Loglar\u0131:<\/b><\/p>\n<pre><code class=\"language-bash\">tail -f \/var\/log\/nginx\/error.log<\/code><\/pre>\n<p>*   <b>Nginx Eri\u015fim Loglar\u0131:<\/b><\/p>\n<pre><code class=\"language-bash\">tail -f \/var\/log\/nginx\/access.log<\/code><\/pre>\n<p>*   <b>uWSGI Loglar\u0131:<\/b><\/p>\n<pre><code class=\"language-bash\">tail -f \/var\/log\/uwsgi\/myflaskapp.log<\/code><\/pre>\n<p>Bu loglar, ba\u011flant\u0131 sorunlar\u0131, izin hatalar\u0131 veya uygulama hatalar\u0131 hakk\u0131nda de\u011ferli bilgiler sa\u011flayabilir.<\/p>\n<h3>S\u0131k Kar\u015f\u0131la\u015f\u0131lan Sorunlar ve \u00c7\u00f6z\u00fcmler<\/h3>\n<p>Kurulum s\u0131ras\u0131nda veya sonras\u0131nda baz\u0131 yayg\u0131n sorunlarla kar\u015f\u0131la\u015fabilirsiniz. \u0130\u015fte baz\u0131lar\u0131 ve olas\u0131 \u00e7\u00f6z\u00fcmleri:<\/p>\n<h4>uWSGI Socket Hatas\u0131 (\u0130zinler, Yol)<\/h4>\n<p>*   <b>Sorun:<\/b> Nginx, uWSGI soket dosyas\u0131na eri\u015femiyor veya uWSGI soket dosyas\u0131n\u0131 olu\u015fturam\u0131yor. Nginx hata loglar\u0131nda &#8220;connect() to unix:\/\/\/tmp\/myflaskapp.sock failed (13: Permission denied)&#8221; veya &#8220;No such file or directory&#8221; gibi hatalar g\u00f6rebilirsiniz.<br \/>\n*   <b>\u00c7\u00f6z\u00fcm:<\/b><br \/>\n    *   <code>uwsgi.ini<\/code> dosyas\u0131ndaki <code>socket<\/code> yolunun do\u011fru oldu\u011fundan emin olun.<br \/>\n    *   <code>chmod-socket = 660<\/code> ayar\u0131n\u0131n oldu\u011fundan emin olun.<br \/>\n    *   uWSGI&#8217;nin <code>www-data<\/code> kullan\u0131c\u0131s\u0131 ve grubu alt\u0131nda \u00e7al\u0131\u015ft\u0131\u011f\u0131ndan emin olun (<code>uid = www-data<\/code>, <code>gid = www-data<\/code>).<br \/>\n    *   <code>\/tmp<\/code> dizini varsay\u0131lan olarak herkesin yazabilece\u011fi bir yer olsa da, bazen uWSGI&#8217;nin soket olu\u015fturaca\u011f\u0131 dizinin izinleri sorun yaratabilir. Daha g\u00fcvenli bir yakla\u015f\u0131m, <code>\/var\/run\/uwsgi\/<\/code> gibi \u00f6zel bir dizin olu\u015fturmak ve bu dizinin sahipli\u011fini <code>www-data<\/code>&#8216;ya vermektir:<\/p>\n<pre><code class=\"language-bash\">sudo mkdir -p \/var\/run\/uwsgi\n        sudo chown www-data:www-data \/var\/run\/uwsgi<\/code><\/pre>\n<p>        Ve <code>uwsgi.ini<\/code> dosyas\u0131nda <code>socket = \/var\/run\/uwsgi\/myflaskapp.sock<\/code> olarak g\u00fcncelleyin.<\/p>\n<h4>Nginx 502 Bad Gateway Hatas\u0131<\/h4>\n<p>*   <b>Sorun:<\/b> Nginx, uWSGI&#8217;den ge\u00e7erli bir yan\u0131t alam\u0131yor. Bu genellikle uWSGI&#8217;nin \u00e7al\u0131\u015fmad\u0131\u011f\u0131 veya Nginx&#8217;in uWSGI ile ileti\u015fim kuramad\u0131\u011f\u0131 anlam\u0131na gelir.<br \/>\n*   <b>\u00c7\u00f6z\u00fcm:<\/b><br \/>\n    *   uWSGI servisinin \u00e7al\u0131\u015ft\u0131\u011f\u0131ndan emin olun: <code>sudo status uwsgi<\/code>. E\u011fer \u00e7al\u0131\u015fm\u0131yorsa <code>sudo start uwsgi<\/code> ile ba\u015flat\u0131n.<br \/>\n    *   uWSGI loglar\u0131n\u0131 kontrol edin (<code>\/var\/log\/uwsgi\/myflaskapp.log<\/code>). Uygulaman\u0131zda bir Python hatas\u0131 olabilir.<br \/>\n    *   Nginx yap\u0131land\u0131rmas\u0131ndaki <code>uwsgi_pass<\/code> yolunun (<code>unix:\/\/\/tmp\/myflaskapp.sock<\/code>) uWSGI yap\u0131land\u0131rmas\u0131ndaki <code>socket<\/code> yoluyla tamamen ayn\u0131 oldu\u011fundan emin olun.<br \/>\n    *   uWSGI&#8217;nin soketi olu\u015fturdu\u011funu kontrol edin: <code>ls -l \/tmp\/myflaskapp.sock<\/code>. E\u011fer yoksa, uWSGI \u00e7al\u0131\u015fm\u0131yor veya yap\u0131land\u0131rmas\u0131 yanl\u0131\u015f.<\/p>\n<h4>Python Ba\u011f\u0131ml\u0131l\u0131klar\u0131 Sorunlar\u0131<\/h4>\n<p>*   <b>Sorun:<\/b> Flask uygulaman\u0131z beklenmedik hatalar veriyor veya ba\u015flat\u0131lam\u0131yor.<br \/>\n*   <b>\u00c7\u00f6z\u00fcm:<\/b><br \/>\n    *   <code>uwsgi.ini<\/code> dosyas\u0131ndaki <code>chdir<\/code> ve <code>virtualenv<\/code> yollar\u0131n\u0131n do\u011fru oldu\u011fundan emin olun. uWSGI&#8217;nin uygulaman\u0131z\u0131n k\u00f6k dizininde ve do\u011fru sanal ortamda \u00e7al\u0131\u015ft\u0131\u011f\u0131ndan emin olmas\u0131 gerekir.<br \/>\n    *   Sanal ortam\u0131n\u0131z\u0131n t\u00fcm gerekli ba\u011f\u0131ml\u0131l\u0131klar\u0131 i\u00e7erdi\u011finden emin olun (<code>pip install -r requirements.txt<\/code>).<\/p>\n<h4>Nginx Yap\u0131land\u0131rma Hatas\u0131<\/h4>\n<p>*   <b>Sorun:<\/b> Nginx yeniden ba\u015flat\u0131lam\u0131yor ve hata veriyor.<br \/>\n*   <b>\u00c7\u00f6z\u00fcm:<\/b><br \/>\n    *   <code>sudo nginx -t<\/code> komutunu \u00e7al\u0131\u015ft\u0131rarak yap\u0131land\u0131rma dosyan\u0131zdaki s\u00f6zdizimi hatalar\u0131n\u0131 kontrol edin. Hata mesaj\u0131 genellikle sorunun nerede oldu\u011funu g\u00f6sterir.<br \/>\n    *   <code>server_name<\/code> ayar\u0131n\u0131n do\u011fru oldu\u011fundan ve alan ad\u0131n\u0131z\u0131n veya IP adresinizin do\u011fru yaz\u0131ld\u0131\u011f\u0131ndan emin olun.<\/p>\n<h4>Log Dosyalar\u0131n\u0131 \u0130nceleme<\/h4>\n<p>Herhangi bir sorunla kar\u015f\u0131la\u015ft\u0131\u011f\u0131n\u0131zda, sistem loglar\u0131n\u0131 ve uygulama loglar\u0131n\u0131 incelemek en etkili hata ay\u0131klama y\u00f6ntemidir.<br \/>\n*   <code>sudo tail -f \/var\/log\/nginx\/error.log<\/code><br \/>\n*   <code>sudo tail -f \/var\/log\/uwsgi\/myflaskapp.log<\/code><br \/>\n*   <code>sudo journalctl -u uwsgi.service<\/code> (Ubuntu 14.04&#8217;te <code>journalctl<\/code> yerine Upstart loglar\u0131n\u0131 <code>\/var\/log\/upstart\/uwsgi.log<\/code> veya <code>status uwsgi<\/code> komutuyla kontrol etmek daha yayg\u0131nd\u0131r.)<\/p>\n<h3>Sonu\u00e7<\/h3>\n<p>Bu makalede, Flask uygulaman\u0131z\u0131 Ubuntu 14.04 \u00fczerinde uWSGI ve Nginx kullanarak \u00fcretim ortam\u0131nda nas\u0131l da\u011f\u0131taca\u011f\u0131n\u0131z\u0131 ad\u0131m ad\u0131m \u00f6\u011frendiniz. Sanal ortamlar\u0131n kullan\u0131m\u0131, uWSGI&#8217;nin yap\u0131land\u0131r\u0131lmas\u0131, Nginx&#8217;in ters proxy olarak ayarlanmas\u0131 ve Upstart ile servis y\u00f6netimi gibi konular\u0131 ele ald\u0131k. Bu mimari, Flask uygulamalar\u0131n\u0131z i\u00e7in sa\u011flam, y\u00fcksek performansl\u0131 ve \u00f6l\u00e7eklenebilir bir temel sa\u011flar.<\/p>\n<h4>\u0130leri Ad\u0131mlar<\/h4>\n<p>Uygulaman\u0131z art\u0131k \u00fcretimde \u00e7al\u0131\u015f\u0131yor olsa da, da\u011f\u0131t\u0131m s\u00fcrecini daha da geli\u015ftirmek i\u00e7in atabilece\u011finiz baz\u0131 ileri ad\u0131mlar bulunmaktad\u0131r:<\/p>\n<ol>\n<li><b>HTTPS Kullan\u0131m\u0131:<\/b> Let&#8217;s Encrypt gibi \u00fccretsiz sertifika sa\u011flay\u0131c\u0131lar\u0131 kullanarak uygulaman\u0131z i\u00e7in SSL\/TLS \u015fifrelemesini etkinle\u015ftirin. Bu, kullan\u0131c\u0131lar\u0131n\u0131z\u0131n verilerini korur ve SEO s\u0131ralaman\u0131z\u0131 iyile\u015ftirir. Nginx, SSL sonland\u0131rma i\u00e7in m\u00fckemmel bir se\u00e7imdir.<\/li>\n<li><b>Domain Yap\u0131land\u0131rmas\u0131:<\/b> Uygulaman\u0131z\u0131 bir alan ad\u0131na ba\u011flay\u0131n ve DNS kay\u0131tlar\u0131n\u0131z\u0131 (A kayd\u0131) sunucunuzun IP adresine i\u015faret edecek \u015fekilde ayarlay\u0131n.<\/li>\n<li><b>Statik Dosya Y\u00f6netimi:<\/b> Flask uygulaman\u0131z\u0131n statik dosyalar\u0131n\u0131 (CSS, JavaScript, resimler) Nginx \u00fczerinden do\u011frudan sunmak, uygulaman\u0131z\u0131n performans\u0131n\u0131 \u00f6nemli \u00f6l\u00e7\u00fcde art\u0131r\u0131r. <code>location \/static<\/code> blo\u011funu kullanarak bunu zaten ba\u015flatt\u0131k, ancak daha karma\u015f\u0131k statik dosya y\u00f6netimi i\u00e7in WhiteNoise gibi ara\u00e7lar\u0131 d\u00fc\u015f\u00fcnebilirsiniz.<\/li>\n<li><b>Ortam De\u011fi\u015fkenleri:<\/b> Hassas bilgileri (veritaban\u0131 \u015fifreleri, API anahtarlar\u0131) do\u011frudan kodda saklamak yerine ortam de\u011fi\u015fkenlerini kullanarak uygulaman\u0131za iletin.<\/li>\n<li><b>G\u00fcnl\u00fck Y\u00f6netimi:<\/b> Uygulama ve sunucu g\u00fcnl\u00fcklerini merkezi bir sistemde toplamak ve analiz etmek, sorunlar\u0131 daha h\u0131zl\u0131 tespit etmenize yard\u0131mc\u0131 olur.<\/li>\n<li><b>Veritaban\u0131 Entegrasyonu:<\/b> PostgreSQL veya MySQL gibi bir veritaban\u0131 sunucusunu kurun ve Flask uygulaman\u0131z\u0131 bu veritaban\u0131na ba\u011flay\u0131n.<\/li>\n<li><b>S\u00fcrekli Entegrasyon\/S\u00fcrekli Da\u011f\u0131t\u0131m (CI\/CD):<\/b> Uygulama g\u00fcncellemelerini otomatik olarak da\u011f\u0131tmak i\u00e7in Jenkins, GitLab CI\/CD veya GitHub Actions gibi ara\u00e7lar\u0131 kullan\u0131n.<\/li>\n<\/ol>\n<p>Bu ad\u0131mlar\u0131 takip ederek, Flask uygulamalar\u0131n\u0131z\u0131n \u00fcretim ortam\u0131ndaki performans\u0131n\u0131, g\u00fcvenli\u011fini ve s\u00fcrd\u00fcr\u00fclebilirli\u011fini daha da art\u0131rabilirsiniz. Ba\u015far\u0131lar dileriz!<\/body><\/p>\n","protected":false},"excerpt":{"rendered":"Flask Uygulamalar\u0131n\u0131 uWSGI ve Nginx ile Ubuntu 14.04 \u00dczerinde Da\u011f\u0131tma\nGiri\u015f\nWeb uygulamas\u0131 geli\u015ftirme s\u00fcrecinde, uygulamay\u0131 geli\u015ftirme ort","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-33989","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 uWSGI 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-uwsgi-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 uWSGI ve Nginx ile Ubuntu 14.04 \u00dczerinde Da\u011f\u0131tma\" \/>\n<meta property=\"og:description\" content=\"Flask Uygulamalar\u0131n\u0131 uWSGI ve Nginx ile Ubuntu 14.04 \u00dczerinde Da\u011f\u0131tma Giri\u015f Web uygulamas\u0131 geli\u015ftirme s\u00fcrecinde, uygulamay\u0131 geli\u015ftirme ort\" \/>\n<meta property=\"og:url\" content=\"https:\/\/fatihsoysal.com\/blog\/flask-uygulamalarini-uwsgi-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-11-09T14:40:51+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=\"19 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-uwsgi-ve-nginx-ile-ubuntu-14-04-uzerinde-dagitma\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/flask-uygulamalarini-uwsgi-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 uWSGI ve Nginx ile Ubuntu 14.04 \u00dczerinde Da\u011f\u0131tma\",\"datePublished\":\"2025-11-09T14:40:51+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/flask-uygulamalarini-uwsgi-ve-nginx-ile-ubuntu-14-04-uzerinde-dagitma\/\"},\"wordCount\":3089,\"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-uwsgi-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-uwsgi-ve-nginx-ile-ubuntu-14-04-uzerinde-dagitma\/\",\"url\":\"https:\/\/fatihsoysal.com\/blog\/flask-uygulamalarini-uwsgi-ve-nginx-ile-ubuntu-14-04-uzerinde-dagitma\/\",\"name\":\"Flask Uygulamalar\u0131n\u0131 uWSGI 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-11-09T14:40:51+00:00\",\"breadcrumb\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/flask-uygulamalarini-uwsgi-ve-nginx-ile-ubuntu-14-04-uzerinde-dagitma\/#breadcrumb\"},\"inLanguage\":\"tr\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/fatihsoysal.com\/blog\/flask-uygulamalarini-uwsgi-ve-nginx-ile-ubuntu-14-04-uzerinde-dagitma\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/flask-uygulamalarini-uwsgi-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 uWSGI 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 uWSGI 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-uwsgi-ve-nginx-ile-ubuntu-14-04-uzerinde-dagitma\/","og_locale":"tr_TR","og_type":"article","og_title":"Flask Uygulamalar\u0131n\u0131 uWSGI ve Nginx ile Ubuntu 14.04 \u00dczerinde Da\u011f\u0131tma","og_description":"Flask Uygulamalar\u0131n\u0131 uWSGI ve Nginx ile Ubuntu 14.04 \u00dczerinde Da\u011f\u0131tma Giri\u015f Web uygulamas\u0131 geli\u015ftirme s\u00fcrecinde, uygulamay\u0131 geli\u015ftirme ort","og_url":"https:\/\/fatihsoysal.com\/blog\/flask-uygulamalarini-uwsgi-ve-nginx-ile-ubuntu-14-04-uzerinde-dagitma\/","og_site_name":"Kodlar\u0131n Gizemli D\u00fcnyas\u0131","article_published_time":"2025-11-09T14:40:51+00:00","author":"Fatih Soysal","twitter_card":"summary_large_image","twitter_misc":{"Yazan:":"Fatih Soysal","Tahmini okuma s\u00fcresi":"19 dakika"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/fatihsoysal.com\/blog\/flask-uygulamalarini-uwsgi-ve-nginx-ile-ubuntu-14-04-uzerinde-dagitma\/#article","isPartOf":{"@id":"https:\/\/fatihsoysal.com\/blog\/flask-uygulamalarini-uwsgi-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 uWSGI ve Nginx ile Ubuntu 14.04 \u00dczerinde Da\u011f\u0131tma","datePublished":"2025-11-09T14:40:51+00:00","mainEntityOfPage":{"@id":"https:\/\/fatihsoysal.com\/blog\/flask-uygulamalarini-uwsgi-ve-nginx-ile-ubuntu-14-04-uzerinde-dagitma\/"},"wordCount":3089,"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-uwsgi-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-uwsgi-ve-nginx-ile-ubuntu-14-04-uzerinde-dagitma\/","url":"https:\/\/fatihsoysal.com\/blog\/flask-uygulamalarini-uwsgi-ve-nginx-ile-ubuntu-14-04-uzerinde-dagitma\/","name":"Flask Uygulamalar\u0131n\u0131 uWSGI 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-11-09T14:40:51+00:00","breadcrumb":{"@id":"https:\/\/fatihsoysal.com\/blog\/flask-uygulamalarini-uwsgi-ve-nginx-ile-ubuntu-14-04-uzerinde-dagitma\/#breadcrumb"},"inLanguage":"tr","potentialAction":[{"@type":"ReadAction","target":["https:\/\/fatihsoysal.com\/blog\/flask-uygulamalarini-uwsgi-ve-nginx-ile-ubuntu-14-04-uzerinde-dagitma\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/fatihsoysal.com\/blog\/flask-uygulamalarini-uwsgi-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 uWSGI 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\/33989","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=33989"}],"version-history":[{"count":1,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/posts\/33989\/revisions"}],"predecessor-version":[{"id":33990,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/posts\/33989\/revisions\/33990"}],"wp:attachment":[{"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/media?parent=33989"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/categories?post=33989"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/tags?post=33989"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}