Buyukweb
Django Uygulaması İçin Sunucu Seçimi: 2026 Detaylı Rehber

Django Uygulaması İçin Sunucu Seçimi: 2026 Detaylı Rehber

Django uygulamasını paylaşımlı, VDS veya dedicated sunucuda nasıl çalıştırırsınız? Gunicorn, uWSGI, Nginx, PostgreSQL, Celery ve maliyet karşılaştırma.

Django Uygulaması İçin Sunucu Seçimi: 2026 Detaylı Rehber

Django, Python ekosisteminin en popüler web framework'ü; SaaS, dashboard, content platform ve e-ticaret uygulamalarda yaygın. PHP/Laravel'a benzer ama Python'un long-running process modeli nedeniyle hosting tarafı farklı: cPanel paylaşımlı hosting çoğunlukla uygunsuz, VDS veya dedicated önerilir.

Büyükweb Türkiye VDS Django için ideal: tam Python + sistem paketi yetkisi, Gunicorn/uWSGI process management, PostgreSQL + Redis + Celery birlikte çalıştırma esnekliği. Bu rehberde Django stack'inin tüm bileşenlerini, hangi sunucu tipinde nasıl yapılandırılacağını ve maliyet matrisini detaylı ele alıyoruz.

Django'nun Sunucu Beklentileri

Bileşen Versiyon (Django 5.x) Hosting Etkisi
Python 3.10+ (önerilen 3.12+) Long-running process kapasitesi
WSGI Server Gunicorn / uWSGI Apache/nginx + WSGI module
ASGI Server Uvicorn / Daphne Async Django (channels)
Database PostgreSQL 15+ (önerilen) Lokal mı remote mı?
Redis 6+ Cache, session, Celery broker
Celery 5+ Async task queue
Process Manager systemd / supervisor Worker management
Reverse Proxy nginx Static files + SSL termination
Static Files WhiteNoise / S3 / nginx Production serve

Django Python interpreter long-running olarak çalışır; bu yüzden cPanel'in CGI tabanlı PHP modeline uymaz.

cPanel Paylaşımlı Hosting'de Django?

Çoğu cPanel sağlayıcısı Python uygulama desteği sağlar — Passenger veya Phusion Passenger üzerinden.

Büyükweb cPanel hosting cPanel'in Setup Python App özelliği:

  1. cPanel → Setup Python App → Create Application
  2. Python Version: 3.10 / 3.11 / 3.12 (mevcut)
  3. App Root: /home/user/django-app
  4. App URL: example.com
  5. App Startup: passenger_wsgi.py
# passenger_wsgi.py
import sys, os
sys.path.insert(0, os.path.dirname(__file__))
from myproject.wsgi import application

Sınırlamalar

  • ✗ Celery worker zor (background process)
  • ✗ Redis genelde yok (paylaşımlı)
  • ✗ PostgreSQL bazen yok (MySQL var)
  • ✗ Long-running async (WebSocket, ASGI) sınırlı
  • ✗ Pip kurulum ek paketler için sudo yok

Verdict: Küçük basit Django (blog, admin paneli) için OK. Yüksek trafik veya Celery + Channels için VDS önerilir.

Senaryo 1: Küçük Django App (Blog, Portfolio)

Trafik: <500 viz/gün
Özellikler: User auth, basit CMS, statik sayfalar

cPanel ile (Mümkün ama Sınırlı)

Büyükweb cPanel Performans:

  • ✓ Python 3.12 + Passenger
  • ✓ MySQL/MariaDB
  • ✗ PostgreSQL yok
  • ✗ Redis yok
  • ✗ Celery zor

VDS ile (Önerilen)

Büyükweb Başlangıç VDS — 2 GB RAM, 2 vCPU:

  • ✓ Tam Python yetkisi
  • ✓ PostgreSQL lokal
  • ✓ Redis lokal
  • ✓ systemd/supervisor

Maliyet: ₺250-400/ay

Senaryo 2: Orta Ölçek SaaS / Dashboard

