Ana içeriğe geç

Ubuntu Üzerinde Django Kurulumu: Nginx, Gunicorn ve PostgreSQL

Ubuntu Üzerinde Django (PostgreSQL + Gunicorn + Nginx) Kurulumu

Bu rehberde, Django uygulamasını production ortamına hazır hale getirmek için gerekli temel bileşenleri kuracaksınız.
Amaç; güvenli, performanslı ve ölçeklenebilir bir Django altyapısı oluşturmaktır.


Bu Rehberde Ne Öğreneceksiniz?

  • Django için PostgreSQL veritabanı kurmayı
  • Python sanal ortam (virtualenv) oluşturmayı
  • Gunicorn ile uygulamayı servis etmeyi
  • Nginx’i ters vekil (reverse proxy) olarak yapılandırmayı
  • Production ortamda sık yaşanan hataları çözmeyi

1. Gerekli Paketlerin Kurulması

Bu adımda Django için gerekli sistem paketleri yüklenir.

sudo apt update
sudo apt install python3-venv python3-dev libpq-dev postgresql postgresql-contrib nginx
  • Bu komut; PostgreSQL, Nginx ve Python geliştirme araçlarını kurar.

2. PostgreSQL Veritabanı ve Kullanıcı Oluşturma

  1. Önce PostgreSQL yönetici hesabına geçin.

sudo -u postgres psql

  • Veritabanı ve kullanıcı oluşturun.

CREATE DATABASE myproject;
CREATE USER myprojectuser WITH PASSWORD 'guclu_sifre';
GRANT ALL PRIVILEGES ON DATABASE myproject TO myprojectuser;
  • Bu yapı Django’nun güvenli şekilde veritabanına bağlanmasını sağlar.

3. Python Sanal Ortam Oluşturma

  1. Proje dosyaları için bir dizin hazırlayın.

mkdir ~/myprojectdir
cd ~/myprojectdir

  1. Sanal ortamı oluşturup aktif edin.

python3 -m venv myprojectenv
source myprojectenv/bin/activate
  • Bu işlem bağımlılıkların projeye özel kalmasını sağlar.

4. Django ve Gunicorn Kurulumu

  1. Sanal ortam aktifken gerekli Python paketlerini yükleyin.

pip install django gunicorn psycopg2-binary

  • Bu paketler Django uygulamasını çalıştırmak için yeterlidir.

5. Django Projesini Oluşturma ve Yapılandırma

  1. Django proje dosyalarını oluşturun.

django-admin startproject myproject ~/myprojectdir

settings.py dosyasında aşağıdaki ayarları güncelleyin:

  1. ALLOWED_HOSTS: Alan adı, IP ve localhost

  2. DATABASES: PostgreSQL bağlantı bilgileri

  3. STATIC_ROOT: Statik dosya dizini

Bu ayarlar production ortam için zorunludur.


6. Veritabanı ve Statik Dosyaların Hazırlanması

  1. Veritabanı tablolarını oluşturun.

python manage.py migrate

  1. Yönetici kullanıcı ekleyin.

python manage.py createsuperuser

  1. Statik dosyaları toplayın.

python manage.py collectstatic
  • Bu işlem Nginx’in statik dosyaları servis edebilmesini sağlar.

7. Gunicorn ile Uygulamayı Test Etme

  1. Gunicorn’u manuel olarak çalıştırın.

gunicorn --bind 0.0.0.0:8000 myproject.wsgi
  • Bu adım, uygulamanın WSGI üzerinden düzgün çalıştığını doğrular.

8. Gunicorn için systemd Servisi Oluşturma

Gunicorn’un arka planda stabil çalışması için servis tanımlanır.


sudo nano /etc/systemd/system/gunicorn.service
  • Bu servis, Gunicorn’u Unix socket üzerinden başlatır.

Servisi aktif edin:


sudo systemctl daemon-reload
sudo systemctl start gunicorn
sudo systemctl enable gunicorn

9. Nginx Reverse Proxy Yapılandırması

  1. Nginx sunucu bloğunu oluşturun.

sudo nano /etc/nginx/sites-available/myproject

Temel yapı:


server {
listen 80;
server_name rabisu.cloud;

location /static/ {
root /home/user/myprojectdir;
}

location / {
include proxy_params;
proxy_pass http://unix:/run/gunicorn.sock;
}
}
  • Bu yapı Nginx’i Gunicorn’a yönlendirir.

Aktif edin:


sudo ln -s /etc/nginx/sites-available/myproject /etc/nginx/sites-enabled
sudo nginx -t
sudo systemctl restart nginx

10. Güvenlik ve HTTPS (Önerilir)

  1. SSL için Let’s Encrypt kullanın.

sudo apt install certbot python3-certbot-nginx
sudo certbot --nginx -d rabisu.cloud
  • Bu işlem HTTPS yönlendirmesini otomatik yapar.

Sıkça Sorulan Sorular (SSS)

  1. Gunicorn neden Django’nun kendi sunucusu yerine kullanılır? Django’nun geliştirme sunucusu production için uygun değildir.

  2. 502 Bad Gateway hatası alıyorum, sebebi nedir? Gunicorn çalışmıyor veya socket yolu yanlış olabilir.

  3. PostgreSQL neden SQLite yerine önerilir? PostgreSQL eşzamanlı bağlantılarda daha güvenlidir.

  4. Statik dosyalar neden Nginx üzerinden servis edilir? Nginx, statik dosyaları Django’dan çok daha hızlı sunar.


Sonuç

Bu rehberle birlikte Django uygulamanız:

Production’a hazır

Güvenli

Performanslı

Ölçeklenebilir

hale gelir.

Profesyonel Django projelerinizi bu mimariyle Rabisu Bulut altyapısında hemen yayına alabilirsiniz.