Blog’a Dön

PostgreSQL Kurulumu: Linux Sunucu Rehberi

Linux sunucuya PostgreSQL kurulumu. Rol ve veritabanı oluşturma, pg_hba.conf ile erişim, uzaktan bağlantı, pg_dump ile yedekleme ve performans ayarları.

Nodesty Ekibi4 dk okumaSunucular
Koyu Nodesty arka planında PostgreSQL yazısı ile Roles, pg_hba ve pg_dump ifadeleri

PostgreSQL, açık kaynaklı, güçlü ve veri bütünlüğüne önem veren bir ilişkisel veritabanıdır. Gelişmiş SQL özellikleri, JSON desteği, coğrafi veri eklentisi PostGIS ve sağlam işlem (transaction) yönetimiyle Django, Ruby on Rails, Laravel ve Node.js projelerinde sıkça tercih edilir. Kendi sunucunuzda PostgreSQL kurulumu birkaç dakika sürer; asıl öğrenilmesi gereken, rollerin ve erişim kurallarının nasıl çalıştığıdır.

Bu rehberde Ubuntu, Debian ve AlmaLinux sunuculara PostgreSQL kurulumunu, rol ve veritabanı oluşturmayı, pg_hba.conf ile erişimi, uzaktan güvenli bağlantıyı, yedeklemeyi ve temel performans ayarlarını anlatıyoruz.

PostgreSQL ve MariaDB karşılaştırması

ÖzellikPostgreSQLMariaDB / MySQL
Güçlü olduğu alanKarmaşık sorgular, veri bütünlüğü, JSON, PostGISBasit ve hızlı okuma ağırlıklı işler
Yaygın kullanımDjango, Rails, modern Node.js ve Laravel projeleriWordPress, PHP uygulamaları, FiveM
Kullanıcı modeliRoller ve pg_hba.conf kurallarıKullanıcı ve host eşleşmesi
Varsayılan port54323306

Uygulamanız hangisini öneriyorsa onu kullanın. MariaDB kurulumunu MySQL ve MariaDB kurulumu rehberimizde anlattık.

Ubuntu ve Debian'a PostgreSQL kurulumu

Sunucunuza SSH ile bağlandıktan sonra:

sudo apt update
sudo apt install postgresql
sudo systemctl status postgresql

Dağıtımın deposu, o dağıtım sürümüyle birlikte gelen PostgreSQL sürümünü kurar. Daha yeni bir ana sürüm gerekiyorsa PostgreSQL'in resmî APT deposunu ekleyebilirsiniz.

AlmaLinux ve Rocky Linux'ta:

sudo dnf install postgresql-server
sudo postgresql-setup --initdb
sudo systemctl enable --now postgresql

Roller ve ilk bağlantı

PostgreSQL'de kullanıcılar rol olarak adlandırılır. Kurulum, postgres adında bir yönetici rolü ve aynı adlı bir işletim sistemi kullanıcısı oluşturur. Yerel bağlantılarda varsayılan olarak peer kimlik doğrulaması kullanılır: İşletim sistemi kullanıcınızın adı, rolün adıyla eşleşmelidir. Bu yüzden yönetici olarak şöyle bağlanırsınız:

sudo -u postgres psql

psql içinde sık kullanacağınız komutlar:

KomutNe yapar?
\lVeritabanlarını listeler
\duRolleri listeler
\c veritabaniBaşka bir veritabanına geçer
\dtBulunduğunuz veritabanındaki tabloları listeler
\qÇıkar

Veritabanı ve rol oluşturma

Her uygulama için ayrı bir rol ve yalnızca o role ait bir veritabanı oluşturun:

CREATE ROLE uygulama WITH LOGIN PASSWORD 'guclu-bir-sifre';
CREATE DATABASE uygulama OWNER uygulama;

Veritabanının sahibi olan rol, içinde tablo oluşturup yönetebilir; diğer veritabanlarınıza erişemez. Uygulamanızın bağlantı adresi şöyle görünür:

postgresql://uygulama:guclu-bir-sifre@127.0.0.1:5432/uygulama

