{"id":37905,"date":"2026-01-18T11:40:42","date_gmt":"2026-01-18T08:40:42","guid":{"rendered":"https:\/\/fatihsoysal.com\/blog\/?p=37905"},"modified":"2026-01-18T11:40:42","modified_gmt":"2026-01-18T08:40:42","slug":"python-bottle-uygulamalarini-ubuntu-14-04-uzerine-dagitma-rehberi","status":"publish","type":"post","link":"https:\/\/fatihsoysal.com\/blog\/python-bottle-uygulamalarini-ubuntu-14-04-uzerine-dagitma-rehberi\/","title":{"rendered":"Python Bottle Uygulamalar\u0131n\u0131 Ubuntu 14.04 \u00dczerine Da\u011f\u0131tma Rehberi"},"content":{"rendered":"<p><body><\/p>\n<h2>Python Bottle Uygulamalar\u0131n\u0131 Ubuntu 14.04 \u00dczerine Da\u011f\u0131tma Rehberi<\/h2>\n<p>Bu makalede, hafif ve h\u0131zl\u0131 Python mikro framework&#8217;\u00fc Bottle ile geli\u015ftirilmi\u015f bir web uygulamas\u0131n\u0131 Ubuntu 14.04 sunucusu \u00fczerinde nas\u0131l da\u011f\u0131taca\u011f\u0131n\u0131z\u0131 ad\u0131m ad\u0131m \u00f6\u011freneceksiniz. Ubuntu 14.04, uzun s\u00fcreli destek (LTS) sunan ve bir\u00e7ok sunucu ortam\u0131nda hala yayg\u0131n olarak kullan\u0131lan sa\u011flam bir i\u015fletim sistemidir. Bottle&#8217;\u0131n basitli\u011fi ve Gunicorn gibi bir WSGI sunucusu ile Nginx gibi bir ters proxy&#8217;nin g\u00fcc\u00fc bir araya geldi\u011finde, \u00fcretim ortamlar\u0131 i\u00e7in hem performansl\u0131 hem de bak\u0131m\u0131 kolay bir yap\u0131land\u0131rma elde edebilirsiniz.<\/p>\n<h3>Giri\u015f: Bottle, Ubuntu ve Da\u011f\u0131t\u0131m\u0131n Temelleri<\/h3>\n<p>Bottle, Python i\u00e7in son derece hafif, h\u0131zl\u0131 ve basit bir web mikro framework&#8217;\u00fcd\u00fcr. Tek bir <code>.py<\/code> dosyas\u0131nda da\u011f\u0131t\u0131l\u0131r, harici ba\u011f\u0131ml\u0131l\u0131klar\u0131 neredeyse hi\u00e7 yoktur ve bu da onu k\u00fc\u00e7\u00fck veya orta \u00f6l\u00e7ekli projeler i\u00e7in ideal bir se\u00e7im haline getirir. \u00d6zellikle h\u0131zl\u0131 prototipleme, API geli\u015ftirme veya d\u00fc\u015f\u00fck kaynak t\u00fcketimli uygulamalar i\u00e7in tercih edilir.<\/p>\n<p>Ubuntu 14.04 (Trusty Tahr), 2014 y\u0131l\u0131nda piyasaya s\u00fcr\u00fclen ve Nisan 2019&#8217;a kadar standart destek, Nisan 2022&#8217;ye kadar da ESM (Extended Security Maintenance) deste\u011fi alan bir LTS s\u00fcr\u00fcm\u00fcd\u00fcr. Her ne kadar g\u00fcncel bir s\u00fcr\u00fcm olmasa da, bir\u00e7ok eski sistemde veya belirli kurumsal ortamlarda hala aktif olarak kullan\u0131lmaktad\u0131r. Bu makale, \u00f6zellikle bu eski ancak hala ge\u00e7erli ortamlar i\u00e7in bir da\u011f\u0131t\u0131m stratejisi sunmaktad\u0131r.<\/p>\n<p>Bir Python web uygulamas\u0131n\u0131 \u00fcretim ortam\u0131nda \u00e7al\u0131\u015ft\u0131rmak, sadece <code>python app.py<\/code> komutunu \u00e7al\u0131\u015ft\u0131rmaktan \u00e7ok daha fazlas\u0131n\u0131 gerektirir. \u00dcretim ortam\u0131nda uygulaman\u0131z\u0131n kararl\u0131, g\u00fcvenli ve performansl\u0131 olmas\u0131n\u0131 sa\u011flamak i\u00e7in genellikle \u015fu bile\u015fenlere ihtiya\u00e7 duyulur:<\/p>\n<p>*   <strong>WSGI Sunucusu (Gunicorn, uWSGI vb.):<\/strong> Python web uygulamalar\u0131 i\u00e7in bir aray\u00fcz standard\u0131 olan WSGI (Web Server Gateway Interface) sayesinde, uygulaman\u0131z ile web sunucusu aras\u0131nda ileti\u015fim kurulur. Bir WSGI sunucusu, uygulaman\u0131z\u0131 \u00e7oklu i\u015flem veya \u00e7oklu i\u015f par\u00e7ac\u0131\u011f\u0131 modunda \u00e7al\u0131\u015ft\u0131rarak e\u015f zamanl\u0131 istekleri y\u00f6netir ve uygulaman\u0131z\u0131n kararl\u0131l\u0131\u011f\u0131n\u0131 art\u0131r\u0131r.<br \/>\n*   <strong>Ters Proxy (Nginx, Apache vb.):<\/strong> Do\u011frudan gelen istekleri WSGI sunucusuna y\u00f6nlendiren, statik dosyalar\u0131 sunan, SSL\/TLS sonland\u0131rmas\u0131 yapan, y\u00fck dengelemesi sa\u011flayan ve g\u00fcvenlik katman\u0131 ekleyen bir sunucudur.<br \/>\n*   <strong>Sistem Servis Y\u00f6neticisi (Upstart, Systemd vb.):<\/strong> Uygulaman\u0131z\u0131n arka planda s\u00fcrekli \u00e7al\u0131\u015fmas\u0131n\u0131, sunucu yeniden ba\u015flat\u0131ld\u0131\u011f\u0131nda otomatik olarak ba\u015flamas\u0131n\u0131 ve olas\u0131 \u00e7\u00f6kmelerde otomatik olarak yeniden ba\u015flat\u0131lmas\u0131n\u0131 sa\u011flar. Ubuntu 14.04, Upstart&#8217;\u0131 kullanmaktad\u0131r.<\/p>\n<p>Bu rehberde, basit bir Bottle uygulamas\u0131n\u0131 Gunicorn ile WSGI sunucusu olarak \u00e7al\u0131\u015ft\u0131racak ve gelen t\u00fcm HTTP isteklerini Nginx \u00fczerinden Gunicorn&#8217;a y\u00f6nlendirece\u011fiz. Uygulamam\u0131z\u0131n sunucu yeniden ba\u015flatmalar\u0131nda dahi ayakta kalmas\u0131n\u0131 sa\u011flamak i\u00e7in Upstart servis y\u00f6neticisinden faydalanaca\u011f\u0131z.<\/p>\n<h3>\u00d6n Gereksinimler ve Ortam Kurulumu<\/h3>\n<p>Ba\u015flamadan \u00f6nce, Ubuntu 14.04 y\u00fckl\u00fc bir sunucuya SSH eri\u015fiminizin olmas\u0131 gerekmektedir. Makale boyunca t\u00fcm komutlar\u0131 sunucu \u00fczerinde root yetkileriyle (veya <code>sudo<\/code> kullanarak) \u00e7al\u0131\u015ft\u0131raca\u011f\u0131z.<\/p>\n<h4>Sistem G\u00fcncellemesi ve Temel Paketlerin Kurulumu<\/h4>\n<p>\u00d6ncelikle sunucunuzdaki paket listesini g\u00fcncelleyelim ve mevcut paketleri y\u00fckseltelim:<\/p>\n<pre><code class=\"language-bash\">sudo apt-get update\nsudo apt-get upgrade -y<\/code><\/pre>\n<p>Ard\u0131ndan, Python geli\u015ftirme i\u00e7in gerekli temel ara\u00e7lar\u0131 ve virtualenv&#8217;i kural\u0131m. Ubuntu 14.04 varsay\u0131lan olarak Python 2.7 ile gelir. Bu makalede Python 2.7&#8217;yi kullanaca\u011f\u0131z, ancak Python 3 kullanmak isterseniz ek kurulumlar yapman\u0131z gerekebilir.<\/p>\n<pre><code class=\"language-bash\">sudo apt-get install python-pip python-dev build-essential -y\nsudo pip install virtualenv<\/code><\/pre>\n<p>*   <code>python-pip<\/code>: Python paket y\u00f6neticisi.<br \/>\n*   <code>python-dev<\/code>: Python ba\u015fl\u0131k dosyalar\u0131n\u0131 ve geli\u015ftirme k\u00fct\u00fcphanelerini i\u00e7erir, baz\u0131 Python paketlerinin derlenmesi i\u00e7in gereklidir.<br \/>\n*   <code>build-essential<\/code>: Derleyici ve di\u011fer geli\u015ftirme ara\u00e7lar\u0131n\u0131 i\u00e7erir.<br \/>\n*   <code>virtualenv<\/code>: Python projeleri i\u00e7in izole edilmi\u015f sanal ortamlar olu\u015fturmaya yarar, ba\u011f\u0131ml\u0131l\u0131k \u00e7ak\u0131\u015fmalar\u0131n\u0131 \u00f6nler.<\/p>\n<h4>Uygulama \u0130\u00e7in Kullan\u0131c\u0131 Olu\u015fturma (\u0130ste\u011fe Ba\u011fl\u0131 ama \u00d6nerilir)<\/h4>\n<p>G\u00fcvenlik a\u00e7\u0131s\u0131ndan, web uygulaman\u0131z\u0131 <code>root<\/code> kullan\u0131c\u0131s\u0131 alt\u0131nda \u00e7al\u0131\u015ft\u0131rmak yerine, ona \u00f6zel bir sistem kullan\u0131c\u0131s\u0131 alt\u0131nda \u00e7al\u0131\u015ft\u0131rmak en iyi uygulamad\u0131r.<\/p>\n<pre><code class=\"language-bash\">sudo adduser --system --no-create-home --group mybottleapp<\/code><\/pre>\n<p>Bu komut, <code>mybottleapp<\/code> ad\u0131nda bir kullan\u0131c\u0131 ve grup olu\u015fturur. <code>--system<\/code> sistem kullan\u0131c\u0131s\u0131 oldu\u011funu, <code>--no-create-home<\/code> ana dizin olu\u015fturulmamas\u0131n\u0131 sa\u011flar.<\/p>\n<h3>Basit Bir Bottle Uygulamas\u0131 Olu\u015fturma<\/h3>\n<p>\u015eimdi, sunucumuzda da\u011f\u0131taca\u011f\u0131m\u0131z basit bir Bottle uygulamas\u0131n\u0131 olu\u015ftural\u0131m.<\/p>\n<h4>Proje Dizini ve Sanal Ortam Olu\u015fturma<\/h4>\n<p>Uygulama dosyalar\u0131m\u0131z\u0131 bar\u0131nd\u0131racak bir dizin olu\u015ftural\u0131m ve bu dizine ge\u00e7elim:<\/p>\n<pre><code class=\"language-bash\">sudo mkdir -p \/var\/www\/mybottleapp\nsudo chown -R mybottleapp:mybottleapp \/var\/www\/mybottleapp\ncd \/var\/www\/mybottleapp<\/code><\/pre>\n<p>\u015eimdi, bu dizin i\u00e7inde bir sanal ortam olu\u015ftural\u0131m ve etkinle\u015ftirelim:<\/p>\n<pre><code class=\"language-bash\">sudo -u mybottleapp virtualenv venv\nsudo -u mybottleapp \/var\/www\/mybottleapp\/venv\/bin\/pip install bottle gunicorn<\/code><\/pre>\n<p>Burada <code>sudo -u mybottleapp<\/code> kullanarak <code>mybottleapp<\/code> kullan\u0131c\u0131s\u0131 alt\u0131nda komutlar\u0131 \u00e7al\u0131\u015ft\u0131r\u0131yoruz. Bu, sanal ortam\u0131n ve i\u00e7indeki paketlerin do\u011fru kullan\u0131c\u0131ya ait olmas\u0131n\u0131 sa\u011flar.<\/p>\n<p>*   <code>virtualenv venv<\/code>: Mevcut dizinde <code>venv<\/code> ad\u0131nda bir sanal ortam olu\u015fturur.<br \/>\n*   <code>\/var\/www\/mybottleapp\/venv\/bin\/pip install bottle gunicorn<\/code>: Sanal ortam\u0131n <code>pip<\/code>&#8216;ini kullanarak Bottle ve Gunicorn&#8217;u kurar.<\/p>\n<h4>Bottle Uygulama Dosyas\u0131 Olu\u015fturma<\/h4>\n<p>\u015eimdi <code>app.py<\/code> ad\u0131nda basit bir Bottle uygulamas\u0131 olu\u015ftural\u0131m.<\/p>\n<pre><code class=\"language-bash\">sudo -u mybottleapp nano \/var\/www\/mybottleapp\/app.py<\/code><\/pre>\n<p>A\u015fa\u011f\u0131daki i\u00e7eri\u011fi dosyaya yap\u0131\u015ft\u0131r\u0131n:<\/p>\n<pre><code class=\"language-python\">import bottle\n\napp = bottle.Bottle()\n\n@app.route('\/')\ndef home():\n    return \"\"\n\n@app.route('\/hello\/<name>')\ndef hello(name='D\u00fcnya'):\n    return \"Merhaba %s!\" % name\n\nif __name__ == '__main__':\n    # Bu k\u0131s\u0131m sadece geli\u015ftirme ortam\u0131nda test etmek i\u00e7indir.\n    # \u00dcretim ortam\u0131nda Gunicorn gibi bir WSGI sunucusu kullan\u0131lacakt\u0131r.\n    app.run(host='0.0.0.0', port=8080, debug=True)<\/code><\/pre>\n<p>Dosyay\u0131 kaydedin ve kapat\u0131n (Ctrl+O, Enter, Ctrl+X).<\/p>\n<h4>Uygulamay\u0131 Yerel Olarak Test Etme<\/h4>\n<p>Uygulamam\u0131z\u0131n d\u00fczg\u00fcn \u00e7al\u0131\u015ft\u0131\u011f\u0131ndan emin olmak i\u00e7in sanal ortam i\u00e7inde manuel olarak \u00e7al\u0131\u015ft\u0131rabiliriz:<\/p>\n<pre><code class=\"language-bash\">sudo -u mybottleapp \/var\/www\/mybottleapp\/venv\/bin\/python \/var\/www\/mybottleapp\/app.py<\/code><\/pre>\n<p>E\u011fer her \u015fey yolundaysa, konsolda &#8220;Bottle server starting up&#8230;&#8221; gibi bir \u00e7\u0131kt\u0131 g\u00f6rmelisiniz. Sunucunuzun IP adresini kullanarak (\u00f6rne\u011fin <code>http:\/\/SUNUCU_IP:8080\/<\/code>) taray\u0131c\u0131n\u0131zdan uygulamaya eri\u015fmeyi deneyin. &#8220;Merhaba, Bottle Uygulamas\u0131 Ubuntu 14.04 \u00dczerinde!&#8221; mesaj\u0131n\u0131 g\u00f6rmelisiniz. Testi bitirdikten sonra Ctrl+C ile sunucuyu durdurun.<\/p>\n<h3>WSGI Sunucusu Se\u00e7imi ve Gunicorn ile \u00c7al\u0131\u015ft\u0131rma<\/h3>\n<p>Daha \u00f6nce de bahsetti\u011fimiz gibi, <code>app.py<\/code> dosyas\u0131ndaki <code>app.run()<\/code> komutu sadece geli\u015ftirme ama\u00e7l\u0131d\u0131r. \u00dcretim ortam\u0131nda, e\u015f zamanl\u0131 istekleri y\u00f6netebilen, daha kararl\u0131 ve performansl\u0131 bir WSGI sunucusuna ihtiyac\u0131m\u0131z var. Bu makalede Gunicorn&#8217;u (Green Unicorn) kullanaca\u011f\u0131z. Gunicorn, basitli\u011fi ve etkinli\u011fi nedeniyle pop\u00fcler bir se\u00e7imdir.<\/p>\n<h4>Gunicorn Kurulumu<\/h4>\n<p>Gunicorn&#8217;u daha \u00f6nce sanal ortam\u0131m\u0131za kurmu\u015ftuk:<\/p>\n<pre><code class=\"language-bash\">sudo -u mybottleapp \/var\/www\/mybottleapp\/venv\/bin\/pip install gunicorn<\/code><\/pre>\n<h4>Gunicorn ile Uygulamay\u0131 \u00c7al\u0131\u015ft\u0131rma<\/h4>\n<p>Gunicorn&#8217;u Bottle uygulamam\u0131zla birlikte \u00e7al\u0131\u015ft\u0131rmak i\u00e7in a\u015fa\u011f\u0131daki komutu kullanabiliriz:<\/p>\n<pre><code class=\"language-bash\">sudo -u mybottleapp \/var\/www\/mybottleapp\/venv\/bin\/gunicorn --workers 3 --bind 0.0.0.0:8000 app:app<\/code><\/pre>\n<p><em>   <code>--workers 3<\/code>: Gunicorn&#8217;un 3 adet worker (i\u015f\u00e7i) s\u00fcreci ba\u015flatmas\u0131n\u0131 s\u00f6yler. Bu say\u0131 genellikle <code>(2 <\/em> CPU_\u00c7ekirdek_Say\u0131s\u0131) + 1<\/code> form\u00fcl\u00fcyle hesaplan\u0131r, ancak uygulaman\u0131z\u0131n ihtiya\u00e7lar\u0131na g\u00f6re ayarlanmal\u0131d\u0131r.<br \/>\n*   <code>--bind 0.0.0.0:8000<\/code>: Gunicorn&#8217;un t\u00fcm a\u011f aray\u00fczlerinde 8000 portunu dinlemesini sa\u011flar. Nginx bu porta y\u00f6nlendirme yapacakt\u0131r.<br \/>\n*   <code>app:app<\/code>: Gunicorn&#8217;a <code>app.py<\/code> dosyas\u0131ndaki <code>app<\/code> adl\u0131 Bottle uygulamas\u0131n\u0131 \u00e7al\u0131\u015ft\u0131rmas\u0131n\u0131 s\u00f6yler. \u0130lk <code>app<\/code> dosya ad\u0131n\u0131 (uzant\u0131s\u0131z), ikinci <code>app<\/code> ise dosya i\u00e7indeki <code>bottle.Bottle()<\/code> nesnesinin ad\u0131n\u0131 temsil eder.<\/p>\n<p>Bu komutu \u00e7al\u0131\u015ft\u0131rd\u0131\u011f\u0131n\u0131zda Gunicorn ba\u015flayacak ve 8000 portunu dinleyecektir. Taray\u0131c\u0131n\u0131zdan <code>http:\/\/SUNUCU_IP:8000\/<\/code> adresine giderek uygulamaya do\u011frudan eri\u015febilirsiniz. Testi bitirdikten sonra Ctrl+C ile Gunicorn&#8217;u durdurun.<\/p>\n<h3>Upstart ile Gunicorn&#8217;u Y\u00f6netme<\/h3>\n<p>Gunicorn&#8217;u manuel olarak \u00e7al\u0131\u015ft\u0131rmak \u00fcretim ortam\u0131 i\u00e7in uygun de\u011fildir. Sunucu yeniden ba\u015flat\u0131ld\u0131\u011f\u0131nda uygulaman\u0131z\u0131n otomatik olarak ba\u015flamas\u0131n\u0131 ve olas\u0131 \u00e7\u00f6kmelerde yeniden ba\u015flat\u0131lmas\u0131n\u0131 sa\u011flamak i\u00e7in bir servis y\u00f6neticisi kullanmal\u0131y\u0131z. Ubuntu 14.04, Upstart&#8217;\u0131 kullan\u0131r.<\/p>\n<h4>Upstart Yap\u0131land\u0131rma Dosyas\u0131 Olu\u015fturma<\/h4>\n<p><code>mybottleapp.conf<\/code> ad\u0131nda bir Upstart yap\u0131land\u0131rma dosyas\u0131 olu\u015ftural\u0131m:<\/p>\n<pre><code class=\"language-bash\">sudo nano \/etc\/init\/mybottleapp.conf<\/code><\/pre>\n<p>A\u015fa\u011f\u0131daki i\u00e7eri\u011fi dosyaya yap\u0131\u015ft\u0131r\u0131n. A\u00e7\u0131klamalar\u0131 dikkatlice okuyun:<\/p>\n<pre><code class=\"language-ini\"># \/etc\/init\/mybottleapp.conf\n\ndescription \"Gunicorn server for my Bottle application\"\n\nstart on runlevel [2345]\nstop on runlevel [!2345]\n\nrespawn\nrespawn limit 10 5\n\nsetuid mybottleapp\nsetgid mybottleapp\n\nchdir \/var\/www\/mybottleapp\n\nexec \/var\/www\/mybottleapp\/venv\/bin\/gunicorn --workers 3 --bind unix:\/tmp\/mybottleapp.sock app:app<\/code><\/pre>\n<p>Dosyay\u0131 kaydedin ve kapat\u0131n.<\/p>\n<p><strong>A\u00e7\u0131klamalar:<\/strong><\/p>\n<p>*   <code>description<\/code>: Servisin k\u0131sa bir a\u00e7\u0131klamas\u0131.<br \/>\n*   <code>start on runlevel [2345]<\/code>: Servisin \u00e7ok kullan\u0131c\u0131l\u0131 grafiksel olmayan (2), \u00e7ok kullan\u0131c\u0131l\u0131 (3), tam \u00e7ok kullan\u0131c\u0131l\u0131 (4) ve grafiksel \u00e7ok kullan\u0131c\u0131l\u0131 (5) \u00e7al\u0131\u015fma seviyelerinde ba\u015flat\u0131lmas\u0131n\u0131 sa\u011flar.<br \/>\n*   <code>stop on runlevel [!2345]<\/code>: Bu \u00e7al\u0131\u015fma seviyeleri d\u0131\u015f\u0131nda (\u00f6rne\u011fin tek kullan\u0131c\u0131l\u0131 mod veya kapanma) servisin durdurulmas\u0131n\u0131 sa\u011flar.<br \/>\n*   <code>respawn<\/code>: Servis \u00e7\u00f6kerse veya beklenmedik bir \u015fekilde durursa otomatik olarak yeniden ba\u015flat\u0131lmas\u0131n\u0131 sa\u011flar.<br \/>\n*   <code>respawn limit 10 5<\/code>: 5 saniye i\u00e7inde 10 kez yeniden ba\u015flatma denemesi ba\u015far\u0131s\u0131z olursa, Upstart servisi yeniden ba\u015flatmay\u0131 durdurur.<br \/>\n*   <code>setuid mybottleapp<\/code>: Servisi <code>mybottleapp<\/code> kullan\u0131c\u0131s\u0131 alt\u0131nda \u00e7al\u0131\u015ft\u0131r\u0131r. Bu, g\u00fcvenlik i\u00e7in \u00f6nemlidir.<br \/>\n*   <code>setgid mybottleapp<\/code>: Servisi <code>mybottleapp<\/code> grubu alt\u0131nda \u00e7al\u0131\u015ft\u0131r\u0131r.<br \/>\n*   <code>chdir \/var\/www\/mybottleapp<\/code>: Servis ba\u015flat\u0131ld\u0131\u011f\u0131nda \u00e7al\u0131\u015fma dizinini <code>\/var\/www\/mybottleapp<\/code> olarak ayarlar.<br \/>\n*   <code>exec<\/code>: \u00c7al\u0131\u015ft\u0131r\u0131lacak komutu belirtir. Burada Gunicorn&#8217;u sanal ortam\u0131m\u0131zdaki ikili dosya \u00fczerinden \u00e7al\u0131\u015ft\u0131r\u0131yoruz.<\/p>\n<p><strong>\u00d6nemli Not:<\/strong> <code>exec<\/code> sat\u0131r\u0131nda <code>0.0.0.0:8000<\/code> yerine <code>unix:\/tmp\/mybottleapp.sock<\/code> kulland\u0131k. Bu, Gunicorn&#8217;un belirli bir IP ve port yerine bir Unix soketi \u00fczerinden dinlemesini sa\u011flar. Unix soketleri, ayn\u0131 sunucu \u00fczerindeki i\u015flemler aras\u0131 ileti\u015fim i\u00e7in genellikle TCP\/IP portlar\u0131ndan daha h\u0131zl\u0131 ve g\u00fcvenlidir. Nginx&#8217;i de bu sokete y\u00f6nlendirece\u011fiz.<\/p>\n<h4>Upstart Servisini Y\u00f6netme<\/h4>\n<p>\u015eimdi servislerimizi ba\u015flatabilir, durdurabilir ve durumunu kontrol edebiliriz:<\/p>\n<pre><code class=\"language-bash\">sudo service mybottleapp start    # Servisi ba\u015flat\nsudo service mybottleapp status   # Servisin durumunu kontrol et\nsudo service mybottleapp stop     # Servisi durdur\nsudo service mybottleapp restart  # Servisi yeniden ba\u015flat<\/code><\/pre>\n<p><code>sudo service mybottleapp status<\/code> komutunu \u00e7al\u0131\u015ft\u0131rd\u0131\u011f\u0131n\u0131zda, servisin &#8220;start\/running&#8221; durumunda oldu\u011funu g\u00f6rmelisiniz.<\/p>\n<h3>Nginx Ters Proxy Olarak Kurulumu ve Yap\u0131land\u0131rmas\u0131<\/h3>\n<p>Uygulamam\u0131z art\u0131k Gunicorn taraf\u0131ndan y\u00f6netiliyor ve bir Unix soketi \u00fczerinden dinleniyor. Ancak do\u011frudan bu sokete veya Gunicorn&#8217;un dinledi\u011fi porta d\u0131\u015far\u0131dan eri\u015fim sa\u011flamak istemeyiz. \u0130\u015fte bu noktada Nginx devreye girer. Nginx, gelen HTTP isteklerini kar\u015f\u0131layacak, statik dosyalar\u0131 sunacak ve istekleri Gunicorn&#8217;a y\u00f6nlendirecek bir ters proxy olarak g\u00f6rev yapacakt\u0131r.<\/p>\n<h4>Nginx Kurulumu<\/h4>\n<p>Nginx&#8217;i sunucumuza kural\u0131m:<\/p>\n<pre><code class=\"language-bash\">sudo apt-get install nginx -y<\/code><\/pre>\n<p>Kurulum tamamland\u0131\u011f\u0131nda Nginx otomatik olarak ba\u015flayacakt\u0131r. Taray\u0131c\u0131n\u0131zdan sunucunuzun IP adresine gitti\u011finizde Nginx&#8217;in varsay\u0131lan &#8220;Welcome to nginx!&#8221; sayfas\u0131n\u0131 g\u00f6rmelisiniz.<\/p>\n<h4>Nginx Yap\u0131land\u0131rma Dosyas\u0131 Olu\u015fturma<\/h4>\n<p>\u015eimdi Bottle uygulamam\u0131z i\u00e7in bir Nginx yap\u0131land\u0131rma dosyas\u0131 olu\u015ftural\u0131m:<\/p>\n<pre><code class=\"language-bash\">sudo nano \/etc\/nginx\/sites-available\/mybottleapp<\/code><\/pre>\n<p>A\u015fa\u011f\u0131daki i\u00e7eri\u011fi dosyaya yap\u0131\u015ft\u0131r\u0131n. <code>your_domain_or_ip<\/code> k\u0131sm\u0131n\u0131 kendi alan ad\u0131n\u0131z veya sunucunuzun IP adresi ile de\u011fi\u015ftirin.<\/p>\n<pre><code class=\"language-nginx\"># \/etc\/nginx\/sites-available\/mybottleapp\n\nserver {\n    listen 80;\n    server_name your_domain_or_ip; # Alan ad\u0131n\u0131z\u0131 veya sunucunuzun IP adresini buraya yaz\u0131n\n\n    # Gunicorn Unix soketine proxy ayarlar\u0131\n    location \/ {\n        include proxy_params;\n        proxy_pass http:\/\/unix:\/tmp\/mybottleapp.sock;\n    }\n\n    # Statik dosyalar i\u00e7in ayr\u0131 bir konum blo\u011fu (iste\u011fe ba\u011fl\u0131)\n    # E\u011fer uygulaman\u0131z statik dosyalar (CSS, JS, resimler) sunuyorsa\n    # bu k\u0131sm\u0131 yap\u0131land\u0131rman\u0131z gerekir.\n    # \u00d6rne\u011fin, statik dosyalar\u0131n\u0131z \/var\/www\/mybottleapp\/static dizininde ise:\n    # location \/static\/ {\n    #     alias \/var\/www\/mybottleapp\/static\/;\n    # }\n}<\/code><\/pre>\n<p>Dosyay\u0131 kaydedin ve kapat\u0131n.<\/p>\n<p><strong>A\u00e7\u0131klamalar:<\/strong><\/p>\n<p>*   <code>listen 80<\/code>: Nginx&#8217;in 80 (HTTP) portunu dinlemesini sa\u011flar.<br \/>\n*   <code>server_name<\/code>: Bu sunucu blo\u011funun hangi alan ad\u0131 veya IP adresi i\u00e7in ge\u00e7erli oldu\u011funu belirtir.<br \/>\n*   <code>location \/<\/code>: Gelen t\u00fcm istekleri (root yolu ve alt\u0131ndaki her \u015feyi) yakalar.<br \/>\n*   <code>include proxy_params<\/code>: Nginx&#8217;in \u00f6ntan\u0131ml\u0131 proxy parametrelerini (\u00f6rne\u011fin <code>proxy_set_header<\/code> ayarlar\u0131 gibi) i\u00e7erir. Bu parametreler, orijinal istemci IP adresi gibi bilgileri Gunicorn&#8217;a iletmek i\u00e7in \u00f6nemlidir.<br \/>\n*   <code>proxy_pass http:\/\/unix:\/tmp\/mybottleapp.sock<\/code>: \u0130stekleri Gunicorn&#8217;un dinledi\u011fi Unix soketine y\u00f6nlendirir.<br \/>\n*   <code>location \/static\/<\/code>: E\u011fer uygulaman\u0131z statik dosyalar sunuyorsa, bu blo\u011fu kullanarak Nginx&#8217;in bu dosyalar\u0131 do\u011frudan sunmas\u0131n\u0131 sa\u011flayabilirsiniz. Bu, Gunicorn&#8217;un statik dosya sunumu y\u00fck\u00fcnden kurtulmas\u0131n\u0131 ve uygulaman\u0131z\u0131n daha performansl\u0131 \u00e7al\u0131\u015fmas\u0131n\u0131 sa\u011flar. <code>alias<\/code> y\u00f6nergesi, URL yolunu dosya sistemindeki ger\u00e7ek yola e\u015fler.<\/p>\n<h4>Nginx Yap\u0131land\u0131rmas\u0131n\u0131 Etkinle\u015ftirme<\/h4>\n<p>Yeni yap\u0131land\u0131rma dosyam\u0131z\u0131 etkinle\u015ftirmek i\u00e7in <code>sites-enabled<\/code> dizinine bir sembolik ba\u011flant\u0131 olu\u015ftural\u0131m:<\/p>\n<pre><code class=\"language-bash\">sudo ln -s \/etc\/nginx\/sites-available\/mybottleapp \/etc\/nginx\/sites-enabled\/<\/code><\/pre>\n<p>Varsay\u0131lan Nginx yap\u0131land\u0131rmas\u0131n\u0131 devre d\u0131\u015f\u0131 b\u0131rakal\u0131m ki bizimkiyle \u00e7ak\u0131\u015fmas\u0131n:<\/p>\n<pre><code class=\"language-bash\">sudo rm \/etc\/nginx\/sites-enabled\/default<\/code><\/pre>\n<h4>Nginx Yap\u0131land\u0131rmas\u0131n\u0131 Test Etme ve Yeniden Ba\u015flatma<\/h4>\n<p>Yap\u0131land\u0131rma dosyam\u0131zda herhangi bir s\u00f6zdizimi hatas\u0131 olup olmad\u0131\u011f\u0131n\u0131 kontrol edelim:<\/p>\n<pre><code class=\"language-bash\">sudo nginx -t<\/code><\/pre>\n<p>E\u011fer &#8220;test is successful&#8221; mesaj\u0131n\u0131 g\u00f6r\u00fcrseniz, her \u015fey yolundad\u0131r. \u015eimdi Nginx&#8217;i yeniden ba\u015flatal\u0131m ki yeni yap\u0131land\u0131rmay\u0131 y\u00fcklesin:<\/p>\n<pre><code class=\"language-bash\">sudo service nginx restart<\/code><\/pre>\n<p>Art\u0131k taray\u0131c\u0131n\u0131zdan sunucunuzun IP adresine veya alan ad\u0131na (e\u011fer bir alan ad\u0131 yap\u0131land\u0131rd\u0131ysan\u0131z) gitti\u011finizde, Bottle uygulaman\u0131z\u0131n Nginx \u00fczerinden \u00e7al\u0131\u015ft\u0131\u011f\u0131n\u0131 g\u00f6rmelisiniz.<\/p>\n<h3>G\u00fcvenlik \u0130pu\u00e7lar\u0131 ve En \u0130yi Uygulamalar<\/h3>\n<p>Uygulaman\u0131z\u0131 da\u011f\u0131tt\u0131ktan sonra, sunucunuzun ve uygulaman\u0131z\u0131n g\u00fcvenli\u011fini sa\u011flamak i\u00e7in baz\u0131 ek ad\u0131mlar atman\u0131z \u00f6nemlidir.<\/p>\n<h4>G\u00fcvenlik Duvar\u0131 (UFW) Yap\u0131land\u0131rmas\u0131<\/h4>\n<p>Ubuntu&#8217;da UFW (Uncomplicated Firewall) varsay\u0131lan olarak gelir ve kullan\u0131m\u0131 kolayd\u0131r. Yaln\u0131zca gerekli portlara izin vererek sunucunuzu koruyun.<\/p>\n<pre><code class=\"language-bash\">sudo ufw allow OpenSSH         # SSH eri\u015fimine izin ver (port 22)\nsudo ufw allow 'Nginx HTTP'    # HTTP (port 80) eri\u015fimine izin ver\n<h2>sudo ufw allow 'Nginx HTTPS' # E\u011fer SSL\/TLS kullanacaksan\u0131z HTTPS (port 443) eri\u015fimine izin verin<\/h2>\nsudo ufw enable                # G\u00fcvenlik duvar\u0131n\u0131 etkinle\u015ftir\nsudo ufw status                # G\u00fcvenlik duvar\u0131 durumunu kontrol et<\/code><\/pre>\n<h4>SSL\/TLS Kurulumu (Let&#8217;s Encrypt)<\/h4>\n<p>\u00dcretim ortam\u0131ndaki her web uygulamas\u0131 HTTPS kullanmal\u0131d\u0131r. Let&#8217;s Encrypt, \u00fccretsiz SSL\/TLS sertifikalar\u0131 sa\u011flar ve Certbot arac\u0131 ile kurulumu olduk\u00e7a kolayd\u0131r. Ubuntu 14.04 i\u00e7in Certbot kurulumu biraz daha eski y\u00f6ntemlerle yap\u0131labilir, ancak yine de m\u00fcmk\u00fcnd\u00fcr.<\/p>\n<pre><code class=\"language-bash\">sudo apt-get install python-certbot-nginx -y # Nginx eklentisi ile Certbot\nsudo certbot --nginx -d your_domain_or_ip     # Sertifika alma ve Nginx'i yap\u0131land\u0131rma<\/code><\/pre>\n<p>Bu komutlar, domain ad\u0131n\u0131z\u0131 do\u011frulayacak ve Nginx yap\u0131land\u0131rman\u0131z\u0131 HTTPS&#8217;i kullanacak \u015fekilde g\u00fcncelleyecektir.<\/p>\n<h4>S\u00fcrekli G\u00fcncellemeler<\/h4>\n<p>Sunucunuzdaki i\u015fletim sistemi ve paketleri d\u00fczenli olarak g\u00fcncel tutmak, bilinen g\u00fcvenlik a\u00e7\u0131klar\u0131na kar\u015f\u0131 korunman\u0131n en temel yoludur.<\/p>\n<pre><code class=\"language-bash\">sudo apt-get update && sudo apt-get upgrade -y<\/code><\/pre>\n<h4>Ayr\u0131 Kullan\u0131c\u0131 Hesab\u0131<\/h4>\n<p>Uygulaman\u0131z\u0131 <code>root<\/code> d\u0131\u015f\u0131ndaki ayr\u0131 bir kullan\u0131c\u0131 alt\u0131nda \u00e7al\u0131\u015ft\u0131rmak, bir g\u00fcvenlik ihlali durumunda potansiyel zarar\u0131 s\u0131n\u0131rlar. Bu rehberde <code>mybottleapp<\/code> kullan\u0131c\u0131s\u0131n\u0131 olu\u015fturarak bu ad\u0131m\u0131 atm\u0131\u015f olduk.<\/p>\n<h4>Hata Y\u00f6netimi ve Loglama<\/h4>\n<p>Uygulaman\u0131z\u0131n ve sunucunuzun loglar\u0131n\u0131 d\u00fczenli olarak kontrol edin.<br \/>\n*   <strong>Gunicorn loglar\u0131:<\/strong> Upstart yap\u0131land\u0131rma dosyas\u0131ndaki <code>exec<\/code> komutuna <code>--error-logfile<\/code> ve <code>--access-logfile<\/code> parametreleri ekleyerek Gunicorn loglar\u0131n\u0131n belirli bir dosyaya yaz\u0131lmas\u0131n\u0131 sa\u011flayabilirsiniz. Aksi takdirde Upstart loglar\u0131nda (\u00f6rne\u011fin <code>\/var\/log\/upstart\/mybottleapp.log<\/code>) bulabilirsiniz.<br \/>\n*   <strong>Nginx loglar\u0131:<\/strong> <code>\/var\/log\/nginx\/access.log<\/code> ve <code>\/var\/log\/nginx\/error.log<\/code> dosyalar\u0131n\u0131 kontrol edin.<\/p>\n<h4>Ortam De\u011fi\u015fkenleri ile Hassas Veriler<\/h4>\n<p>Veritaban\u0131 \u015fifreleri, API anahtarlar\u0131 gibi hassas bilgileri do\u011frudan kodunuzda saklamay\u0131n. Bunlar\u0131 ortam de\u011fi\u015fkenleri olarak veya g\u00fcvenli bir yap\u0131land\u0131rma y\u00f6netim sistemi arac\u0131l\u0131\u011f\u0131yla y\u00f6netin. Upstart yap\u0131land\u0131rmas\u0131nda <code>env<\/code> komutu ile ortam de\u011fi\u015fkenleri tan\u0131mlayabilirsiniz.<\/p>\n<pre><code class=\"language-ini\"># \/etc\/init\/mybottleapp.conf i\u00e7ine eklenecek\nenv DATABASE_URL=\"postgresql:\/\/user:pass@host:port\/db\"<\/code><\/pre>\n<h3>Sorun Giderme<\/h3>\n<p>Da\u011f\u0131t\u0131m s\u0131ras\u0131nda kar\u015f\u0131la\u015fabilece\u011finiz baz\u0131 yayg\u0131n sorunlar ve \u00e7\u00f6z\u00fcmleri:<\/p>\n<p>*   <strong>Uygulama \u00c7al\u0131\u015fm\u0131yor:<\/strong><br \/>\n    *   <code>sudo service mybottleapp status<\/code> komutuyla Gunicorn servisinin durumunu kontrol edin.<br \/>\n    *   Gunicorn loglar\u0131n\u0131 kontrol edin. Upstart loglar\u0131 genellikle <code>\/var\/log\/upstart\/mybottleapp.log<\/code> alt\u0131nda bulunur.<br \/>\n    *   <code>sudo -u mybottleapp \/var\/www\/mybottleapp\/venv\/bin\/gunicorn --workers 3 --bind 0.0.0.0:8000 app:app<\/code> komutunu manuel olarak \u00e7al\u0131\u015ft\u0131rarak Gunicorn&#8217;un hata verip vermedi\u011fini kontrol edin.<br \/>\n    *   Python sanal ortam\u0131n\u0131n do\u011fru etkinle\u015ftirildi\u011finden ve Bottle ile Gunicorn&#8217;un y\u00fckl\u00fc oldu\u011fundan emin olun.<br \/>\n    *   Dosya izinlerini kontrol edin. <code>mybottleapp<\/code> kullan\u0131c\u0131s\u0131n\u0131n <code>\/var\/www\/mybottleapp<\/code> dizinine ve i\u00e7indeki dosyalara okuma\/yazma eri\u015fimi olmal\u0131.<br \/>\n*   <strong>Nginx Hata Veriyor veya Uygulamaya Y\u00f6nlendirmiyor:<\/strong><br \/>\n    *   <code>sudo nginx -t<\/code> komutuyla Nginx yap\u0131land\u0131rman\u0131zda hata olup olmad\u0131\u011f\u0131n\u0131 kontrol edin.<br \/>\n    *   Nginx hata loglar\u0131n\u0131 kontrol edin: <code>\/var\/log\/nginx\/error.log<\/code>.<br \/>\n    *   Nginx&#8217;in Gunicorn&#8217;a do\u011fru Unix soketine veya porta y\u00f6nlendirdi\u011finden emin olun (<code>proxy_pass<\/code> ayar\u0131).<br \/>\n    *   Gunicorn&#8217;un ger\u00e7ekten dinledi\u011fi soket dosyas\u0131n\u0131n (<code>\/tmp\/mybottleapp.sock<\/code>) var olup olmad\u0131\u011f\u0131n\u0131 kontrol edin (<code>ls -l \/tmp\/mybottleapp.sock<\/code>). E\u011fer yoksa Gunicorn servisi d\u00fczg\u00fcn ba\u015flamam\u0131\u015f demektir.<br \/>\n*   <strong>Ba\u011flant\u0131 Zaman A\u015f\u0131m\u0131 (Connection Timeout):<\/strong><br \/>\n    *   G\u00fcvenlik duvar\u0131n\u0131z\u0131n (UFW) Nginx&#8217;in kulland\u0131\u011f\u0131 80 (veya 443) portuna izin verdi\u011finden emin olun.<br \/>\n    *   Nginx&#8217;in \u00e7al\u0131\u015ft\u0131\u011f\u0131ndan emin olun (<code>sudo service nginx status<\/code>).<\/p>\n<h3>Sonu\u00e7<\/h3>\n<p>Bu kapsaml\u0131 rehberde, Python Bottle mikro framework&#8217;\u00fc ile geli\u015ftirilmi\u015f bir web uygulamas\u0131n\u0131 Ubuntu 14.04 sunucusu \u00fczerinde da\u011f\u0131tman\u0131n t\u00fcm ad\u0131mlar\u0131n\u0131 ele ald\u0131k. Gunicorn&#8217;u bir WSGI sunucusu olarak kullanarak uygulaman\u0131z\u0131n kararl\u0131 ve performansl\u0131 \u00e7al\u0131\u015fmas\u0131n\u0131 sa\u011flad\u0131k. Nginx&#8217;i ters proxy olarak yap\u0131land\u0131rarak gelen istekleri y\u00f6netmesini, statik dosyalar\u0131 sunmas\u0131n\u0131 ve g\u00fcvenlik katman\u0131 eklemesini sa\u011flad\u0131k. Son olarak, Upstart ile Gunicorn servisinin otomatik olarak ba\u015flamas\u0131n\u0131 ve y\u00f6netilmesini temin ettik.<\/p>\n<p>Bu yap\u0131land\u0131rma, k\u00fc\u00e7\u00fck ve orta \u00f6l\u00e7ekli Bottle uygulamalar\u0131 i\u00e7in sa\u011flam ve g\u00fcvenilir bir da\u011f\u0131t\u0131m ortam\u0131 sunar. Unutmay\u0131n ki Ubuntu 14.04 art\u0131k eski bir s\u00fcr\u00fcm olsa da, bu makaledeki prensipler ve yakla\u015f\u0131mlar daha yeni Ubuntu s\u00fcr\u00fcmleri (Systemd ile baz\u0131 farkl\u0131l\u0131klar olacakt\u0131r) veya di\u011fer Linux da\u011f\u0131t\u0131mlar\u0131 i\u00e7in de temel te\u015fkil edebilir.<\/p>\n<p>\u0130leri ad\u0131mlar olarak, uygulaman\u0131za bir veritaban\u0131 entegre etmeyi (\u00f6rne\u011fin PostgreSQL veya MySQL), daha karma\u015f\u0131k Bottle \u00f6zelliklerini ke\u015ffetmeyi, CI\/CD (S\u00fcrekli Entegrasyon\/S\u00fcrekli Da\u011f\u0131t\u0131m) boru hatlar\u0131 kurmay\u0131 veya izleme ve uyar\u0131 sistemleri eklemeyi d\u00fc\u015f\u00fcnebilirsiniz. Her zaman g\u00fcvenlik en iyi uygulamalar\u0131n\u0131 takip edin ve sunucunuzu g\u00fcncel tutun.<\/body><\/p>\n","protected":false},"excerpt":{"rendered":"Python Bottle Uygulamalar\u0131n\u0131 Ubuntu 14.04 \u00dczerine Da\u011f\u0131tma Rehberi\nBu makalede, hafif ve h\u0131zl\u0131 Python mikro framework&#8217;\u00fc Bottle ile geli\u015ftiril","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-37905","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>Python Bottle Uygulamalar\u0131n\u0131 Ubuntu 14.04 \u00dczerine Da\u011f\u0131tma Rehberi - Kodlar\u0131n Gizemli D\u00fcnyas\u0131<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/fatihsoysal.com\/blog\/python-bottle-uygulamalarini-ubuntu-14-04-uzerine-dagitma-rehberi\/\" \/>\n<meta property=\"og:locale\" content=\"tr_TR\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Python Bottle Uygulamalar\u0131n\u0131 Ubuntu 14.04 \u00dczerine Da\u011f\u0131tma Rehberi\" \/>\n<meta property=\"og:description\" content=\"Python Bottle Uygulamalar\u0131n\u0131 Ubuntu 14.04 \u00dczerine Da\u011f\u0131tma Rehberi Bu makalede, hafif ve h\u0131zl\u0131 Python mikro framework&#039;\u00fc Bottle ile geli\u015ftiril\" \/>\n<meta property=\"og:url\" content=\"https:\/\/fatihsoysal.com\/blog\/python-bottle-uygulamalarini-ubuntu-14-04-uzerine-dagitma-rehberi\/\" \/>\n<meta property=\"og:site_name\" content=\"Kodlar\u0131n Gizemli D\u00fcnyas\u0131\" \/>\n<meta property=\"article:published_time\" content=\"2026-01-18T08:40:42+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=\"16 dakika\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/python-bottle-uygulamalarini-ubuntu-14-04-uzerine-dagitma-rehberi\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/python-bottle-uygulamalarini-ubuntu-14-04-uzerine-dagitma-rehberi\/\"},\"author\":{\"name\":\"Fatih Soysal\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1\"},\"headline\":\"Python Bottle Uygulamalar\u0131n\u0131 Ubuntu 14.04 \u00dczerine Da\u011f\u0131tma Rehberi\",\"datePublished\":\"2026-01-18T08:40:42+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/python-bottle-uygulamalarini-ubuntu-14-04-uzerine-dagitma-rehberi\/\"},\"wordCount\":2577,\"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\/python-bottle-uygulamalarini-ubuntu-14-04-uzerine-dagitma-rehberi\/#respond\"]}],\"copyrightYear\":\"2026\",\"copyrightHolder\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#organization\"}},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/python-bottle-uygulamalarini-ubuntu-14-04-uzerine-dagitma-rehberi\/\",\"url\":\"https:\/\/fatihsoysal.com\/blog\/python-bottle-uygulamalarini-ubuntu-14-04-uzerine-dagitma-rehberi\/\",\"name\":\"Python Bottle Uygulamalar\u0131n\u0131 Ubuntu 14.04 \u00dczerine Da\u011f\u0131tma Rehberi - Kodlar\u0131n Gizemli D\u00fcnyas\u0131\",\"isPartOf\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#website\"},\"datePublished\":\"2026-01-18T08:40:42+00:00\",\"breadcrumb\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/python-bottle-uygulamalarini-ubuntu-14-04-uzerine-dagitma-rehberi\/#breadcrumb\"},\"inLanguage\":\"tr\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/fatihsoysal.com\/blog\/python-bottle-uygulamalarini-ubuntu-14-04-uzerine-dagitma-rehberi\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/python-bottle-uygulamalarini-ubuntu-14-04-uzerine-dagitma-rehberi\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Anasayfa\",\"item\":\"https:\/\/fatihsoysal.com\/blog\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Python Bottle Uygulamalar\u0131n\u0131 Ubuntu 14.04 \u00dczerine Da\u011f\u0131tma Rehberi\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#website\",\"url\":\"https:\/\/fatihsoysal.com\/blog\/\",\"name\":\"Fatihsoysal.com\",\"description\":\"Blog - Yaz\u0131l\u0131m D\u00fcnyas\u0131 Tecr\u00fcbelerim\",\"publisher\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/fatihsoysal.com\/blog\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"tr\"},{\"@type\":[\"Person\",\"Organization\"],\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1\",\"name\":\"Fatih Soysal\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"tr\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/fatihsoysal.com\/blog\/wp-content\/uploads\/2024\/04\/cropped-replicate-prediction-3kgg1hgjn5rgp0cf0p5tr0jw7w-1.png\",\"contentUrl\":\"https:\/\/fatihsoysal.com\/blog\/wp-content\/uploads\/2024\/04\/cropped-replicate-prediction-3kgg1hgjn5rgp0cf0p5tr0jw7w-1.png\",\"width\":512,\"height\":512,\"caption\":\"Fatih Soysal\"},\"logo\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/image\/\"},\"description\":\"Kullan\u0131m ve kodlama m\u00fckemmeliyetini odak alan uygulamalar olu\u015fturma deneyimine sahip, profesyonel olarak 15+ y\u0131l \u00fczeri deneyime sahip bir yaz\u0131l\u0131m m\u00fchendisi.\",\"url\":\"https:\/\/fatihsoysal.com\/blog\/author\/fatihsoysal\/\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"Python Bottle Uygulamalar\u0131n\u0131 Ubuntu 14.04 \u00dczerine Da\u011f\u0131tma Rehberi - Kodlar\u0131n Gizemli D\u00fcnyas\u0131","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/fatihsoysal.com\/blog\/python-bottle-uygulamalarini-ubuntu-14-04-uzerine-dagitma-rehberi\/","og_locale":"tr_TR","og_type":"article","og_title":"Python Bottle Uygulamalar\u0131n\u0131 Ubuntu 14.04 \u00dczerine Da\u011f\u0131tma Rehberi","og_description":"Python Bottle Uygulamalar\u0131n\u0131 Ubuntu 14.04 \u00dczerine Da\u011f\u0131tma Rehberi Bu makalede, hafif ve h\u0131zl\u0131 Python mikro framework'\u00fc Bottle ile geli\u015ftiril","og_url":"https:\/\/fatihsoysal.com\/blog\/python-bottle-uygulamalarini-ubuntu-14-04-uzerine-dagitma-rehberi\/","og_site_name":"Kodlar\u0131n Gizemli D\u00fcnyas\u0131","article_published_time":"2026-01-18T08:40:42+00:00","author":"Fatih Soysal","twitter_card":"summary_large_image","twitter_misc":{"Yazan:":"Fatih Soysal","Tahmini okuma s\u00fcresi":"16 dakika"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/fatihsoysal.com\/blog\/python-bottle-uygulamalarini-ubuntu-14-04-uzerine-dagitma-rehberi\/#article","isPartOf":{"@id":"https:\/\/fatihsoysal.com\/blog\/python-bottle-uygulamalarini-ubuntu-14-04-uzerine-dagitma-rehberi\/"},"author":{"name":"Fatih Soysal","@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1"},"headline":"Python Bottle Uygulamalar\u0131n\u0131 Ubuntu 14.04 \u00dczerine Da\u011f\u0131tma Rehberi","datePublished":"2026-01-18T08:40:42+00:00","mainEntityOfPage":{"@id":"https:\/\/fatihsoysal.com\/blog\/python-bottle-uygulamalarini-ubuntu-14-04-uzerine-dagitma-rehberi\/"},"wordCount":2577,"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\/python-bottle-uygulamalarini-ubuntu-14-04-uzerine-dagitma-rehberi\/#respond"]}],"copyrightYear":"2026","copyrightHolder":{"@id":"https:\/\/fatihsoysal.com\/blog\/#organization"}},{"@type":"WebPage","@id":"https:\/\/fatihsoysal.com\/blog\/python-bottle-uygulamalarini-ubuntu-14-04-uzerine-dagitma-rehberi\/","url":"https:\/\/fatihsoysal.com\/blog\/python-bottle-uygulamalarini-ubuntu-14-04-uzerine-dagitma-rehberi\/","name":"Python Bottle Uygulamalar\u0131n\u0131 Ubuntu 14.04 \u00dczerine Da\u011f\u0131tma Rehberi - Kodlar\u0131n Gizemli D\u00fcnyas\u0131","isPartOf":{"@id":"https:\/\/fatihsoysal.com\/blog\/#website"},"datePublished":"2026-01-18T08:40:42+00:00","breadcrumb":{"@id":"https:\/\/fatihsoysal.com\/blog\/python-bottle-uygulamalarini-ubuntu-14-04-uzerine-dagitma-rehberi\/#breadcrumb"},"inLanguage":"tr","potentialAction":[{"@type":"ReadAction","target":["https:\/\/fatihsoysal.com\/blog\/python-bottle-uygulamalarini-ubuntu-14-04-uzerine-dagitma-rehberi\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/fatihsoysal.com\/blog\/python-bottle-uygulamalarini-ubuntu-14-04-uzerine-dagitma-rehberi\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Anasayfa","item":"https:\/\/fatihsoysal.com\/blog\/"},{"@type":"ListItem","position":2,"name":"Python Bottle Uygulamalar\u0131n\u0131 Ubuntu 14.04 \u00dczerine Da\u011f\u0131tma Rehberi"}]},{"@type":"WebSite","@id":"https:\/\/fatihsoysal.com\/blog\/#website","url":"https:\/\/fatihsoysal.com\/blog\/","name":"Fatihsoysal.com","description":"Blog - Yaz\u0131l\u0131m D\u00fcnyas\u0131 Tecr\u00fcbelerim","publisher":{"@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/fatihsoysal.com\/blog\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"tr"},{"@type":["Person","Organization"],"@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1","name":"Fatih Soysal","image":{"@type":"ImageObject","inLanguage":"tr","@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/image\/","url":"https:\/\/fatihsoysal.com\/blog\/wp-content\/uploads\/2024\/04\/cropped-replicate-prediction-3kgg1hgjn5rgp0cf0p5tr0jw7w-1.png","contentUrl":"https:\/\/fatihsoysal.com\/blog\/wp-content\/uploads\/2024\/04\/cropped-replicate-prediction-3kgg1hgjn5rgp0cf0p5tr0jw7w-1.png","width":512,"height":512,"caption":"Fatih Soysal"},"logo":{"@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/image\/"},"description":"Kullan\u0131m ve kodlama m\u00fckemmeliyetini odak alan uygulamalar olu\u015fturma deneyimine sahip, profesyonel olarak 15+ y\u0131l \u00fczeri deneyime sahip bir yaz\u0131l\u0131m m\u00fchendisi.","url":"https:\/\/fatihsoysal.com\/blog\/author\/fatihsoysal\/"}]}},"yoast_meta":{"yoast_wpseo_title":"","yoast_wpseo_metadesc":"","yoast_wpseo_canonical":""},"amp_enabled":true,"_links":{"self":[{"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/posts\/37905","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=37905"}],"version-history":[{"count":1,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/posts\/37905\/revisions"}],"predecessor-version":[{"id":37906,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/posts\/37905\/revisions\/37906"}],"wp:attachment":[{"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/media?parent=37905"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/categories?post=37905"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/tags?post=37905"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}