Trafik: 500-10K viz/gün
Özellikler: Multi-tenant, async tasks (email, PDF, ETL), real-time

Önerilen: VDS Performans

Büyükweb VDS Performans: 4 GB RAM, 4 vCPU, 80 GB NVMe.

Stack

Ubuntu 24.04 LTS
├── nginx (reverse proxy + static + SSL)
├── Gunicorn (WSGI, 4-8 workers)
├── Daphne (ASGI, channels için)
├── PostgreSQL 16
├── Redis 7
├── Celery worker (4-8 process)
├── Celery beat (scheduler)
├── systemd (process manager)
└── Certbot (Let's Encrypt)

Adım Adım Production Setup

Sistem Hazırlık

sudo apt update && sudo apt upgrade -y
sudo apt install -y python3.12 python3.12-venv python3-pip nginx postgresql redis-server git

Database

sudo -u postgres psql
CREATE DATABASE myproject;
CREATE USER myuser WITH PASSWORD 'STRONG_PASSWORD';
GRANT ALL PRIVILEGES ON DATABASE myproject TO myuser;
\q

Django Project Setup

sudo adduser deploy
sudo su - deploy
cd /home/deploy
git clone https://github.com/USER/myproject.git
cd myproject

python3.12 -m venv venv
source venv/bin/activate

pip install -r requirements.txt
pip install gunicorn psycopg2-binary

# settings.py production değerleri
cat > .env <<EOF
DEBUG=False
SECRET_KEY=$(python -c 'from django.core.management.utils import get_random_secret_key; print(get_random_secret_key())')
DATABASE_URL=postgres://myuser:STRONG_PASSWORD@localhost:5432/myproject
ALLOWED_HOSTS=app.example.com
EOF

python manage.py migrate
python manage.py collectstatic --noinput
python manage.py createsuperuser

Gunicorn systemd Service

/etc/systemd/system/myproject.service:

[Unit]
Description=Django Gunicorn
After=network.target postgresql.service redis.service

[Service]
Type=notify
User=deploy
Group=deploy
WorkingDirectory=/home/deploy/myproject
ExecStart=/home/deploy/myproject/venv/bin/gunicorn \
  --workers 4 \
  --bind 127.0.0.1:8000 \
  --access-logfile /var/log/gunicorn/access.log \
  --error-logfile /var/log/gunicorn/error.log \
  myproject.wsgi:application
Restart=always

[Install]
WantedBy=multi-user.target
sudo mkdir -p /var/log/gunicorn
sudo chown deploy:deploy /var/log/gunicorn
sudo systemctl daemon-reload
sudo systemctl enable --now myproject.service
sudo systemctl status myproject

nginx Reverse Proxy

/etc/nginx/sites-available/myproject:

server {
    listen 80;
    server_name app.example.com;
    return 301 https://$host$request_uri;
}

server {
    listen 443 ssl http2;
    server_name app.example.com;

    ssl_certificate /etc/letsencrypt/live/app.example.com/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/app.example.com/privkey.pem;

    client_max_body_size 50M;

    location /static/ {
        alias /home/deploy/myproject/staticfiles/;
        expires 30d;
        add_header Cache-Control "public, immutable";
    }

    location /media/ {
        alias /home/deploy/myproject/media/;
    }

    location / {
        proxy_pass http://127.0.0.1:8000;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;
    }
}
sudo ln -s /etc/nginx/sites-available/myproject /etc/nginx/sites-enabled/
sudo nginx -t
sudo systemctl reload nginx

SSL (Let's Encrypt)

sudo apt install certbot python3-certbot-nginx
sudo certbot --nginx -d app.example.com

Celery Async Tasks

Celery Worker Service

/etc/systemd/system/myproject-celery.service:

[Unit]
Description=Celery Worker
After=network.target redis.service

[Service]
Type=forking
User=deploy
Group=deploy
WorkingDirectory=/home/deploy/myproject
Environment="PATH=/home/deploy/myproject/venv/bin"
ExecStart=/home/deploy/myproject/venv/bin/celery -A myproject worker --detach \
  --loglevel=info --logfile=/var/log/celery/worker.log \
  --pidfile=/var/run/celery/worker.pid \
  --concurrency=4
Restart=always

[Install]
WantedBy=multi-user.target

Celery Beat (Scheduler)

/etc/systemd/system/myproject-celerybeat.service:

[Service]
ExecStart=/home/deploy/myproject/venv/bin/celery -A myproject beat \
  --loglevel=info \
  --schedule=/var/lib/celery/beat-schedule
sudo systemctl daemon-reload
sudo systemctl enable --now myproject-celery myproject-celerybeat

Django Settings

# settings.py
CELERY_BROKER_URL = 'redis://localhost:6379/0'
CELERY_RESULT_BACKEND = 'redis://localhost:6379/1'
CELERY_ACCEPT_CONTENT = ['json']
CELERY_TASK_SERIALIZER = 'json'
CELERY_RESULT_SERIALIZER = 'json'
CELERY_TIMEZONE = 'Europe/Istanbul'

# Periodic tasks (Celery Beat)
CELERY_BEAT_SCHEDULE = {
    'cleanup-old-records': {
        'task': 'myapp.tasks.cleanup',
        'schedule': crontab(hour=3, minute=0),  # Her gece 03:00
    },
}

ASGI / Django Channels (WebSocket)

Real-time uygulama (chat, notifications) için Django Channels + Daphne:

pip install channels[daphne] channels-redis
# settings.py
INSTALLED_APPS = [..., 'daphne', 'channels']
ASGI_APPLICATION = 'myproject.asgi.application'
CHANNEL_LAYERS = {
    'default': {
        'BACKEND': 'channels_redis.core.RedisChannelLayer',
        'CONFIG': {'hosts': [('127.0.0.1', 6379)]},
    },
}

/etc/systemd/system/myproject-daphne.service:

[Service]
ExecStart=/home/deploy/myproject/venv/bin/daphne \
  -b 127.0.0.1 -p 8001 \
  myproject.asgi:application

nginx config:

location /ws/ {
    proxy_pass http://127.0.0.1:8001;
    proxy_http_version 1.1;
    proxy_set_header Upgrade $http_upgrade;
    proxy_set_header Connection "upgrade";
}

Deployment Pipeline

Manual Deploy Script

#!/bin/bash
# /home/deploy/myproject/deploy.sh
set -e

cd /home/deploy/myproject
git pull origin main

source venv/bin/activate
pip install -r requirements.txt --upgrade
python manage.py migrate
python manage.py collectstatic --noinput

sudo systemctl restart myproject
sudo systemctl restart myproject-celery
sudo systemctl reload nginx

echo "Deploy complete"

CI/CD (GitHub Actions)

# .github/workflows/deploy.yml
name: Deploy

on:
  push:
    branches: [main]

jobs:
  deploy:
    runs-on: ubuntu-latest
    steps:
      - name: SSH Deploy
        uses: appleboy/ssh-action@v1
        with:
          host: \${{ secrets.VDS_HOST }}
          username: deploy
          key: \${{ secrets.SSH_KEY }}
          script: |
            cd /home/deploy/myproject
            ./deploy.sh

Performans Optimizasyonu

Gunicorn Worker Sayısı

Formula: (2 × CPU cores) + 1. 4 vCPU VDS için 9 worker.

PostgreSQL Connection Pool

pip install psycopg2-binary
# settings.py
DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.postgresql',
        'CONN_MAX_AGE': 60,  # Connection pool
        ...
    }
}

