PostgreSQL Sunucu Kurulumu, Güvenlik ve Performans Rehberi
PostgreSQL Sunucu Kurulumu, Güvenlik ve Performans Rehberi
Son Güncelleme: Haziran 2026
PostgreSQL sunucu kurulumu, güvenilir veritabanı altyapısı oluşturmak isteyen işletmeler, yazılım ekipleri ve sistem yöneticileri için kritik bir konudur. Bu rehberde PostgreSQL güvenliği, performans ayarları, yedekleme mantığı, bağlantı yönetimi ve üretim ortamı için önerilen yapılandırmaları adım adım ele alacağız.
İçindekiler
- PostgreSQL Nedir?
- PostgreSQL İçin Sunucu Hazırlığı
- PostgreSQL Kurulum Adımları
- Temel PostgreSQL Yapılandırması
- PostgreSQL Güvenlik Ayarları
- Performans Optimizasyonu
- Yedekleme ve Geri Yükleme
- İzleme ve Bakım Önerileri
- Pratik Kullanım Senaryoları
- Sıkça Sorulan Sorular
- Sonuç
PostgreSQL Nedir?
PostgreSQL, açık kaynaklı, ilişkisel veritabanı yönetim sistemi (Relational Database Management System) olarak kullanılan güçlü bir veritabanı sunucusudur. SQL standartlarına uyumluluğu, gelişmiş veri tipleri, işlem güvenliği ve genişletilebilir mimarisi sayesinde web uygulamaları, kurumsal yazılımlar, finans sistemleri, raporlama altyapıları ve mikroservis mimarilerinde sıkça tercih edilir.
PostgreSQL yalnızca klasik tablo ve satır yapısı sunmaz; aynı zamanda JSONB, tam metin arama (full-text search), gelişmiş indeksleme, prosedürel fonksiyonlar ve coğrafi veri desteği gibi modern özelliklerle de öne çıkar. Bu nedenle küçük bir blog sisteminden yüksek trafikli SaaS uygulamalarına kadar geniş bir kullanım alanına sahiptir.
PostgreSQL’in Öne Çıkan Avantajları
- Açık kaynak: Lisans maliyeti olmadan güçlü bir veritabanı altyapısı kurmanıza olanak tanır.
- ACID uyumluluğu: Veri bütünlüğünü koruyan güvenilir işlem (transaction) mantığı sunar.
- Geniş veri tipi desteği: JSON, UUID, array, timestamp ve özel veri tipleriyle esnek yapı sağlar.
- Güçlü indeksleme: B-tree, GIN, GiST ve BRIN gibi indeks türleriyle farklı sorgu ihtiyaçlarına yanıt verir.
- Topluluk ve ekosistem: Geniş kullanıcı topluluğu, araçlar ve uzantılar sayesinde uzun vadeli sürdürülebilirlik sağlar.
PostgreSQL İçin Sunucu Hazırlığı
PostgreSQL kurulumu yapmadan önce kullanılacak sunucunun işlemci, bellek, disk ve ağ açısından doğru planlanması gerekir. Veritabanı sunucularında darboğaz genellikle disk girişi/çıkışı (I/O), bellek yetersizliği veya yanlış bağlantı yönetiminden kaynaklanır. Bu nedenle kurulum öncesi kapasite planlaması yapmak, ileride yaşanabilecek performans sorunlarını azaltır.
Donanım ve Kaynak Önerileri
| Kullanım Tipi | CPU | RAM | Disk | Öneri |
|---|---|---|---|---|
| Küçük web sitesi | 2 vCPU | 2-4 GB | SSD veya NVMe | Tek uygulama ve düşük sorgu trafiği için yeterlidir. |
| Orta ölçekli uygulama | 4-8 vCPU | 8-16 GB | NVMe | Cache, indeks ve bağlantı havuzu planlanmalıdır. |
| Yüksek trafikli servis | 8+ vCPU | 32 GB+ | NVMe RAID | Replikasyon, yedekleme ve izleme ayrı planlanmalıdır. |
PostgreSQL için disk seçimi özellikle önemlidir. NVMe diskler, yüksek IOPS (Input/Output Operations Per Second - saniyedeki giriş/çıkış işlemi) değerleri sayesinde veritabanı sorgularında ciddi avantaj sağlar. Eğer veritabanı dosyaları, loglar ve yedekler aynı disk üzerinde tutuluyorsa yoğun yazma işlemlerinde performans düşebilir.
Sunucu Seçimi
Test ve geliştirme ortamları için Sanal Sunucu tercih edilebilir. Daha yüksek performans, fiziksel kaynak izolasyonu ve yoğun veritabanı trafiği gereken projelerde ise Kiralık Sunucu daha uygun olabilir. Türkiye lokasyonlu kullanıcı kitlesine hizmet veren uygulamalar için Türkiye VDS Sunucu veya Türkiye Kiralık Sunucu seçenekleri düşük gecikme süresi açısından avantaj sağlar.
PostgreSQL Kurulum Adımları
PostgreSQL kurulumu Linux dağıtımlarında paket yöneticisi üzerinden kolayca yapılabilir. Aşağıdaki örnekler Ubuntu ve Debian tabanlı sistemler için hazırlanmıştır. Kurulumdan önce sistem paketlerini güncellemek ve güvenlik yamalarını uygulamak önerilir.
Sistem Paketlerini Güncelleme
sudo apt update
sudo apt upgrade -y
PostgreSQL Kurulumu
sudo apt install postgresql postgresql-contrib -y
postgresql-contrib paketi, PostgreSQL ile birlikte kullanılan ek araçları ve uzantıları içerir. Kurulum tamamlandıktan sonra servis durumunu kontrol edebilirsiniz.
sudo systemctl status postgresql
Servisin sistem açılışında otomatik başlaması için aşağıdaki komut kullanılabilir:
sudo systemctl enable postgresql
PostgreSQL Komut Satırına Giriş
PostgreSQL varsayılan olarak postgres sistem kullanıcısı ile yönetilir. Yönetim konsoluna geçmek için şu komutu kullanabilirsiniz:
sudo -u postgres psql
Çıkış yapmak için \q komutu yeterlidir.
Temel PostgreSQL Yapılandırması
PostgreSQL’in ana yapılandırma dosyaları genellikle /etc/postgresql/ dizini altında sürüm numarasına göre konumlanır. En sık düzenlenen iki dosya postgresql.conf ve pg_hba.conf dosyalarıdır. Bu dosyalar, bağlantı adresleri, port, bellek kullanımı, kimlik doğrulama ve erişim kurallarını belirler.
Veritabanı ve Kullanıcı Oluşturma
Bir uygulama için ayrı kullanıcı ve ayrı veritabanı oluşturmak güvenlik açısından önemlidir. Her uygulamanın yalnızca ihtiyaç duyduğu veritabanına erişmesi, olası bir ihlal durumunda zararı sınırlar.
sudo -u postgres psql
CREATE USER app_user WITH PASSWORD 'GucluParolaKullanin';
CREATE DATABASE app_db OWNER app_user;
GRANT ALL PRIVILEGES ON DATABASE app_db TO app_user;
Parola belirlerken tahmin edilebilir ifadeler, firma adı, alan adı veya kısa kelimeler kullanılmamalıdır. Üretim ortamlarında parola yönetimi için gizli bilgi yönetimi (secret management) süreçleri tercih edilmelidir.
Dinleme Adresini Ayarlama
Varsayılan kurulumda PostgreSQL genellikle yalnızca yerel bağlantıları kabul eder. Uzak bağlantı gerekiyorsa postgresql.conf içinde listen_addresses değeri düzenlenir.
sudo nano /etc/postgresql/15/main/postgresql.conf
listen_addresses = 'localhost'
Eğer yalnızca belirli bir özel ağ IP adresinden bağlantı alınacaksa * yerine ilgili IP adresini yazmak daha güvenlidir. Örneğin uygulama sunucusu ile veritabanı sunucusu aynı özel ağdaysa yalnızca özel ağ arayüzünü dinlemek saldırı yüzeyini azaltır.
PostgreSQL Güvenlik Ayarları
PostgreSQL güvenliği, yalnızca güçlü parola kullanmaktan ibaret değildir. Ağ erişimi, kullanıcı yetkileri, şifreleme, loglama, yedek güvenliği ve güncelleme yönetimi birlikte ele alınmalıdır. Veritabanı, çoğu uygulamanın en kritik bileşeni olduğu için güvenlik katmanlı şekilde tasarlanmalıdır.
pg_hba.conf ile Erişim Kontrolü
pg_hba.conf dosyası, hangi IP adresinin hangi kullanıcıyla hangi veritabanına bağlanabileceğini belirler. Bu dosyada gereksiz geniş IP aralıkları tanımlamak risklidir.
sudo nano /etc/postgresql/15/main/pg_hba.conf
Örnek güvenli erişim kuralı:
host app_db app_user 10.10.10.20/32 scram-sha-256
Bu örnekte yalnızca 10.10.10.20 IP adresine sahip uygulama sunucusu, app_user kullanıcısıyla app_db veritabanına bağlanabilir. scram-sha-256, parola kimlik doğrulaması için daha güvenli bir yöntemdir.
Güvenlik Duvarı Kuralları
PostgreSQL varsayılan olarak 5432 portunu kullanır. Bu portu internete tamamen açmak yerine yalnızca uygulama sunucusunun IP adresine izin vermek gerekir.
sudo ufw allow from 10.10.10.20 to any port 5432 proto tcp
sudo ufw deny 5432/tcp
sudo ufw status
Yetki Prensibi
- En az yetki: Uygulama kullanıcısına yalnızca ihtiyaç duyduğu veritabanı ve tablolar için izin verin.
- Yönetici hesabı ayrımı: Günlük uygulama bağlantılarında süper kullanıcı hesabı kullanmayın.
- Parola rotasyonu: Belirli aralıklarla parolaları değiştirin ve eski erişimleri kapatın.
- Log takibi: Başarısız bağlantı denemelerini ve şüpheli sorguları düzenli izleyin.
SSL ile Şifreli Bağlantı
Uygulama sunucusu ile PostgreSQL farklı makinelerde çalışıyorsa bağlantıların SSL/TLS ile şifrelenmesi önerilir. Böylece ağ üzerinden geçen kullanıcı adı, parola ve sorgu içerikleri korunur. Sertifika yönetimi için kurumsal yapılarda özel sertifika otoritesi kullanılabilir; web servisleri için ayrıca SSL Sertifikası hizmetlerinden yararlanılabilir.
Performans Optimizasyonu
PostgreSQL performansı yalnızca sunucu kaynaklarına bağlı değildir. Sorgu tasarımı, indeks kullanımı, bellek ayarları, bağlantı sayısı, disk yapısı ve bakım görevleri birlikte değerlendirilmelidir. Yanlış yapılandırılmış güçlü bir sunucu, doğru ayarlanmış daha küçük bir sunucudan daha düşük performans verebilir.
Temel Performans Parametreleri
| Parametre | Açıklama | Dikkat Edilmesi Gerekenler |
|---|---|---|
shared_buffers |
PostgreSQL’in veri önbelleği için kullandığı bellek alanıdır. | Genellikle toplam RAM’in belirli bir kısmı ayrılır; aşırı artırmak her zaman iyi değildir. |
work_mem |
Sıralama ve hash işlemleri için bağlantı başına kullanılan bellek miktarıdır. | Çok yüksek ayarlanırsa eş zamanlı bağlantılarda RAM tüketimi artabilir. |
maintenance_work_mem |
VACUUM, indeks oluşturma ve bakım işlemleri için kullanılan bellektir. | Bakım işlemleri yoğun sistemlerde dikkatli artırılmalıdır. |
max_connections |
Aynı anda açılabilecek bağlantı sayısını belirler. | Yüksek bağlantı sayısı yerine bağlantı havuzu kullanmak daha verimlidir. |
Örnek Performans Ayarı
Aşağıdaki değerler yalnızca örnek niteliğindedir. Üretim ortamında uygulama trafiği, RAM miktarı, sorgu türleri ve eş zamanlı kullanıcı sayısı dikkate alınarak test yapılmalıdır.
shared_buffers = 2GB
work_mem = 16MB
maintenance_work_mem = 512MB
max_connections = 100
effective_cache_size = 6GB
İndeks Kullanımı
Sık sorgulanan sütunlarda indeks kullanmak sorgu süresini ciddi şekilde azaltabilir. Ancak her sütuna indeks eklemek doğru değildir; çünkü indeksler yazma işlemlerinde ek maliyet oluşturur. Özellikle WHERE, JOIN, ORDER BY ve GROUP BY kullanılan alanlar analiz edilmelidir.
CREATE INDEX idx_orders_user_id ON orders(user_id);
Sorgu planını incelemek için EXPLAIN ANALYZE komutu kullanılabilir:
EXPLAIN ANALYZE SELECT * FROM orders WHERE user_id = 42;
Bağlantı Havuzu Kullanımı
PostgreSQL’de çok sayıda doğrudan bağlantı açmak bellek tüketimini artırabilir. Yoğun trafikli uygulamalarda bağlantı havuzu (connection pooling) için PgBouncer gibi araçlar kullanılabilir. Bu yaklaşım, uygulamanın çok sayıda kısa süreli bağlantı açtığı senaryolarda kaynak kullanımını azaltır.
Yedekleme ve Geri Yükleme
Veritabanı yönetiminde en kritik başlıklardan biri yedekleme stratejisidir. Yedek alınmayan veya geri yükleme testi yapılmayan sistemlerde veri kaybı riski yüksektir. Yedekleme yalnızca dosyayı oluşturmak değil; saklamak, şifrelemek, doğrulamak ve düzenli olarak geri dönüş testi yapmak anlamına gelir.
pg_dump ile Mantıksal Yedek
Küçük ve orta ölçekli veritabanlarında pg_dump ile mantıksal yedek almak pratik bir yöntemdir.
pg_dump -U app_user -h localhost -F c -b -v -f app_db.backup app_db
Geri yükleme için pg_restore kullanılabilir:
pg_restore -U app_user -h localhost -d app_db -v app_db.backup
Otomatik Yedekleme Örneği
Aşağıdaki basit betik, günlük yedekleme için kullanılabilir. Üretim ortamlarında yedeklerin farklı bir sunucuya veya güvenli depolama alanına aktarılması önerilir.
#!/bin/bash
DATE=$(date +%F)
BACKUP_DIR="/backup/postgresql"
DB_NAME="app_db"
mkdir -p $BACKUP_DIR
pg_dump -U app_user -F c -b -f $BACKUP_DIR/$DB_NAME-$DATE.backup $DB_NAME
find $BACKUP_DIR -type f -mtime +14 -delete
Yedeklerinizi merkezi ve güvenli bir yapıda saklamak için Yedekleme Hizmeti seçeneklerini değerlendirebilirsiniz. Özellikle e-ticaret, finans, CRM ve ERP sistemlerinde yedeklerin farklı lokasyonda tutulması iş sürekliliği açısından önemlidir.
İzleme ve Bakım Önerileri
PostgreSQL sunucusunun sağlıklı çalışması için düzenli izleme ve bakım yapılmalıdır. CPU, RAM, disk kullanımı, bağlantı sayısı, yavaş sorgular, kilitlenmeler ve disk doluluk oranı takip edilmelidir. İzleme yapılmayan sistemlerde performans sorunları genellikle kullanıcı şikayetleriyle fark edilir.
Yavaş Sorguları İzleme
postgresql.conf içinde yavaş sorguları loglamak için şu ayarlar kullanılabilir:
log_min_duration_statement = 1000
log_connections = on
log_disconnections = on
Bu örnekte 1000 milisaniyeden uzun süren sorgular loglanır. Böylece indeks ihtiyacı olan, hatalı yazılmış veya gereksiz büyük veri döndüren sorgular tespit edilebilir.
VACUUM ve ANALYZE
PostgreSQL’de silinen veya güncellenen satırlar fiziksel olarak hemen temizlenmez. VACUUM işlemi, gereksiz alanları temizlemeye yardımcı olur. ANALYZE ise sorgu planlayıcısının daha doğru karar vermesi için tablo istatistiklerini günceller.
VACUUM ANALYZE;
Çoğu sistemde autovacuum varsayılan olarak aktiftir; ancak yoğun yazma yapılan veritabanlarında ayarların kontrol edilmesi gerekir.
Disk Doluluğu Kontrolü
df -h
du -sh /var/lib/postgresql/
Diskin tamamen dolması, PostgreSQL’in yazma işlemlerini durdurmasına ve servis kesintisine yol açabilir. Bu nedenle disk kullanım oranı için alarm mekanizması kurulmalıdır.
Pratik Kullanım Senaryoları
PostgreSQL farklı mimarilerde farklı şekillerde konumlandırılabilir. Doğru mimari seçimi, uygulamanın trafiğine, veri büyüklüğüne ve güvenlik gereksinimlerine bağlıdır.
Senaryo 1: Tek Sunucuda Web Uygulaması ve PostgreSQL
Küçük projelerde web uygulaması ve PostgreSQL aynı sunucuda çalışabilir. Bu yapı yönetim açısından kolaydır fakat kaynak paylaşımı nedeniyle trafik arttıkça darboğaz oluşabilir. Linux Hosting veya küçük ölçekli sanal sunucu çözümleri başlangıç için yeterli olabilir.
Senaryo 2: Uygulama ve Veritabanı Ayrı Sunucularda
Orta ve büyük ölçekli projelerde uygulama sunucusu ile veritabanı sunucusunu ayırmak daha sağlıklıdır. Böylece veritabanı için ayrılmış CPU, RAM ve disk kaynakları daha verimli kullanılır. Bu yapıda PostgreSQL portu yalnızca uygulama sunucusuna açılmalı, genel internete kapalı tutulmalıdır.
Senaryo 3: Yüksek Trafikli SaaS Altyapısı
SaaS uygulamalarında bağlantı havuzu, read replica (okuma kopyası), düzenli yedekleme ve sorgu izleme birlikte planlanmalıdır. Veritabanı büyüdükçe tablo bölümleme (partitioning), arşivleme ve indeks stratejileri önem kazanır. Bu tür yapılarda Bulut Sunucu veya kaynakları ayrılmış kiralık sunucu mimarileri daha esnek bir altyapı sunabilir.
Senaryo 4: Avrupa Lokasyonlu Uygulamalar
Kullanıcı kitlesi Avrupa’da bulunan uygulamalarda veritabanı ve uygulama sunucusunun aynı bölgeye yakın konumlandırılması gecikme süresini azaltabilir. Bu tür projeler için Almanya VDS Sunucu veya Fransa VDS Sunucu seçenekleri değerlendirilebilir.
Sıkça Sorulan Sorular
PostgreSQL üretim ortamında güvenli midir?
Evet. PostgreSQL doğru yapılandırıldığında üretim ortamları için güvenli ve kararlı bir veritabanı sunucusudur. Ancak pg_hba.conf erişim kuralları, güçlü kimlik doğrulama, güvenlik duvarı, düzenli güncelleme ve yedekleme süreçleri mutlaka uygulanmalıdır.
PostgreSQL için ne kadar RAM gerekir?
Bu değer uygulamanın sorgu yoğunluğuna, veri boyutuna ve eş zamanlı bağlantı sayısına göre değişir. Küçük uygulamalar için 2-4 GB RAM yeterli olabilirken, orta ve büyük ölçekli sistemlerde 8 GB, 16 GB veya daha fazla RAM gerekebilir.
PostgreSQL portu internete açılmalı mı?
Genel olarak hayır. PostgreSQL’in 5432 portu yalnızca ihtiyaç duyan uygulama sunucularına açılmalıdır. Genel internete açık veritabanı portları brute force (kaba kuvvet) saldırıları ve yetkisiz erişim riskini artırır.
pg_dump yedeği yeterli midir?
Küçük ve orta ölçekli sistemlerde pg_dump pratik bir yedekleme yöntemidir. Ancak büyük veritabanlarında fiziksel yedekleme, WAL arşivleme ve noktasal geri dönüş (point-in-time recovery) gibi daha gelişmiş stratejiler gerekebilir.
PostgreSQL performansı nasıl artırılır?
Performans için doğru indeksleme, sorgu optimizasyonu, yeterli RAM, hızlı disk, bağlantı havuzu, düzenli VACUUM ANALYZE işlemleri ve yavaş sorgu loglarının incelenmesi gerekir. Tek bir ayar tüm performans sorunlarını çözmez; bütüncül analiz yapılmalıdır.
PostgreSQL ile MySQL arasında hangisi seçilmeli?
Seçim uygulamanın ihtiyaçlarına bağlıdır. Gelişmiş veri tipleri, karmaşık sorgular, JSONB ve güçlü işlem bütünlüğü gereken projelerde PostgreSQL avantajlıdır. Daha basit web uygulamalarında farklı veritabanları da yeterli olabilir.
Sonuç
PostgreSQL sunucu kurulumu, yalnızca paketi yüklemekten ibaret değildir; doğru sunucu seçimi, güvenli erişim kuralları, performans ayarları, yedekleme planı ve düzenli izleme süreçleri birlikte düşünülmelidir. Üretim ortamlarında veritabanı altyapısının kararlı çalışması, uygulama performansı ve iş sürekliliği açısından doğrudan önem taşır.
PostgreSQL altyapınızı güvenli, hızlı ve ölçeklenebilir şekilde konumlandırmak için Corelux’un Sanal Sunucu, Kiralık Sunucu, Bulut Sunucu ve Yedekleme Hizmeti çözümlerini değerlendirebilirsiniz. Doğru altyapı üzerinde yapılandırılmış bir PostgreSQL sunucusu, hem bugünkü uygulama ihtiyaçlarını karşılar hem de gelecekteki büyüme hedefleri için sağlam bir temel oluşturur.
Yazar
Boran BAR