Bir uygulama büyüdükçe veritabanını Droplet üzerinde elle yönetmek zamanla külfetli bir hale gelir. Yedekleme almak, güvenlik yamalarını takip etmek, failover senaryolarını kurgulamak, her biri ayrı bir uzmanlık alanı gerektiriyor. DigitalOcean’ın Managed Database ürünü bu işlerin büyük bölümünü üstlenip geliştiriciyi asıl işine, yani uygulama geliştirmeye odaklanmaya bırakıyor. Bu yazıda DigitalOcean üzerinde bir PostgreSQL veritabanı kümesinin nasıl oluşturulduğunu, bağlantı bilgilerinin nereden alındığını ve bir Node.js backend’ine nasıl bağlanıldığını adım adım anlatıyorum.
Managed Database Nedir, Kendi Kurduğun Veritabanından Farkı Ne
Bir Droplet üzerine kendi elinle PostgreSQL kurduğunda güvenlik güncellemeleri, yedekleme planı, disk alanı takibi, replikasyon gibi konuların tamamı kendi sorumluluğunda kalır. Managed Database ile bu işlerin tamamı DigitalOcean tarafından otomatik olarak yürütülüyor. Günlük yedekler alınıyor, güvenlik yamaları uygulanıyor, standby node’lar sayesinde bir sorun durumunda otomatik failover devreye giriyor.
Bu rahatlığın bir bedeli var elbette, kendi Droplet’ine kurduğun bir veritabanına kıyasla Managed Database aylık olarak daha yüksek bir maliyet çıkarabilir. Küçük bir kişisel proje için Droplet üzerine kurulum daha ekonomik olabilirken, üretim ortamında çalışan ve veri kaybını göze alamayacağın bir proje için Managed Database sunduğu güvenlik ve otomasyon nedeniyle genellikle daha mantıklı bir tercih oluyor.
Adım 1: Veritabanı Kümesi Oluşturma
DigitalOcean panelinde sol menüden Databases sekmesine girip Create Database Cluster butonuna tıklanır. Karşına birkaç temel ayarın seçilmesi gereken bir ekran çıkar.
Veritabanı motoru: PostgreSQL, MySQL, Valkey (Redis uyumlu), MongoDB, Kafka ve OpenSearch seçenekleri arasından PostgreSQL seçilir. PostgreSQL, JSONB desteği, gelişmiş tam metin arama özellikleri ve geniş uzantı ekosistemi nedeniyle DigitalOcean üzerinde en çok tercih edilen veritabanı motoru.
Sürüm seçimi: Genellikle en güncel kararlı sürüm önerilen seçenek olarak gelir, özel bir uyumluluk gereksinimi yoksa varsayılan sürümle devam edilebilir.
Küme boyutu: Küçük ve orta ölçekli projeler için giriş seviyesindeki node boyutu genellikle yeterli oluyor. Trafik arttıkça daha güçlü bir node boyutuna panel üzerinden kolayca geçilebiliyor.
Bölge seçimi: Veritabanının, bağlanacak uygulamayla aynı bölgede olması önerilir. Aynı bölgede olması hem gecikmeyi azaltıyor hem de veri transferi maliyetlerini düşürüyor.
Ayarlar tamamlandıktan sonra Create Database Cluster butonuna tıklanarak süreç başlatılır. Kümenin hazırlanması genellikle birkaç dakika sürüyor.
Adım 2: Bağlantı Bilgilerinin Alınması
Küme hazır olduğunda panelin Overview sekmesinde bağlantı bilgileri görünür. Burada host adresi, port numarası, veritabanı adı, kullanıcı adı ve şifre yer alıyor. DigitalOcean ayrıca doğrudan kopyalanabilecek bir bağlantı dizesi (connection string) de sunuyor, bu dize genellikle şu formatta oluyor:
postgresql://doadmin:sifre@host:25060/defaultdb?sslmode=require
Bu bilgilerin bir ortam değişkeni (environment variable) dosyasında saklanması, kod içine doğrudan yazılmaması önemli bir güvenlik pratiği. Bir .env dosyası içinde şu şekilde tutulabilir:
DB_HOST=host_adresi DB_PORT=25060 DB_NAME=defaultdb DB_USER=doadmin DB_PASSWORD=sifre
Adım 3: Trusted Sources ile Erişim Kısıtlama
DigitalOcean Managed Database’ler varsayılan olarak dış dünyaya kapalı geliyor, sadece izin verilen kaynaklardan bağlantı kabul ediyor. Bu, güvenlik açısından oldukça değerli bir varsayılan davranış. Veritabanına hangi Droplet’lerin ya da App Platform uygulamalarının erişebileceğini belirlemek için Trusted Sources bölümüne gidilir ve Add Trusted Source seçeneğiyle ilgili kaynak eklenir.
Bir Droplet üzerinden bağlanılacaksa, o Droplet’in listeden seçilmesi yeterli oluyor. Bir App Platform uygulaması üzerinden bağlanılacaksa, ilgili uygulama da aynı şekilde güvenilir kaynaklar listesine eklenebiliyor.
Adım 4: Node.js Backend’ine Bağlanma
Bir Node.js uygulamasından PostgreSQL’e bağlanmak için pg paketi kullanılabilir. Öncelikle paket kurulur:
npm install pg dotenv
Ardından bağlantı şu şekilde kurulabilir:
const { Pool } = require('pg');
require('dotenv').config();
const pool = new Pool({
user: process.env.DB_USER,
password: process.env.DB_PASSWORD,
host: process.env.DB_HOST,
port: process.env.DB_PORT || 25060,
database: process.env.DB_NAME,
ssl: { rejectUnauthorized: true },
});
pool.query('SELECT NOW()', (err, res) => {
if (err) {
console.error('Bağlantı hatası:', err);
} else {
console.log('Bağlantı başarılı:', res.rows[0]);
}
});
ssl ayarının etkin bırakılması gerekiyor, çünkü DigitalOcean Managed Database bağlantılarının SSL üzerinden yapılmasını zorunlu tutuyor. Bu ayar kapatılırsa bağlantı reddediliyor.
Adım 5: Veritabanı ve Kullanıcı Yönetimi
Varsayılan olarak defaultdb adında bir veritabanı ve doadmin adında bir yönetici kullanıcı geliyor. Farklı projeler için ayrı veritabanları ve kullanıcılar oluşturmak isteniyorsa, panelin Users & Databases sekmesinden yeni bir veritabanı ve kullanıcı tanımlanabiliyor. Bu, özellikle birden fazla uygulamanın aynı kümeyi paylaştığı durumlarda erişimi ayrıştırmak için faydalı bir yaklaşım.
Yeni bir kullanıcı oluşturulduğunda, o kullanıcıya sadece ihtiyaç duyduğu veritabanı üzerinde yetki vermek, güvenlik açısından en az yetki prensibine uygun bir tercih oluyor.
Sık Karşılaşılan Sorunlar
Bağlantı zaman aşımına uğruyor: Bu genellikle bağlanılmaya çalışılan Droplet ya da uygulamanın Trusted Sources listesine eklenmemiş olmasından kaynaklanıyor. İlgili kaynağın listeye eklenip eklenmediği kontrol edilmeli.
SSL hatası alınıyor: DigitalOcean Managed Database bağlantıları SSL zorunluluğu taşıyor, bağlantı dizesinde ya da kod içinde SSL ayarının devre dışı bırakılmadığından emin olunmalı.
Kimlik doğrulama hatası: Kullanıcı adı ve şifrenin doğru kopyalandığından emin olunmalı, özellikle şifre içinde özel karakterler varsa bağlantı dizesine yapıştırılırken URL encoding sorunları yaşanabiliyor.
Sonraki Adımlar
Veritabanı artık hazır ve backend’e bağlı durumda. Buradan sonra tablo şemaları oluşturulabilir, bir ORM (Prisma, Sequelize gibi) entegre edilebilir ya da okuma yükünü dağıtmak için read replica eklenebilir. Bir sonraki yazıda DigitalOcean Spaces ile dosya ve medya depolamanın nasıl yapıldığı anlatılacak.
Kendi veritabanını kurup denemek istersen, referans linkim üzerinden kayıt olarak bana destek olabilirsin.
Tüm projelerim ve üzerinde çalıştığım konuları incelemek istersen https://hub.barisgunduz.com/ adresini ziyaret edebilirsin.