
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:
- cPanel → Setup Python App → Create Application
- Python Version: 3.10 / 3.11 / 3.12 (mevcut)
- App Root:
/home/user/django-app - App URL:
example.com - 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ı)
- ✓ 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
- Laravel İçin Hosting Seçimi 2026
- PostgreSQL Kurulumu Temel Yönetim
- PostgreSQL Performans VACUUM
- Nginx Web Sunucusu Kurulumu
- Türkiye VDS Sunucu
İ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:


