{"id":32958,"date":"2025-10-27T21:41:28","date_gmt":"2025-10-27T18:41:28","guid":{"rendered":"https:\/\/fatihsoysal.com\/blog\/?p=32958"},"modified":"2025-10-27T21:41:28","modified_gmt":"2025-10-27T18:41:28","slug":"mod_wsgi-kullanarak-uygulamalari-ubuntu-12-04-uzerinde-sunma","status":"publish","type":"post","link":"https:\/\/fatihsoysal.com\/blog\/mod_wsgi-kullanarak-uygulamalari-ubuntu-12-04-uzerinde-sunma\/","title":{"rendered":"mod_wsgi Kullanarak Uygulamalar\u0131 Ubuntu 12.04 \u00dczerinde Sunma"},"content":{"rendered":"<p><body><\/p>\n<h2>mod_wsgi Kullanarak Uygulamalar\u0131 Ubuntu 12.04 \u00dczerinde Sunma<\/h2>\n<h2>Giri\u015f<\/h2>\n<p>Web uygulamalar\u0131n\u0131n sunulmas\u0131, modern internet altyap\u0131s\u0131n\u0131n temel ta\u015flar\u0131ndan biridir. \u00d6zellikle Python tabanl\u0131 web \u00e7er\u00e7eveleri (Django, Flask, Pyramid vb.) s\u00f6z konusu oldu\u011funda, bu uygulamalar\u0131 g\u00fcvenli, performansl\u0131 ve \u00f6l\u00e7eklenebilir bir \u015fekilde sunmak i\u00e7in \u00f6zel ara\u00e7lara ihtiya\u00e7 duyulur. Bu ara\u00e7lardan biri de Apache HTTP Sunucusu i\u00e7in bir mod\u00fcl olan <code>mod_wsgi<\/code>&#8216;dir. Bu makale, <code>mod_wsgi<\/code>&#8216;nin ne oldu\u011funu, neden \u00f6nemli oldu\u011funu ve \u00f6zellikle Ubuntu 12.04 i\u015fletim sistemi \u00fczerinde Python uygulamalar\u0131n\u0131 nas\u0131l sunaca\u011f\u0131n\u0131z\u0131 ad\u0131m ad\u0131m detayl\u0131 bir \u015fekilde a\u00e7\u0131klayacakt\u0131r. Ubuntu 12.04 eski bir s\u00fcr\u00fcm olmas\u0131na ra\u011fmen, burada anlat\u0131lan temel prensipler ve ad\u0131mlar, <code>mod_wsgi<\/code>&#8216;nin i\u015fleyi\u015fini anlamak i\u00e7in hala ge\u00e7erlidir ve daha yeni sistemlere adaptasyonu kolayla\u015ft\u0131racakt\u0131r.<\/p>\n<p><code>mod_wsgi<\/code>, Python uygulamalar\u0131 ile web sunucusu (Apache) aras\u0131nda bir k\u00f6pr\u00fc g\u00f6revi g\u00f6r\u00fcr. Web Sunucusu Gateway Aray\u00fcz\u00fc (WSGI) standard\u0131n\u0131 uygulayarak, Python uygulamalar\u0131n\u0131n farkl\u0131 web sunucular\u0131 taraf\u0131ndan kolayca bar\u0131nd\u0131r\u0131lmas\u0131n\u0131 sa\u011flar. Bu, geli\u015ftiricilerin uygulama mant\u0131\u011f\u0131na odaklanmas\u0131na olanak tan\u0131rken, sunucunun HTTP isteklerini i\u015fleme, statik dosyalar\u0131 sunma ve g\u00fcvenlik gibi g\u00f6revleri yerine getirmesine izin verir. <code>mod_wsgi<\/code>, C dilinde yaz\u0131ld\u0131\u011f\u0131 i\u00e7in y\u00fcksek performans sunar ve Apache&#8217;nin g\u00fc\u00e7l\u00fc \u00f6zelliklerinden (sanal ana bilgisayarlar, SSL, kimlik do\u011frulama vb.) do\u011frudan yararlanabilir.<\/p>\n<p>Bu makalede, bir Ubuntu 12.04 sunucusunu haz\u0131rlamaktan ba\u015flayarak, Apache ve <code>mod_wsgi<\/code> kurulumunu, basit bir Python WSGI uygulamas\u0131n\u0131n olu\u015fturulmas\u0131n\u0131, Apache sanal ana bilgisayar yap\u0131land\u0131rmas\u0131n\u0131, sanal ortam kullan\u0131m\u0131n\u0131, g\u00fcvenlik hususlar\u0131n\u0131 ve yayg\u0131n sorun giderme tekniklerini ele alaca\u011f\u0131z. Amac\u0131m\u0131z, okuyucunun kendi Python web uygulamalar\u0131n\u0131 Ubuntu 12.04 \u00fczerinde ba\u015far\u0131yla da\u011f\u0131tabilmesi i\u00e7in kapsaml\u0131 bir rehber sunmakt\u0131r.<\/p>\n<h2>\u00d6n Ko\u015fullar<\/h2>\n<p><code>mod_wsgi<\/code> ile bir Python uygulamas\u0131n\u0131 ba\u015far\u0131yla sunabilmek i\u00e7in baz\u0131 temel \u00f6n ko\u015fullar\u0131n kar\u015f\u0131lanmas\u0131 gerekmektedir. Bu b\u00f6l\u00fcm, gerekli yaz\u0131l\u0131mlar\u0131 ve temel sistem bilgilerini \u00f6zetlemektedir:<\/p>\n<p>*   <strong>Ubuntu 12.04 Sunucusu:<\/strong> Bu makale \u00f6zellikle Ubuntu 12.04 \u00fczerine odaklanm\u0131\u015ft\u0131r. Bir sanal makine veya fiziksel bir sunucu olabilir.<br \/>\n*   <strong>SSH Eri\u015fimi:<\/strong> Sunucuya komut sat\u0131r\u0131 \u00fczerinden eri\u015fim i\u00e7in SSH ba\u011flant\u0131s\u0131 gereklidir.<br \/>\n*   <strong>K\u00f6k veya Sudo Yetkileri:<\/strong> Yaz\u0131l\u0131m y\u00fcklemek ve sistem yap\u0131land\u0131rmas\u0131n\u0131 de\u011fi\u015ftirmek i\u00e7in k\u00f6k (root) kullan\u0131c\u0131 veya <code>sudo<\/code> yetkilerine sahip bir kullan\u0131c\u0131 hesab\u0131 gereklidir.<br \/>\n*   <strong>Temel Linux Komut Sat\u0131r\u0131 Bilgisi:<\/strong> Dosya sistemi navigasyonu, paket y\u00f6netimi (apt-get), dosya d\u00fczenleme (vi, nano) gibi temel komutlara a\u015final\u0131k beklenmektedir.<br \/>\n*   <strong>Apache2:<\/strong> Apache HTTP Sunucusu&#8217;nun kurulu olmas\u0131 gerekmektedir. E\u011fer kurulu de\u011filse, sonraki ad\u0131mlarda nas\u0131l kurulaca\u011f\u0131 a\u00e7\u0131klanacakt\u0131r.<br \/>\n*   <strong>Python:<\/strong> Ubuntu 12.04 varsay\u0131lan olarak Python 2.7 ile gelir. <code>mod_wsgi<\/code> kurulumu ve uygulama geli\u015ftirme i\u00e7in Python&#8217;\u0131n y\u00fckl\u00fc olmas\u0131 \u015fartt\u0131r.<br \/>\n*   <strong>\u0130nternet Ba\u011flant\u0131s\u0131:<\/strong> Paketleri indirmek ve g\u00fcncellemek i\u00e7in sunucunun internete ba\u011fl\u0131 olmas\u0131 gerekmektedir.<\/p>\n<p>Bu \u00f6n ko\u015fullar sa\u011fland\u0131ktan sonra, <code>mod_wsgi<\/code> kurulumu ve Python uygulamas\u0131n\u0131n da\u011f\u0131t\u0131m\u0131na ge\u00e7ebiliriz.<\/p>\n<h2>Apache2 Kurulumu<\/h2>\n<p><code>mod_wsgi<\/code> bir Apache mod\u00fcl\u00fc oldu\u011fundan, \u00f6ncelikle Apache HTTP Sunucusu&#8217;nun sisteminizde kurulu ve \u00e7al\u0131\u015f\u0131r durumda olmas\u0131 gerekir. Ubuntu 12.04 \u00fczerinde Apache2 kurulumu olduk\u00e7a basittir.<\/p>\n<h3>Sistem Paket Listesini G\u00fcncelleme<\/h3>\n<p>Herhangi bir yeni yaz\u0131l\u0131m y\u00fcklemeden \u00f6nce, sistemin paket listesini g\u00fcncellemek iyi bir uygulamad\u0131r. Bu, en son paket bilgilerini alman\u0131z\u0131 ve olas\u0131 ba\u011f\u0131ml\u0131l\u0131k sorunlar\u0131n\u0131 \u00f6nlemenizi sa\u011flar:<\/p>\n<pre><code class=\"language-bash\">sudo apt-get update<\/code><\/pre>\n<h3>Apache2 Kurulumu<\/h3>\n<p>Paket listesi g\u00fcncellendikten sonra, Apache2&#8217;yi a\u015fa\u011f\u0131daki komutla kurabilirsiniz:<\/p>\n<pre><code class=\"language-bash\">sudo apt-get install apache2<\/code><\/pre>\n<p>Kurulum s\u0131ras\u0131nda onay istenirse <code>Y<\/code> tu\u015funa bas\u0131p Enter&#8217;a basarak devam edin.<\/p>\n<h3>Apache Servisini Kontrol Etme<\/h3>\n<p>Kurulum tamamland\u0131ktan sonra Apache servisinin otomatik olarak ba\u015flamas\u0131 beklenir. Servisin durumunu kontrol etmek i\u00e7in a\u015fa\u011f\u0131daki komutu kullanabilirsiniz:<\/p>\n<pre><code class=\"language-bash\">sudo service apache2 status<\/code><\/pre>\n<p>E\u011fer servis \u00e7al\u0131\u015fm\u0131yorsa, a\u015fa\u011f\u0131daki komutla ba\u015flatabilirsiniz:<\/p>\n<pre><code class=\"language-bash\">sudo service apache2 start<\/code><\/pre>\n<h3>Kurulumu Do\u011frulama<\/h3>\n<p>Apache&#8217;nin do\u011fru bir \u015fekilde kurulup kurulmad\u0131\u011f\u0131n\u0131 ve eri\u015filebilir olup olmad\u0131\u011f\u0131n\u0131 do\u011frulamak i\u00e7in, sunucunuzun IP adresini veya alan ad\u0131n\u0131 bir web taray\u0131c\u0131s\u0131na yazarak kontrol edebilirsiniz. Varsay\u0131lan olarak, Apache&#8217;nin &#8220;It works!&#8221; (\u00c7al\u0131\u015f\u0131yor!) mesaj\u0131n\u0131 i\u00e7eren bir sayfa g\u00f6stermesi gerekir. E\u011fer bu sayfay\u0131 g\u00f6r\u00fcyorsan\u0131z, Apache ba\u015far\u0131yla kurulmu\u015f demektir.<\/p>\n<h2>Python ve Gerekli Paketlerin Kurulumu<\/h2>\n<p>Ubuntu 12.04, varsay\u0131lan olarak Python 2.7 ile gelir. <code>mod_wsgi<\/code> ve Python uygulamalar\u0131n\u0131z i\u00e7in ek paketlere ihtiyac\u0131n\u0131z olabilir. \u00d6zellikle <code>python-dev<\/code> paketi, <code>mod_wsgi<\/code> gibi C uzant\u0131lar\u0131n\u0131 derlemek i\u00e7in gereklidir. Ayr\u0131ca, Python paketlerini y\u00f6netmek i\u00e7in <code>pip<\/code> ve ba\u011f\u0131ml\u0131l\u0131k izolasyonu i\u00e7in <code>virtualenv<\/code> kullanmak \u015fiddetle tavsiye edilir.<\/p>\n<h3>Python Geli\u015ftirme Ba\u015fl\u0131klar\u0131n\u0131 Kurma<\/h3>\n<p><code>mod_wsgi<\/code>&#8216;yi kaynaktan derlemeyi planl\u0131yorsan\u0131z veya baz\u0131 Python paketlerinin C uzant\u0131lar\u0131n\u0131 derlemesi gerekiyorsa, <code>python-dev<\/code> paketine ihtiyac\u0131n\u0131z olacakt\u0131r:<\/p>\n<pre><code class=\"language-bash\">sudo apt-get install python-dev<\/code><\/pre>\n<h3>pip Kurulumu<\/h3>\n<p><code>pip<\/code>, Python paketlerini y\u00fcklemek ve y\u00f6netmek i\u00e7in standart bir ara\u00e7t\u0131r. Ubuntu 12.04&#8217;te <code>pip<\/code>&#8216;i a\u015fa\u011f\u0131daki gibi kurabilirsiniz:<\/p>\n<pre><code class=\"language-bash\">sudo apt-get install python-pip<\/code><\/pre>\n<p><code>pip<\/code> kurulduktan sonra, kendisini en son s\u00fcr\u00fcme g\u00fcncellemek iyi bir fikirdir:<\/p>\n<pre><code class=\"language-bash\">sudo pip install --upgrade pip<\/code><\/pre>\n<h3>virtualenv Kurulumu<\/h3>\n<p><code>virtualenv<\/code>, Python projeleri i\u00e7in izole edilmi\u015f Python ortamlar\u0131 olu\u015fturmaya yarar. Bu, farkl\u0131 projeler i\u00e7in farkl\u0131 ba\u011f\u0131ml\u0131l\u0131k setlerini y\u00f6netmenizi sa\u011flar ve sistem genelindeki Python kurulumunuzu temiz tutar.<\/p>\n<pre><code class=\"language-bash\">sudo pip install virtualenv<\/code><\/pre>\n<p><code>virtualenv<\/code> kurulumuyla birlikte, Python geli\u015ftirme ortam\u0131n\u0131z i\u00e7in temel ara\u00e7lara sahip olursunuz. Uygulaman\u0131z\u0131n ba\u011f\u0131ml\u0131l\u0131klar\u0131n\u0131 izole etmek i\u00e7in her zaman <code>virtualenv<\/code> kullanman\u0131z \u00f6nerilir.<\/p>\n<h2>mod_wsgi Kurulumu<\/h2>\n<p><code>mod_wsgi<\/code>&#8216;yi Ubuntu 12.04 \u00fczerine kurman\u0131n iki ana yolu vard\u0131r: APT deposundan y\u00fcklemek veya kaynaktan derlemek. APT deposundan y\u00fcklemek genellikle daha kolay ve h\u0131zl\u0131d\u0131r, ancak kaynaktan derlemek daha fazla kontrol ve en son \u00f6zelliklere eri\u015fim sa\u011flar.<\/p>\n<h3>APT Deposundan Kurulum (\u00d6nerilen)<\/h3>\n<p>Bu y\u00f6ntem, \u00e7o\u011fu kullan\u0131c\u0131 i\u00e7in en kolay ve en h\u0131zl\u0131 yoldur. Ubuntu&#8217;nun resmi depolar\u0131ndaki <code>mod_wsgi<\/code> paketini kullan\u0131r.<\/p>\n<pre><code class=\"language-bash\">sudo apt-get install libapache2-mod-wsgi<\/code><\/pre>\n<p>Bu komut, <code>mod_wsgi<\/code> mod\u00fcl\u00fcn\u00fc kuracak ve Apache yap\u0131land\u0131rmas\u0131na gerekli dosyalar\u0131 ekleyecektir.<\/p>\n<h3>Kaynaktan Kurulum (Daha Geli\u015fmi\u015f)<\/h3>\n<p>E\u011fer <code>mod_wsgi<\/code>&#8216;nin belirli bir s\u00fcr\u00fcm\u00fcn\u00fc kullanman\u0131z gerekiyorsa veya en son \u00f6zelliklere eri\u015fmek istiyorsan\u0131z, kaynaktan derleme yolunu tercih edebilirsiniz. Bu y\u00f6ntem, Apache&#8217;nin geli\u015ftirme ba\u015fl\u0131klar\u0131na (<code>apxs<\/code>) ihtiya\u00e7 duyar.<\/p>\n<h4>Apache Geli\u015ftirme Ba\u015fl\u0131klar\u0131n\u0131 Kurma<\/h4>\n<pre><code class=\"language-bash\">sudo apt-get install apache2-prefork-dev<\/code><\/pre>\n<h4>mod_wsgi Kayna\u011f\u0131n\u0131 \u0130ndirme<\/h4>\n<p><code>mod_wsgi<\/code>&#8216;nin en son kararl\u0131 s\u00fcr\u00fcm\u00fcn\u00fc resmi web sitesinden veya GitHub deposundan indirebilirsiniz. \u00d6rne\u011fin, wget ile indirme:<\/p>\n<pre><code class=\"language-bash\">cd \/tmp\nwget https:\/\/github.com\/GrahamDumpleton\/mod_wsgi\/archive\/4.9.0.tar.gz # Veya en son s\u00fcr\u00fcm\ntar -xvf 4.9.0.tar.gz\ncd mod_wsgi-4.9.0 # \u0130ndirdi\u011finiz klas\u00f6r ad\u0131<\/code><\/pre>\n<h4>mod_wsgi&#8217;yi Derleme ve Kurma<\/h4>\n<p>Derleme i\u015flemi <code>configure<\/code>, <code>make<\/code> ve <code>make install<\/code> ad\u0131mlar\u0131n\u0131 i\u00e7erir:<\/p>\n<pre><code class=\"language-bash\">.\/configure --with-apxs=\/usr\/bin\/apxs\nmake\nsudo make install<\/code><\/pre>\n<p><code>--with-apxs<\/code> parametresi, Apache&#8217;nin <code>apxs<\/code> arac\u0131n\u0131n yolunu belirtir. Bu ara\u00e7, mod\u00fcl\u00fcn Apache taraf\u0131ndan do\u011fru bir \u015fekilde kurulmas\u0131n\u0131 sa\u011flar.<\/p>\n<h3>mod_wsgi Mod\u00fcl\u00fcn\u00fc Etkinle\u015ftirme<\/h3>\n<p>Her iki kurulum y\u00f6nteminden sonra, <code>mod_wsgi<\/code> mod\u00fcl\u00fcn\u00fc Apache&#8217;de etkinle\u015ftirmeniz gerekir.<\/p>\n<pre><code class=\"language-bash\">sudo a2enmod wsgi<\/code><\/pre>\n<p>Bu komut, <code>\/etc\/apache2\/mods-available\/wsgi.load<\/code> dosyas\u0131n\u0131 <code>\/etc\/apache2\/mods-enabled\/<\/code> dizinine sembolik olarak ba\u011flar ve mod\u00fcl\u00fcn Apache taraf\u0131ndan y\u00fcklenmesini sa\u011flar.<\/p>\n<h3>Apache&#8217;yi Yeniden Ba\u015flatma<\/h3>\n<p>Mod\u00fcl etkinle\u015ftirildikten sonra, Apache&#8217;nin yeni yap\u0131land\u0131rmay\u0131 y\u00fcklemesi i\u00e7in yeniden ba\u015flat\u0131lmas\u0131 gerekir:<\/p>\n<pre><code class=\"language-bash\">sudo service apache2 restart<\/code><\/pre>\n<p>Apache&#8217;nin sorunsuz bir \u015fekilde yeniden ba\u015flad\u0131\u011f\u0131ndan emin olun. Herhangi bir hata mesaj\u0131 al\u0131rsan\u0131z, <code>\/var\/log\/apache2\/error.log<\/code> dosyas\u0131n\u0131 kontrol edin.<\/p>\n<h2>\u00d6rnek Bir WSGI Uygulamas\u0131 Olu\u015fturma<\/h2>\n<p>\u015eimdi <code>mod_wsgi<\/code>&#8216;nin \u00e7al\u0131\u015f\u0131p \u00e7al\u0131\u015fmad\u0131\u011f\u0131n\u0131 test etmek i\u00e7in basit bir Python WSGI uygulamas\u0131 olu\u015ftural\u0131m. Bu \u00f6rnekte, Flask \u00e7er\u00e7evesini kullanaca\u011f\u0131z, ancak temel WSGI aray\u00fcz\u00fcn\u00fc anlatan saf bir WSGI uygulamas\u0131 da olu\u015fturulabilir.<\/p>\n<h3>Proje Dizini Olu\u015fturma<\/h3>\n<p>Uygulamam\u0131z i\u00e7in bir dizin olu\u015ftural\u0131m. Genellikle web uygulamalar\u0131 <code>\/var\/www\/<\/code> alt\u0131nda bar\u0131nd\u0131r\u0131l\u0131r.<\/p>\n<pre><code class=\"language-bash\">sudo mkdir -p \/var\/www\/my_app\nsudo chown -R www-data:www-data \/var\/www\/my_app\nsudo chmod -R 755 \/var\/www\/my_app\ncd \/var\/www\/my_app<\/code><\/pre>\n<p>Burada, <code>my_app<\/code> dizinini olu\u015fturduk ve Apache&#8217;nin varsay\u0131lan kullan\u0131c\u0131s\u0131 olan <code>www-data<\/code>&#8216;ya sahiplik verdik. Bu, Apache&#8217;nin uygulama dosyalar\u0131na eri\u015febilmesi i\u00e7in \u00f6nemlidir.<\/p>\n<h3>Sanal Ortam Olu\u015fturma ve Flask Kurulumu<\/h3>\n<p>Uygulama ba\u011f\u0131ml\u0131l\u0131klar\u0131n\u0131 izole etmek i\u00e7in bir sanal ortam olu\u015ftural\u0131m ve Flask&#8217;\u0131 bu ortama kural\u0131m.<\/p>\n<pre><code class=\"language-bash\">virtualenv env\nsource env\/bin\/activate\npip install Flask\ndeactivate<\/code><\/pre>\n<p>Bu ad\u0131mlar, <code>env<\/code> ad\u0131nda bir sanal ortam olu\u015fturur, onu etkinle\u015ftirir, Flask&#8217;\u0131 kurar ve ard\u0131ndan sanal ortamdan \u00e7\u0131kar.<\/p>\n<h3>Uygulama Dosyas\u0131 (application.py)<\/h3>\n<p>\u015eimdi Flask uygulamam\u0131z\u0131 i\u00e7eren <code>application.py<\/code> dosyas\u0131n\u0131 olu\u015ftural\u0131m:<\/p>\n<pre><code class=\"language-bash\">sudo nano \/var\/www\/my_app\/application.py<\/code><\/pre>\n<p>\u0130\u00e7eri\u011fi a\u015fa\u011f\u0131daki gibi olsun:<\/p>\n<pre><code class=\"language-python\">from flask import Flask\n\napp = Flask(__name__)\n\n@app.route('\/')\ndef hello_world():\n    return 'Merhaba, Ubuntu 12.04 ve mod_wsgi!'\n\n@app.route('\/test')\ndef test_page():\n    return 'Bu bir test sayfas\u0131d\u0131r.'\n\nif __name__ == '__main__':\n    app.run(debug=True)<\/code><\/pre>\n<h3>WSGI Giri\u015f Noktas\u0131 (wsgi.py)<\/h3>\n<p><code>mod_wsgi<\/code>&#8216;nin uygulaman\u0131z\u0131 nas\u0131l y\u00fckleyece\u011fini belirten bir WSGI giri\u015f noktas\u0131 dosyas\u0131na ihtiyac\u0131m\u0131z var. Bu dosya genellikle <code>wsgi.py<\/code> olarak adland\u0131r\u0131l\u0131r.<\/p>\n<pre><code class=\"language-bash\">sudo nano \/var\/www\/my_app\/wsgi.py<\/code><\/pre>\n<p>\u0130\u00e7eri\u011fi a\u015fa\u011f\u0131daki gibi olsun:<\/p>\n<pre><code class=\"language-python\">import sys\nimport os\n\n<h2>Sanal ortam\u0131n Python yolunu ekle<\/h2>\n<h2>Ubuntu 12.04'te bu ad\u0131m \u00e7ok \u00f6nemlidir.<\/h2>\n<h2>env\/bin\/python i\u00e7indeki site-packages'\u0131 bulmak i\u00e7in.<\/h2>\n<h2>sys.path.insert(0, '\/var\/www\/my_app\/env\/lib\/python2.7\/site-packages') # Python 2.7 i\u00e7in<\/h2>\n\n<h2>E\u011fer sanal ortam Python 3 kullan\u0131yorsa:<\/h2>\n<h2>sys.path.insert(0, '\/var\/www\/my_app\/env\/lib\/python3.x\/site-packages')<\/h2>\n\n<h2>Uygulama dizinini PATH'e ekle<\/h2>\nsys.path.insert(0, os.path.dirname(__file__))\n\n<h2>Flask uygulamas\u0131n\u0131 y\u00fckle<\/h2>\nfrom application import app as application<\/code><\/pre>\n<p><strong>\u00d6nemli Not:<\/strong> <code>sys.path.insert(0, '\/var\/www\/my_app\/env\/lib\/python2.7\/site-packages')<\/code> sat\u0131r\u0131, <code>mod_wsgi<\/code>&#8216;nin sanal ortam\u0131n\u0131zdaki Flask gibi paketleri bulabilmesi i\u00e7in kritik \u00f6neme sahiptir. Ubuntu 12.04&#8217;teki Python 2.7 i\u00e7in yolun do\u011fru oldu\u011fundan emin olun.<\/p>\n<h2>Apache Sanal Host Konfig\u00fcrasyonu<\/h2>\n<p>Uygulamam\u0131z\u0131 Apache \u00fczerinden sunmak i\u00e7in bir sanal ana bilgisayar (Virtual Host) yap\u0131land\u0131rmas\u0131 olu\u015fturmam\u0131z gerekiyor. Bu yap\u0131land\u0131rma, Apache&#8217;ye gelen istekleri hangi uygulamaya y\u00f6nlendirece\u011fini ve <code>mod_wsgi<\/code>&#8216;nin uygulaman\u0131z\u0131 nas\u0131l \u00e7al\u0131\u015ft\u0131raca\u011f\u0131n\u0131 s\u00f6yleyecektir.<\/p>\n<h3>Yeni Bir Sanal Host Dosyas\u0131 Olu\u015fturma<\/h3>\n<p>Apache sanal ana bilgisayar yap\u0131land\u0131rma dosyalar\u0131 genellikle <code>\/etc\/apache2\/sites-available\/<\/code> dizininde bulunur. Uygulamam\u0131z i\u00e7in yeni bir dosya olu\u015ftural\u0131m:<\/p>\n<pre><code class=\"language-bash\">sudo nano \/etc\/apache2\/sites-available\/my_app.conf<\/code><\/pre>\n<p>\u0130\u00e7eri\u011fi a\u015fa\u011f\u0131daki gibi olsun:<\/p>\n<pre><code class=\"language-apache\"><VirtualHost *:80>\n    ServerAdmin webmaster@localhost\n    ServerName example.com # Kendi alan ad\u0131n\u0131z\u0131 veya IP adresinizi buraya yaz\u0131n\n    # ServerAlias www.example.com # \u0130ste\u011fe ba\u011fl\u0131 olarak di\u011fer alan adlar\u0131n\u0131 ekleyebilirsiniz\n\n    # WSGIDaemonProcess: Python uygulaman\u0131z i\u00e7in bir daemon s\u00fcreci olu\u015fturur.\n    # Bu, uygulaman\u0131z\u0131n Apache s\u00fcre\u00e7lerinden izole \u00e7al\u0131\u015fmas\u0131n\u0131 sa\u011flar.\n    # user=www-data group=www-data: Uygulaman\u0131n \u00e7al\u0131\u015faca\u011f\u0131 kullan\u0131c\u0131 ve grup.\n    # processes=2 threads=15: \u0130ki Python s\u00fcreci ve her s\u00fcre\u00e7te 15 i\u015f par\u00e7ac\u0131\u011f\u0131.\n    # python-path: Sanal ortam\u0131n site-packages dizinini ve uygulama k\u00f6k dizinini belirtir.\n    # Ubuntu 12.04 ve Python 2.7 i\u00e7in yolun do\u011fru oldu\u011fundan emin olun.\n    # python-home: Sanal ortam\u0131n k\u00f6k dizinini belirtir. mod_wsgi'nin Python'\u0131 bulmas\u0131 i\u00e7in \u00f6nemlidir.\n    WSGIDaemonProcess my_app user=www-data group=www-data \\\n        processes=2 threads=15 \\\n        python-home=\/var\/www\/my_app\/env \\\n        python-path=\/var\/www\/my_app:\/var\/www\/my_app\/env\/lib\/python2.7\/site-packages \\\n        display-name=%{GROUP}\n\n    # WSGIProcessGroup: Bu sanal host i\u00e7in hangi daemon s\u00fcrecinin kullan\u0131laca\u011f\u0131n\u0131 belirtir.\n    WSGIProcessGroup my_app\n\n    # WSGIScriptAlias: Gelen istekleri WSGI uygulamas\u0131na y\u00f6nlendirir.\n    # \u0130lk parametre URL yolu, ikinci parametre wsgi.py dosyas\u0131n\u0131n yolu.\n    WSGIScriptAlias \/ \/var\/www\/my_app\/wsgi.py\n\n    # <Directory> blo\u011fu: WSGI beti\u011finin bulundu\u011fu dizin i\u00e7in eri\u015fim izinlerini tan\u0131mlar.\n    # Require all granted: T\u00fcm isteklere izin verir.\n    <Directory \/var\/www\/my_app>\n        WSGIProcessGroup my_app\n        WSGIApplicationGroup %{GLOBAL}\n        Order deny,allow\n        Allow from all\n        # Apache 2.4 ve \u00fczeri i\u00e7in: Require all granted\n    <\/Directory>\n\n    # Hata ve Eri\u015fim g\u00fcnl\u00fckleri\n    ErrorLog ${APACHE_LOG_DIR}\/error.log\n    CustomLog ${APACHE_LOG_DIR}\/access.log combined\n<\/VirtualHost><\/code><\/pre>\n<p><strong>A\u00e7\u0131klamalar:<\/strong><\/p>\n<p>*   <strong><code>ServerName example.com<\/code><\/strong>: Bu, uygulaman\u0131za eri\u015fmek i\u00e7in kullanaca\u011f\u0131n\u0131z alan ad\u0131d\u0131r. Kendi alan ad\u0131n\u0131z\u0131 veya sunucunuzun IP adresini yazmal\u0131s\u0131n\u0131z.<br \/>\n*   <strong><code>WSGIDaemonProcess<\/code><\/strong>: Bu direktif, uygulaman\u0131z\u0131n \u00e7al\u0131\u015faca\u011f\u0131 bir daemon s\u00fcreci tan\u0131mlar.<br \/>\n    *   <code>my_app<\/code>: Daemon s\u00fcrecine verdi\u011fimiz isimdir.<br \/>\n    *   <code>user=www-data group=www-data<\/code>: Uygulaman\u0131n <code>www-data<\/code> kullan\u0131c\u0131s\u0131 ve grubu alt\u0131nda \u00e7al\u0131\u015fmas\u0131n\u0131 sa\u011flar. Bu, g\u00fcvenlik ve dosya izinleri i\u00e7in \u00f6nemlidir.<br \/>\n    *   <code>processes=2 threads=15<\/code>: \u0130ki Python s\u00fcrecinin ve her s\u00fcre\u00e7te 15 i\u015f par\u00e7ac\u0131\u011f\u0131n\u0131n olu\u015fturulmas\u0131n\u0131 belirtir. Bu, e\u015fzamanl\u0131 istekleri i\u015flemeye yard\u0131mc\u0131 olur. Uygulaman\u0131z\u0131n ihtiya\u00e7lar\u0131na g\u00f6re ayarlayabilirsiniz.<br \/>\n    *   <code>python-home=\/var\/www\/my_app\/env<\/code>: Sanal ortam\u0131n\u0131z\u0131n k\u00f6k dizinini belirtir. Bu, <code>mod_wsgi<\/code>&#8216;nin do\u011fru Python yorumlay\u0131c\u0131s\u0131n\u0131 bulmas\u0131 i\u00e7in kritik \u00f6neme sahiptir.<br \/>\n    *   <code>python-path=\/var\/www\/my_app:\/var\/www\/my_app\/env\/lib\/python2.7\/site-packages<\/code>: Python&#8217;\u0131n uygulama mod\u00fcllerini ve sanal ortamdaki paketleri nerede arayaca\u011f\u0131n\u0131 belirtir. Uygulama dizinini (<code>\/var\/www\/my_app<\/code>) ve sanal ortam\u0131n <code>site-packages<\/code> dizinini ekledi\u011finizden emin olun. Python 2.7 i\u00e7in yolun <code>python2.7<\/code> i\u00e7erdi\u011fine dikkat edin.<br \/>\n    *   <code>display-name=%{GROUP}<\/code>: S\u00fcre\u00e7 listesinde daha a\u00e7\u0131klay\u0131c\u0131 bir isim g\u00f6r\u00fcnmesini sa\u011flar.<br \/>\n*   <strong><code>WSGIProcessGroup my_app<\/code><\/strong>: Bu sanal ana bilgisayar\u0131n, yukar\u0131da tan\u0131mlanan <code>my_app<\/code> daemon s\u00fcrecini kullanaca\u011f\u0131n\u0131 belirtir.<br \/>\n*   <strong><code>WSGIScriptAlias \/ \/var\/www\/my_app\/wsgi.py<\/code><\/strong>: Gelen t\u00fcm istekleri (<code>\/<\/code>) <code>\/var\/www\/my_app\/wsgi.py<\/code> dosyas\u0131ndaki WSGI uygulamas\u0131na y\u00f6nlendirir.<br \/>\n*   <strong><code><Directory \/var\/www\/my_app><\/code><\/strong>: Bu blok, <code>wsgi.py<\/code> dosyas\u0131n\u0131n bulundu\u011fu dizin i\u00e7in \u00f6zel yap\u0131land\u0131rma sa\u011flar. <code>WSGIProcessGroup<\/code> ve <code>WSGIApplicationGroup<\/code> direktiflerinin burada tekrar edilmesi \u00f6nemlidir. <code>Order deny,allow<\/code> ve <code>Allow from all<\/code> Apache 2.2 tarz\u0131 izinlerdir.<\/p>\n<h3>Sanal Hostu Etkinle\u015ftirme<\/h3>\n<p>Yeni yap\u0131land\u0131rma dosyas\u0131n\u0131 etkinle\u015ftirmek i\u00e7in Apache&#8217;nin <code>a2ensite<\/code> komutunu kullan\u0131n:<\/p>\n<pre><code class=\"language-bash\">sudo a2ensite my_app.conf<\/code><\/pre>\n<p>Varsay\u0131lan Apache sayfas\u0131n\u0131 devre d\u0131\u015f\u0131 b\u0131rakmak iyi bir uygulamad\u0131r, b\u00f6ylece uygulaman\u0131z tek eri\u015filebilir site olur:<\/p>\n<pre><code class=\"language-bash\">sudo a2dissite default<\/code><\/pre>\n<h3>Apache Yap\u0131land\u0131rmas\u0131n\u0131 Test Etme ve Yeniden Ba\u015flatma<\/h3>\n<p>De\u011fi\u015fiklikleri uygulamadan \u00f6nce Apache yap\u0131land\u0131rmas\u0131n\u0131n s\u00f6zdizimini test etmek her zaman iyi bir fikirdir:<\/p>\n<pre><code class=\"language-bash\">sudo apache2ctl configtest<\/code><\/pre>\n<p>E\u011fer <code>Syntax OK<\/code> mesaj\u0131n\u0131 al\u0131rsan\u0131z, Apache&#8217;yi g\u00fcvenle yeniden ba\u015flatabilirsiniz:<\/p>\n<pre><code class=\"language-bash\">sudo service apache2 restart<\/code><\/pre>\n<p>\u015eimdi, taray\u0131c\u0131n\u0131zdan <code>http:\/\/example.com<\/code> (veya sunucunuzun IP adresi) adresine giderek uygulaman\u0131z\u0131n \u00e7al\u0131\u015f\u0131p \u00e7al\u0131\u015fmad\u0131\u011f\u0131n\u0131 kontrol edebilirsiniz. &#8220;Merhaba, Ubuntu 12.04 ve mod_wsgi!&#8221; mesaj\u0131n\u0131 g\u00f6rmelisiniz.<\/p>\n<h2>Sanal Ortam Kullan\u0131m\u0131<\/h2>\n<p>Daha \u00f6nce de belirtildi\u011fi gibi, sanal ortamlar Python projeleri i\u00e7in ba\u011f\u0131ml\u0131l\u0131k izolasyonu sa\u011flamak a\u00e7\u0131s\u0131ndan kritik \u00f6neme sahiptir. <code>mod_wsgi<\/code> ile sanal ortamlar\u0131 do\u011fru bir \u015fekilde kullanmak, uygulama da\u011f\u0131t\u0131m\u0131nda s\u0131k kar\u015f\u0131la\u015f\u0131lan bir konudur.<\/p>\n<h3>Neden Sanal Ortamlar?<\/h3>\n<p>*   <strong>Ba\u011f\u0131ml\u0131l\u0131k \u00c7ak\u0131\u015fmalar\u0131n\u0131 \u00d6nler:<\/strong> Farkl\u0131 projeler ayn\u0131 paketin farkl\u0131 s\u00fcr\u00fcmlerine ihtiya\u00e7 duyabilir. Sanal ortamlar, her projenin kendi ba\u011f\u0131ml\u0131l\u0131k setine sahip olmas\u0131n\u0131 sa\u011flar.<br \/>\n*   <strong>Sistem Genelindeki Python&#8217;\u0131 Temiz Tutar:<\/strong> <code>pip install<\/code> komutlar\u0131 sistem genelindeki Python kurulumunuzu kirletmez.<br \/>\n*   <strong>Ta\u015f\u0131nabilirlik:<\/strong> Bir sanal ortamdaki ba\u011f\u0131ml\u0131l\u0131klar\u0131 <code>pip freeze > requirements.txt<\/code> ile kolayca listeleyebilir ve ba\u015fka bir ortamda <code>pip install -r requirements.txt<\/code> ile yeniden kurabilirsiniz.<br \/>\n*   <strong>G\u00fcvenlik:<\/strong> Uygulaman\u0131z\u0131n sadece ihtiya\u00e7 duydu\u011fu paketlere eri\u015fmesini sa\u011flar.<\/p>\n<h3>mod_wsgi ile Sanal Ortam Entegrasyonu<\/h3>\n<p>Yukar\u0131daki Apache yap\u0131land\u0131rmas\u0131nda <code>WSGIDaemonProcess<\/code> direktifi i\u00e7inde <code>python-home<\/code> ve <code>python-path<\/code> parametrelerini kullanarak sanal ortam\u0131 <code>mod_wsgi<\/code>&#8216;ye tan\u0131tt\u0131k. Bu parametreler, <code>mod_wsgi<\/code>&#8216;nin uygulaman\u0131z i\u00e7in do\u011fru Python yorumlay\u0131c\u0131s\u0131n\u0131 ve paketlerini bulmas\u0131n\u0131 sa\u011flar.<\/p>\n<p>*   <strong><code>python-home=\/var\/www\/my_app\/env<\/code><\/strong>: Bu parametre, <code>mod_wsgi<\/code>&#8216;ye sanal ortam\u0131n\u0131z\u0131n k\u00f6k dizininin nerede oldu\u011funu s\u00f6yler. <code>mod_wsgi<\/code>, bu dizin i\u00e7indeki Python yorumlay\u0131c\u0131s\u0131n\u0131 ve ilgili k\u00fct\u00fcphaneleri kullanmaya \u00e7al\u0131\u015f\u0131r.<br \/>\n*   <strong><code>python-path=\/var\/www\/my_app:\/var\/www\/my_app\/env\/lib\/python2.7\/site-packages<\/code><\/strong>: Bu parametre, Python&#8217;\u0131n mod\u00fclleri arayaca\u011f\u0131 ek dizinleri belirtir. Uygulaman\u0131z\u0131n kendi kodunu (<code>application.py<\/code>) bulmas\u0131 i\u00e7in <code>\/var\/www\/my_app<\/code> ve sanal ortam\u0131n\u0131zdaki y\u00fckl\u00fc paketleri bulmas\u0131 i\u00e7in <code>\/var\/www\/my_app\/env\/lib\/python2.7\/site-packages<\/code> dizinini ekledik.<\/p>\n<p>Bu yap\u0131land\u0131rma, <code>mod_wsgi<\/code>&#8216;nin sanal ortam\u0131n\u0131z\u0131 tam olarak anlamas\u0131n\u0131 ve uygulaman\u0131z\u0131 do\u011fru ba\u011f\u0131ml\u0131l\u0131klarla \u00e7al\u0131\u015ft\u0131rmas\u0131n\u0131 sa\u011flar. Herhangi bir Python paketini uygulaman\u0131za kurdu\u011funuzda, bunu sanal ortam etkinle\u015ftirilmi\u015fken yapman\u0131z ve ard\u0131ndan Apache&#8217;yi yeniden ba\u015flatman\u0131z (veya <code>wsgi.py<\/code> dosyas\u0131n\u0131 <code>touch<\/code> ile g\u00fcncellemeniz) \u00f6nemlidir.<\/p>\n<h2>G\u00fcvenlik ve \u0130zinler<\/h2>\n<p>Web uygulamalar\u0131n\u0131 sunarken g\u00fcvenlik her zaman \u00f6ncelikli olmal\u0131d\u0131r. <code>mod_wsgi<\/code> ile \u00e7al\u0131\u015f\u0131rken dikkat etmeniz gereken baz\u0131 temel g\u00fcvenlik ve izin hususlar\u0131 \u015funlard\u0131r:<\/p>\n<h3>Dosya ve Dizin \u0130zinleri<\/h3>\n<p>Apache&#8217;nin <code>www-data<\/code> kullan\u0131c\u0131s\u0131, uygulama dosyalar\u0131n\u0131za ve <code>wsgi.py<\/code> beti\u011fine okuma ve y\u00fcr\u00fctme iznine sahip olmal\u0131d\u0131r. E\u011fer uygulaman\u0131z dosya y\u00fckleme, log yazma gibi i\u015flemler yap\u0131yorsa, ilgili dizinlere <code>www-data<\/code> kullan\u0131c\u0131s\u0131n\u0131n yazma izni de olmal\u0131d\u0131r.<\/p>\n<p>*   <strong>Uygulama K\u00f6k Dizini (<code>\/var\/www\/my_app<\/code>):<\/strong> <code>www-data<\/code> kullan\u0131c\u0131s\u0131n\u0131n bu dizine ve i\u00e7indeki t\u00fcm dosyalara okuma ve y\u00fcr\u00fctme izni olmal\u0131d\u0131r.<\/p>\n<pre><code class=\"language-bash\">sudo chown -R www-data:www-data \/var\/www\/my_app\n    sudo chmod -R 755 \/var\/www\/my_app<\/code><\/pre>\n<p>*   <strong>Hassas Dosyalar:<\/strong> Veritaban\u0131 yap\u0131land\u0131rma dosyalar\u0131, API anahtarlar\u0131 gibi hassas bilgileri i\u00e7eren dosyalar\u0131n izinlerini k\u0131s\u0131tlay\u0131n. Bu dosyalara sadece uygulaman\u0131n \u00e7al\u0131\u015faca\u011f\u0131 kullan\u0131c\u0131n\u0131n (genellikle <code>www-data<\/code>) eri\u015fimi olmal\u0131 ve di\u011fer kullan\u0131c\u0131lar i\u00e7in okuma izni olmamal\u0131d\u0131r. \u00d6rne\u011fin, <code>640<\/code> veya <code>600<\/code> izinleri kullan\u0131labilir.<\/p>\n<h3>WSGIDaemonProcess user\/group Parametreleri<\/h3>\n<p><code>WSGIDaemonProcess<\/code> direktifindeki <code>user<\/code> ve <code>group<\/code> parametreleri, uygulaman\u0131z\u0131n hangi kullan\u0131c\u0131 ve grup kimli\u011fi alt\u0131nda \u00e7al\u0131\u015faca\u011f\u0131n\u0131 belirler.<\/p>\n<pre><code class=\"language-apache\">WSGIDaemonProcess my_app user=www-data group=www-data \\\n    ...<\/code><\/pre>\n<p>Varsay\u0131lan olarak <code>www-data<\/code> kullan\u0131c\u0131s\u0131 Apache&#8217;nin kendisi taraf\u0131ndan kullan\u0131l\u0131r. E\u011fer birden fazla uygulaman\u0131z varsa veya daha s\u0131k\u0131 bir izolasyon istiyorsan\u0131z, her uygulama i\u00e7in ayr\u0131 bir sistem kullan\u0131c\u0131s\u0131 ve grubu olu\u015fturup <code>WSGIDaemonProcess<\/code> i\u00e7inde belirtebilirsiniz. Bu, bir uygulaman\u0131n g\u00fcvenli\u011finin ihlal edilmesi durumunda di\u011fer uygulamalar\u0131n veya sistemin zarar g\u00f6rmesini s\u0131n\u0131rlayabilir.<\/p>\n<pre><code class=\"language-bash\"># \u00d6rnek: my_app_user ad\u0131nda bir kullan\u0131c\u0131 ve grup olu\u015fturma\nsudo adduser --system --no-create-home my_app_user\nsudo chown -R my_app_user:my_app_user \/var\/www\/my_app<\/code><\/pre>\n<p>Daha sonra Apache yap\u0131land\u0131rmas\u0131nda <code>user=my_app_user group=my_app_user<\/code> olarak ayarlayabilirsiniz.<\/p>\n<h3>Dizin Listelemesini Devre D\u0131\u015f\u0131 B\u0131rakma<\/h3>\n<p>Apache&#8217;nin varsay\u0131lan yap\u0131land\u0131rmas\u0131, bir dizin i\u00e7inde <code>index.html<\/code> veya <code>index.php<\/code> gibi bir dosya bulunmad\u0131\u011f\u0131nda dizin i\u00e7eri\u011fini listeleyebilir. Bu bir g\u00fcvenlik a\u00e7\u0131\u011f\u0131d\u0131r. Uygulama dizininiz i\u00e7in bunu devre d\u0131\u015f\u0131 b\u0131rakmak i\u00e7in <code>Options -Indexes<\/code> kullan\u0131n:<\/p>\n<pre><code class=\"language-apache\"><Directory \/var\/www\/my_app>\n    Options -Indexes # Dizin listelemeyi devre d\u0131\u015f\u0131 b\u0131rak\u0131r\n    ...\n<\/Directory><\/code><\/pre>\n<h3>SSL\/TLS Kullan\u0131m\u0131<\/h3>\n<p>Hassas verileri (parolalar, ki\u015fisel bilgiler vb.) i\u015fleyen her web uygulamas\u0131 i\u00e7in SSL\/TLS kullanmak zorunludur. <code>mod_wsgi<\/code> do\u011frudan SSL ile ilgili de\u011fildir, ancak Apache SSL mod\u00fcl\u00fcn\u00fc (<code>mod_ssl<\/code>) etkinle\u015ftirerek ve bir SSL sertifikas\u0131 yap\u0131land\u0131rarak uygulaman\u0131z\u0131 HTTPS \u00fczerinden g\u00fcvenli bir \u015fekilde sunabilirsiniz.<\/p>\n<pre><code class=\"language-bash\">sudo a2enmod ssl\nsudo service apache2 restart<\/code><\/pre>\n<p>Daha sonra sanal host yap\u0131land\u0131rman\u0131za <code><VirtualHost *:443><\/code> blo\u011funu ekleyerek SSL sertifika yollar\u0131n\u0131 belirtmeniz gerekir.<\/p>\n<h2>Hata Ay\u0131klama ve Sorun Giderme<\/h2>\n<p>Uygulamalar\u0131 da\u011f\u0131t\u0131rken sorunlarla kar\u015f\u0131la\u015fmak ka\u00e7\u0131n\u0131lmazd\u0131r. <code>mod_wsgi<\/code> ile ilgili yayg\u0131n sorunlar\u0131 gidermek i\u00e7in baz\u0131 teknikler ve kontrol noktalar\u0131 \u015funlard\u0131r:<\/p>\n<h3>Apache Hata G\u00fcnl\u00fckleri<\/h3>\n<p>Apache hata g\u00fcnl\u00fckleri, sorun gidermenin ilk ve en \u00f6nemli ad\u0131m\u0131d\u0131r. Genellikle <code>\/var\/log\/apache2\/error.log<\/code> adresinde bulunurlar. Bu g\u00fcnl\u00fckleri d\u00fczenli olarak kontrol edin:<\/p>\n<pre><code class=\"language-bash\">sudo tail -f \/var\/log\/apache2\/error.log<\/code><\/pre>\n<p>Burada Python izleme y\u0131\u011f\u0131nlar\u0131, <code>mod_wsgi<\/code>&#8216;den gelen hata mesajlar\u0131 veya Apache&#8217;nin kendi yap\u0131land\u0131rma hatalar\u0131 gibi de\u011ferli bilgiler bulabilirsiniz.<\/p>\n<h3>Apache Yap\u0131land\u0131rmas\u0131n\u0131 Test Etme<\/h3>\n<p>Herhangi bir Apache yap\u0131land\u0131rma de\u011fi\u015fikli\u011finden sonra <code>apache2ctl configtest<\/code> komutunu \u00e7al\u0131\u015ft\u0131rmak, s\u00f6zdizimi hatalar\u0131n\u0131 yakalaman\u0131za yard\u0131mc\u0131 olur:<\/p>\n<pre><code class=\"language-bash\">sudo apache2ctl configtest<\/code><\/pre>\n<p><code>Syntax OK<\/code> d\u0131\u015f\u0131nda bir \u00e7\u0131kt\u0131 al\u0131rsan\u0131z, hatay\u0131 d\u00fczeltmeden Apache&#8217;yi yeniden ba\u015flatmay\u0131n.<\/p>\n<h3>mod_wsgi Mod\u00fcl\u00fcn\u00fcn Durumunu Kontrol Etme<\/h3>\n<p><code>mod_wsgi<\/code> mod\u00fcl\u00fcn\u00fcn Apache taraf\u0131ndan do\u011fru bir \u015fekilde y\u00fcklendi\u011finden emin olun:<\/p>\n<pre><code class=\"language-bash\">sudo apache2ctl -M | grep wsgi<\/code><\/pre>\n<p>E\u011fer <code>wsgi_module (shared)<\/code> \u00e7\u0131kt\u0131s\u0131n\u0131 g\u00f6rm\u00fcyorsan\u0131z, <code>sudo a2enmod wsgi<\/code> komutunu \u00e7al\u0131\u015ft\u0131rd\u0131\u011f\u0131n\u0131zdan ve Apache&#8217;yi yeniden ba\u015flatt\u0131\u011f\u0131n\u0131zdan emin olun.<\/p>\n<h3>Dosya ve Dizin \u0130zinleri<\/h3>\n<p>\u0130zin sorunlar\u0131, <code>mod_wsgi<\/code> ile en yayg\u0131n kar\u015f\u0131la\u015f\u0131lan sorunlardan biridir. Apache&#8217;nin \u00e7al\u0131\u015ft\u0131rd\u0131\u011f\u0131 <code>www-data<\/code> kullan\u0131c\u0131s\u0131n\u0131n (<code>WSGIDaemonProcess<\/code> i\u00e7inde belirtilen kullan\u0131c\u0131) uygulama dosyalar\u0131n\u0131za, <code>wsgi.py<\/code> beti\u011fine ve sanal ortam dizinlerine okuma ve y\u00fcr\u00fctme izni oldu\u011fundan emin olun. E\u011fer uygulaman\u0131z dosya yaz\u0131yorsa (log, y\u00fckleme vb.), ilgili dizinlere yazma izni de olmal\u0131d\u0131r.<\/p>\n<p>*   <code>ls -l \/var\/www\/my_app\/wsgi.py<\/code><br \/>\n*   <code>ls -ld \/var\/www\/my_app\/env<\/code><br \/>\n*   <code>ls -l \/var\/www\/my_app\/env\/bin\/python<\/code><\/p>\n<p>Komutlar\u0131 ile izinleri kontrol edin.<\/p>\n<h3>Python Yolu Sorunlar\u0131 (<code>python-path<\/code>, <code>python-home<\/code>)<\/h3>\n<p><code>WSGIDaemonProcess<\/code> i\u00e7indeki <code>python-path<\/code> ve <code>python-home<\/code> parametrelerinin do\u011fru ayarland\u0131\u011f\u0131ndan emin olun. \u00d6zellikle sanal ortam kullan\u0131l\u0131yorsa, <code>site-packages<\/code> dizininin do\u011fru yolunu belirtmek \u00f6nemlidir. Yanl\u0131\u015f yollar <code>ImportError<\/code> hatalar\u0131na yol a\u00e7ar.<\/p>\n<p>*   Sanal ortam\u0131n Python s\u00fcr\u00fcm\u00fcn\u00fc kontrol edin (\u00f6rn. Python 2.7).<br \/>\n*   <code>site-packages<\/code> dizininin tam yolunu do\u011frulay\u0131n (\u00f6rn. <code>\/var\/www\/my_app\/env\/lib\/python2.7\/site-packages<\/code>).<br \/>\n*   <code>wsgi.py<\/code> i\u00e7inde <code>sys.path<\/code>&#8216;e ekledi\u011finiz yollar\u0131n do\u011fru oldu\u011fundan emin olun.<\/p>\n<h3>Uygulama Kodu Hatalar\u0131<\/h3>\n<p>E\u011fer <code>mod_wsgi<\/code> yap\u0131land\u0131rman\u0131z do\u011fru g\u00f6r\u00fcn\u00fcyorsa ve hala uygulama \u00e7al\u0131\u015fm\u0131yorsa, sorun uygulaman\u0131z\u0131n kendi kodunda olabilir. <code>wsgi.py<\/code> dosyan\u0131z\u0131n uygulaman\u0131z\u0131 do\u011fru bir \u015fekilde i\u00e7e aktard\u0131\u011f\u0131ndan emin olun.<\/p>\n<p>*   <code>wsgi.py<\/code> dosyan\u0131z\u0131 do\u011frudan Python yorumlay\u0131c\u0131s\u0131 ile \u00e7al\u0131\u015ft\u0131rmay\u0131 deneyin (ancak bu, bir web sunucusu ortam\u0131n\u0131 tam olarak taklit etmez).<br \/>\n*   Uygulaman\u0131z\u0131n yerel bir geli\u015ftirme sunucusunda (\u00f6rn. <code>python application.py<\/code> ile Flask&#8217;\u0131n geli\u015ftirme sunucusu) \u00e7al\u0131\u015f\u0131p \u00e7al\u0131\u015fmad\u0131\u011f\u0131n\u0131 kontrol edin.<\/p>\n<h3>WSGI Uygulamas\u0131n\u0131 Yeniden Y\u00fckleme<\/h3>\n<p>Uygulama kodunuzda bir de\u011fi\u015fiklik yapt\u0131\u011f\u0131n\u0131zda, <code>mod_wsgi<\/code>&#8216;nin bu de\u011fi\u015fiklikleri alg\u0131lamas\u0131 i\u00e7in genellikle Apache&#8217;yi yeniden ba\u015flatman\u0131z gerekir. Ancak, Apache&#8217;yi tamamen yeniden ba\u015flatmak yerine, <code>wsgi.py<\/code> dosyas\u0131n\u0131n <code>mtime<\/code> (de\u011fi\u015ftirme zaman\u0131) \u00f6zelli\u011fini g\u00fcncelleyerek <code>mod_wsgi<\/code>&#8216;ye uygulaman\u0131z\u0131 yeniden y\u00fcklemesini s\u00f6yleyebilirsiniz:<\/p>\n<pre><code class=\"language-bash\">sudo touch \/var\/www\/my_app\/wsgi.py<\/code><\/pre>\n<p>Bu, Apache s\u00fcre\u00e7lerini kesintiye u\u011fratmadan uygulaman\u0131z\u0131n yeni kodunu y\u00fcklemesini sa\u011flar.<\/p>\n<h2>Geli\u015fmi\u015f Konfig\u00fcrasyonlar<\/h2>\n<p><code>mod_wsgi<\/code>, uygulamalar\u0131n\u0131z\u0131n performans\u0131n\u0131 ve kararl\u0131l\u0131\u011f\u0131n\u0131 art\u0131rmak i\u00e7in \u00e7e\u015fitli geli\u015fmi\u015f yap\u0131land\u0131rma se\u00e7enekleri sunar.<\/p>\n<h3>WSGIApplicationGroup<\/h3>\n<p>Varsay\u0131lan olarak, bir <code>WSGIDaemonProcess<\/code> i\u00e7indeki t\u00fcm WSGI uygulamalar\u0131 ayn\u0131 Python yorumlay\u0131c\u0131 alan\u0131nda \u00e7al\u0131\u015f\u0131r. Bu, payla\u015f\u0131lan bellek ve genel de\u011fi\u015fkenler a\u00e7\u0131s\u0131ndan verimli olabilir, ancak bir uygulaman\u0131n \u00e7\u00f6kmesi durumunda di\u011ferlerini de etkileyebilir. <code>WSGIApplicationGroup<\/code> direktifi, farkl\u0131 uygulamalar\u0131n ayn\u0131 daemon s\u00fcreci i\u00e7inde bile farkl\u0131 yorumlay\u0131c\u0131 alanlar\u0131nda \u00e7al\u0131\u015fmas\u0131n\u0131 sa\u011flar.<\/p>\n<pre><code class=\"language-apache\"><Directory \/var\/www\/my_app>\n    WSGIProcessGroup my_app\n    WSGIApplicationGroup %{GLOBAL} # Her iste\u011fi global uygulama grubuna atar\n    # Veya spesifik bir isim: WSGIApplicationGroup my_app_group\n<\/Directory><\/code><\/pre>\n<p><code>%{GLOBAL}<\/code> en yayg\u0131n kullan\u0131md\u0131r. E\u011fer uygulaman\u0131z\u0131n \u00e7ok say\u0131da bellekte yerle\u015fik mod\u00fcl\u00fc varsa veya izole edilmesi gerekiyorsa, \u00f6zel bir grup ad\u0131 kullanmak faydal\u0131 olabilir.<\/p>\n<h3>WSGIRestrictStdout ve WSGIRestrictSignal<\/h3>\n<p>*   <strong><code>WSGIRestrictStdout On<\/code><\/strong>: Python uygulaman\u0131z\u0131n <code>sys.stdout<\/code> ve <code>sys.stderr<\/code>&#8216;e yazmas\u0131n\u0131 k\u0131s\u0131tlar. Bu, uygulaman\u0131z\u0131n do\u011frudan Apache hata g\u00fcnl\u00fcklerine yazmas\u0131n\u0131 engeller ve log y\u00f6netimini daha d\u00fczenli hale getirir. Genellikle <code>WSGIDaemonProcess<\/code> i\u00e7inde <code>ErrorLog<\/code> veya <code>Log<\/code> parametresi ile \u00f6zel bir g\u00fcnl\u00fck dosyas\u0131 belirtmek daha iyidir.<br \/>\n*   <strong><code>WSGIRestrictSignal On<\/code><\/strong>: Python uygulaman\u0131z\u0131n sinyal i\u015fleyicilerini de\u011fi\u015ftirmesini k\u0131s\u0131tlar. Bu, Apache&#8217;nin kendi sinyal y\u00f6netimiyle \u00e7ak\u0131\u015fmalar\u0131 \u00f6nler.<\/p>\n<h3>WSGIChunkedRequest<\/h3>\n<p>B\u00fcy\u00fck dosya y\u00fcklemeleri gerektiren uygulamalar i\u00e7in <code>WSGIChunkedRequest<\/code> direktifi \u00f6nemlidir. Bu, istemciden gelen par\u00e7al\u0131 kodlanm\u0131\u015f (chunked-encoded) isteklerin do\u011fru bir \u015fekilde i\u015flenmesini sa\u011flar.<\/p>\n<pre><code class=\"language-apache\">WSGIChunkedRequest On<\/code><\/pre>\n<h3>Process Y\u00f6netimi ve Performans<\/h3>\n<p><code>WSGIDaemonProcess<\/code> i\u00e7indeki <code>processes<\/code> ve <code>threads<\/code> parametreleri, uygulaman\u0131z\u0131n performans\u0131n\u0131 do\u011frudan etkiler.<\/p>\n<p>*   <strong><code>processes<\/code><\/strong>: \u00c7al\u0131\u015facak ayr\u0131 Python yorumlay\u0131c\u0131s\u0131 s\u00fcre\u00e7lerinin say\u0131s\u0131d\u0131r. Her s\u00fcre\u00e7 ba\u011f\u0131ms\u0131zd\u0131r ve kendi belle\u011fine sahiptir. CPU yo\u011fun uygulamalar i\u00e7in CPU \u00e7ekirde\u011fi say\u0131s\u0131na yak\u0131n bir de\u011fer \u00f6nerilir.<br \/>\n*   <strong><code>threads<\/code><\/strong>: Her Python s\u00fcrecinin i\u00e7indeki i\u015f par\u00e7ac\u0131\u011f\u0131 say\u0131s\u0131d\u0131r. G\/\u00c7 yo\u011fun (veritaban\u0131 sorgular\u0131, a\u011f istekleri) uygulamalar i\u00e7in daha y\u00fcksek bir i\u015f par\u00e7ac\u0131\u011f\u0131 say\u0131s\u0131 faydal\u0131 olabilir. Python&#8217;\u0131n GIL (Global Interpreter Lock) nedeniyle, tek bir Python s\u00fcrecinde ayn\u0131 anda sadece bir i\u015f par\u00e7ac\u0131\u011f\u0131 Python kodunu y\u00fcr\u00fctebilir, ancak G\/\u00c7 i\u015flemleri s\u0131ras\u0131nda di\u011fer i\u015f par\u00e7ac\u0131klar\u0131 bekleyebilir.<\/p>\n<p>Di\u011fer performans parametreleri:<\/p>\n<p>*   <strong><code>maximum-requests=1000<\/code><\/strong>: Bir daemon s\u00fcrecinin belirli say\u0131da istekten sonra otomatik olarak yeniden ba\u015flat\u0131lmas\u0131n\u0131 sa\u011flar. Bu, bellek s\u0131z\u0131nt\u0131lar\u0131n\u0131 veya uzun s\u00fcre \u00e7al\u0131\u015fan s\u00fcre\u00e7lerde biriken sorunlar\u0131 \u00f6nlemek i\u00e7in faydal\u0131d\u0131r.<br \/>\n*   <strong><code>graceful-timeout=15<\/code><\/strong>: Bir daemon s\u00fcreci kapat\u0131l\u0131rken veya yeniden ba\u015flat\u0131l\u0131rken, mevcut isteklerin tamamlanmas\u0131 i\u00e7in ne kadar beklenece\u011fini belirtir.<\/p>\n<p>Bu parametreleri uygulaman\u0131z\u0131n kaynak t\u00fcketimine ve trafik y\u00fck\u00fcne g\u00f6re ayarlaman\u0131z gerekecektir.<\/p>\n<h2>Sonu\u00e7<\/h2>\n<p>Bu makalede, <code>mod_wsgi<\/code> kullanarak Python web uygulamalar\u0131n\u0131 Ubuntu 12.04 \u00fczerinde nas\u0131l sunaca\u011f\u0131n\u0131z\u0131 ad\u0131m ad\u0131m inceledik. <code>mod_wsgi<\/code>, Apache HTTP Sunucusu ile Python uygulamalar\u0131 aras\u0131nda g\u00fc\u00e7l\u00fc, performansl\u0131 ve g\u00fcvenilir bir k\u00f6pr\u00fc g\u00f6revi g\u00f6rerek, web uygulamalar\u0131n\u0131z\u0131n \u00fcretim ortamlar\u0131nda sorunsuz bir \u015fekilde \u00e7al\u0131\u015fmas\u0131n\u0131 sa\u011flar.<\/p>\n<p>Ubuntu 12.04&#8217;\u00fcn eski bir s\u00fcr\u00fcm olmas\u0131na ra\u011fmen, burada ele al\u0131nan kurulum, yap\u0131land\u0131rma ve sorun giderme prensipleri, <code>mod_wsgi<\/code>&#8216;nin temel i\u015fleyi\u015fini anlamak i\u00e7in hala ge\u00e7erlidir. Daha yeni Ubuntu s\u00fcr\u00fcmlerinde veya farkl\u0131 Linux da\u011f\u0131t\u0131mlar\u0131nda s\u00fcre\u00e7ler benzer olmakla birlikte, paket isimleri veya Python varsay\u0131lan s\u00fcr\u00fcmleri gibi k\u00fc\u00e7\u00fck farkl\u0131l\u0131klar olabilir. Ancak, <code>WSGIDaemonProcess<\/code> ve <code>WSGIScriptAlias<\/code> gibi anahtar direktifler ve sanal ortam kullan\u0131m\u0131 gibi en iyi uygulamalar de\u011fi\u015fmez kal\u0131r.<\/p>\n<p>\u00d6zetle, ba\u015far\u0131l\u0131 bir <code>mod_wsgi<\/code> da\u011f\u0131t\u0131m\u0131 i\u00e7in dikkat etmeniz gerekenler:<\/p>\n<p>*   <strong>Do\u011fru Kurulum:<\/strong> Apache ve <code>mod_wsgi<\/code>&#8216;nin sisteminize do\u011fru bir \u015fekilde kuruldu\u011fundan emin olun.<br \/>\n*   <strong>Sanal Ortamlar:<\/strong> Python ba\u011f\u0131ml\u0131l\u0131klar\u0131n\u0131 izole etmek i\u00e7in her zaman sanal ortamlar kullan\u0131n.<br \/>\n*   <strong>Do\u011fru Yap\u0131land\u0131rma:<\/strong> Apache sanal ana bilgisayar\u0131n\u0131zdaki <code>WSGIDaemonProcess<\/code>, <code>python-home<\/code>, <code>python-path<\/code> ve <code>WSGIScriptAlias<\/code> direktiflerini uygulaman\u0131z\u0131n gereksinimlerine g\u00f6re do\u011fru bir \u015fekilde ayarlay\u0131n.<br \/>\n*   <strong>G\u00fcvenlik ve \u0130zinler:<\/strong> Uygulama dosyalar\u0131n\u0131z ve dizinleriniz i\u00e7in do\u011fru dosya izinlerini ayarlay\u0131n ve <code>WSGIDaemonProcess<\/code> i\u00e7in uygun <code>user<\/code>\/<code>group<\/code> ayarlar\u0131n\u0131 kullan\u0131n. SSL\/TLS&#8217;i ihmal etmeyin.<br \/>\n*   <strong>Hata Ay\u0131klama:<\/strong> Sorunlarla kar\u015f\u0131la\u015ft\u0131\u011f\u0131n\u0131zda Apache hata g\u00fcnl\u00fcklerini (<code>\/var\/log\/apache2\/error.log<\/code>) dikkatlice inceleyin ve <code>apache2ctl configtest<\/code> gibi ara\u00e7lar\u0131 kullan\u0131n.<\/p>\n<p><code>mod_wsgi<\/code>&#8216;nin sundu\u011fu esneklik ve performans sayesinde, Python tabanl\u0131 web uygulamalar\u0131n\u0131z\u0131 g\u00fcvenle da\u011f\u0131tabilir ve y\u00f6netebilirsiniz. Bu rehberin, bu s\u00fcre\u00e7te size yol g\u00f6stermesini umuyoruz.<\/body><\/p>\n","protected":false},"excerpt":{"rendered":"mod_wsgi Kullanarak Uygulamalar\u0131 Ubuntu 12.04 \u00dczerinde Sunma\nGiri\u015f\nWeb uygulamalar\u0131n\u0131n sunulmas\u0131, modern internet altyap\u0131s\u0131n\u0131n temel ta\u015fla","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-32958","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>mod_wsgi Kullanarak Uygulamalar\u0131 Ubuntu 12.04 \u00dczerinde Sunma - 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\/mod_wsgi-kullanarak-uygulamalari-ubuntu-12-04-uzerinde-sunma\/\" \/>\n<meta property=\"og:locale\" content=\"tr_TR\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"mod_wsgi Kullanarak Uygulamalar\u0131 Ubuntu 12.04 \u00dczerinde Sunma\" \/>\n<meta property=\"og:description\" content=\"mod_wsgi Kullanarak Uygulamalar\u0131 Ubuntu 12.04 \u00dczerinde Sunma Giri\u015f Web uygulamalar\u0131n\u0131n sunulmas\u0131, modern internet altyap\u0131s\u0131n\u0131n temel ta\u015fla\" \/>\n<meta property=\"og:url\" content=\"https:\/\/fatihsoysal.com\/blog\/mod_wsgi-kullanarak-uygulamalari-ubuntu-12-04-uzerinde-sunma\/\" \/>\n<meta property=\"og:site_name\" content=\"Kodlar\u0131n Gizemli D\u00fcnyas\u0131\" \/>\n<meta property=\"article:published_time\" content=\"2025-10-27T18:41:28+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=\"24 dakika\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/mod_wsgi-kullanarak-uygulamalari-ubuntu-12-04-uzerinde-sunma\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/mod_wsgi-kullanarak-uygulamalari-ubuntu-12-04-uzerinde-sunma\/\"},\"author\":{\"name\":\"Fatih Soysal\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1\"},\"headline\":\"mod_wsgi Kullanarak Uygulamalar\u0131 Ubuntu 12.04 \u00dczerinde Sunma\",\"datePublished\":\"2025-10-27T18:41:28+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/mod_wsgi-kullanarak-uygulamalari-ubuntu-12-04-uzerinde-sunma\/\"},\"wordCount\":3773,\"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\/mod_wsgi-kullanarak-uygulamalari-ubuntu-12-04-uzerinde-sunma\/#respond\"]}],\"copyrightYear\":\"2025\",\"copyrightHolder\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#organization\"}},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/mod_wsgi-kullanarak-uygulamalari-ubuntu-12-04-uzerinde-sunma\/\",\"url\":\"https:\/\/fatihsoysal.com\/blog\/mod_wsgi-kullanarak-uygulamalari-ubuntu-12-04-uzerinde-sunma\/\",\"name\":\"mod_wsgi Kullanarak Uygulamalar\u0131 Ubuntu 12.04 \u00dczerinde Sunma - Kodlar\u0131n Gizemli D\u00fcnyas\u0131\",\"isPartOf\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#website\"},\"datePublished\":\"2025-10-27T18:41:28+00:00\",\"breadcrumb\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/mod_wsgi-kullanarak-uygulamalari-ubuntu-12-04-uzerinde-sunma\/#breadcrumb\"},\"inLanguage\":\"tr\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/fatihsoysal.com\/blog\/mod_wsgi-kullanarak-uygulamalari-ubuntu-12-04-uzerinde-sunma\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/mod_wsgi-kullanarak-uygulamalari-ubuntu-12-04-uzerinde-sunma\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Anasayfa\",\"item\":\"https:\/\/fatihsoysal.com\/blog\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"mod_wsgi Kullanarak Uygulamalar\u0131 Ubuntu 12.04 \u00dczerinde Sunma\"}]},{\"@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":"mod_wsgi Kullanarak Uygulamalar\u0131 Ubuntu 12.04 \u00dczerinde Sunma - 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\/mod_wsgi-kullanarak-uygulamalari-ubuntu-12-04-uzerinde-sunma\/","og_locale":"tr_TR","og_type":"article","og_title":"mod_wsgi Kullanarak Uygulamalar\u0131 Ubuntu 12.04 \u00dczerinde Sunma","og_description":"mod_wsgi Kullanarak Uygulamalar\u0131 Ubuntu 12.04 \u00dczerinde Sunma Giri\u015f Web uygulamalar\u0131n\u0131n sunulmas\u0131, modern internet altyap\u0131s\u0131n\u0131n temel ta\u015fla","og_url":"https:\/\/fatihsoysal.com\/blog\/mod_wsgi-kullanarak-uygulamalari-ubuntu-12-04-uzerinde-sunma\/","og_site_name":"Kodlar\u0131n Gizemli D\u00fcnyas\u0131","article_published_time":"2025-10-27T18:41:28+00:00","author":"Fatih Soysal","twitter_card":"summary_large_image","twitter_misc":{"Yazan:":"Fatih Soysal","Tahmini okuma s\u00fcresi":"24 dakika"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/fatihsoysal.com\/blog\/mod_wsgi-kullanarak-uygulamalari-ubuntu-12-04-uzerinde-sunma\/#article","isPartOf":{"@id":"https:\/\/fatihsoysal.com\/blog\/mod_wsgi-kullanarak-uygulamalari-ubuntu-12-04-uzerinde-sunma\/"},"author":{"name":"Fatih Soysal","@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1"},"headline":"mod_wsgi Kullanarak Uygulamalar\u0131 Ubuntu 12.04 \u00dczerinde Sunma","datePublished":"2025-10-27T18:41:28+00:00","mainEntityOfPage":{"@id":"https:\/\/fatihsoysal.com\/blog\/mod_wsgi-kullanarak-uygulamalari-ubuntu-12-04-uzerinde-sunma\/"},"wordCount":3773,"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\/mod_wsgi-kullanarak-uygulamalari-ubuntu-12-04-uzerinde-sunma\/#respond"]}],"copyrightYear":"2025","copyrightHolder":{"@id":"https:\/\/fatihsoysal.com\/blog\/#organization"}},{"@type":"WebPage","@id":"https:\/\/fatihsoysal.com\/blog\/mod_wsgi-kullanarak-uygulamalari-ubuntu-12-04-uzerinde-sunma\/","url":"https:\/\/fatihsoysal.com\/blog\/mod_wsgi-kullanarak-uygulamalari-ubuntu-12-04-uzerinde-sunma\/","name":"mod_wsgi Kullanarak Uygulamalar\u0131 Ubuntu 12.04 \u00dczerinde Sunma - Kodlar\u0131n Gizemli D\u00fcnyas\u0131","isPartOf":{"@id":"https:\/\/fatihsoysal.com\/blog\/#website"},"datePublished":"2025-10-27T18:41:28+00:00","breadcrumb":{"@id":"https:\/\/fatihsoysal.com\/blog\/mod_wsgi-kullanarak-uygulamalari-ubuntu-12-04-uzerinde-sunma\/#breadcrumb"},"inLanguage":"tr","potentialAction":[{"@type":"ReadAction","target":["https:\/\/fatihsoysal.com\/blog\/mod_wsgi-kullanarak-uygulamalari-ubuntu-12-04-uzerinde-sunma\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/fatihsoysal.com\/blog\/mod_wsgi-kullanarak-uygulamalari-ubuntu-12-04-uzerinde-sunma\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Anasayfa","item":"https:\/\/fatihsoysal.com\/blog\/"},{"@type":"ListItem","position":2,"name":"mod_wsgi Kullanarak Uygulamalar\u0131 Ubuntu 12.04 \u00dczerinde Sunma"}]},{"@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\/32958","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=32958"}],"version-history":[{"count":1,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/posts\/32958\/revisions"}],"predecessor-version":[{"id":32959,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/posts\/32958\/revisions\/32959"}],"wp:attachment":[{"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/media?parent=32958"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/categories?post=32958"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/tags?post=32958"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}