Komut satırından bu rolle bağlanmak için -h 127.0.0.1 ekleyin; böylece peer yerine şifreyle, TCP üzerinden bağlanırsınız:

psql -h 127.0.0.1 -U uygulama uygulama

pg_hba.conf ile erişim kuralları

Kimin, nereden, hangi yöntemle bağlanabileceğini pg_hba.conf dosyası belirler. Ubuntu ve Debian'da dosya /etc/postgresql/<sürüm>/main/pg_hba.conf yolundadır. Her satır bir kuraldır ve yukarıdan aşağıya ilk eşleşen kural uygulanır:

# TÜR   VERİTABANI  KULLANICI  ADRES             YÖNTEM
local   all         postgres                     peer
local   all         all                          peer
host    all         all        127.0.0.1/32      scram-sha-256
host    all         all        ::1/128           scram-sha-256
  • local: Unix soketi üzerinden, sunucunun içinden yapılan bağlantılar.
  • host: TCP/IP üzerinden yapılan bağlantılar.
  • scram-sha-256: Şifreyle güvenli kimlik doğrulama. Eski md5 yöntemi yerine bunu kullanın.

Dosyayı değiştirdikten sonra ayarları yeniden yükleyin:

sudo systemctl reload postgresql

Uzaktan güvenli bağlantı

Önerilen yol SSH tünelidir. PostgreSQL yalnızca sunucunun kendisini dinlemeye devam eder ve 5432 portu internete hiç açılmaz:

ssh -L 5433:127.0.0.1:5432 kullanici@203.0.113.10

Bu komut açıkken pgAdmin ya da DBeaver ile kendi bilgisayarınızdaki 127.0.0.1:5433 adresine bağlanırsınız. İki araçta da bağlantı ayarlarında hazır bir SSH tüneli seçeneği bulunur.

Doğrudan bağlantı gerekiyorsa (örneğin başka bir sunucudaki uygulama için):

  1. postgresql.conf dosyasında listen_addresses = 'localhost' satırını listen_addresses = '*' yapın.
  2. pg_hba.conf dosyasına yalnızca o sunucunun IP adresi için bir kural ekleyin:
    host    uygulama    uygulama    198.51.100.7/32    scram-sha-256
    
  3. PostgreSQL'i yeniden başlatın ve güvenlik duvarında portu yalnızca o adrese açın:
    sudo systemctl restart postgresql
    sudo ufw allow from 198.51.100.7 to any port 5432 proto tcp
    

5432 portunu herkese açmak, sunucunuzun otomatik şifre deneme saldırılarıyla karşılaşması demektir. Port ayarlarını Port nedir? yazımızda anlattık.

Yedekleme ve geri yükleme

pg_dump, çalışan bir veritabanının tutarlı bir yedeğini veritabanını kilitlemeden alır. Sıkıştırılmış özel biçim (-Fc) hem küçük hem de esnektir:

sudo -u postgres pg_dump -Fc uygulama > uygulama-$(date +%F).dump

Geri yüklemek için:

pg_restore -h 127.0.0.1 -U uygulama -d uygulama --clean uygulama-2026-10-20.dump

Roller ve diğer sunucu geneli ayarlar pg_dump yedeğine dahil değildir; bunları pg_dumpall --globals-only ile ayrıca yedekleyin. Yedeklemeyi cron ile otomatikleştirmeyi ve yedekleri sunucudan bağımsız bir yerde tutmayı Sunucu yedekleme rehberimizde anlattık.

Temel performans ayarları

PostgreSQL'in varsayılan ayarları çok küçük sunuculara göre seçilmiştir. postgresql.conf dosyasında şu ayarlar büyük fark yaratır:

shared_buffers = 2GB
effective_cache_size = 6GB
work_mem = 16MB
maintenance_work_mem = 512MB

Örnek değerler, yalnızca veritabanı çalışan 8 GB RAM'li bir sunucu içindir:

  • shared_buffers: PostgreSQL'in kendi önbelleği. RAM'in yaklaşık dörtte biri iyi bir başlangıçtır.
  • effective_cache_size: Sorgu planlayıcısına işletim sisteminin dosya önbelleğiyle birlikte ne kadar bellek olduğunu söyler; RAM'in yarısı ile dörtte üçü arası bir değer verilir.
  • work_mem: Her sıralama ve birleştirme işlemine ayrılan bellek. Çok yüksek değerler, çok sayıda eşzamanlı sorguda belleği tüketebilir.

