{"id":35702,"date":"2025-12-02T23:40:41","date_gmt":"2025-12-02T20:40:41","guid":{"rendered":"https:\/\/fatihsoysal.com\/blog\/?p=35702"},"modified":"2025-12-02T23:40:41","modified_gmt":"2025-12-02T20:40:41","slug":"yerel-django-uygulamasini-bir-vpse-dagitma-rehberi","status":"publish","type":"post","link":"https:\/\/fatihsoysal.com\/blog\/yerel-django-uygulamasini-bir-vpse-dagitma-rehberi\/","title":{"rendered":"Yerel Django Uygulamas\u0131n\u0131 Bir VPS&#8217;e Da\u011f\u0131tma Rehberi"},"content":{"rendered":"<p><body><\/p>\n<h2>Yerel Django Uygulamas\u0131n\u0131 Bir VPS&#8217;e Da\u011f\u0131tma Rehberi<\/h2>\n<p>Django, Python ile h\u0131zl\u0131 ve verimli web uygulamalar\u0131 geli\u015ftirmek i\u00e7in kullan\u0131lan pop\u00fcler bir web \u00e7at\u0131s\u0131d\u0131r. Geli\u015ftirme ortam\u0131nda her \u015fey sorunsuz \u00e7al\u0131\u015f\u0131rken, uygulaman\u0131z\u0131 canl\u0131 bir sunucuya ta\u015f\u0131mak, yani &#8220;da\u011f\u0131tmak&#8221; (deploy etmek), genellikle geli\u015ftiricilerin kar\u015f\u0131la\u015ft\u0131\u011f\u0131 en b\u00fcy\u00fck zorluklardan biridir. Bu makalede, yerel olarak geli\u015ftirdi\u011finiz bir Django uygulamas\u0131n\u0131 Sanal \u00d6zel Sunucu (VPS) \u00fczerine nas\u0131l da\u011f\u0131taca\u011f\u0131n\u0131z\u0131 ad\u0131m ad\u0131m, detayl\u0131 bir \u015fekilde ele alaca\u011f\u0131z. Bu s\u00fcre\u00e7, uygulaman\u0131z\u0131n d\u00fcnya genelindeki kullan\u0131c\u0131lara eri\u015filebilir olmas\u0131n\u0131 sa\u011flaman\u0131n temel ad\u0131m\u0131d\u0131r.<\/p>\n<h3>Giri\u015f: Neden Bir VPS ve Neden Django Da\u011f\u0131t\u0131m\u0131 \u00d6nemli?<\/h3>\n<p>Django, g\u00fc\u00e7l\u00fc ve esnek bir yap\u0131ya sahip olmas\u0131na ra\u011fmen, \u00fcretim ortam\u0131nda do\u011fru bir \u015fekilde yap\u0131land\u0131r\u0131lmad\u0131\u011f\u0131nda performans ve g\u00fcvenlik sorunlar\u0131 ya\u015fayabilir. Yerel geli\u015ftirme ortam\u0131n\u0131zda kulland\u0131\u011f\u0131n\u0131z SQLite veritaban\u0131 veya <code>python manage.py runserver<\/code> komutu gibi ara\u00e7lar, canl\u0131 bir web sitesinin gereksinimlerini kar\u015f\u0131lamaktan uzakt\u0131r.<\/p>\n<p>Bir Sanal \u00d6zel Sunucu (VPS), uygulaman\u0131z\u0131 bar\u0131nd\u0131rmak i\u00e7in ideal bir \u00e7\u00f6z\u00fcmd\u00fcr. Payla\u015f\u0131ml\u0131 hosting&#8217;e g\u00f6re daha fazla kontrol, esneklik ve kaynak sunarken, Dedicated Sunucu&#8217;ya g\u00f6re daha uygun maliyetlidir. Kendi sunucunuz \u00fczerinde tam k\u00f6k eri\u015fimine sahip olman\u0131z, Django uygulaman\u0131z\u0131n ve ba\u011f\u0131ml\u0131l\u0131klar\u0131n\u0131n tam olarak istedi\u011finiz gibi yap\u0131land\u0131r\u0131lmas\u0131na olanak tan\u0131r.<\/p>\n<p>Bu makale, a\u015fa\u011f\u0131daki temel bile\u015fenleri kullanarak bir Django uygulamas\u0131n\u0131 da\u011f\u0131tma s\u00fcrecini kapsayacakt\u0131r:<\/p>\n<p>*   <strong>Django:<\/strong> Web uygulamam\u0131z.<br \/>\n*   <strong>Gunicorn:<\/strong> Django uygulamas\u0131n\u0131 HTTP sunucusuyla ileti\u015fim kurabilen bir WSGI (Web Server Gateway Interface) sunucusuna d\u00f6n\u00fc\u015ft\u00fcren bir uygulama sunucusu.<br \/>\n*   <strong>Nginx:<\/strong> Gelen HTTP isteklerini i\u015fleyen, statik dosyalar\u0131 sunan ve istekleri Gunicorn&#8217;a y\u00f6nlendiren bir ters proxy (reverse proxy) web sunucusu.<br \/>\n*   <strong>PostgreSQL:<\/strong> \u00dcretim ortam\u0131nda g\u00fcvenilir ve \u00f6l\u00e7eklenebilir bir veritaban\u0131.<br \/>\n*   <strong>Certbot (Let&#8217;s Encrypt):<\/strong> Uygulaman\u0131z i\u00e7in \u00fccretsiz SSL\/TLS sertifikalar\u0131 sa\u011flayarak HTTPS&#8217;yi etkinle\u015ftirme.<br \/>\n*   <strong>Ubuntu Server:<\/strong> VPS \u00fczerinde \u00e7al\u0131\u015facak i\u015fletim sistemi.<\/p>\n<p>Bu ad\u0131mlar\u0131 takip ederek, uygulaman\u0131z\u0131 g\u00fcvenli, performansl\u0131 ve eri\u015filebilir bir \u015fekilde canl\u0131ya alabileceksiniz.<\/p>\n<h3>\u00d6n Ko\u015fullar<\/h3>\n<p>Da\u011f\u0131t\u0131m s\u00fcrecine ba\u015flamadan \u00f6nce a\u015fa\u011f\u0131daki maddelerin haz\u0131r oldu\u011fundan emin olmal\u0131s\u0131n\u0131z:<\/p>\n<p>1.  <strong>Yerel Django Uygulamas\u0131:<\/strong> Da\u011f\u0131t\u0131lmaya haz\u0131r, \u00e7al\u0131\u015fan bir Django projeniz olmal\u0131. <code>requirements.txt<\/code> dosyan\u0131z\u0131n g\u00fcncel oldu\u011fundan emin olun.<br \/>\n2.  <strong>VPS Hesab\u0131:<\/strong> DigitalOcean, Linode, AWS EC2, Google Cloud veya benzeri bir sa\u011flay\u0131c\u0131dan al\u0131nm\u0131\u015f, Ubuntu 20.04 veya 22.04 LTS y\u00fckl\u00fc bir VPS&#8217;iniz olmal\u0131.<br \/>\n3.  <strong>SSH Eri\u015fimi:<\/strong> VPS&#8217;inize SSH \u00fczerinden ba\u011flanabilmek i\u00e7in bir SSH istemcisi (Linux\/macOS&#8217;ta terminal, Windows&#8217;ta PuTTY veya WSL) ve VPS IP adresiniz\/root \u015fifreniz veya SSH anahtar\u0131n\u0131z olmal\u0131.<br \/>\n4.  <strong>Alan Ad\u0131 (Domain Name):<\/strong> \u0130ste\u011fe ba\u011fl\u0131 olsa da, uygulaman\u0131za bir alan ad\u0131 \u00fczerinden eri\u015fmek i\u00e7in bir alan ad\u0131n\u0131z ve DNS kay\u0131tlar\u0131n\u0131 (A kayd\u0131) VPS IP adresinize y\u00f6nlendirilmi\u015f olmal\u0131.<br \/>\n5.  <strong>Temel Linux Bilgisi:<\/strong> Komut sat\u0131r\u0131 (terminal) kullan\u0131m\u0131 hakk\u0131nda temel bilgi sahibi olmak s\u00fcreci kolayla\u015ft\u0131racakt\u0131r.<br \/>\n6.  <strong>Git:<\/strong> Projenizi bir Git deposunda (GitHub, GitLab, Bitbucket) bar\u0131nd\u0131rmak, VPS&#8217;e kolayca aktar\u0131m yapman\u0131z\u0131 sa\u011flar.<\/p>\n<h3>Django Uygulaman\u0131z\u0131 \u00dcretim Ortam\u0131na Haz\u0131rlama<\/h3>\n<p>Yerel uygulaman\u0131z\u0131 da\u011f\u0131t\u0131ma haz\u0131rlamak, g\u00fcvenlik ve performans a\u00e7\u0131s\u0131ndan kritik ad\u0131mlar\u0131 i\u00e7erir.<\/p>\n<h4>1. <code>settings.py<\/code> Dosyas\u0131n\u0131 D\u00fczenleme<\/h4>\n<p>Uygulaman\u0131z\u0131n <code>settings.py<\/code> dosyas\u0131nda baz\u0131 de\u011fi\u015fiklikler yapman\u0131z gerekecek:<\/p>\n<p>*   <strong><code>DEBUG = False<\/code>:<\/strong> \u00dcretim ortam\u0131nda <code>DEBUG<\/code> modunu kesinlikle <code>False<\/code> olarak ayarlay\u0131n. Bu, hassas bilgilerin hata sayfalar\u0131nda g\u00f6sterilmesini engeller ve performans\u0131 art\u0131r\u0131r.<br \/>\n*   <strong><code>ALLOWED_HOSTS<\/code>:<\/strong> Uygulaman\u0131z\u0131n eri\u015filebilir olaca\u011f\u0131 alan adlar\u0131n\u0131 veya IP adreslerini bu listeye ekleyin. \u00d6rne\u011fin: <code>ALLOWED_HOSTS = ['your_domain.com', 'www.your_domain.com', 'your_vps_ip_address']<\/code>.<br \/>\n*   <strong><code>SECRET_KEY<\/code>:<\/strong> Bu anahtar\u0131n g\u00fcvende tutulmas\u0131 \u00e7ok \u00f6nemlidir. \u00dcretim ortam\u0131nda bu anahtar\u0131 bir ortam de\u011fi\u015fkeni olarak veya ba\u015fka g\u00fcvenli bir y\u00f6ntemle y\u00f6netmelisiniz. <code>django-environ<\/code> k\u00fct\u00fcphanesi bu konuda yard\u0131mc\u0131 olabilir.<\/p>\n<pre><code class=\"language-python\"># settings.py\n    import os\n    from pathlib import Path\n    \n    # ...\n    \n    SECRET_KEY = os.environ.get('DJANGO_SECRET_KEY', 'your_insecure_local_key_for_dev')\n    \n    # ...<\/code><\/pre>\n<p>*   <strong>Veritaban\u0131 Yap\u0131land\u0131rmas\u0131:<\/strong> Yerel olarak SQLite kullan\u0131yor olabilirsiniz, ancak \u00fcretim ortam\u0131nda PostgreSQL veya MySQL gibi daha g\u00fc\u00e7l\u00fc bir veritaban\u0131 kullanmak \u00f6nerilir.<\/p>\n<pre><code class=\"language-python\"># settings.py\n    DATABASES = {\n        'default': {\n            'ENGINE': 'django.db.backends.postgresql',\n            'NAME': 'your_db_name',\n            'USER': 'your_db_user',\n            'PASSWORD': 'your_db_password',\n            'HOST': 'localhost', # veya veritaban\u0131 sunucunuzun adresi\n            'PORT': '',\n        }\n    }<\/code><\/pre>\n<p>    PostgreSQL kullanacaksan\u0131z, <code>psycopg2-binary<\/code> paketini <code>requirements.txt<\/code> dosyan\u0131za eklemeyi unutmay\u0131n.<br \/>\n*   <strong>Statik Dosyalar (Static Files):<\/strong> Django, statik dosyalar\u0131 (CSS, JavaScript, resimler) geli\u015ftirme modunda otomatik olarak sunar, ancak \u00fcretimde Nginx gibi bir web sunucusunun bu dosyalar\u0131 do\u011frudan sunmas\u0131 gerekir.<\/p>\n<pre><code class=\"language-python\"># settings.py\n    STATIC_URL = '\/static\/'\n    STATIC_ROOT = BASE_DIR \/ 'staticfiles' # Uygulaman\u0131z\u0131n k\u00f6k dizininde 'staticfiles' ad\u0131nda bir klas\u00f6r olu\u015fturacak\n    \n    MEDIA_URL = '\/media\/'\n    MEDIA_ROOT = BASE_DIR \/ 'mediafiles' # Kullan\u0131c\u0131 taraf\u0131ndan y\u00fcklenen dosyalar i\u00e7in<\/code><\/pre>\n<h4>2. Ba\u011f\u0131ml\u0131l\u0131klar\u0131 Y\u00f6netme<\/h4>\n<p>Uygulaman\u0131z\u0131n t\u00fcm Python ba\u011f\u0131ml\u0131l\u0131klar\u0131n\u0131 <code>requirements.txt<\/code> dosyas\u0131na kaydetti\u011finizden emin olun. Bu, sanal ortam\u0131n\u0131zda t\u00fcm ba\u011f\u0131ml\u0131l\u0131klar\u0131 tek bir komutla kurman\u0131z\u0131 sa\u011flayacakt\u0131r.<\/p>\n<pre><code class=\"language-bash\">pip freeze > requirements.txt<\/code><\/pre>\n<h4>3. Veritaban\u0131 Ge\u00e7i\u015fleri (Migrations)<\/h4>\n<p>Veritaban\u0131 \u015feman\u0131z\u0131n g\u00fcncel oldu\u011fundan emin olun.<\/p>\n<pre><code class=\"language-bash\">python manage.py makemigrations\npython manage.py migrate<\/code><\/pre>\n<h4>4. Ortam De\u011fi\u015fkenleri (Environment Variables)<\/h4>\n<p>Hassas bilgileri (<code>SECRET_KEY<\/code>, veritaban\u0131 \u015fifreleri, API anahtarlar\u0131 vb.) do\u011frudan <code>settings.py<\/code> i\u00e7inde tutmak yerine ortam de\u011fi\u015fkenleri olarak y\u00f6netmek en iyi uygulamad\u0131r. <code>django-environ<\/code> k\u00fct\u00fcphanesi bu konuda size yard\u0131mc\u0131 olabilir.<\/p>\n<pre><code class=\"language-bash\">pip install django-environ<\/code><\/pre>\n<p>Ard\u0131ndan, projenizin k\u00f6k dizinine <code>.env<\/code> ad\u0131nda bir dosya olu\u015fturabilir ve hassas bilgileri buraya yazabilirsiniz:<\/p>\n<pre><code class=\"language-\">DJANGO_SECRET_KEY=your_super_secret_key_here\nDJANGO_DB_NAME=your_db_name\nDJANGO_DB_USER=your_db_user\nDJANGO_DB_PASSWORD=your_db_password<\/code><\/pre>\n<p><code>settings.py<\/code> dosyan\u0131zda bunlar\u0131 okumak i\u00e7in:<\/p>\n<pre><code class=\"language-python\"># settings.py\nimport environ\n\nenv = environ.Env(\n    # set casting and default values\n    DEBUG=(bool, False)\n)\n\n<h2>reading .env file<\/h2>\nenviron.Env.read_env()\n\n<h2>False if not in os.environ<\/h2>\nDEBUG = env('DEBUG')\n\n<h2>Raises django.core.exceptions.ImproperlyConfigured if SECRET_KEY not in os.environ<\/h2>\nSECRET_KEY = env('DJANGO_SECRET_KEY')\n\nALLOWED_HOSTS = env.list('DJANGO_ALLOWED_HOSTS', default=[]) # \u00d6rne\u011fin .env'de DJANGO_ALLOWED_HOSTS=domain.com,www.domain.com\n\nDATABASES = {\n    'default': env.db(), # Reads DATABASE_URL from .env\n}<\/code><\/pre>\n<p>Bu yakla\u015f\u0131m, kodunuzu hassas bilgilerden ar\u0131nd\u0131r\u0131r ve g\u00fcvenli\u011fi art\u0131r\u0131r.<\/p>\n<h3>VPS Kurulumu<\/h3>\n<p>\u015eimdi VPS&#8217;inize ba\u011flan\u0131p gerekli kurulumlar\u0131 yapma zaman\u0131.<\/p>\n<h4>1. SSH ile VPS&#8217;e Ba\u011flanma<\/h4>\n<p>Terminalinizi a\u00e7\u0131n ve a\u015fa\u011f\u0131daki komutu kullanarak VPS&#8217;inize ba\u011flan\u0131n (k\u00f6k kullan\u0131c\u0131 olarak veya size verilen kullan\u0131c\u0131 ad\u0131 ile):<\/p>\n<pre><code class=\"language-bash\">ssh root@your_vps_ip_address<\/code><\/pre>\n<p>E\u011fer SSH anahtar\u0131 kullan\u0131yorsan\u0131z:<\/p>\n<pre><code class=\"language-bash\">ssh -i \/path\/to\/your\/private_key.pem your_user@your_vps_ip_address<\/code><\/pre>\n<h4>2. Sistemi G\u00fcncelleme<\/h4>\n<p>Ba\u011fland\u0131ktan sonra, sistem paketlerini g\u00fcncelleyin:<\/p>\n<pre><code class=\"language-bash\">sudo apt update && sudo apt upgrade -y<\/code><\/pre>\n<h4>3. Yeni Bir Kullan\u0131c\u0131 Olu\u015fturma ve Yetkilendirme (\u00d6nerilen)<\/h4>\n<p><code>root<\/code> kullan\u0131c\u0131s\u0131 olarak s\u00fcrekli \u00e7al\u0131\u015fmak g\u00fcvenlik riski ta\u015f\u0131r. Yeni bir kullan\u0131c\u0131 olu\u015fturup ona <code>sudo<\/code> yetkisi vermek daha g\u00fcvenlidir.<\/p>\n<pre><code class=\"language-bash\">sudo adduser your_username\nsudo usermod -aG sudo your_username<\/code><\/pre>\n<p>\u015eimdi yeni kullan\u0131c\u0131n\u0131za ge\u00e7i\u015f yap\u0131n:<\/p>\n<pre><code class=\"language-bash\">su - your_username<\/code><\/pre>\n<p>E\u011fer SSH anahtar\u0131 kullan\u0131yorsan\u0131z, anahtar\u0131n\u0131z\u0131 yeni kullan\u0131c\u0131n\u0131n <code>~\/.ssh\/authorized_keys<\/code> dosyas\u0131na kopyalamay\u0131 unutmay\u0131n.<\/p>\n<h4>4. G\u00fcvenlik Duvar\u0131n\u0131 Yap\u0131land\u0131rma (UFW)<\/h4>\n<p>UFW (Uncomplicated Firewall), Ubuntu&#8217;da g\u00fcvenlik duvar\u0131n\u0131 y\u00f6netmek i\u00e7in kolay bir ara\u00e7t\u0131r.<\/p>\n<pre><code class=\"language-bash\">sudo apt install ufw -y\nsudo ufw allow OpenSSH # SSH ba\u011flant\u0131s\u0131n\u0131n kesilmemesi i\u00e7in\nsudo ufw allow 'Nginx HTTP' # Nginx i\u00e7in HTTP (80) portunu a\u00e7\nsudo ufw allow 'Nginx HTTPS' # Nginx i\u00e7in HTTPS (443) portunu a\u00e7 (ileride SSL i\u00e7in)\nsudo ufw enable\nsudo ufw status # G\u00fcvenlik duvar\u0131n\u0131n durumunu kontrol edin<\/code><\/pre>\n<h4>5. Gerekli Paketleri Kurma<\/h4>\n<p>Django uygulamam\u0131z ve yard\u0131mc\u0131 servisler i\u00e7in gerekli yaz\u0131l\u0131mlar\u0131 kural\u0131m:<\/p>\n<p>*   <strong>Python ve <code>venv<\/code>:<\/strong><\/p>\n<pre><code class=\"language-bash\">sudo apt install python3-pip python3-venv -y<\/code><\/pre>\n<p>*   <strong>PostgreSQL Veritaban\u0131:<\/strong><\/p>\n<pre><code class=\"language-bash\">sudo apt install postgresql postgresql-contrib -y<\/code><\/pre>\n<p>*   <strong>Nginx Web Sunucusu:<\/strong><\/p>\n<pre><code class=\"language-bash\">sudo apt install nginx -y<\/code><\/pre>\n<p>*   <strong>Git:<\/strong><\/p>\n<pre><code class=\"language-bash\">sudo apt install git -y<\/code><\/pre>\n<h3>PostgreSQL Veritaban\u0131n\u0131 Yap\u0131land\u0131rma<\/h3>\n<p>Django uygulamam\u0131z i\u00e7in bir veritaban\u0131 ve kullan\u0131c\u0131 olu\u015fturmam\u0131z gerekiyor.<\/p>\n<pre><code class=\"language-bash\">sudo -i -u postgres\npsql<\/code><\/pre>\n<p>PostgreSQL komut istemine girdikten sonra:<\/p>\n<pre><code class=\"language-sql\">CREATE DATABASE your_db_name;\nCREATE USER your_db_user WITH PASSWORD 'your_db_password';\nALTER ROLE your_db_user SET client_encoding TO 'utf8';\nALTER ROLE your_db_user SET default_transaction_isolation TO 'read committed';\nALTER ROLE your_db_user SET timezone TO 'UTC';\nGRANT ALL PRIVILEGES ON DATABASE your_db_name TO your_db_user;\n\\q<\/code><\/pre>\n<p>\u015eimdi <code>postgres<\/code> kullan\u0131c\u0131s\u0131ndan \u00e7\u0131k\u0131n:<\/p>\n<pre><code class=\"language-bash\">exit<\/code><\/pre>\n<h3>Django Uygulamas\u0131n\u0131 VPS&#8217;e Da\u011f\u0131tma<\/h3>\n<p>Art\u0131k VPS&#8217;imiz haz\u0131r oldu\u011funa g\u00f6re, Django projemizi sunucuya aktarabiliriz.<\/p>\n<h4>1. Projeyi Klonlama<\/h4>\n<p>Projenizi genellikle <code>\/var\/www\/<\/code> dizini alt\u0131na da\u011f\u0131tmak iyi bir uygulamad\u0131r. Bu dizini olu\u015fturun ve yetkilerini ayarlay\u0131n:<\/p>\n<pre><code class=\"language-bash\">sudo mkdir -p \/var\/www\/\nsudo chown -R your_username:your_username \/var\/www\/\ncd \/var\/www\/\ngit clone https:\/\/github.com\/your_username\/your_project.git your_project_name\ncd your_project_name<\/code><\/pre>\n<h4>2. Sanal Ortam Olu\u015fturma ve Ba\u011f\u0131ml\u0131l\u0131klar\u0131 Y\u00fckleme<\/h4>\n<p>Proje dizininizde bir Python sanal ortam\u0131 olu\u015fturun ve etkinle\u015ftirin:<\/p>\n<pre><code class=\"language-bash\">python3 -m venv venv\nsource venv\/bin\/activate<\/code><\/pre>\n<p>\u015eimdi <code>requirements.txt<\/code> dosyas\u0131ndaki t\u00fcm ba\u011f\u0131ml\u0131l\u0131klar\u0131 y\u00fckleyin:<\/p>\n<pre><code class=\"language-bash\">pip install -r requirements.txt<\/code><\/pre>\n<p><code>psycopg2-binary<\/code> (PostgreSQL i\u00e7in) ve <code>gunicorn<\/code> paketlerinin <code>requirements.txt<\/code> i\u00e7inde oldu\u011fundan emin olun. E\u011fer yoksa, \u015fimdi kurun:<\/p>\n<pre><code class=\"language-bash\">pip install gunicorn psycopg2-binary<\/code><\/pre>\n<h4>3. <code>settings.py<\/code> Ortam De\u011fi\u015fkenlerini Ayarlama<\/h4>\n<p>E\u011fer <code>.env<\/code> dosyas\u0131 kullan\u0131yorsan\u0131z, projenizin k\u00f6k dizininde bir <code>.env<\/code> dosyas\u0131 olu\u015fturun ve hassas bilgilerinizi buraya ekleyin:<\/p>\n<pre><code class=\"language-bash\">nano .env<\/code><\/pre>\n<p>\u0130\u00e7eri\u011fi a\u015fa\u011f\u0131daki gibi doldurun (kendi bilgilerinizle):<\/p>\n<pre><code class=\"language-\">DJANGO_SECRET_KEY=your_super_secret_key_here\nDJANGO_DB_NAME=your_db_name\nDJANGO_DB_USER=your_db_user\nDJANGO_db_password=your_db_password\nDJANGO_ALLOWED_HOSTS=your_domain.com,www.your_domain.com,your_vps_ip_address\nDEBUG=False<\/code><\/pre>\n<p><code>Ctrl+X<\/code>, <code>Y<\/code>, <code>Enter<\/code> ile kaydedip \u00e7\u0131k\u0131n.<\/p>\n<h4>4. Django Veritaban\u0131 Ge\u00e7i\u015fleri ve S\u00fcper Kullan\u0131c\u0131 Olu\u015fturma<\/h4>\n<p>Veritaban\u0131 ba\u011flant\u0131 bilgilerinizin <code>settings.py<\/code> dosyan\u0131zda do\u011fru oldu\u011fundan emin olduktan sonra, veritaban\u0131 ge\u00e7i\u015flerini \u00e7al\u0131\u015ft\u0131r\u0131n ve bir y\u00f6netici (superuser) olu\u015fturun:<\/p>\n<pre><code class=\"language-bash\">python manage.py makemigrations\npython manage.py migrate\npython manage.py createsuperuser<\/code><\/pre>\n<h4>5. Statik Dosyalar\u0131 Toplama<\/h4>\n<p>Django&#8217;nun t\u00fcm statik dosyalar\u0131n\u0131 (<code>STATIC_ROOT<\/code> olarak belirledi\u011finiz dizine) toplamas\u0131n\u0131 sa\u011flay\u0131n:<\/p>\n<pre><code class=\"language-bash\">python manage.py collectstatic<\/code><\/pre>\n<p>Bu komut, Nginx&#8217;in sunaca\u011f\u0131 t\u00fcm statik dosyalar\u0131 tek bir yerde toplayacakt\u0131r. Komut sizden onay isteyebilir, <code>yes<\/code> yaz\u0131p onaylay\u0131n.<\/p>\n<h3>Gunicorn Yap\u0131land\u0131rmas\u0131<\/h3>\n<p>Gunicorn, Django uygulaman\u0131z ile Nginx aras\u0131nda bir aray\u00fcz g\u00f6revi g\u00f6r\u00fcr.<\/p>\n<h4>1. Gunicorn&#8217;u Test Etme<\/h4>\n<p>Sanal ortam\u0131n\u0131z hala etkin durumdayken, Gunicorn&#8217;u test etmek i\u00e7in a\u015fa\u011f\u0131daki komutu \u00e7al\u0131\u015ft\u0131r\u0131n:<\/p>\n<pre><code class=\"language-bash\">gunicorn --bind 0.0.0.0:8000 your_project_name.wsgi:application<\/code><\/pre>\n<p><code>your_project_name<\/code> yerine projenizin ana uygulama dizininin ad\u0131n\u0131 yaz\u0131n (genellikle <code>manage.py<\/code> ile ayn\u0131 dizinde olan klas\u00f6r ad\u0131). E\u011fer her \u015fey yolundaysa, taray\u0131c\u0131n\u0131zdan <code>http:\/\/your_vps_ip_address:8000<\/code> adresine giderek Django uygulaman\u0131z\u0131n \u00e7al\u0131\u015ft\u0131\u011f\u0131n\u0131 g\u00f6rmelisiniz. Testi bitirmek i\u00e7in <code>Ctrl+C<\/code> tu\u015flar\u0131na bas\u0131n.<\/p>\n<h4>2. Gunicorn \u0130\u00e7in Systemd Hizmeti Olu\u015fturma<\/h4>\n<p>Uygulaman\u0131z\u0131n sunucu yeniden ba\u015flat\u0131ld\u0131\u011f\u0131nda otomatik olarak ba\u015flamas\u0131 ve arka planda s\u00fcrekli \u00e7al\u0131\u015fmas\u0131 i\u00e7in bir Systemd hizmeti olu\u015fturaca\u011f\u0131z.<\/p>\n<p>Sanal ortamdan \u00e7\u0131k\u0131n:<\/p>\n<pre><code class=\"language-bash\">deactivate<\/code><\/pre>\n<p>Bir Systemd hizmet dosyas\u0131 olu\u015fturun:<\/p>\n<pre><code class=\"language-bash\">sudo nano \/etc\/systemd\/system\/gunicorn.service<\/code><\/pre>\n<p>A\u015fa\u011f\u0131daki i\u00e7eri\u011fi dosyaya yap\u0131\u015ft\u0131r\u0131n. <code>your_username<\/code>, <code>your_project_name<\/code> ve <code>\/var\/www\/your_project_name<\/code> k\u0131s\u0131mlar\u0131n\u0131 kendi bilgilerinizle de\u011fi\u015ftirin:<\/p>\n<pre><code class=\"language-ini\">[Unit]\nDescription=Gunicorn instance to serve your_project_name\nAfter=network.target\n\n[Service]\nUser=your_username\nGroup=www-data\nWorkingDirectory=\/var\/www\/your_project_name\nExecStart=\/var\/www\/your_project_name\/venv\/bin\/gunicorn --workers 3 --bind unix:\/var\/www\/your_project_name\/your_project_name.sock your_project_name.wsgi:application\nRestart=always\n\n[Install]\nWantedBy=multi-user.target<\/code><\/pre>\n<p>*   <code>User<\/code>: Django uygulaman\u0131z\u0131 \u00e7al\u0131\u015ft\u0131racak kullan\u0131c\u0131.<br \/>\n*   <code>Group<\/code>: Nginx&#8217;in eri\u015fim sa\u011flayaca\u011f\u0131 grup.<br \/>\n*   <code>WorkingDirectory<\/code>: Projenizin k\u00f6k dizini.<br \/>\n*   <code>ExecStart<\/code>: Gunicorn&#8217;u \u00e7al\u0131\u015ft\u0131ran komut. <code>--workers 3<\/code> ile 3 adet Gunicorn worker&#8217;\u0131 \u00e7al\u0131\u015ft\u0131r\u0131yoruz (CPU \u00e7ekirde\u011fi say\u0131s\u0131n\u0131n 2 kat\u0131 + 1 genellikle iyi bir ba\u015flang\u0131\u00e7t\u0131r). <code>--bind unix:\/path\/to\/socket<\/code> ile Gunicorn&#8217;un bir Unix soketi \u00fczerinden Nginx ile ileti\u015fim kurmas\u0131n\u0131 sa\u011fl\u0131yoruz.<br \/>\n*   <code>Restart=always<\/code>: Gunicorn herhangi bir nedenle \u00e7\u00f6kerse otomatik olarak yeniden ba\u015flat\u0131l\u0131r.<\/p>\n<p>Dosyay\u0131 kaydedip \u00e7\u0131k\u0131n (<code>Ctrl+X<\/code>, <code>Y<\/code>, <code>Enter<\/code>).<\/p>\n<p>\u015eimdi Systemd&#8217;yi yeni hizmet dosyas\u0131n\u0131 okumas\u0131 i\u00e7in yeniden y\u00fckleyin, Gunicorn hizmetini ba\u015flat\u0131n ve sunucu a\u00e7\u0131l\u0131\u015f\u0131nda otomatik ba\u015flamas\u0131 i\u00e7in etkinle\u015ftirin:<\/p>\n<pre><code class=\"language-bash\">sudo systemctl daemon-reload\nsudo systemctl start gunicorn\nsudo systemctl enable gunicorn<\/code><\/pre>\n<p>Gunicorn hizmetinin durumunu kontrol edin:<\/p>\n<pre><code class=\"language-bash\">sudo systemctl status gunicorn<\/code><\/pre>\n<p>Ye\u015fil renkte &#8220;active (running)&#8221; g\u00f6rmelisiniz. Herhangi bir hata varsa, <code>journalctl -u gunicorn<\/code> komutu ile loglar\u0131 kontrol edebilirsiniz.<\/p>\n<h3>Nginx Yap\u0131land\u0131rmas\u0131<\/h3>\n<p>Nginx, gelen web isteklerini kar\u015f\u0131layacak, statik dosyalar\u0131 sunacak ve dinamik istekleri Gunicorn&#8217;a y\u00f6nlendirecektir.<\/p>\n<h4>1. Nginx Yap\u0131land\u0131rma Dosyas\u0131 Olu\u015fturma<\/h4>\n<p>Django projeniz i\u00e7in yeni bir Nginx sunucu blo\u011fu dosyas\u0131 olu\u015ftural\u0131m:<\/p>\n<pre><code class=\"language-bash\">sudo nano \/etc\/nginx\/sites-available\/your_project_name<\/code><\/pre>\n<p>A\u015fa\u011f\u0131daki i\u00e7eri\u011fi dosyaya yap\u0131\u015ft\u0131r\u0131n. <code>your_domain.com<\/code>, <code>www.your_domain.com<\/code>, <code>\/var\/www\/your_project_name<\/code> ve <code>your_project_name<\/code> k\u0131s\u0131mlar\u0131n\u0131 kendi bilgilerinizle de\u011fi\u015ftirin:<\/p>\n<pre><code class=\"language-nginx\">server {\n    listen 80;\n    server_name your_domain.com www.your_domain.com; # Alan ad\u0131n\u0131z\u0131 veya IP adresinizi buraya yaz\u0131n\n\n    location = \/favicon.ico { access_log off; log_not_found off; }\n\n    location \/static\/ {\n        root \/var\/www\/your_project_name; # STATIC_ROOT'un \u00fcst dizini\n    }\n\n    location \/media\/ {\n        root \/var\/www\/your_project_name; # MEDIA_ROOT'un \u00fcst dizini\n    }\n\n    location \/ {\n        include proxy_params;\n        proxy_pass http:\/\/unix:\/var\/www\/your_project_name\/your_project_name.sock; # Gunicorn soket yolunuz\n    }\n}<\/code><\/pre>\n<p>*   <code>listen 80<\/code>: Nginx&#8217;in HTTP isteklerini 80 numaral\u0131 porttan dinlemesini sa\u011flar.<br \/>\n*   <code>server_name<\/code>: Uygulaman\u0131za eri\u015filecek alan adlar\u0131.<br \/>\n*   <code>location \/static\/<\/code>: Nginx&#8217;in <code>STATIC_ROOT<\/code> i\u00e7indeki statik dosyalar\u0131 do\u011frudan sunmas\u0131n\u0131 sa\u011flar.<br \/>\n*   <code>location \/media\/<\/code>: Nginx&#8217;in <code>MEDIA_ROOT<\/code> i\u00e7indeki kullan\u0131c\u0131 taraf\u0131ndan y\u00fcklenen dosyalar\u0131 do\u011frudan sunmas\u0131n\u0131 sa\u011flar.<br \/>\n*   <code>location \/<\/code>: Di\u011fer t\u00fcm istekleri Gunicorn&#8217;a y\u00f6nlendirir.<\/p>\n<p>Dosyay\u0131 kaydedip \u00e7\u0131k\u0131n.<\/p>\n<h4>2. Nginx Yap\u0131land\u0131rmas\u0131n\u0131 Etkinle\u015ftirme<\/h4>\n<p>Olu\u015fturdu\u011fumuz yap\u0131land\u0131rma dosyas\u0131n\u0131 <code>sites-enabled<\/code> dizinine sembolik bir ba\u011f (symlink) olu\u015fturarak etkinle\u015ftirin:<\/p>\n<pre><code class=\"language-bash\">sudo ln -s \/etc\/nginx\/sites-available\/your_project_name \/etc\/nginx\/sites-enabled\/<\/code><\/pre>\n<p>Varsay\u0131lan Nginx yap\u0131land\u0131rmas\u0131n\u0131 devre d\u0131\u015f\u0131 b\u0131rakmak iyi bir fikirdir:<\/p>\n<pre><code class=\"language-bash\">sudo rm \/etc\/nginx\/sites-enabled\/default<\/code><\/pre>\n<p>Nginx yap\u0131land\u0131rmas\u0131nda hata olup olmad\u0131\u011f\u0131n\u0131 kontrol edin:<\/p>\n<pre><code class=\"language-bash\">sudo nginx -t<\/code><\/pre>\n<p>E\u011fer <code>test is successful<\/code> mesaj\u0131n\u0131 g\u00f6r\u00fcrseniz, Nginx&#8217;i yeniden ba\u015flat\u0131n:<\/p>\n<pre><code class=\"language-bash\">sudo systemctl restart nginx<\/code><\/pre>\n<p>\u015eimdi taray\u0131c\u0131n\u0131zdan alan ad\u0131n\u0131za (veya VPS IP adresinize) giderek Django uygulaman\u0131z\u0131n \u00e7al\u0131\u015ft\u0131\u011f\u0131n\u0131 g\u00f6rmelisiniz!<\/p>\n<h3>Uygulaman\u0131z\u0131 G\u00fcvenli Hale Getirme (HTTPS ile)<\/h3>\n<p>Uygulaman\u0131z\u0131n g\u00fcvenli\u011fini art\u0131rmak ve SEO avantajlar\u0131ndan yararlanmak i\u00e7in HTTPS kullanmak \u015fartt\u0131r. Let&#8217;s Encrypt ve Certbot ile \u00fccretsiz SSL sertifikalar\u0131 alabiliriz.<\/p>\n<h4>1. Certbot Kurulumu<\/h4>\n<pre><code class=\"language-bash\">sudo apt install certbot python3-certbot-nginx -y<\/code><\/pre>\n<h4>2. SSL Sertifikas\u0131 Alma<\/h4>\n<p>Nginx yap\u0131land\u0131rman\u0131z do\u011fruysa, Certbot otomatik olarak sertifika al\u0131p Nginx&#8217;i yap\u0131land\u0131rabilir:<\/p>\n<pre><code class=\"language-bash\">sudo certbot --nginx -d your_domain.com -d www.your_domain.com<\/code><\/pre>\n<p>Certbot size baz\u0131 sorular soracakt\u0131r (e-posta adresi, hizmet ko\u015fullar\u0131n\u0131 kabul etme vb.). Genellikle t\u00fcm HTTP isteklerini HTTPS&#8217;e y\u00f6nlendirmeyi se\u00e7melisiniz.<\/p>\n<p>Certbot, sertifikay\u0131 ba\u015far\u0131yla ald\u0131ktan sonra Nginx yap\u0131land\u0131rman\u0131z\u0131 g\u00fcncelleyecek ve Nginx&#8217;i yeniden ba\u015flatacakt\u0131r. Art\u0131k uygulaman\u0131za <code>https:\/\/your_domain.com<\/code> \u00fczerinden eri\u015febilirsiniz.<\/p>\n<h4>3. Sertifika Yenilemeyi Otomatikle\u015ftirme<\/h4>\n<p>Let&#8217;s Encrypt sertifikalar\u0131 90 g\u00fcn ge\u00e7erlidir. Certbot, otomatik yenileme i\u00e7in bir cron i\u015fi veya Systemd zamanlay\u0131c\u0131 kurar. Yenileme i\u015fleminin d\u00fczg\u00fcn \u00e7al\u0131\u015ft\u0131\u011f\u0131n\u0131 test edebilirsiniz:<\/p>\n<pre><code class=\"language-bash\">sudo certbot renew --dry-run<\/code><\/pre>\n<p>E\u011fer bu komut hatas\u0131z \u00e7al\u0131\u015f\u0131rsa, sertifikalar\u0131n\u0131z otomatik olarak yenilenecektir.<\/p>\n<h3>\u0130zleme ve Bak\u0131m<\/h3>\n<p>Uygulaman\u0131z canl\u0131ya al\u0131nd\u0131ktan sonra, d\u00fczenli olarak izlemek ve bak\u0131m\u0131n\u0131 yapmak \u00f6nemlidir.<\/p>\n<p>*   <strong>Loglar\u0131 Kontrol Etme:<\/strong><br \/>\n    *   Gunicorn loglar\u0131: <code>sudo journalctl -u gunicorn<\/code><br \/>\n    *   Nginx loglar\u0131: <code>\/var\/log\/nginx\/access.log<\/code> ve <code>\/var\/log\/nginx\/error.log<\/code><br \/>\n    *   Django loglar\u0131: <code>settings.py<\/code> i\u00e7inde yap\u0131land\u0131rd\u0131\u011f\u0131n\u0131z yere g\u00f6re de\u011fi\u015fir.<br \/>\n*   <strong>Sistemi G\u00fcncel Tutma:<\/strong> D\u00fczenli olarak <code>sudo apt update && sudo apt upgrade -y<\/code> komutlar\u0131n\u0131 \u00e7al\u0131\u015ft\u0131rarak sunucunuzu g\u00fcncel tutun.<br \/>\n*   <strong>Yedeklemeler:<\/strong> Veritaban\u0131n\u0131z\u0131n ve uygulama dosyalar\u0131n\u0131z\u0131n d\u00fczenli yedeklerini almay\u0131 unutmay\u0131n. PostgreSQL i\u00e7in <code>pg_dumpall<\/code> veya <code>pg_dump<\/code> komutlar\u0131n\u0131 kullanabilirsiniz.<br \/>\n*   <strong>G\u00fcvenlik:<\/strong> Django&#8217;nun g\u00fcvenlik yamalar\u0131n\u0131 takip edin ve uygulaman\u0131z\u0131 g\u00fcncel tutun.<\/p>\n<h3>Sonu\u00e7<\/h3>\n<p>Yerel bir Django uygulamas\u0131n\u0131 bir VPS&#8217;e da\u011f\u0131tmak, birden fazla bile\u015fenin bir araya getirilmesini gerektiren kapsaml\u0131 bir s\u00fcre\u00e7tir. Bu makalede, Django uygulaman\u0131z\u0131 \u00fcretim ortam\u0131na haz\u0131rlamaktan, bir VPS&#8217;i yap\u0131land\u0131rmaya, Gunicorn ve Nginx&#8217;i kurmaya ve son olarak uygulaman\u0131z\u0131 HTTPS ile g\u00fcvenli hale getirmeye kadar her ad\u0131m\u0131 detayl\u0131 bir \u015fekilde ele ald\u0131k.<\/p>\n<p>Bu ad\u0131mlar\u0131 dikkatlice takip ederek, Django uygulaman\u0131z\u0131 ba\u015far\u0131yla canl\u0131ya alabilir ve d\u00fcnya genelindeki kullan\u0131c\u0131lara sunabilirsiniz. Da\u011f\u0131t\u0131m, bir kerelik bir i\u015flem de\u011fildir; uygulaman\u0131z\u0131n ve sunucunuzun d\u00fczenli olarak izlenmesi, g\u00fcncellenmesi ve bak\u0131m\u0131 yap\u0131lmas\u0131, uzun vadeli ba\u015far\u0131 i\u00e7in kritik \u00f6neme sahiptir. Unutmay\u0131n, her projenin kendine \u00f6zg\u00fc gereksinimleri olabilir, bu nedenle bu rehberi kendi \u00f6zel ihtiya\u00e7lar\u0131n\u0131za g\u00f6re uyarlamaktan \u00e7ekinmeyin. Ba\u015far\u0131lar dileriz!<\/body><\/p>\n","protected":false},"excerpt":{"rendered":"Yerel Django Uygulamas\u0131n\u0131 Bir VPS&#8217;e Da\u011f\u0131tma Rehberi\nDjango, Python ile h\u0131zl\u0131 ve verimli web uygulamalar\u0131 geli\u015ftirmek i\u00e7in kullan\u0131lan pop\u00fcl","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":[1],"tags":[],"class_list":{"0":"post-35702","1":"post","2":"type-post","3":"status-publish","4":"format-standard","6":"category-genel","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>Yerel Django Uygulamas\u0131n\u0131 Bir VPS&#039;e 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\/yerel-django-uygulamasini-bir-vpse-dagitma-rehberi\/\" \/>\n<meta property=\"og:locale\" content=\"tr_TR\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Yerel Django Uygulamas\u0131n\u0131 Bir VPS&#039;e Da\u011f\u0131tma Rehberi\" \/>\n<meta property=\"og:description\" content=\"Yerel Django Uygulamas\u0131n\u0131 Bir VPS&#039;e Da\u011f\u0131tma Rehberi Django, Python ile h\u0131zl\u0131 ve verimli web uygulamalar\u0131 geli\u015ftirmek i\u00e7in kullan\u0131lan pop\u00fcl\" \/>\n<meta property=\"og:url\" content=\"https:\/\/fatihsoysal.com\/blog\/yerel-django-uygulamasini-bir-vpse-dagitma-rehberi\/\" \/>\n<meta property=\"og:site_name\" content=\"Kodlar\u0131n Gizemli D\u00fcnyas\u0131\" \/>\n<meta property=\"article:published_time\" content=\"2025-12-02T20:40:41+00:00\" \/>\n<meta name=\"author\" content=\"Fatih Soysal\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Yazan:\" \/>\n\t<meta name=\"twitter:data1\" content=\"Fatih Soysal\" \/>\n\t<meta name=\"twitter:label2\" content=\"Tahmini okuma s\u00fcresi\" \/>\n\t<meta name=\"twitter:data2\" content=\"15 dakika\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/yerel-django-uygulamasini-bir-vpse-dagitma-rehberi\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/yerel-django-uygulamasini-bir-vpse-dagitma-rehberi\/\"},\"author\":{\"name\":\"Fatih Soysal\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1\"},\"headline\":\"Yerel Django Uygulamas\u0131n\u0131 Bir VPS&#8217;e Da\u011f\u0131tma Rehberi\",\"datePublished\":\"2025-12-02T20:40:41+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/yerel-django-uygulamasini-bir-vpse-dagitma-rehberi\/\"},\"wordCount\":2230,\"commentCount\":2,\"publisher\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1\"},\"inLanguage\":\"tr\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/fatihsoysal.com\/blog\/yerel-django-uygulamasini-bir-vpse-dagitma-rehberi\/#respond\"]}],\"copyrightYear\":\"2025\",\"copyrightHolder\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#organization\"}},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/yerel-django-uygulamasini-bir-vpse-dagitma-rehberi\/\",\"url\":\"https:\/\/fatihsoysal.com\/blog\/yerel-django-uygulamasini-bir-vpse-dagitma-rehberi\/\",\"name\":\"Yerel Django Uygulamas\u0131n\u0131 Bir VPS'e Da\u011f\u0131tma Rehberi - Kodlar\u0131n Gizemli D\u00fcnyas\u0131\",\"isPartOf\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#website\"},\"datePublished\":\"2025-12-02T20:40:41+00:00\",\"breadcrumb\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/yerel-django-uygulamasini-bir-vpse-dagitma-rehberi\/#breadcrumb\"},\"inLanguage\":\"tr\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/fatihsoysal.com\/blog\/yerel-django-uygulamasini-bir-vpse-dagitma-rehberi\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/yerel-django-uygulamasini-bir-vpse-dagitma-rehberi\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Anasayfa\",\"item\":\"https:\/\/fatihsoysal.com\/blog\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Yerel Django Uygulamas\u0131n\u0131 Bir VPS&#8217;e 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":"Yerel Django Uygulamas\u0131n\u0131 Bir VPS'e 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\/yerel-django-uygulamasini-bir-vpse-dagitma-rehberi\/","og_locale":"tr_TR","og_type":"article","og_title":"Yerel Django Uygulamas\u0131n\u0131 Bir VPS'e Da\u011f\u0131tma Rehberi","og_description":"Yerel Django Uygulamas\u0131n\u0131 Bir VPS'e Da\u011f\u0131tma Rehberi Django, Python ile h\u0131zl\u0131 ve verimli web uygulamalar\u0131 geli\u015ftirmek i\u00e7in kullan\u0131lan pop\u00fcl","og_url":"https:\/\/fatihsoysal.com\/blog\/yerel-django-uygulamasini-bir-vpse-dagitma-rehberi\/","og_site_name":"Kodlar\u0131n Gizemli D\u00fcnyas\u0131","article_published_time":"2025-12-02T20:40:41+00:00","author":"Fatih Soysal","twitter_card":"summary_large_image","twitter_misc":{"Yazan:":"Fatih Soysal","Tahmini okuma s\u00fcresi":"15 dakika"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/fatihsoysal.com\/blog\/yerel-django-uygulamasini-bir-vpse-dagitma-rehberi\/#article","isPartOf":{"@id":"https:\/\/fatihsoysal.com\/blog\/yerel-django-uygulamasini-bir-vpse-dagitma-rehberi\/"},"author":{"name":"Fatih Soysal","@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1"},"headline":"Yerel Django Uygulamas\u0131n\u0131 Bir VPS&#8217;e Da\u011f\u0131tma Rehberi","datePublished":"2025-12-02T20:40:41+00:00","mainEntityOfPage":{"@id":"https:\/\/fatihsoysal.com\/blog\/yerel-django-uygulamasini-bir-vpse-dagitma-rehberi\/"},"wordCount":2230,"commentCount":2,"publisher":{"@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1"},"inLanguage":"tr","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/fatihsoysal.com\/blog\/yerel-django-uygulamasini-bir-vpse-dagitma-rehberi\/#respond"]}],"copyrightYear":"2025","copyrightHolder":{"@id":"https:\/\/fatihsoysal.com\/blog\/#organization"}},{"@type":"WebPage","@id":"https:\/\/fatihsoysal.com\/blog\/yerel-django-uygulamasini-bir-vpse-dagitma-rehberi\/","url":"https:\/\/fatihsoysal.com\/blog\/yerel-django-uygulamasini-bir-vpse-dagitma-rehberi\/","name":"Yerel Django Uygulamas\u0131n\u0131 Bir VPS'e Da\u011f\u0131tma Rehberi - Kodlar\u0131n Gizemli D\u00fcnyas\u0131","isPartOf":{"@id":"https:\/\/fatihsoysal.com\/blog\/#website"},"datePublished":"2025-12-02T20:40:41+00:00","breadcrumb":{"@id":"https:\/\/fatihsoysal.com\/blog\/yerel-django-uygulamasini-bir-vpse-dagitma-rehberi\/#breadcrumb"},"inLanguage":"tr","potentialAction":[{"@type":"ReadAction","target":["https:\/\/fatihsoysal.com\/blog\/yerel-django-uygulamasini-bir-vpse-dagitma-rehberi\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/fatihsoysal.com\/blog\/yerel-django-uygulamasini-bir-vpse-dagitma-rehberi\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Anasayfa","item":"https:\/\/fatihsoysal.com\/blog\/"},{"@type":"ListItem","position":2,"name":"Yerel Django Uygulamas\u0131n\u0131 Bir VPS&#8217;e 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\/35702","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=35702"}],"version-history":[{"count":1,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/posts\/35702\/revisions"}],"predecessor-version":[{"id":35703,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/posts\/35702\/revisions\/35703"}],"wp:attachment":[{"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/media?parent=35702"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/categories?post=35702"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/tags?post=35702"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}