İÇİNDEKİLER
- •PostgreSQL sunucunuzu production'a hazır kuralım
- •Hangi Kurulum Yöntemini Seçmelisiniz?
- •Ubuntu 24.04’te PostgreSQL Kurulumu
- •1. PGDG deposunu ekleyin
- •2. PostgreSQL 18’i kurun
- •3. Servisi kontrol edin
- •4. Uygulama rolünü ve veritabanını oluşturun
- •5. Parola güvenliğini doğrulayın
- •Uzak Erişimi Güvenle Açın
- •Windows’ta PostgreSQL Kurulumu
- •Docker ile PostgreSQL 18
- •Türkçe Veri İçin Doğru Locale
- •Kurulum Sonrası Kontrol Listesi
- •Sık Karşılaşılan Hatalar ve Çözümleri
- •Ne Zaman Uzman Desteği Almalısınız?
- •Sıkça Sorulan Sorular
- •Kaynaklar
- •PostgreSQL sunucularınızı sağlam temeller üzerine kurun
PostgreSQL 18 kurulumu için üç yol öneriyoruz: production’daki (üretim ortamındaki) Linux sunucularda resmi PGDG paket deposu, Windows sunucularda postgresql.org’un kurulum sihirbazı, geliştirme ve test ortamlarında ise resmi Docker imajı. Hangi yolu seçerseniz seçin, kurulumun asıl önemli kısmı sonrasında gelir: uygulamaya ayrı bir rol açmak, ağ erişimini dar tutmak ve Türkçe veri için doğru locale’i ilk günden seçmek.
Bu rehberde üç kurulum yöntemini adım adım anlatıyor, ardından yeni bir sunucuyu production’a hazır hale getiren ayarlara geçiyoruz: roller ve parolalar, uzak erişim (listen_addresses ve pg_hba.conf), TLS, Türkçe sıralama kuralları ve ilk gün en sık karşılaşılan hatalar. Komutları temiz bir Ubuntu 24.04 sistemde ve resmi postgres:18 Docker imajında, PostgreSQL 18.6 ile test ettik.
PostgreSQL sunucunuzu production'a hazır kuralım
Aryasoft'un kıdemli PostgreSQL uzmanları kurulumu, kimlik doğrulama ve ağ erişimini, yedekleme ve izlemeyi sizin ortamınıza göre yapılandırır ve yazılı olarak teslim eder.
Hangi Kurulum Yöntemini Seçmelisiniz?
Dört yöntem de aynı PostgreSQL sunucusunu kurar. Aralarındaki fark, hangi sürümü alabildiğiniz ve güncellemelerin nasıl geldiğidir.
| Yöntem | PostgreSQL sürümü | Güncellemeler | En uygun kullanım |
|---|---|---|---|
| Ubuntu + PGDG deposu | 18 dahil desteklenen tüm sürümler | Ara sürümler olağan apt güncellemeleriyle gelir | Production’daki Linux sunucular (önerilen) |
| Ubuntu’nun kendi paketi | Ubuntu 24.04’te yalnızca 16 | Ubuntu güncellemeleriyle | PostgreSQL 16’nın yeterli olduğu sunucular |
| Windows kurulum sihirbazı | Desteklenen tüm sürümler | Her ara sürüm için yeni kurulum dosyası çalıştırılır | Windows sunucular ve geliştirici bilgisayarları |
| Docker (postgres:18) | Seçtiğiniz etiket | Yeni imaj çekilir, container yeniden oluşturulur | Geliştirme, CI ve test ortamları |
Hangi sürüm? PostgreSQL 18 güncel ana sürümdür (Ekim 2026 itibarıyla 18.6) ve 14 Kasım 2030’a kadar desteklenir. Uygulama üreticiniz veya kullandığınız bir eklenti daha eski bir sürüm şart koşmuyorsa yeni kurulumlara 18 ile başlayın.
Ubuntu 24.04’te PostgreSQL Kurulumu
Aşağıdaki adımlar postgresql.org’daki resmi talimatları izler. Komutları sudo yetkisine sahip bir kullanıcıyla çalıştırın.
1. PGDG deposunu ekleyin
postgresql-common paketi, PostgreSQL topluluğunun (PGDG) resmi paket deposunu ve imza anahtarını sisteme ekleyen bir script ile gelir. Script onay ister; otomatik kurulumlarda -y parametresini ekleyin.
sudo apt install -y postgresql-common
sudo /usr/share/postgresql-common/pgdg/apt.postgresql.org.sh
Bu adımdan sonra apt-cache madison postgresql komutu, Ubuntu’nun kendi 16.x paketinin yanında PGDG deposundan gelen 18.x paketlerini de listeler.
2. PostgreSQL 18’i kurun
sudo apt update
sudo apt install -y postgresql-18
Paket kurulurken 18/main adlı bir veritabanı kümesi (cluster) otomatik olarak oluşturulur ve çalıştırılır. Testimizde küme şu ayarlarla geldi:
| Ayar | Varsayılan değer |
|---|---|
| Yerel bağlantılar | peer kimlik doğrulaması (Linux kullanıcı adı = veritabanı rolü) |
| TCP bağlantıları | scram-sha-256 parola doğrulaması |
| Data checksum | Açık |
| Locale | Sunucunun ortam ayarından alınır (temiz bir sistemde C.UTF-8) |
| Yapılandırma dosyaları | /etc/postgresql/18/main/ (postgresql.conf, pg_hba.conf) |
| Veri dizini | /var/lib/postgresql/18/main |
| Sunucu logu | /var/log/postgresql/postgresql-18-main.log |
3. Servisi kontrol edin
pg_lsclusters
sudo pg_ctlcluster 18 main status
sudo pg_ctlcluster 18 main restart
sudo pg_ctlcluster 18 main reload
pg_lsclusters, makinedeki her kümenin sürümünü, portunu, durumunu ve dizinlerini gösterir. Her küme aynı zamanda postgresql@18-main adlı bir systemd servisidir; systemctl komutlarını da kullanabilirsiniz.
Hangi değişikliğin neyi gerektirdiğini bilmek, gereksiz yeniden başlatmaları önler: pg_hba.conf değişiklikleri için reload yeterlidir; listen_addresses ve port gibi ayarlar ise servisin yeniden başlatılmasını gerektirir.
4. Uygulama rolünü ve veritabanını oluşturun
Kurulumdan sonra tek veritabanı rolü postgres‘tir ve parolası yoktur. Yerel bağlantılar peer doğrulaması kullandığı için yönetim işlemlerini postgres işletim sistemi kullanıcısıyla yaparsınız:
sudo -u postgres psql -c "SELECT version();"
sudo -u postgres psql -c "CREATE ROLE appuser WITH LOGIN PASSWORD 'ChangeMe-Str0ng!';"
sudo -u postgres psql -c "CREATE DATABASE appdb OWNER appuser;"
Uygulamaları hiçbir zaman postgres rolüyle çalıştırmayın. Her uygulamaya, kendi veritabanının sahibi olan ayrı bir rol verin ve ek yetkileri yalnızca gerçekten gerektiğinde tanımlayın.
5. Parola güvenliğini doğrulayın
PostgreSQL 18 parolaları varsayılan olarak SCRAM-SHA-256 ile saklar. Eski MD5 yöntemi kaldırılma sürecindedir; geri dönmeyin. Aşağıdaki komutlar parolanın doğru biçimde saklandığını ve TCP üzerinden parolayla bağlanılabildiğini doğrular:
sudo -u postgres psql -c "SELECT rolname, left(rolpassword, 14) AS hash_prefix FROM pg_authid WHERE rolname = 'appuser';"
PGPASSWORD='ChangeMe-Str0ng!' psql -h 127.0.0.1 -U appuser -d appdb -c "SELECT current_user, current_database(), inet_server_addr();"
İlk sorgu SCRAM-SHA-256$ önekini döndürmelidir. Script’lerde parolanın komut satırında görünmemesi için PGPASSWORD yerine ~/.pgpass dosyasını kullanın.
Uzak Erişimi Güvenle Açın
Yeni bir kurulum yalnızca sunucunun kendisinden gelen bağlantıları kabul eder. Uzak erişimi iki ayar birlikte yönetir:
| Ayar | Belirlediği şey | Değişiklik sonrası |
|---|---|---|
listen_addresses |
Sunucunun hangi ağ arayüzlerinde bağlantı kabul edeceği | Yeniden başlatma |
pg_hba.conf |
Kimin, hangi adresten, hangi veritabanına, hangi yöntemle bağlanabileceği | Reload |
Aşağıdaki örnek, appdb veritabanını yalnızca 10.10.20.0/24 uygulama ağından gelen appuser rolüne ve yalnızca şifreli bağlantıyla açar:
sudo -u postgres psql -c "ALTER SYSTEM SET listen_addresses = '*';"
echo "hostssl appdb appuser 10.10.20.0/24 scram-sha-256" | sudo tee -a /etc/postgresql/18/main/pg_hba.conf
sudo pg_ctlcluster 18 main restart
sudo -u postgres psql -c "SELECT line_number, type, database, user_name, address, auth_method, error FROM pg_hba_file_rules;"
Son sorgu, sunucunun okuduğu kuralları ve hatalı satırları gösterir; her değişiklikten sonra kontrol edin. pg_hba.conf kuralları yukarıdan aşağıya okunur ve eşleşen ilk kural uygulanır. O kuralda doğrulama başarısız olursa sonraki satırlara bakılmaz.
TLS hakkında: hostssl yalnızca şifreli bağlantıları kabul eder. Ubuntu paketi, kendinden imzalı bir sertifikayla TLS’i açık getirdiği için şifreleme hemen çalışır. Testimizde izin verilen ağdaki istemci TLS 1.3 ile bağlandı; aynı istemci şifrelemeyi kapattığında “no pg_hba.conf entry” hatasıyla reddedildi. İstemcilerin sunucu kimliğini doğrulaması gerekiyorsa (sslmode=verify-full) kendinden imzalı sertifikayı kurumunuzun sertifika otoritesinden alınmış bir sertifikayla değiştirin.
Uyarı
Bağlantı hatasını aşmak için “host all all 0.0.0.0/0 trust” gibi geniş kurallar eklemeyin. Her kuralda veritabanını, rolü ve mümkün olan en dar ağı belirtin; 5432 portunu güvenlik duvarında yalnızca uygulama sunucularına açın. İnternetten erişilebilen bir veritabanı portu, parola deneme saldırılarının ilk hedefidir.
Windows’ta PostgreSQL Kurulumu
postgresql.org’un Windows sayfası, PostgreSQL sunucusunu, pgAdmin yönetim aracını ve StackBuilder’ı (eklenti ve sürücü indirme aracı) bir arada kuran bir sihirbaza yönlendirir. PostgreSQL 18 kurulum dosyası Windows Server 2025 ve 2022 üzerinde test edilmiştir.
- PostgreSQL 18 kurulum dosyasını
postgresql.org/download/windows/adresinden indirin ve yönetici olarak çalıştırın. - Kurulum dizinini onaylayın.
- Bileşenleri seçin: PostgreSQL Server, pgAdmin 4, Stack Builder ve Command Line Tools. psql ve pg_dump gibi araçları kuran Command Line Tools’u mutlaka seçili bırakın.
- Veri dizinini seçin. Sunucularda sistem diski yerine veritabanı için ayrılmış diski kullanın.
postgresyönetici rolünün parolasını belirleyin ve kurumsal parola yöneticinizde saklayın.- Başka bir PostgreSQL kurulumu yoksa varsayılan 5432 portunu koruyun.
- Locale’i seçin. Bu seçim, veritabanlarının varsayılan sıralama kurallarını belirler.
- Kurulumu tamamlayın. PostgreSQL bundan sonra bir Windows servisi olarak çalışır.
Windows’a özgü üç noktaya dikkat edin:
| Konu | Ne yapmalı? |
|---|---|
| Kullanıcı ve bilgisayar adları | Yalnızca ASCII karakter kullanın. Türkçe karakter içeren adlar kurulum hatalarına yol açabilir. |
| pg_hba.conf değişiklikleri | Windows’ta reload gerektirmeden yeni bağlantılara hemen uygulanır. |
| Güvenlik duvarı | Uzak istemciler için 5432 portuna, yalnızca uygulama sunucularına açık bir gelen kuralı tanımlayın. |
Kurulumdan sonra paketle gelen psql ile bağlanabilirsiniz:
psql "host=127.0.0.1 port=5432 dbname=postgres user=postgres"
Rol, veritabanı ve pg_hba.conf kuralları Linux’takiyle aynıdır.
Docker ile PostgreSQL 18
Geliştirme ve test ortamları için resmi imaj saniyeler içinde çalışan bir sunucu sağlar. Adlandırılmış bir volume, container silinse veya yenilense bile verinin korunmasını sağlar.
docker run -d --name pg18 \
-e POSTGRES_USER=appuser \
-e POSTGRES_PASSWORD='ChangeMe-Str0ng!' \
-e POSTGRES_DB=appdb \
-p 127.0.0.1:5432:5432 \
-v pg18data:/var/lib/postgresql \
--restart unless-stopped \
postgres:18
docker logs pg18
docker exec -it pg18 psql -U appuser -d appdb
İlk açılışta imaj kümeyi oluşturur, belirttiğiniz rolü ve veritabanını açar. Bağlanmadan önce docker logs çıktısında “PostgreSQL init process complete; ready for start up.” satırını bekleyin. -p 127.0.0.1:5432:5432 parametresi portu yalnızca host makinenin kendisine açar. Testimizde oluşturduğumuz tablo, container silinip aynı volume ile yeniden başlatıldıktan sonra yerinde duruyordu.
Not
PostgreSQL 18 imajı veriyi /var/lib/postgresql/18/docker altında tutar ve volume olarak /var/lib/postgresql dizinini tanımlar. Volume’u bu dizine bağlayın. İnternette sık görülen /var/lib/postgresql/data örnekleri PostgreSQL 17 ve öncesi içindir.
Docker imajının pratikte önemli üç davranışı vardır:
| Davranış | Sonucu |
|---|---|
| Ortam değişkenleri yalnızca ilk açılışta uygulanır | Mevcut bir volume’da POSTGRES_PASSWORD değiştirmek etkisizdir; parolayı ALTER ROLE ile değiştirin. |
| Container içi bağlantılara parola sorulmaz | docker exec çalıştırabilen herkes fiilen veritabanı yöneticisidir. |
| latest etiketi yeni ana sürüme geçer | postgres:18 gibi sabit bir etiket kullanın; yeni ana sürüm, eski veri dizini üzerinde açılamaz. |
Türkçe Veri İçin Doğru Locale
Verileriniz Türkçe ise locale kararını küme veya veritabanını oluşturmadan önce verin. Varsayılan C.UTF-8 locale’i “istanbul ılık” ifadesini “ISTANBUL ILIK” olarak büyütür ve noktalı İ harfini kaybeder. ICU tabanlı tr-TR locale’i ise doğru sonucu, yani “İSTANBUL ILIK”i döndürür ve ç, ğ, ı, ö, ş, ü harflerini Türk alfabesine göre sıralar.
Bir veritabanının locale sağlayıcısı sonradan değiştirilemez; seçimi oluşturma anında yapın:
# Ubuntu: a new cluster with an ICU Turkish default (options after -- go to initdb)
sudo pg_createcluster 18 trmain --port 5433 --start -- --locale-provider=icu --icu-locale=tr-TR --locale=C.UTF-8
# Docker: pass the same options to initdb on first start
docker run -d --name pg18tr -e POSTGRES_PASSWORD='ChangeMe-Str0ng!' \
-e POSTGRES_INITDB_ARGS="--locale-provider=icu --icu-locale=tr-TR" \
-v pg18trdata:/var/lib/postgresql postgres:18
Mevcut bir kümede, yalnızca tek bir veritabanını Türkçe kurallarla oluşturup sonucu kontrol edebilirsiniz:
CREATE DATABASE trdb TEMPLATE template0 ENCODING 'UTF8'
LOCALE_PROVIDER icu ICU_LOCALE 'tr-TR' LOCALE 'C.UTF-8';
-- connect to trdb, then:
SELECT datname, datlocprovider, datlocale FROM pg_database WHERE datname = 'trdb';
SELECT upper('istanbul ılık') AS upper_tr, lower('İSTANBUL IŞIK') AS lower_tr;
İpucu
Yeni kurulmuş ve henüz veri yüklenmemiş bir Ubuntu sunucusunda ana kümeyi Türkçe locale ile yeniden oluşturmak en temiz yoldur: önce sudo pg_dropcluster 18 main –stop, ardından yukarıdaki ICU seçenekleriyle pg_createcluster 18 main. Veri bulunan bir kümede ise yeni bir ICU veritabanı oluşturup veriyi dump ve restore ile taşıyın.
Kurulum Sonrası Kontrol Listesi
| Kontrol | Beklenen sonuç |
|---|---|
| Sürüm | SELECT version(); 18.6 veya daha yeni bir sürüm döndürüyor; ara sürüm güncellemeleri için bir takvim belirlenmiş. |
| Kimlik doğrulama | SHOW password_encryption; scram-sha-256 döndürüyor; MD5 parola kullanan rol yok. |
| Ağ | Her uzak kural belirli bir veritabanı, rol ve dar bir ağ tanımlıyor; pg_hba_file_rules hata göstermiyor. |
| TLS | Uzak kurallar hostssl kullanıyor; gerekiyorsa kurumsal sertifika planlanmış. |
| Locale | Türkçe veri için ICU tr-TR seçilmiş. |
| Data checksum | SHOW data_checksums; on döndürüyor. |
| Bellek ve bağlantılar | Varsayılan değerler (shared_buffers 128 MB, max_connections 100) donanıma ve iş yüküne göre yeniden boyutlandırılmış. |
| Yedekleme | Yedekler zamanlanmış, kopyalar sunucu dışında tutuluyor ve bir geri yükleme denenmiş. |
| İzleme | Sunucu logu, disk alanı, bağlantı sayısı ve yedekleme durumu ilk günden izleniyor. |
Sık Karşılaşılan Hatalar ve Çözümleri
Aşağıdaki hataların tamamıyla bu rehberi hazırlarken yaptığımız testlerde karşılaştık.
| Hata mesajı | Neden | Çözüm |
|---|---|---|
FATAL: Peer authentication failed for user "appuser" |
psql yerel soket üzerinden bağlandı ve Linux kullanıcı adınız rol adından farklı. | TCP ile parolayla bağlanın (psql -h 127.0.0.1 -U appuser -d appdb) veya yönetim için sudo -u postgres psql kullanın. |
FATAL: password authentication failed for user "appuser" |
Parola yanlış veya role henüz parola atanmamış. | ALTER ROLE appuser WITH PASSWORD '...'; ile parolayı belirleyin. |
FATAL: no pg_hba.conf entry for host ... |
İstemci adresi, veritabanı ve kullanıcıyla eşleşen kural yok veya kural hostssl ve istemci şifreleme kullanmadı. | Kuralı ekleyin veya düzeltin, reload edin; hostssl kurallarında sslmode=require ile bağlanın. |
Connection refused |
Sunucu durmuş veya yalnızca localhost’u dinliyor. | pg_lsclusters ile durumu kontrol edin; listen_addresses ayarlayıp yeniden başlatın; güvenlik duvarını kontrol edin. |
connection to server on socket ... No such file or directory |
Bu portta çalışan yerel bir sunucu yok. | Kümeyi sudo pg_ctlcluster 18 main start ile başlatın; başlamazsa sunucu logunu okuyun. |
FATAL: database "appdb" does not exist (Docker) |
Container ilk kurulum bitmeden durduruldu veya volume’da zaten bir küme vardı. | İlk açılışın tamamlanmasını bekleyin; yeni kurulumda volume’u silip yeniden başlatın, aksi halde veritabanını CREATE DATABASE ile oluşturun. |
Ne Zaman Uzman Desteği Almalısınız?
Bir test sunucusu birkaç saatlik bir iştir. Aşağıdaki durumlarda ise deneyimli bir ekiple çalışmanızı öneririz:
- Sunucu production verisi tutacak ve tanımlı bir yedekleme ve geri dönüş (point-in-time recovery) planı gerekiyor.
- Yüksek erişilebilirlik gerekiyor: bekleme sunucuları, otomatik failover veya ikinci bir lokasyon.
- Uygulamalar farklı ağlardan veya bir bağlantı havuzu üzerinden bağlanıyor ve erişimin güvenlik denetiminden geçmesi gerekiyor.
- İş yükü, bellek, checkpoint ve autovacuum ayarlarının performansı doğrudan belirlediği büyüklükte.
- Yeni sunucu SQL Server’ın, Oracle’ın veya desteği biten bir PostgreSQL sürümünün yerini alıyor.
Aryasoft’un yalnızca kıdemli uzmanlardan oluşan ekibi, SQL Server için sunduğu tüm hizmetleri PostgreSQL için de sunuyor: kurulum ve sıkılaştırmadan (hardening) performans iyileştirmeye ve sürüm yükseltmeye kadar. PostgreSQL hizmetlerimize göz atabilir, yeni sunucunuzun 8×5 veya 7×24 bakım-destek kapsamında uzaktan veritabanı yöneticisi (Remote DBA) tarafından takip edilmesini istiyorsanız yönetilen veritabanı hizmetlerimizi inceleyebilirsiniz.
Sıkça Sorulan Sorular
Kaynaklar
Bu rehberdeki teknik bilgiler Ekim ve Kasım 2026’da aşağıdaki resmi dokümantasyonla karşılaştırıldı. Sürümler ve paket ayrıntıları değişebilir; kurulumdan önce ilgili sayfadan teyit edin.
- PostgreSQL: Linux indirmeleri (Ubuntu)
- PostgreSQL Wiki: Apt deposu
- PostgreSQL: Windows kurulum dosyaları
- PostgreSQL: Versioning Policy
- PostgreSQL 18 sürüm notları
- PostgreSQL 18 dokümantasyonu: The pg_hba.conf File
- PostgreSQL 18 dokümantasyonu: Peer Authentication
- PostgreSQL 18 dokümantasyonu: Password Authentication
- PostgreSQL 18 dokümantasyonu: Connections and Authentication
- PostgreSQL 18 dokümantasyonu: Secure TCP/IP Connections with SSL
- PostgreSQL 18 dokümantasyonu: ALTER SYSTEM
- PostgreSQL 18 dokümantasyonu: CREATE DATABASE
- PostgreSQL 18 dokümantasyonu: initdb
- PostgreSQL 18 dokümantasyonu: Collation Support
- PostgreSQL 18 dokümantasyonu: Authentication Problems
- Ubuntu Server dokümantasyonu: Install and configure PostgreSQL
- Docker Hub: postgres resmi imajı
PostgreSQL Kurulumu
PostgreSQL sunucularınızı sağlam temeller üzerine kurun
Aryasoft’un kıdemli PostgreSQL ekibiyle görüşün. Sunucularınızı kurar ve sıkılaştırırız, yedekleme ve izlemeyi devreye alırız, verilen her kararı yazılı olarak belgeleriz.