# Ubuntu 16.04’te Django, PostgreSQL, Nginx ve Gunicorn Kurulumu: Tam Kılavuz
Meta Açıklaması: Ubuntu 16.04 üzerinde Django, PostgreSQL, Nginx ve Gunicorn kullanarak yüksek performanslı bir web uygulaması nasıl kurulur? Bu kapsamlı kılavuzda adım adım kurulum, konfigürasyon ve optimizasyon adımlarını bulacaksınız. Django projeleriniz için güvenilir ve ölçeklenebilir bir mimari oluşturun!
Yüksek performanslı ve güvenilir bir web uygulaması geliştirmek istiyorsunuz ama nereden başlayacağınızı bilmiyor musunuz? Django’nun gücü, PostgreSQL’in veritabanı yönetimi yetenekleri, Nginx’in ters proxy özellikleri ve Gunicorn’un WSGI sunucu yeteneği bir araya geldiğinde, güçlü ve ölçeklenebilir bir uygulama mimarisi oluşturmak mümkün. Bu makalede, Ubuntu 16.04 üzerinde bu teknolojileri kullanarak adım adım bir Django uygulaması kurulumunu, konfigürasyonunu ve performans optimizasyonunu ele alacağız. Fatih Soysal’ın bu kapsamlı kılavuzu ile Django yolculuğunuza güvenle başlayabilirsiniz.
1. Temel Kavramlar: Django, PostgreSQL, Nginx ve Gunicorn
Öncelikle, kullanacağımız temel teknolojileri kısaca tanıyalım.
Django: Python tabanlı, yüksek seviyeli bir web uygulama framework’üdür. “Don’t Repeat Yourself” (DRY) prensibine bağlı kalarak, hızlı ve verimli uygulama geliştirmeyi sağlar. Karmaşık projelerde bile kodun okunabilirliğini ve sürdürülebilirliğini artırır. Django’nun güçlü ORM (Object-Relational Mapper) sayesinde veritabanı işlemleri kolaylaşır.
PostgreSQL: Açık kaynak kodlu, güçlü ve güvenilir bir ilişkisel veritabanı yönetim sistemidir. SQL standardına uyumlu olup, geniş bir özellik yelpazesi sunar. Django ile mükemmel bir uyumluluğa sahiptir ve büyük ölçekli projeler için idealdir.
Nginx: Yüksek performanslı bir web sunucusu ve ters proxy’dir. Statik dosyaları hızlı bir şekilde servis eder ve gelen istekleri Gunicorn gibi WSGI sunucularına yönlendirir. Bu sayede, Django uygulamanızın performansını artırır ve yük altında daha istikrarlı çalışmasını sağlar.
Gunicorn: WSGI (Web Server Gateway Interface) HTTP sunucusu olarak çalışır. Django uygulamanızı çalıştırmak ve Nginx ile iletişim kurmak için kullanılır. Çoklu iş parçacığı desteği sayesinde, gelen istekleri verimli bir şekilde işler.
2. Ubuntu 16.04’te Gerekli Yazılımların Kurulumu: Nasıl Yapılır?
Öncelikle, Ubuntu 16.04 sisteminize gerekli yazılımları kuracağız. Bunun için terminalinizi açın ve aşağıdaki komutları çalıştırın:
sudo apt update
sudo apt upgrade -y
sudo apt install python3 python3-pip python3-dev postgresql postgresql-contrib nginx git -y
Bu komutlar, sisteminizi güncelleyecek, Python 3 ve gerekli geliştirme paketlerini, PostgreSQL veritabanı sistemini, Nginx web sunucusunu ve Git sürüm kontrol sistemini kuracaktır.
3. PostgreSQL Veritabanı Kurulumu ve Konfigürasyonu: Adım Adım
PostgreSQL’i kurduktan sonra, Django uygulamanız için bir veritabanı kullanıcısı ve veritabanı oluşturmanız gerekir.
sudo -u postgres psql
Bu komut PostgreSQL’e root yetkisiyle giriş yapmanızı sağlar. Aşağıdaki komutları çalıştırarak bir kullanıcı ve veritabanı oluşturacağız:
CREATE USER django_user WITH PASSWORD 'güçlü_şifreniz'; -- güçlü bir şifre belirleyin
CREATE DATABASE django_db OWNER django_user;
\q
Bu komutlar, django_user adında bir kullanıcı oluşturur ve django_db adında bir veritabanı oluşturur. güçlü_şifreniz yerine güçlü ve güvenli bir şifre kullanmayı unutmayın! \q komutu ise psql’den çıkış yapmanızı sağlar.
4. Python Sanal Ortamı Oluşturma ve Django Kurulumu: Yeni Başlayanlar İçin
Yeni bir proje dizini oluşturun ve içine django-project adında bir sanal ortam oluşturun:
mkdir django-project
cd django-project
python3 -m venv .venv
source .venv/bin/activate
Sanal ortamı etkinleştirdikten sonra, Django’yu yükleyebilirsiniz:
pip install django
Yeni bir Django projesi oluşturun:
django-admin startproject myproject
Ve bir uygulama ekleyin:
cd myproject
python manage.py startapp myapp
5. Django Projesinin PostgreSQL ile Bağlantısı: Orta Seviye
myproject/settings.py dosyasını açın ve DATABASES ayarlarını aşağıdaki gibi değiştirin:
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.postgresql',
'NAME': 'django_db',
'USER': 'django_user',
'PASSWORD': 'güçlü_şifreniz',
'HOST': 'localhost',
'PORT': '5432',
}
}
Bu ayarlar, Django’nun PostgreSQL veritabanına bağlanmasını sağlar. Şifrenizi doğru girdiğinizden emin olun.
6. Nginx ve Gunicorn Konfigürasyonu: İleri Düzey
Nginx için bir konfigürasyon dosyası oluşturun:
sudo nano /etc/nginx/sites-available/myproject
Aşağıdaki içeriği ekleyin:
server {
listen 80;
server_name your_domain_or_ip; # Domain adınızı veya IP adresinizi girin
location /static {
alias /path/to/myproject/myproject/static; # Projenizin static dosyalarının yolunu girin
}
location / {
proxy_pass http://unix:/path/to/myproject/myproject.sock; # Gunicorn soket yolunu girin
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
}
Gunicorn için bir başlatma komutu oluşturun (örneğin, myproject.service):
sudo nano /etc/systemd/system/myproject.service
Aşağıdaki içeriği ekleyin:
[Unit]
Description=Gunicorn instance for myproject
After=network.target
[Service]
User=django_user # django_user kullanıcısını oluşturduğunuzdan emin olun
Group=www-data
WorkingDirectory=/path/to/myproject
ExecStart=/path/to/.venv/bin/gunicorn --bind unix:/path/to/myproject/myproject.sock myproject.wsgi:application
Restart=always
RestartSec=10
[Install]
WantedBy=multi-user.target
Bu dosyaları kaydedin ve aşağıdaki komutları çalıştırın:
sudo ln -s /etc/nginx/sites-available/myproject /etc/nginx/sites-enabled/myproject
sudo systemctl enable myproject
sudo systemctl start myproject
sudo systemctl restart nginx
Bu komutlar, Nginx ve Gunicorn’u başlatacak ve yapılandırma dosyalarını etkinleştirecektir.
7. Performans Optimizasyonu: Gerçek Dünya Senaryoları
Veritabanı Optimizasyonu: PostgreSQL’in EXPLAIN ANALYZE komutu ile sorgularınızın performansını analiz edebilir ve indeksleme stratejilerinizi geliştirebilirsiniz. Karmaşık sorguları optimize etmek için CTE (Common Table Expressions) kullanabilirsiniz.
Cacheleme: Django’nun cache framework’ünü kullanarak sık kullanılan verileri önbelleğe alabilirsiniz. Redis veya Memcached gibi önbellek sunucuları kullanarak performansı daha da artırabilirsiniz.
Statik Dosya Optimizasyonu: Statik dosyalarınızı (CSS, JavaScript, resimler) CDN (Content Delivery Network) kullanarak dağıtarak, sunucunuzdaki yükü azaltabilirsiniz. Ayrıca, statik dosyalarınızı sıkıştırarak (gzip) bant genişliği kullanımını optimize edebilirsiniz.
8. Uygulamanın Çalıştırılması ve Test Edilmesi: Vaka Analizi
Tüm adımları doğru bir şekilde tamamladıktan sonra, tarayıcınızda your_domain_or_ip adresine giderek Django uygulamanızı test edebilirsiniz. Eğer bir hata ile karşılaşırsanız, log dosyalarını kontrol ederek sorunun kaynağını belirleyebilirsiniz. Örneğin, Nginx log dosyası /var/log/nginx/error.log adresinde bulunur.
9. Sıkça Sorulan Sorular (SSS)
* Django’yu başka bir veritabanıyla kullanabilir miyim? Evet, Django MySQL, SQLite ve MongoDB gibi diğer veritabanlarıyla da uyumludur.
* Gunicorn’u başka bir WSGI sunucusu ile değiştirebilir miyim? Evet, uWSGI gibi alternatif WSGI sunucuları da kullanabilirsiniz.
* Nginx’i başka bir web sunucusu ile değiştirebilir miyim? Evet, Apache gibi diğer web sunucuları da kullanabilirsiniz.
* Uygulamam yavaş çalışıyorsa ne yapmalıyım? Performans optimizasyonu bölümünde belirtilen adımları izleyerek uygulamanızın performansını artırabilirsiniz.
* Güvenlik açıklarından nasıl korunabilirim? Düzenli güncellemeler yapmalı, güçlü şifreler kullanmalı ve güvenlik duvarı kurmalısınız. Ayrıca, Django’nun güvenlik özelliklerini kullanarak uygulamanızı güvenlik açıklarına karşı koruyabilirsiniz.
Sonuç
Bu makalede, Ubuntu 16.04 üzerinde Django, PostgreSQL, Nginx ve Gunicorn kullanarak bir web uygulaması kurulumunu ve konfigürasyonunu adım adım açıkladık. Performans optimizasyonu ipuçları ve sıkça sorulan sorularla birlikte, bu kılavuz Django projelerinizde size yol gösterecektir. Unutmayın ki, bu yapılandırma, projenizin büyüklüğü ve ihtiyaçlarına göre özelleştirilmelidir. Daha fazla bilgi ve ileri düzey konular için [Fatih Soysal’ın web sitesini](https://fatihsoysal.com) ziyaret edebilirsiniz.
Yazar: Fatih Soysal