Yüksek concurrency için PgBouncer:

sudo apt install pgbouncer

Cache (Redis)

# settings.py
CACHES = {
    'default': {
        'BACKEND': 'django.core.cache.backends.redis.RedisCache',
        'LOCATION': 'redis://127.0.0.1:6379/2',
    }
}

Static Files: WhiteNoise

pip install whitenoise
# settings.py
MIDDLEWARE = [
    'django.middleware.security.SecurityMiddleware',
    'whitenoise.middleware.WhiteNoiseMiddleware',
    ...
]
STATICFILES_STORAGE = 'whitenoise.storage.CompressedManifestStaticFilesStorage'

WhiteNoise CDN'e ihtiyaç olmadan static asset'ları gzip + cache header ile servis eder.

S3/B2 ile Media

Büyük media dosyaları için django-storages:

pip install django-storages boto3
DEFAULT_FILE_STORAGE = 'storages.backends.s3boto3.S3Boto3Storage'
AWS_STORAGE_BUCKET_NAME = 'my-media-bucket'
AWS_S3_ENDPOINT_URL = 'https://s3.eu-central-003.backblazeb2.com'

Maliyet Karşılaştırma (Aylık)

Senaryo Ölçek Maliyet (₺)
Küçük blog <500 viz/gün 250 (VDS Başlangıç)
Orta SaaS 5K viz/gün 400-600 (VDS Performans)
Yüksek SaaS 50K+ 1.500-3.000 (VDS Pro / Dedicated)

