Dijital dünyada kişisel veya iş süreçlerimizi organize etmek için birçok araca ihtiyaç duyarız. Doğum günü hatırlatıcıları da bunlardan biridir; sevdiklerimizin özel günlerini unutmamak, ilişkilerimizi güçlendirmek için küçük ama anlamlı bir detaydır. Bu rehberde, “12 Days of DigitalOcean” serimizin bir parçası olarak, DigitalOcean’ın güçlü altyapısında PostgreSQL veritabanı kurarak basit bir doğum günü hatırlatma sistemi için temel oluşturmayı öğreneceksiniz. DigitalOcean’ın sunduğu kolaylık ve PostgreSQL’in sağlamlığı sayesinde, bu projeyi hızlı ve güvenilir bir şekilde hayata geçirebiliriz.
PostgreSQL, açık kaynaklı, ilişkisel bir veritabanı yönetim sistemidir (RDBMS) ve veri bütünlüğü, güvenilirlik ve gelişmiş özellikleriyle bilinir. DigitalOcean ise bulut bilişim hizmetleri sunan, geliştirici dostu bir platformdur. İkisinin birleşimi, projelerinizi kolayca dağıtmak ve yönetmek için ideal bir ortam sunar. İster kişisel bir proje ister daha büyük bir uygulama için olsun, bu kurulum adımları size sağlam bir başlangıç noktası sağlayacaktır.
DigitalOcean’da PostgreSQL Veritabanı Oluşturma
DigitalOcean, veritabanı hizmetlerini iki ana şekilde sunar: Kendi Droplet’iniz (sanal sunucu) üzerine PostgreSQL kurmak veya DigitalOcean’ın Yönetilen Veritabanı (Managed Database) hizmetini kullanmak. Çoğu senaryoda, özellikle başlangıç seviyesinde ve bakım yükünü azaltmak istediğinizde, Yönetilen Veritabanı hizmeti çok daha avantajlıdır. Otomatik yedeklemeler, ölçeklenebilirlik, güvenlik yamaları ve kolay yönetim gibi özellikler sayesinde siz uygulamanıza odaklanabilirsiniz.
Yönetilen PostgreSQL Veritabanı Adımları
- DigitalOcean Hesabına Giriş Yapın: Tarayıcınızdan DigitalOcean kontrol paneline gidin ve hesabınıza giriş yapın. Henüz bir hesabınız yoksa, kolayca oluşturabilirsiniz.
- Veritabanı Oluşturma Sayfasına Gidin: Kontrol panelinin sol menüsünden “Databases” seçeneğine tıklayın, ardından sağ üst köşedeki “Create Database” butonuna basın.
- Veritabanı Motorunu Seçin: Açılan sayfada, desteklenen veritabanı motorları arasından “PostgreSQL”i seçin.
- Plan ve Kaynakları Belirleyin:
- Sürüm: En son stabil PostgreSQL sürümünü seçin.
- Plan: Uygulamanızın ihtiyaçlarına göre bir plan seçin. “Development” planları küçük projeler ve test ortamları için uygunken, “Production” planları daha yüksek performans ve güvenilirlik sunar. Örneğin, başlangıç için 1GB RAM, 1 vCPU ve 10GB SSD depolama sunan en küçük “Development” planı yeterli olacaktır.
- Veri Merkezi Bölgesi: Uygulamanızın veya kullanıcılarınızın coğrafi konumuna en yakın bölgeyi seçin. Bu, gecikmeyi (latency) azaltır ve performansı artırır.
- Veritabanı Adı ve VPC:
- Veritabanı Adı: Veritabanınıza anlamlı bir isim verin, örneğin
birthday-reminders-db. - VPC Ağı (İsteğe Bağlı): Eğer DigitalOcean’da başka Droplet’leriniz veya kaynaklarınız varsa, veritabanınızı bir Sanal Özel Bulut (VPC) ağına bağlamak ekstra güvenlik ve performans sağlar. Bu, veritabanınızın yalnızca aynı VPC’deki kaynaklardan erişilebilir olmasını sağlar.
- Veritabanı Adı: Veritabanınıza anlamlı bir isim verin, örneğin
- Oluşturma İşlemini Tamamlayın: Tüm seçimleri yaptıktan sonra “Create Database Cluster” butonuna tıklayın. DigitalOcean veritabanınızı hazırlarken birkaç dakika beklemeniz gerekebilir.
Veritabanı oluşturulduktan sonra, kontrol panelindeki veritabanı detayları sayfasında bağlantı bilgilerinizi (hostname, port, kullanıcı adı, parola ve veritabanı adı) bulacaksınız. Bu bilgiler, uygulamanızın veritabanına bağlanması için kritik öneme sahiptir. Özellikle otomatik oluşturulan parolayı güvenli bir yerde sakladığınızdan emin olun.
Veritabanına Bağlanma ve İlk Yapılandırma
Veritabanınız DigitalOcean üzerinde hazırlandığında, ona bağlanıp tablolar oluşturmaya başlayabiliriz. Bu bölümde, psql komut satırı aracını kullanarak veritabanınıza nasıl bağlanacağınızı ve temel bir doğum günü hatırlatma tablosu oluşturacağınızı göstereceğiz.
psql ile Bağlanma
psql, PostgreSQL ile birlikte gelen güçlü bir komut satırı istemcisidir. Yerel bilgisayarınızdan veya DigitalOcean üzerinde oluşturduğunuz bir Droplet’ten veritabanınıza bağlanabilirsiniz. Eğer yerel olarak psql kurulu değilse, PostgreSQL’i kurarak veya sadece psql istemcisini edinerek kurabilirsiniz.
DigitalOcean kontrol panelindeki veritabanınızın detay sayfasında yer alan “Connection Details” (Bağlantı Detayları) bölümünden aşağıdaki bilgileri not alın:
- Hostname: (Örn:
db-postgresql-nyc1-12345-do-user-12345-0.db.ondigitalocean.com) - Port: (Genellikle
25060DigitalOcean için) - User: (Örn:
doadmin) - Password: (Oluşturulmuş parola)
- Database: (Genellikle
defaultdbveya sizin verdiğiniz ad)
Bu bilgilerle aşağıdaki komutu kullanarak bağlanabilirsiniz:
psql -h -p -U -d
Örnek bir bağlantı komutu:
psql -h db-postgresql-nyc1-12345-do-user-12345-0.db.ondigitalocean.com -p 25060 -U doadmin -d defaultdb
Komutu çalıştırdığınızda, sizden parolanızı girmeniz istenecektir. Parolayı doğru girdiğinizde, defaultdb=> şeklinde bir istemci ekranı görmelisiniz. Bu, veritabanına başarıyla bağlandığınız anlamına gelir.
Doğum Günü Tablosu Oluşturma
Şimdi doğum günü hatırlatıcıları için bir tablo oluşturalım. Bu tablo, kişinin adını, doğum tarihini, isteğe bağlı e-posta veya telefon numarasını ve kaydın oluşturulma zamanını içerecektir.
CREATE TABLE birthdays (
id SERIAL PRIMARY KEY,
name VARCHAR(255) NOT NULL,
birth_date DATE NOT NULL,
email VARCHAR(255),
phone_number VARCHAR(20),
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);
Bu SQL komutunu psql istemcisinde çalıştırın. CREATE TABLE mesajını gördüğünüzde tablo başarıyla oluşturulmuş demektir.
id SERIAL PRIMARY KEY: Her kayıtta benzersiz olacak, otomatik artan bir anahtar sütunu.name VARCHAR(255) NOT NULL: Kişinin adı, boş bırakılamaz.birth_date DATE NOT NULL: Doğum tarihi, boş bırakılamaz.email VARCHAR(255): Kişinin e-posta adresi (isteğe bağlı).phone_number VARCHAR(20): Kişinin telefon numarası (isteğe bağlı).created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP: Kaydın ne zaman oluşturulduğunu gösteren zaman damgası, otomatik olarak doldurulur.
Örnek Veri Ekleme ve Sorgulama
Tablomuza birkaç örnek doğum günü kaydı ekleyelim:
INSERT INTO birthdays (name, birth_date, email) VALUES
('Ayşe Yılmaz', '1990-05-15', 'ayse@example.com'),
('Mehmet Demir', '1985-11-23', 'mehmet@example.com'),
('Zeynep Can', '1992-07-30', 'zeynep@example.com');
Eklediğimiz verileri sorgulayarak kontrol edebiliriz:
SELECT * FROM birthdays;
Bugün doğum günü olanları bulmak için kullanabileceğiniz bir sorgu:
SELECT name, birth_date FROM birthdays
WHERE EXTRACT(MONTH FROM birth_date) = EXTRACT(MONTH FROM CURRENT_DATE)
AND EXTRACT(DAY FROM birth_date) = EXTRACT(DAY FROM CURRENT_DATE);
Bu sorgu, veritabanındaki kayıtların ay ve gün bilgilerini bugünün ay ve gün bilgileriyle karşılaştırır. Bu, hatırlatma sisteminizin temelini oluşturacaktır.
Uygulamanızdan PostgreSQL’e Bağlanma (Örnek Python)
Veritabanımız hazır olduğuna göre, bir uygulama üzerinden ona nasıl bağlanacağımızı ve veri işlemleri yapacağımızı görelim. Python, web uygulamaları ve betikler için popüler bir dil olduğu için, psycopg2 kütüphanesini kullanarak bir örnek sunacağız. Diğer programlama dilleri için de benzer kütüphaneler (Node.js için pg, Java için JDBC, PHP için pdo_pgsql vb.) bulunmaktadır.
Gerekli Kütüphaneyi Kurma
Öncelikle Python projenizde psycopg2-binary kütüphanesini kurmanız gerekir:
pip install psycopg2-binary
Python ile Veritabanı İşlemleri
Aşağıdaki Python kodu, DigitalOcean PostgreSQL veritabanınıza bağlanır, yeni bir doğum günü kaydı ekler ve ardından tüm kayıtları listeler. Bağlantı bilgilerini güvenli bir şekilde yönetmek için ortam değişkenleri kullanılmıştır.
import os
import psycopg2
from datetime import date
Ortam değişkenlerinden bağlantı bilgilerini al
Bu değişkenleri çalıştırmadan önce ayarlamanız gerekmektedir.
Örneğin:
export DB_HOST="db-postgresql-nyc1-12345-do-user-12345-0.db.ondigitalocean.com"
export DB_NAME="defaultdb"
export DB_USER="doadmin"
export DB_PASSWORD="your_secure_password"
export DB_PORT="25060"
DB_HOST = os.getenv("DB_HOST")
DB_NAME = os.getenv("DB_NAME")
DB_USER = os.getenv("DB_USER")
DB_PASSWORD = os.getenv("DB_PASSWORD")
DB_PORT = os.getenv("DB_PORT", "25060") # DigitalOcean varsayılan portu
conn = None
try:
# Veritabanına bağlantı kur
conn = psycopg2.connect(
host=DB_HOST,
database=DB_NAME,
user=DB_USER,
password=DB_PASSWORD,
port=DB_PORT
)
cur = conn.cursor()
print("Veritabanına başarıyla bağlandı!")
# Yeni bir doğum günü ekleme
new_birthday_name = "Elif Kara"
new_birthday_date = date(1995, 10, 20)
new_birthday_email = "elif@example.com"
cur.execute(
"INSERT INTO birthdays (name, birth_date, email) VALUES (%s, %s, %s)",
(new_birthday_name, new_birthday_date, new_birthday_email)
)
conn.commit() # Değişiklikleri kaydet
print(f"'{new_birthday_name}' için doğum günü eklendi.")
# Tüm doğum günlerini sorgulama ve listeleme
cur.execute("SELECT name, birth_date, email FROM birthdays ORDER BY birth_date ASC")
birthdays = cur.fetchall()
print("\nTüm Doğum Günleri:")
for bd in birthdays:
print(f"Ad: {bd[0]}, Tarih: {bd[1]}, E-posta: {bd[2]}")
# Bugün doğum günü olanları sorgulama
today_month = date.today().month
today_day = date.today().day
cur.execute(
"SELECT name, birth_date FROM birthdays WHERE EXTRACT(MONTH FROM birth_date) = %s AND EXTRACT(DAY FROM birth_date) = %s",
(today_month, today_day)
)
today_birthdays = cur.fetchall()
if today_birthdays:
print(f"\nBugün ({date.today().strftime('%d-%m')}) Doğum Günü Olanlar:")
for bd in today_birthdays:
print(f"Ad: {bd[0]}, Tarih: {bd[1]}")
else:
print(f"\nBugün ({date.today().strftime('%d-%m')}) doğum günü olan kimse yok.")
except Exception as e:
print(f"Veritabanı bağlantı veya işlem hatası: {e}")
finally:
if conn:
cur.close()
conn.close()
print("\nVeritabanı bağlantısı kapatıldı.")
Bu kodu çalıştırmadan önce, DigitalOcean kontrol panelinden aldığınız bağlantı bilgilerini ortam değişkenleri olarak ayarlamanız gerekmektedir. Örneğin, Linux/macOS terminalinde:
export DB_HOST="your_db_hostname"
export DB_NAME="defaultdb"
export DB_USER="doadmin"
export DB_PASSWORD="your_secure_password"
export DB_PORT="25060"
python your_script_name.py
Windows’ta ise set komutunu kullanabilirsiniz.
Güvenlik ve Bakım İpuçları & Sonuç
Bir veritabanı kurmak sadece başlangıçtır. Güvenliği sağlamak ve düzenli bakımı yapmak, uygulamanızın uzun ömürlü ve sorunsuz çalışması için hayati öneme sahiptir.
Güvenlik İpuçları
- Güvenlik Duvarı (Firewall): DigitalOcean Managed Databases, dahili bir güvenlik duvarı ile gelir. Bu güvenlik duvarını kullanarak veritabanınıza yalnızca belirli IP adreslerinden veya DigitalOcean VPC ağınızdaki Droplet’lerden gelen bağlantılara izin verin. Asla tüm IP adreslerinden (0.0.0.0/0) erişime izin vermeyin, bu büyük bir güvenlik açığıdır.
- Güçlü Parolalar ve Kimlik Bilgileri Yönetimi: Veritabanı parolalarınızın karmaşık ve tahmin edilemez olduğundan emin olun. Parolaları veya diğer hassas bilgileri kodunuzun içine yazmak yerine, yukarıdaki Python örneğinde olduğu gibi ortam değişkenleri veya güvenli bir sır yönetimi çözümü kullanın.
- SSL/TLS Kullanımı: DigitalOcean Managed Databases varsayılan olarak SSL/TLS şifrelemesi ile gelir. Uygulamanızın veritabanına bağlanırken SSL’i zorunlu kıldığından emin olun. Bu, verilerinizin ağ üzerinden güvenli bir şekilde iletilmesini sağlar.
- En Az Yetki Prensibi: Uygulamanızın veritabanına bağlanırken kullandığı kullanıcının, yalnızca ihtiyaç duyduğu tablolara ve işlemlere (SELECT, INSERT, UPDATE, DELETE) erişim yetkisi olduğundan emin olun.
doadminkullanıcısı yerine, özel bir uygulama kullanıcısı oluşturup ona kısıtlı yetkiler verebilirsiniz.
Bakım İpuçları
- Yedeklemeler: DigitalOcean Managed Databases otomatik günlük yedeklemeler yapar ve bunları belirli bir süre saklar. Bu, olası veri kayıplarına karşı önemli bir güvencedir. Kendi Droplet’inizde PostgreSQL kullanıyorsanız,
pg_dumpgibi araçlarla düzenli yedekleme stratejileri oluşturmanız gerekir. - Güncellemeler: Yönetilen veritabanları için DigitalOcean, güvenlik yamalarını ve sürüm güncellemelerini sizin için yönetir. Yeni özelliklerden ve güvenlik iyileştirmelerinden faydalanmak için veritabanı sürümünüzü güncel tuttuğunuzdan emin olun.
- İzleme ve Performans: DigitalOcean kontrol paneli, veritabanınızın CPU kullanımı, bellek tüketimi, disk I/O ve bağlantı sayısı gibi temel metriklerini izlemenize olanak tanır. Bu metrikleri düzenli olarak kontrol ederek olası performans sorunlarını erkenden tespit edebilirsiniz.
Sonuç
“12 Days of DigitalOcean” serimizin bu bölümünde, DigitalOcean üzerinde güçlü ve güvenilir bir PostgreSQL veritabanını nasıl kuracağınızı ve basit bir doğum günü hatırlatma uygulaması için nasıl kullanacağınızı öğrendiniz. Yönetilen veritabanı hizmetinin sunduğu kolaylıklar sayesinde, altyapı yönetimiyle uğraşmak yerine doğrudan uygulamanızı geliştirmeye odaklanabilirsiniz. Güvenlik ve bakım ipuçlarını takip ederek, projenizin hem sağlam hem de uzun ömürlü olmasını sağlayabilirsiniz.
Bu temel kurulumla, artık doğum günü hatırlatmaları için bir web uygulaması, bir mobil uygulama veya hatta bir sunucusuz (serverless) işlev (DigitalOcean Functions gibi) geliştirmeye başlayabilirsiniz. Veritabanınız hazır, şimdi sıra hayal gücünüzde!
Sıkça Sorulan Sorular (SSS)
DigitalOcean Managed Database neden tercih edilmeli?
DigitalOcean Managed Database, veritabanı yönetiminin karmaşıklığını ortadan kaldırır. Otomatik yedeklemeler, güvenlik yamaları, sürüm güncellemeleri, kolay ölçeklendirme ve yüksek erişilebilirlik gibi özelliklerle birlikte gelir. Bu sayede siz altyapı yönetimi yerine uygulamanızı geliştirmeye odaklanabilirsiniz.
PostgreSQL yerine başka bir veritabanı kullanabilir miyim?
Evet, DigitalOcean Managed Database hizmeti MySQL ve Redis gibi diğer popüler veritabanlarını da destekler. Seçiminiz, uygulamanızın ihtiyaçlarına, veri modelinize ve kişisel tercihinize bağlıdır. PostgreSQL, karmaşık sorgular, veri bütünlüğü ve genişletilebilirlik açısından oldukça güçlü bir seçenektir.
Veritabanı bağlantı bilgilerimi nasıl güvende tutarım?
Veritabanı bağlantı bilgilerini (hostname, kullanıcı adı, parola) asla doğrudan kodunuza yazmayın. Bunun yerine, ortam değişkenleri, DigitalOcean’ın ‘Secrets’ hizmeti (eğer kullanıyorsanız) veya bir sır yönetimi aracı (örneğin HashiCorp Vault) kullanarak yönetin. Bu, hassas bilgilerin kazara kaynak kod depolarına sızmasını önler ve farklı ortamlarda (geliştirme, test, üretim) kolayca yapılandırma yapmanızı sağlar.
Uygulamam DigitalOcean’da olmak zorunda mı?
Hayır, uygulamanızın DigitalOcean’da olması zorunlu değildir. Veritabanınız DigitalOcean’da barındırılsa bile, uygulamanız başka bir bulut sağlayıcısında, kendi sunucunuzda veya hatta yerel bilgisayarınızda çalışabilir. Ancak, uygulamanız ile veritabanınız arasındaki ağ gecikmesini (latency) azaltmak için, uygulamanızı veritabanınızla aynı veri merkezi bölgesinde barındırmak genellikle en iyi performansı sağlar.
Veritabanı performansını nasıl izleyebilirim?
DigitalOcean kontrol paneli, Managed Database’leriniz için kapsamlı izleme metrikleri sunar. CPU kullanımı, bellek tüketimi, disk I/O, bağlantı sayısı ve sorgu gecikmesi gibi önemli göstergeleri buradan takip edebilirsiniz. Bu metrikler, potansiyel performans darboğazlarını veya kaynak eksikliklerini belirlemenize yardımcı olur. Ayrıca, daha detaylı izleme için üçüncü taraf izleme araçlarını da entegre edebilirsiniz.