Değişikliklerden sonra PostgreSQL'i yeniden başlatın. Yavaş sorguları bulmak için log_min_duration_statement = 500 ayarı, 500 milisaniyeden uzun süren sorguları günlüğe yazar; sorgunun neden yavaş olduğunu görmek için EXPLAIN ANALYZE kullanın.

PostgreSQL için Nodesty sunucuları

Veritabanı performansı büyük ölçüde belleğe ve disk hızına bağlıdır. Nodesty AMD EPYC 7763 VDS paketleri yüksek RAM'iyle büyük veritabanlarını bellekte tutmak için, AMD Ryzen 9 9950X VDS paketleri ise yüksek tek çekirdek hızıyla hızlı cevap vermesi gereken uygulamalar için uygundur. Her iki pakette de NVMe disk, nShield DDoS koruması ve 7 gün saklanan ücretsiz günlük yedekleme bulunur.

Sıkça Sorulan Sorular

PostgreSQL mi MariaDB mi kullanmalıyım?

Kullandığınız yazılım hangisini öneriyorsa onu seçin. WordPress ve birçok PHP uygulaması MySQL ya da MariaDB bekler. Gelişmiş sorgular, JSON verileri, coğrafi veriler ve sıkı veri bütünlüğü gerektiren yeni projelerde PostgreSQL güçlü bir seçimdir. İkisi de açık kaynaklı ve ücretsizdir.

postgres kullanıcısının şifresi nedir?

Varsayılan kurulumda postgres kullanıcısının şifresi yoktur; sunucuda sudo -u postgres psql komutuyla, işletim sistemi kullanıcısı üzerinden (peer kimlik doğrulaması) bağlanırsınız. Uygulamalarınız için postgres yerine her zaman ayrı ve şifreli bir rol oluşturun.

Peer authentication failed hatası neden olur?

Yerel bağlantılarda PostgreSQL varsayılan olarak işletim sistemi kullanıcı adının veritabanı rolüyle aynı olmasını bekler. Farklı bir rolle bağlanıyorsanız bağlantıya -h 127.0.0.1 ekleyerek TCP üzerinden ve şifreyle bağlanın ya da pg_hba.conf dosyasındaki yerel kuralı değiştirin.

PostgreSQL sürümünü nasıl yükseltirim?

Ana sürüm yükseltmelerinde veri dosyaları yeni sürümle doğrudan uyumlu değildir. Küçük veritabanlarında eski sürümden pg_dumpall ile döküm alıp yeni sürüme yüklemek en basit yoldur; büyük veritabanlarında pg_upgrade aracı kullanılır. Her iki durumda da önce tam bir yedek alın.

Veritabanına dışarıdan nasıl güvenle bağlanırım?

En güvenli yol SSH tünelidir; 5432 portunu internete açmadan pgAdmin ya da DBeaver gibi araçlarla bağlanırsınız. Doğrudan bağlantı gerekiyorsa listen_addresses ayarını değiştirin, pg_hba.conf dosyasına yalnızca bağlanacak IP adresi için bir kural ekleyin ve güvenlik duvarında portu yalnızca o adrese açın.

PostgreSQL için ne kadar RAM gerekir?

Küçük bir uygulama birkaç yüz MB ile çalışır. Performansı en çok shared_buffers ve işletim sisteminin dosya önbelleği belirler; sık kullanılan verilerin bellekte kalması sorguları belirgin şekilde hızlandırır. Yalnızca veritabanı çalışan bir sunucuda shared_buffers için RAM'in yaklaşık dörtte biri iyi bir başlangıçtır.

Nodesty

Yazar hakkında

Nodesty Ekibi · Altyapı ve Destek

Nodesty ekibi sunucularımızı, ağımızı ve DDoS korumamızı her gün işletir ve müşteri destek taleplerini 7/24 yanıtlar. Bu rehberler o deneyimden yazılır.