Büyükweb VDS TL bazlı stabil maliyet sunar.

Yaygın Sorunlar

Sorun Çözüm
502 Bad Gateway Gunicorn ölmüş; systemctl status myproject
Static files 404 collectstatic çalıştırıldı mı? nginx alias doğru mu?
Database connection refused PostgreSQL açık mı? /etc/postgresql/16/main/pg_hba.conf
Celery task pending Worker çalışıyor mu? Redis bağlantı?
CORS hatası django-cors-headers + ALLOWED_HOSTS
CSRF fail CSRF_TRUSTED_ORIGINS ayarla
Memory leak Gunicorn --max-requests=1000 worker recycle
Slow query django-debug-toolbar veya pg_stat_statements

Sıkça Sorulan Sorular

cPanel paylaşımlı hosting Django için yeterli mi?

Çok küçük site için OK; orta+ üzeri için VDS gerekli. Celery, PostgreSQL, Redis sahibi olmak isteyen herkes VDS'e geçmeli.

Heroku alternatifi olarak Türkiye VDS kullanabilir miyim?

Evet — daha düşük maliyet + KVKK uyumu + TL stabilite. Heroku-like deploy için Dokku (open-source mini-Heroku) VDS'e kurulabilir.

Hangi Python versiyonu?

Python 3.12 önerilir (Django 5.1+ tam destekli). 3.13 çok yeni, ekosistem henüz tam değil.

PostgreSQL vs MySQL Django için?

Django PostgreSQL ile daha iyi entegre (JSONField, ArrayField, CITEXT, full-text search). MySQL alternatif ama PostgreSQL endüstri standardı.

uWSGI vs Gunicorn?

Gunicorn daha popüler + daha basit; uWSGI daha hızlı ama config karmaşık. Gunicorn modern Django için yeterli.

Docker'da Django çalıştırmalıyım mı?

Lokal dev + CI test için ideal. Production'da direkt VDS'te çalıştırmak daha basit; orchestration ihtiyaçı varsa Docker Compose veya Kubernetes.

CI/CD için ücretsiz seçenek?

GitHub Actions (private repo'larda 2000 dk/ay free); GitLab CI (5GB compute free). Hosting Türkiye'de olsa bile CI runner globaldir.

İlgili Rehberler

İlgili Büyükweb Hizmetleri

Django uygulamanız için Türkiye lokasyonlu Büyükweb hizmetleri:

Sorularınız için 0850 302 60 70 numaralı destek hattımıza veya iletişim sayfamıza yazabilirsiniz.

Web Hosting Rehberi İlgili Hizmetlerimiz

Bu yazıda anlatılan teknik konuyu profesyonel altyapıyla deneyimleyin

Etiketler:

#django hosting#python hosting#gunicorn#uwsgi#celery#postgresql#nginx#wsgi#asgi

Bu yazıyı paylaş