Django Uygulamalarınızda PostgreSQL’i Ubuntu 22.04 Üzerinde Kullanma Rehberi
Django, Python ile hızlı ve verimli web uygulamaları geliştirmenizi sağlayan popüler bir web çatısıdır. Genellikle ilk projelerde hafif ve kullanımı kolay olan SQLite ile başlansa da, gerçek dünya üretim ortamlarında daha güçlü, ölçeklenebilir ve özellik zengini bir veritabanı sistemine ihtiyaç duyulur. İşte bu noktada PostgreSQL devreye girer. PostgreSQL, yüksek performans, güvenilirlik ve gelişmiş özellikleriyle öne çıkan açık kaynaklı bir ilişkisel veritabanı yönetim sistemidir (RDBMS). Bu makalede, Django uygulamanızı Ubuntu 22.04 işletim sistemi üzerinde PostgreSQL ile nasıl entegre edeceğinizi adım adım detaylı bir şekilde anlatacağız.
Giriş: Neden PostgreSQL?
Django projeleri varsayılan olarak SQLite veritabanı ile gelir. Geliştirme sürecinin başlangıcında veya küçük ölçekli uygulamalar için SQLite yeterli olabilir. Ancak uygulamanız büyüdükçe, eşzamanlı kullanıcı sayısı arttıkça veya daha karmaşık veri yapıları ve sorgularla uğraştıkça SQLite’ın sınırlamaları ortaya çıkacaktır.
PostgreSQL, bu sınırlamaların üstesinden gelmek için mükemmel bir alternatiftir. İşte PostgreSQL’i tercih etmeniz için bazı nedenler:
* Güvenilirlik ve Veri Bütünlüğü: ACID (Atomicity, Consistency, Isolation, Durability) uyumluluğu sayesinde veri bütünlüğünü en üst düzeyde sağlar.
* Gelişmiş Özellikler: JSON/JSONB, hstore, coğrafi veri tipleri (PostGIS ile) gibi gelişmiş veri tipleri ve fonksiyonları destekler.
* Performans ve Ölçeklenebilirlik: Büyük veri setleri ve yüksek eşzamanlı bağlantılar için optimize edilmiştir. Etkili indeksleme, sorgu planlayıcı ve gelişmiş optimizasyon seçenekleri sunar.
* Genişletilebilirlik: Kullanıcı tanımlı fonksiyonlar, veri tipleri ve operatörler oluşturarak veritabanını ihtiyaçlarınıza göre genişletebilirsiniz.
* Güvenlik: Kapsamlı yetkilendirme sistemi, SSL/TLS şifreleme ve gelişmiş denetim özellikleri ile veritabanı güvenliğini sağlar.
* Açık Kaynak: Ücretsiz ve açık kaynaklı olması, maliyetleri düşürür ve geniş bir topluluk desteği sunar.
Bu rehberde, Ubuntu 22.04 üzerinde PostgreSQL kurulumundan, Django projenizin ayarlarının yapılandırılmasına ve uygulamanızın veritabanı ile başarılı bir şekilde iletişim kurmasına kadar tüm adımları ele alacağız.
Ön Gereksinimler
Bu rehbere başlamadan önce aşağıdaki ön gereksinimlerin karşılandığından emin olun:
* Ubuntu 22.04 Sunucusu: Temiz bir Ubuntu 22.04 kurulumu veya sanal makinesi.
* Temel Terminal Bilgisi: Linux komut satırı ile temel düzeyde çalışma bilgisi.
* Python 3 ve Pip: Ubuntu 22.04 genellikle Python 3 ile gelir. python3 --version ve pip3 --version komutlarıyla kontrol edebilirsiniz. Eksikse sudo apt install python3 python3-pip ile kurabilirsiniz.
* Django: Halihazırda bir Django projeniz olması veya yeni bir proje oluşturmaya hazır olmanız.
PostgreSQL Kurulumu
İlk adımımız, Ubuntu sunucunuza PostgreSQL veritabanı sistemini kurmaktır.
Sistem Paketlerini Güncelleme
Herhangi bir yazılım kurulumuna başlamadan önce, sisteminizin paket listesini güncellemek ve mevcut paketleri yükseltmek iyi bir uygulamadır. Bu, en son güvenlik yamalarına ve yazılım sürümlerine sahip olmanızı sağlar.
sudo apt update
sudo apt upgrade -y
sudo apt update komutu, yerel paket indeksinizi güncellerken, sudo apt upgrade -y komutu ise sisteminizdeki tüm yüklü paketleri en yeni sürümlerine yükseltir. -y bayrağı, tüm sorulara otomatik olarak “evet” yanıtı vermenizi sağlar.
PostgreSQL Sunucusunu Kurma
PostgreSQL ve ilgili yardımcı araçları kurmak için aşağıdaki komutu kullanın:
sudo apt install postgresql postgresql-contrib -y
Bu komut, PostgreSQL sunucusunu (postgresql) ve çeşitli ek modüller ile araçları (postgresql-contrib) kurar. Kurulum tamamlandığında, PostgreSQL servisi otomatik olarak başlatılacak ve sistem açılışında otomatik olarak çalışacak şekilde yapılandırılacaktır.
PostgreSQL Servis Durumunu Kontrol Etme
Kurulumdan sonra PostgreSQL servisinin düzgün çalışıp çalışmadığını kontrol etmek önemlidir.
systemctl status postgresql
Bu komut, PostgreSQL servisinin durumunu gösterir. Çıktıda active (exited) veya active (running) gibi bir ifade görmelisiniz. active (running) idealdir. Eğer farklı bir durum görüyorsanız, sudo systemctl start postgresql komutuyla servisi manuel olarak başlatmayı deneyebilirsiniz.
PostgreSQL Kullanıcısı ve Veritabanı Oluşturma
PostgreSQL, varsayılan olarak postgres adlı bir süper kullanıcı hesabı oluşturur. Bu hesap, Linux’taki root kullanıcısına benzer şekilde, veritabanı üzerinde tam yetkiye sahiptir. Veritabanı işlemleri için bu postgres kullanıcısına geçiş yapmamız gerekir.
İlk olarak, postgres kullanıcısına geçiş yapın:
sudo -i -u postgres
Bu komut sizi postgres Linux kullanıcısının kabuğuna sokar. Şimdi psql komutunu kullanarak PostgreSQL komut satırı istemcisine bağlanabilirsiniz:
psql
psql istemine bağlandıktan sonra, Django projeniz için özel bir veritabanı ve kullanıcı oluşturacağız. Bu, güvenlik açısından iyi bir uygulamadır, çünkü Django uygulamanızın postgres süper kullanıcısıyla değil, yalnızca kendi veritabanına erişim yetkisi olan bir kullanıcıyla çalışmasını sağlar.
Öncelikle, Django projeniz için bir veritabanı oluşturalım. Veritabanı adını myprojectdb olarak varsayalım, ancak siz kendi projenize uygun bir isim seçebilirsiniz:
CREATE DATABASE myprojectdb;
Ardından, bu veritabanına erişecek bir kullanıcı oluşturalım. Kullanıcı adını myprojectuser ve şifreyi your_password olarak varsayalım. Güçlü bir şifre seçtiğinizden emin olun!
CREATE USER myprojectuser WITH PASSWORD 'your_password';
Şimdi oluşturduğumuz myprojectuser kullanıcısına myprojectdb veritabanı üzerinde tüm yetkileri verelim:
GRANT ALL PRIVILEGES ON DATABASE myprojectdb TO myprojectuser;
Bu yetkilendirme, Django’nun veritabanı tablolarını oluşturmasına, değiştirmesine ve silmesine izin verecektir.
Ek olarak, PostgreSQL’in bazı varsayılan ayarlarını Django ile uyumlu hale getirmek için kullanıcı rolüne bazı özellikler ekleyebiliriz. Bu ayarlar, karakter kodlaması, işlem izolasyonu ve zaman dilimi gibi önemli parametreleri içerir.
ALTER ROLE myprojectuser SET client_encoding TO 'utf8';
ALTER ROLE myprojectuser SET default_transaction_isolation TO 'read committed';
ALTER ROLE myprojectuser SET timezone TO 'UTC';
* client_encoding TO 'utf8': Tüm karakterlerin UTF-8 olarak kodlanmasını sağlar, bu da Türkçe karakterler ve diğer uluslararası karakter setleriyle uyumluluk için kritiktir.
* default_transaction_isolation TO 'read committed': Bu, bir işlemin yalnızca onaylanmış (committed) verileri görmesini sağlar. Django’nun varsayılan davranışıyla uyumludur ve veri tutarlılığı için iyi bir seçimdir.
* timezone TO 'UTC': Veritabanının zaman dilimini UTC olarak ayarlar. Bu, farklı coğrafi konumlardaki sunucular ve kullanıcılar arasında zaman tutarlılığı sağlamak için en iyi uygulamadır.
Tüm bu komutları başarıyla çalıştırdıktan sonra, psql isteminden çıkmak için \q yazın ve Enter tuşuna basın:
\q
Şimdi postgres Linux kullanıcısının kabuğundan çıkmak için exit yazın ve Enter tuşuna basın:
exit
Artık Ubuntu sisteminizde PostgreSQL kuruldu ve Django projeniz için özel bir veritabanı ile kullanıcı hazır.
Django Projesini Hazırlama
Şimdi sıra Django projenizi PostgreSQL ile çalışacak şekilde hazırlamaya geldi.
Sanal Ortam Oluşturma
Python projelerinde sanal ortam kullanmak, bağımlılık çakışmalarını önlemek ve proje bağımlılıklarını izole etmek için en iyi uygulamadır. Projenizin kök dizinine gidin ve bir sanal ortam oluşturun:
mkdir myproject_django # Eğer projeniz yoksa yeni bir dizin oluşturun
cd myproject_django
python3 -m venv myproject_venv
Sanal ortamı etkinleştirin:
source myproject_venv/bin/activate
Terminal isteminizde parantez içinde sanal ortam adını ((myproject_venv)) görmelisiniz, bu da sanal ortamın etkin olduğunu gösterir.
Django ve Psycopg2 Kurulumu
Django’nun PostgreSQL ile iletişim kurabilmesi için psycopg2 adlı bir adaptöre ihtiyacı vardır. psycopg2, Python için popüler bir PostgreSQL veritabanı bağlayıcısıdır.
Sanal ortamınız etkin durumdayken Django ve psycopg2-binary paketlerini kurun:
pip install django psycopg2-binary
psycopg2-binary paketi, kurulum sırasında derleme gerektirmeyen önceden derlenmiş bir sürümüdür ve çoğu durumda kurulumu daha kolay hale getirir. Eğer derleme sorunları yaşarsanız veya daha özel bir kurulum istiyorsanız psycopg2 paketini kurmayı deneyebilirsiniz, ancak bu durumda sisteminizde PostgreSQL geliştirme başlıklarının (libpq-dev) kurulu olması gerekir. (Bu konuya “Yaygın Sorunlar” bölümünde değineceğiz.)
Yeni Bir Django Projesi Oluşturma (Opsiyonel)
Eğer zaten bir Django projeniz varsa bu adımı atlayabilirsiniz. Yeni bir proje oluşturuyorsanız, sanal ortamınız etkin durumdayken aşağıdaki komutu çalıştırın:
django-admin startproject myproject .
python manage.py startapp myapp # İsteğe bağlı olarak bir uygulama oluşturun
Bu komutlar, bulunduğunuz dizine myproject adında yeni bir Django projesi ve myapp adında bir uygulama oluşturur.
Django Ayarlarını Yapılandırma
Şimdi Django projenizin settings.py dosyasını düzenleyerek PostgreSQL veritabanı bağlantı bilgilerini tanımlayacağız.
settings.py Dosyasını Düzenleme
Django projenizin kök dizininde bulunan myproject/settings.py dosyasını favori metin düzenleyicinizle açın.
nano myproject/settings.py # Veya vim, code vb.
DATABASES sözlüğünü bulun. Varsayılan olarak SQLite için yapılandırılmış olacaktır:
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.sqlite3',
'NAME': BASE_DIR / 'db.sqlite3',
}
}
Bu bölümü PostgreSQL bağlantı bilgilerinizle değiştirin:
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.postgresql',
'NAME': 'myprojectdb', # PostgreSQL'de oluşturduğunuz veritabanı adı
'USER': 'myprojectuser', # PostgreSQL'de oluşturduğunuz kullanıcı adı
'PASSWORD': 'your_password', # PostgreSQL kullanıcınızın şifresi
'HOST': 'localhost', # PostgreSQL sunucusunun adresi (aynı sunucuda ise 'localhost')
'PORT': '', # PostgreSQL varsayılan portu 5432'dir, boş bırakmak varsayılanı kullanır
}
}
Açıklamalar:
* ENGINE: django.db.backends.postgresql olarak ayarlanmalıdır, bu Django’ya PostgreSQL adaptörünü kullanmasını söyler.
* NAME: PostgreSQL’de oluşturduğunuz veritabanının adıdır (örneğimizde myprojectdb).
* USER: PostgreSQL’de oluşturduğunuz kullanıcının adıdır (örneğimizde myprojectuser).
* PASSWORD: PostgreSQL kullanıcınız için belirlediğiniz şifredir (örneğimizde your_password). Bu şifreyi üretim ortamında doğrudan settings.py dosyasına yazmaktan kaçınmalısınız!
* HOST: PostgreSQL sunucusunun adresidir. Eğer PostgreSQL aynı sunucuda çalışıyorsa 'localhost' kullanın. Uzak bir sunucuda ise o sunucunun IP adresi veya alan adını girin.
* PORT: PostgreSQL’in dinlediği port numarasıdır. Varsayılan port 5432’dir. Genellikle boş bırakmak, Django’nun varsayılan portu kullanmasını sağlar. Eğer PostgreSQL farklı bir portta çalışıyorsa, bu alanı doldurun.
Dosyayı kaydedin ve kapatın.
Güvenlik Notu: Hassas Bilgileri Yönetme
Yukarıdaki örnekte veritabanı şifresini doğrudan settings.py dosyasına yazdık. Bu, geliştirme ortamları için kabul edilebilir olsa da, üretim ortamlarında ciddi bir güvenlik açığı oluşturur. Şifreler, API anahtarları gibi hassas bilgilerin versiyon kontrol sistemlerine (Git gibi) yüklenmemesi ve doğrudan kod içinde saklanmaması gerekir.
Bunun yerine, ortam değişkenleri (environment variables) veya django-environ, python-decouple gibi paketler kullanarak bu bilgileri yönetmek en iyi uygulamadır.
Örnek (django-environ ile):
Önce django-environ‘u kurun:
pip install django-environ
Ardından settings.py dosyanızın en üstüne aşağıdaki kodları ekleyin:
import environ
env = environ.Env(
# set casting, default value
DEBUG=(bool, False)
)
.env dosyasını oku
environ.Env.read_env()
... (DATABASES bölümünü aşağıdaki gibi değiştirin)
DATABASES = {
'default': env.db(),
}
Projenizin kök dizininde .env adında bir dosya oluşturun ve içine veritabanı bilgilerinizi aşağıdaki formatta yazın:
DATABASE_URL=postgres://myprojectuser:your_password@localhost:5432/myprojectdb
Bu yöntem, hassas bilgileri koddan ayırır ve daha güvenli bir şekilde yönetmenizi sağlar.
Veritabanı Geçişlerini Uygulama
settings.py dosyasını yapılandırdıktan sonra, Django’nun veritabanı şemasını PostgreSQL veritabanına uygulamamız gerekiyor.
Migrasyonları Oluşturma
Django, modellerinizde yaptığınız değişiklikleri veritabanı şemasına yansıtmak için migrasyon sistemini kullanır. İlk olarak, Django’nun dahili uygulamaları ve kendi oluşturduğunuz uygulamalar için migrasyon dosyalarını oluşturun:
python manage.py makemigrations
Bu komut, Django modellerinizdeki değişikliklere dayanarak yeni migrasyon dosyaları oluşturur. Eğer yeni bir proje oluşturduysanız, Django’nun varsayılan uygulamaları (admin, auth, sessions vb.) için migrasyon dosyalarını oluşturduğunu göreceksiniz.
Migrasyonları Uygulama
Oluşturulan migrasyon dosyalarını PostgreSQL veritabanınıza uygulamak için aşağıdaki komutu kullanın:
python manage.py migrate
Bu komut, migrasyon dosyalarında tanımlanan tüm veritabanı şema değişikliklerini PostgreSQL veritabanınıza uygular. Bu işlem sırasında, Django, myprojectdb veritabanında gerekli tabloları oluşturacak ve varsayılan verileri ekleyecektir. Eğer bu adımda bir hata alırsanız, genellikle veritabanı bağlantı bilgilerinizde (kullanıcı adı, şifre, veritabanı adı, host) bir yanlışlık vardır. Hata mesajlarını dikkatlice inceleyin.
Süper Kullanıcı Oluşturma
Django admin paneline erişmek için bir süper kullanıcı hesabı oluşturmanız gerekir:
python manage.py createsuperuser
Bu komut sizden bir kullanıcı adı, e-posta adresi (isteğe bağlı) ve şifre isteyecektir. Bu bilgilerle admin paneline giriş yapabileceksiniz.
Django Uygulamasını Test Etme
Şimdi her şeyin düzgün çalıştığından emin olmak için Django geliştirme sunucusunu başlatıp test edelim.
Geliştirme Sunucusunu Başlatma
Sanal ortamınız etkin durumdayken, Django geliştirme sunucusunu başlatın:
python manage.py runserver 0.0.0.0:8000
0.0.0.0:8000 kullanmak, sunucunun tüm ağ arayüzlerinde dinlemesini sağlar. Bu, sunucuyu uzaktan erişilebilir hale getirir (güvenlik duvarı ayarlarınız izin veriyorsa). Yalnızca yerel erişim için python manage.py runserver komutunu kullanabilirsiniz.
Tarayıcıdan Kontrol Etme
Web tarayıcınızı açın ve http://127.0.0.1:8000/admin/ adresine gidin.
Daha önce createsuperuser komutuyla oluşturduğunuz kullanıcı adı ve şifre ile giriş yapmayı deneyin. Başarılı bir şekilde giriş yapabiliyorsanız ve admin panelini görebiliyorsanız, Django uygulamanızın PostgreSQL veritabanı ile başarılı bir şekilde iletişim kurduğunu ve veritabanı şemasının doğru bir şekilde uygulandığını göstermektedir.
Ek olarak, basit bir model oluşturup veritabanına veri ekleyerek bağlantıyı daha da test edebilirsiniz:
1. myapp/models.py dosyasını açın ve basit bir model ekleyin:
# myapp/models.py
from django.db import models
class Product(models.Model):
name = models.CharField(max_length=200)
description = models.TextField()
price = models.DecimalField(max_digits=10, decimal_places=2)
created_at = models.DateTimeField(auto_now_add=True)
def __str__(self):
return self.name
2. myapp/admin.py dosyasını açın ve modeli admin panelinde görünür hale getirin:
# myapp/admin.py
from django.contrib import admin
from .models import Product
admin.site.register(Product)
3. myproject/settings.py dosyasında myapp uygulamasının INSTALLED_APPS listesinde olduğundan emin olun.
4. Migrasyonları tekrar oluşturun ve uygulayın:
python manage.py makemigrations myapp
python manage.py migrate
5. Geliştirme sunucusunu yeniden başlatın (python manage.py runserver).
6. Admin paneline (http://127.0.0.1:8000/admin/) gidin ve “Products” bölümünü bulun. Buradan yeni bir ürün eklemeyi deneyin. Eğer başarılı olursa, Django uygulamanızın PostgreSQL ile tam entegrasyonu tamamlanmış demektir.
Yaygın Sorunlar ve Çözümleri
Kurulum sırasında karşılaşabileceğiniz bazı yaygın sorunlar ve çözümleri:
psycopg2 Kurulum Hatası
Eğer pip install psycopg2-binary komutuyla bile psycopg2 kurulumunda hata alıyorsanız, genellikle sisteminizde PostgreSQL geliştirme başlıkları eksiktir. Bu başlıklar, psycopg2‘nin C uzantılarını derlemesi için gereklidir.
Çözüm: Gerekli geliştirme paketlerini kurun:
sudo apt install libpq-dev python3-dev
libpq-dev, PostgreSQL istemci kitaplıklarını ve başlık dosyalarını sağlar. python3-dev ise Python C uzantılarını derlemek için gerekli Python başlıklarını sağlar. Bu paketleri kurduktan sonra pip install psycopg2 veya pip install psycopg2-binary komutunu tekrar deneyin.
Bağlantı Hatası (OperationalError)
psycopg2.OperationalError: could not connect to server: Connection refused veya benzeri bir hata alıyorsanız, bu genellikle Django’nun PostgreSQL sunucusuna bağlanamadığı anlamına gelir.
Olası Nedenler ve Çözümleri:
* PostgreSQL Servisi Çalışmıyor: PostgreSQL servisinin çalıştığından emin olun:
sudo systemctl status postgresql
sudo systemctl start postgresql # Eğer çalışmıyorsa
* Yanlış Veritabanı Bilgileri: settings.py dosyasındaki NAME, USER, PASSWORD, HOST, PORT bilgilerini dikkatlice kontrol edin. Veritabanı adı, kullanıcı adı ve şifrenin PostgreSQL’de oluşturduğunuz bilgilerle tam olarak eşleştiğinden emin olun.
* HOST Ayarı: Eğer PostgreSQL aynı sunucuda çalışıyorsa HOST 'localhost' olmalıdır. Eğer uzak bir sunucuda ise, o sunucunun IP adresi veya alan adı olmalıdır.
* pg_hba.conf Ayarları: Özellikle uzak bir sunucudan bağlanmaya çalışıyorsanız, PostgreSQL’in bağlantı izinlerini tanımlayan pg_hba.conf dosyasını kontrol etmeniz gerekebilir. Varsayılan olarak, yerel bağlantılar genellikle peer veya md5 kimlik doğrulaması ile izin verilir. Uzak bağlantılar için genellikle md5 veya scram-sha-256 ile bir giriş eklemeniz gerekir.
Dosya genellikle /etc/postgresql/14/main/pg_hba.conf yolunda bulunur (sürüm numarası farklılık gösterebilir).
Örnek bir uzak bağlantı girişi:
host myprojectdb myprojectuser 0.0.0.0/0 md5
Bu, myprojectdb veritabanına myprojectuser kullanıcısının herhangi bir IP adresinden md5 şifrelemesi ile bağlanmasına izin verir. Değişiklik yaptıktan sonra PostgreSQL servisini yeniden başlatmayı unutmayın: sudo systemctl restart postgresql.
* Güvenlik Duvarı: Eğer Ubuntu sunucunuzda bir güvenlik duvarı (örn. UFW) etkinse, PostgreSQL’in varsayılan portu olan 5432’nin gelen bağlantılara açık olduğundan emin olun:
sudo ufw allow 5432/tcp
Karakter Kodlama Sorunları
Veritabanına Türkçe karakterler veya diğer özel karakterler eklerken sorun yaşıyorsanız, bu genellikle karakter kodlama ayarlarıyla ilgilidir.
Çözüm: PostgreSQL kullanıcınızı oluştururken veya sonrasında ALTER ROLE myprojectuser SET client_encoding TO 'utf8'; komutunu kullandığımızdan emin olun. Ayrıca, Django settings.py dosyanızda varsayılan kodlamanın UTF-8 olduğundan emin olun (Django varsayılan olarak UTF-8 kullanır, ancak kontrol etmekte fayda var).
Ek Güvenlik ve Performans İpuçları
Django uygulamanızı PostgreSQL ile üretim ortamında kullanırken göz önünde bulundurmanız gereken bazı ek güvenlik ve performans ipuçları:
Veritabanı Kullanıcı Yetkileri
Oluşturduğunuz myprojectuser kullanıcısına yalnızca ihtiyacı olan yetkileri verin. GRANT ALL PRIVILEGES yerine, yalnızca SELECT, INSERT, UPDATE, DELETE gibi belirli yetkileri vermek daha güvenlidir. Ancak Django’nun migrasyonları çalıştırması ve tabloları oluşturması için genellikle daha geniş yetkilere ihtiyacı vardır. Geliştirme ve üretim ortamları için farklı yetki setleri düşünebilirsiniz.
Ortam Değişkenleri ile Hassas Bilgileri Yönetme
Daha önce bahsedildiği gibi, veritabanı şifreleri, API anahtarları ve SECRET_KEY gibi hassas bilgileri doğrudan settings.py dosyasına yazmaktan kaçının. django-environ veya python-decouple gibi kütüphaneler kullanarak bu bilgileri ortam değişkenleri aracılığıyla yönetin. Bu, güvenlik açısından kritik bir adımdır.
Veritabanı Yedekleme
Veri kaybını önlemek için düzenli olarak PostgreSQL veritabanınızın yedeklerini alın. pg_dump komutu, PostgreSQL veritabanlarını yedeklemek için güçlü bir araçtır.
pg_dump -U myprojectuser -h localhost myprojectdb > myprojectdb_backup.sql
Bu komut, myprojectdb veritabanını myprojectuser kullanarak myprojectdb_backup.sql dosyasına yedekler. Yedekleri farklı bir konuma veya bulut depolama hizmetine kaydetmeyi unutmayın.
Performans Optimizasyonu
Uygulamanız büyüdükçe veritabanı performansını optimize etmek önemli hale gelecektir:
* İndeksler: Sıkça sorgulanan sütunlara uygun indeksler ekleyerek sorgu performansını artırın. Django’da modellerinizde db_index=True veya indexes seçeneğini kullanarak indeksler tanımlayabilirsiniz.
* Sorgu Optimizasyonu: N+1 sorgu sorunları gibi yaygın performans sorunlarından kaçınmak için select_related() ve prefetch_related() gibi Django ORM özelliklerini kullanın.
* Bağlantı Havuzu (Connection Pooling): Yüksek trafikli uygulamalar için pgBouncer gibi bir bağlantı havuzu aracı kullanarak veritabanı bağlantılarının yönetimini optimize edebilirsiniz.
* Veritabanı İzleme: PostgreSQL loglarını izleyerek veya özel izleme araçları kullanarak yavaş sorguları ve performans darboğazlarını tespit edin.
Sonuç
Bu kapsamlı rehberde, Django uygulamanızı Ubuntu 22.04 üzerinde PostgreSQL veritabanı ile nasıl entegre edeceğinizi adım adım öğrendiniz. PostgreSQL’in kurulumundan, Django projenizin ayarlarının yapılandırılmasına, migrasyonların uygulanmasına ve uygulamanın test edilmesine kadar tüm süreçleri detaylı bir şekilde ele aldık. Ayrıca, karşılaşabileceğiniz yaygın sorunlara çözümler sunduk ve üretim ortamı için önemli güvenlik ve performans ipuçlarını paylaştık.
PostgreSQL’in gücü ve esnekliği ile Django’nun hızlı geliştirme yeteneklerini birleştirerek, güvenilir, ölçeklenebilir ve performanslı web uygulamaları oluşturabilirsiniz. Artık Django projelerinizde SQLite’ın ötesine geçerek gerçek dünya üretim ortamlarına hazır, güçlü bir veritabanı çözümü kullanmaya hazırsınız. Unutmayın, iyi bir geliştirici olmak sürekli öğrenmeyi ve en iyi uygulamaları takip etmeyi gerektirir. Django ve PostgreSQL dünyasında keşfedilecek daha birçok şey var!