İlgili yazılar

Sunucunuzu şimdi başlatın.

Nodesty'nin üstün altyapısı ile projelerinizi özgürce inşa edin ve sınır tanımadan ölçeklendirin.

                                                                                                                                                                                                                            
                                                                                                                                                                                                                            
                                                                                                                                                                                                                            
                                                                                                                             ············································                                                   
                                                ··································································································..........···························                                     
                                       ················..........................................................................................................................··············                             
                                  ·············.................::::::::::::::::::::::::::::::::::::::::::::::....................:::::::::::::::::::::::::::::::::::::::................···········                        
                             ············................:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::............·········                     
                         ············.................:::::::::::::::::::::::::::::::::::::::::::::::::::------------::::::::::::::::::::::::::::::----------------:::::::::::::::::::::..........········                  
                    ············......................::::::::::::::::::::::::::::::::::::------------------------------------------------------------------------------------:::::::::::::.........········                
                ··········.............................................::::::::::::::::::-------------==========================================-----------------------------------:::::::::::........·······               
             ········..................:.....................................::::::::::--------=======+++++++++++++++++++++++++++++++++++++=========================------------------::::::::::.......·······              
           ······.........::::::::::::::::::::................................:::::::-----=====++++xxxxxx**************************xxxxxxxxx++++++++++++++===================------------::::::::.......·······             
          ·····.......:::::::::::::::::::::::::::.............................:::::----===+++xxx****%%%%&&&&&&#############&&&&&&&%%%%%*******xxxxxxxx++++++++++++++==============----------:::::::......······             
         ····......::::::::-------------:::::::::::..........................::::---===+++xx***%%%&&&####@@@@@@@@@@@@@@@@@@@@@@@@####&&&&&%%%%*******xxxxxxxxx+++++++++++++===========--------::::::......·····             
        ····.....:::::::--------------------:::::::::.......................::::---===++xxx**%%&&&###@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@###&&&&%%%%%********xxxxxxxxxxx++++++++++++========------::::::.....······            
        ····.....:::::--------------------------::::::::....................::::---===++xx***%%&&&####@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@###&&&&&%%%%%**********xxxxxxxxxxxxx+++++++++=======------:::::.....·····            
        ····....::::::-------=============---------:::::::::................:::::---===+++xx***%%%&&&#####@@@@@@@@@@@@@@@@@@@@@@@@@#####&&&&&%%%%%%*************xxxxxxxxxxxxxx+++++++++======-----:::::....·····            
         ····....:::::-------================---------:::::::::...............:::::----===++++xxx***%%%%&&&&&&#################&&&&&&%%%%%%%*******************xxxxxxxxxxxxxxxxx++++++++======----:::::....·····            
         ·····....:::::--------=================---------::::::::::..............:::::::-----====+++++xxxxxx**************************xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx++++++++=====-----::::....·····            
          ·····.....:::::--------=================----------:::::::::::.................:::::::::-------=============++++++++++++++++++++++++++++++++++++xxxxxxxxxxxxxxxxxxxxxxx++++++++======-----::::....·····            
            ·····.....:::::::----------===========-------------::::::::::::.........................::::::::::::::::::------------------=============+++++++++++++++++++++++++++++++++=======-----::::.....·····            
              ······......:::::::---------------------------------:::::::::::::........................................:::::::::::::::-----------============+++++++++++++++++++++========------:::::.....·····             
                 ······........:::::::::---------------------------:::::::::::::::::...........................................:::::::::::::------------=============================--------::::::.....······              
                    ·········.........:::::::::::::::-------------::::::::::::::::::::::::.......................................::::::::::::::::--------------------------------------::::::::......·······                
                          ··········............::::::::::::::::::::::::::::::::::::::::::::::::::................................::::::::::::::::::::::::::-------------:::::::::::::::.........········                   
                                  ············..................:::::::::::::::::::::::::::::::::::::::::::.........................:::::::::::::::::::::::::::::::::::::................···········                        
                                             ················.............................................................................................................·················                                 
                                                           ······················................................................................···························                                                
                                                                               ·········································································