Hetzner’in uygun fiyatlı sunucularında nasıl yönetilen bir veritabanı hizmeti kurabileceğinizi keşfedin. AB bulut egemenliğini sağlarken maliyetleri düşürün ve veri güvenliğinizi artırın.
Günümüzde birçok işletme ve geliştirici, veritabanı yönetimi gibi kritik altyapı ihtiyaçları için büyük bulut sağlayıcılarının sunduğu “yönetilen hizmetlere” yöneliyor. AWS RDS, Azure SQL Database veya Google Cloud SQL gibi servisler, veritabanı kurulumu, yedekleme, güncelleme ve ölçeklendirme gibi zahmetli görevleri otomatikleştirerek bize büyük bir kolaylık sağlıyor. Ancak bu kolaylığın genellikle yüksek bir maliyeti ve bazı durumlarda veri egemenliği konusunda ciddi endişeleri beraberinde getirdiğini görüyoruz. Özellikle Avrupa Birliği (AB) içindeki kuruluşlar için, veri nerede saklanıyor, kim erişebilir ve hangi yasalara tabi gibi sorular giderek daha önemli hale geliyor.
Peki, yüksek maliyetlerden kaçınırken, veri egemenliği endişelerini giderebilir ve hatta kendi “yönetilen” veritabanı hizmetimizi uygun fiyatlı sunucular üzerinde kendimiz inşa edebilir miyiz? Cevap evet! Özellikle Hetzner gibi Avrupa merkezli, maliyet etkin ve güvenilir bir altyapı sağlayıcısı ile bu mümkün. Bu makalede, €3 gibi sembolik bir maliyetle sunulan Hetzner sunucuları üzerinde nasıl kendi yönetilen veritabanı hizmetinizi kuracağınızı, bunun ekonomik ve hukuki boyutlarını ve AB bulut egemenliği bağlamındaki önemini adım adım inceleyeceğiz. Amacımız, bu süreci teknik olarak anlaşılır kılmak ve en baştan itibaren kendi kontrolünüzde bir veritabanı altyapısının nasıl oluşturulabileceğini göstermektir. Bu yolculuk, sadece maliyet avantajı sağlamakla kalmayacak, aynı zamanda veri güvenliği ve hukuki uyumluluk konularında da sizlere tam bir kontrol imkanı sunacaktır. Bu nedenle, kendi altyapınızı kurmanın getireceği zorlukların yanı sıra, uzun vadede sağlayacağı avantajları da göz önünde bulundurmak önemlidir. Özellikle küçük ve orta ölçekli işletmeler (KOBİ’ler) ve başlangıç aşamasındaki girişimler için bu yaklaşım, bütçe dostu bir alternatif sunarken, büyük bulut sağlayıcılarına bağımlılığı azaltma potansiyeli taşır. Böylece, hem finansal hem de operasyonel anlamda daha esnek ve bağımsız bir yapıya sahip olabilirsiniz. İlk olarak, “yönetilen veritabanı” kavramının aslında ne anlama geldiğini netleştirelim ve ardından kendi çözümümüzü inşa etmek için gerekli temel kavramlara geçelim.
Temel Kavramlar: Yönetilen Veritabanı Hizmeti Ne Anlama Geliyor?
Kendi “yönetilen” veritabanı hizmetimizi inşa etmeye başlamadan önce, “yönetilen veritabanı hizmeti” teriminin ne anlama geldiğini netleştirmek önemlidir. Genellikle bu terim, veritabanı sunucusunun kurulumu, yamaları, yedeklemeleri, kurtarma operasyonları, ölçeklendirme ve temel izleme gibi operasyonel görevlerin bir üçüncü taraf (bulut sağlayıcısı) tarafından üstlenildiği bir hizmet modelini ifade eder. Bu, geliştiricilerin ve şirketlerin veritabanı altyapısının karmaşıklığıyla uğraşmak yerine, doğrudan uygulama geliştirmeye odaklanabilmeleri anlamına gelir. Ancak, kendi çözümümüzü kurduğumuzda, bu operasyonel görevlerin bir kısmını yine bizim üstlenmemiz gerekecektir, fakat bunu tamamen kendi kontrolümüz altında, kendi belirlediğimiz araçlar ve süreçlerle yapacağız. Aslında, “yönetilen” ifadesini burada “otomatize edilmiş ve standardize edilmiş” olarak düşünebiliriz.
Bu bağlamda Hetzner’in rolü devreye giriyor. Neden Hetzner? Hetzner, Almanya merkezli, uygun maliyetli ve yüksek performanslı sunucular sunan bir bulut sağlayıcısıdır. €3 gibi oldukça düşük fiyatlarla sanal özel sunucular (VPS) sunmaları, küçük projeler, test ortamları veya başlangıç aşamasındaki uygulamalar için cazip bir seçenek haline getirir. Hetzner, sunduğu hizmetlerin maliyet-performans dengesiyle tanınır. Ayrıca, Avrupa Birliği’nde bulunması, özellikle AB veri egemenliği ve Genel Veri Koruma Tüzüğü (GDPR) uyumluluğu açısından önemli avantajlar sunar. Verilerinizin AB sınırları içinde kalacağını bilmek, birçok şirket için büyük bir gönül rahatlığıdır.
Peki, “AB Bulut Egemenliği” tam olarak nedir ve neden bu kadar önemli? AB Bulut Egemenliği, AB vatandaşlarının ve kuruluşlarının verilerinin, AB yasalarına ve düzenlemelerine uygun olarak işlenmesini ve saklanmasını sağlama ilkesini ifade eder. Özellikle GDPR, kişisel verilerin korunmasını sıkı bir şekilde düzenler ve bu verilerin AB dışına aktarılmasını belirli koşullara bağlar. Amerika Birleşik Devletleri’nin bulut sağlayıcıları için geçerli olan CLOUD Act gibi yasalar, AB vatandaşlarının verilerine erişim konusunda endişelere yol açmıştır. Schrems II kararı ise, AB-ABD arasındaki veri aktarım mekanizmalarının güvenilirliğini sorgulamış ve AB şirketlerinin verilerini ABD merkezli bulut sağlayıcılarında barındırırken daha dikkatli olmaları gerektiğini ortaya koymuştur. Bu nedenle, Hetzner gibi AB içinde faaliyet gösteren bir sağlayıcı kullanmak, veri egemenliği ve hukuki uyumluluk açısından kritik bir adımdır. Kendi sunucumuz üzerinde veritabanı kurarak, verilerin fiziksel olarak nerede barındırıldığı ve hangi yasalara tabi olduğu konusunda tam kontrol sahibi oluruz. Bu kontrol, özellikle hassas verilerle çalışan veya belirli sektör düzenlemelerine tabi olan kuruluşlar için paha biçilmezdir. Dolayısıyla, sadece maliyet odaklı bir yaklaşımdan ziyade, yasal uyumluluk ve veri güvenliği perspektifinden de kendi yönetilen veritabanı çözümümüzü inşa etme ihtiyacı doğmaktadır. Bu temel kavramları anladıktan sonra, bir sonraki adımda Hetzner sunucusu seçimi ve ilk kurulum adımlarına geçebiliriz.
Hetzner Seçimi ve İlk Adımlar: €3 Sunucu Yeterli mi?
Hetzner’in bulut sunucuları arasında, “Cloud” serisindeki en düşük maliyetli seçenekler genellikle CX11 veya CX21 gibi modellerdir. Bu makalenin odak noktası olan €3’lük fiyat etiketi, genellikle CX11 modeline denk gelir. CX11, genellikle 1 vCPU, 2 GB RAM ve 20 GB NVMe depolama alanı sunar. Peki, bu kaynaklar bir yönetilen veritabanı hizmeti için yeterli mi? Cevap, “kullanım senaryosuna bağlıdır” şeklindedir.
Küçük ölçekli uygulamalar, kişisel bloglar, geliştirme/test ortamları, düşük trafikli web siteleri veya belirli API’ler için bu kaynaklar fazlasıyla yeterli olabilir. Özellikle sadece birkaç yüz veya binlerce kaydı işleyecek, eş zamanlı bağlantı sayısı az olan veritabanları için ideal bir başlangıç noktasıdır. NVMe depolama sayesinde disk I/O performansı oldukça iyi olduğundan, küçük veritabanı işlemleri şaşırtıcı derecede hızlı gerçekleşebilir. Ancak, yüksek trafikli e-ticaret siteleri, büyük veri analizi platformları veya binlerce eş zamanlı kullanıcıya hizmet veren uygulamalar için bu sunucu yetersiz kalacaktır. Bu durumda daha yüksek kaynaklara sahip (CX31, CX41 vb.) Hetzner sunucularına veya daha gelişmiş mimarilere geçiş yapmak gerekir.
Şimdi bir Hetzner sunucusu seçimi ve temel kurulum adımlarına göz atalım:
- Hetzner Hesabı Oluşturma: Hetzner Cloud paneli üzerinden bir hesap oluşturun. Bu süreç oldukça basittir ve birkaç dakikanızı alır.
- Sunucu Oluşturma: Panele giriş yaptıktan sonra “Add Server” (Sunucu Ekle) butonuna tıklayın.
- Konum Seçimi: Veri egemenliği açısından Almanya veya Finlandiya gibi bir AB ülkesini tercih edin. Bu, verilerinizin AB sınırları içinde kalmasını garanti altına alacaktır.
- İşletim Sistemi Seçimi: Genellikle Ubuntu LTS (Uzun Süreli Destek) veya Debian önerilir. Bu dağıtımlar kararlı, güvenli ve geniş topluluk desteğine sahiptir. Örneğin, Ubuntu 22.04 LTS seçebiliriz.
- Sunucu Tipi Seçimi: “Standard” altından CX11’i seçin.
- SSH Anahtarı Ekleme: Sunucunuza güvenli bir şekilde bağlanmak için bir SSH anahtarı eklemeniz kritik öneme sahiptir. Henüz bir anahtarınız yoksa, yerel makinenizde
ssh-keygenkomutu ile oluşturup genel anahtarı Hetzner paneline ekleyin. - Sunucu İsmi ve Oluşturma: Sunucunuza açıklayıcı bir isim verin ve “Create & Buy” (Oluştur ve Satın Al) butonuna tıklayın. Kısa bir süre içinde sunucunuz hazır olacaktır.
Sunucunuz hazırlandıktan sonra, SSH aracılığıyla bağlanarak temel güvenlik yapılandırmalarını yapmalısınız. Örneğin:
ssh root@SUNUCU_IP_ADRESINIZ
İlk olarak, sisteminizi güncelleyin:
sudo apt update && sudo apt upgrade -y
Ardından, güvenlik duvarını (UFW - Uncomplicated Firewall) yapılandırın. Yalnızca gerekli portları açmak, sunucunuzu dış saldırılara karşı korur. SSH (Port 22), HTTP (Port 80) ve HTTPS (Port 443) ve veritabanı için kullanacağınız portu (örneğin PostgreSQL için 5432) açmanız gerekebilir. Dışarıdan veritabanına erişim planlamıyorsanız, veritabanı portunu sadece localhost'a veya uygulamanızın çalıştığı sunucunun IP'sine açmak en güvenli yöntemdir.
sudo ufw default deny incoming
sudo ufw default allow outgoing
sudo ufw allow ssh
sudo ufw allow http
sudo ufw allow https
# Eğer dışarıdan erişim gerekecekse, sadece belirli bir IP'den (örn: 192.168.1.100) izin ver:
# sudo ufw allow from 192.168.1.100 to any port 5432
# Veya sadece localhost'tan erişime izin verin (uygulama sunucusu ile aynı sunucudaysa):
# sudo ufw allow from 127.0.0.1 to any port 5432
sudo ufw enable
Vaka Analizi: Küçük Bir Uygulamanın Veritabanı İhtiyacı
Diyelim ki, yeni başlayan bir girişim için basit bir "görev yönetim" uygulaması geliştiriyorsunuz. Bu uygulama, kullanıcılar, görevler ve projeler gibi temel verileri depolayacak. Başlangıçta 50-100 aktif kullanıcınız olacak ve günde birkaç yüz ila bin veritabanı işlemi gerçekleştireceksiniz. Bu senaryoda, bir Hetzner CX11 sunucusu, PostgreSQL veya MySQL veritabanı ile birlikte bu uygulamanın ihtiyaçlarını fazlasıyla karşılayabilir. Yüksek maliyetli bir yönetilen veritabanı hizmeti kullanmak yerine, CX11 üzerindeki kendi çözümünüz size önemli maliyet avantajı sağlayacaktır. Bu sayede, başlangıç bütçenizi daha çok ürün geliştirmeye ayırabilirsiniz. İlk adımlarımızı tamamladığımıza göre, şimdi sıra veritabanı kurulumuna geldi.
Veritabanı Kurulumu ve Yapılandırması: PostgreSQL veya MySQL ile Nasıl Başlanır?
Temel sunucu kurulumunu ve güvenlik yapılandırmalarını tamamladıktan sonra, sıra veritabanı yönetim sistemini (DBMS) kurmaya geliyor. Piyasadaki en popüler açık kaynaklı seçeneklerden ikisi PostgreSQL ve MySQL/MariaDB'dir. Her ikisinin de kendine göre avantajları ve kullanım senaryoları bulunur.
- PostgreSQL: Güçlü bir nesne-ilişkisel veritabanı sistemidir. Veri bütünlüğü, gelişmiş özellik setleri (JSONB, CTE'ler, pencereli fonksiyonlar) ve karmaşık sorgular için mükemmel bir seçimdir. Özellikle veri analizi, finans uygulamaları ve konum tabanlı servisler gibi alanlarda tercih edilir. Genellikle daha "akademik" bir yaklaşıma sahip olduğu ve ANSI SQL standartlarına daha sıkı uyduğu kabul edilir.
- MySQL/MariaDB: Daha çok web uygulamaları ve dinamik siteler için popülerdir. Kolay kurulumu, geniş topluluk desteği ve performansı ile bilinir. MariaDB, MySQL'in topluluk destekli bir çatalıdır ve genellikle MySQL ile tam uyumlu olup ek özellikler ve performans iyileştirmeleri sunar. Basit CRUD (Create, Read, Update, Delete) işlemleri yoğun olan uygulamalar için idealdir.
Bu makalede, gelişmiş özellik seti ve sağlamlığı nedeniyle PostgreSQL'i tercih edeceğiz, ancak adımlar MySQL/MariaDB için de benzer olacaktır. Ayrıca, küçük bir sunucu üzerinde bile PostgreSQL'in esnekliği sayesinde çoğu ihtiyacı karşılayabileceğini unutmamak önemlidir.
PostgreSQL Kurulumu ve Temel Yapılandırma Adımları
Ubuntu veya Debian tabanlı sunucunuzda PostgreSQL kurulumu oldukça basittir:
# Paket listesini güncelleyin
sudo apt update
# PostgreSQL ve ek araçları kurun
sudo apt install postgresql postgresql-contrib
# PostgreSQL servisini başlatın ve sistem başlangıcında otomatik çalışmasını sağlayın
sudo systemctl start postgresql
sudo systemctl enable postgresql
Kurulumdan sonra PostgreSQL, postgres adında bir süper kullanıcı ve aynı isimde bir Linux kullanıcısı oluşturur. Öncelikle bu postgres kullanıcısına geçerek veritabanı ortamına erişebiliriz:
sudo -i -u postgres
psql
Şimdi yeni bir veritabanı ve kullanıcı oluşturalım. Veritabanınız için güçlü bir parola belirlemeyi unutmayın.
# Yeni bir veritabanı kullanıcısı oluşturun (örn: myuser)
CREATE USER myuser WITH PASSWORD 'guclu_parolaniz';
# Yeni bir veritabanı oluşturun (örn: mydatabase)
CREATE DATABASE mydatabase OWNER myuser;
# Yetkileri yapılandırın (opsiyonel, genelde OWNER yeterlidir)
GRANT ALL PRIVILEGES ON DATABASE mydatabase TO myuser;
# psql konsolundan çıkın
\q
Veritabanı kullanıcısının parolasını değiştirmek isterseniz:
ALTER USER myuser WITH PASSWORD 'yeni_guclu_parolaniz';
Ağ Erişimi ve Güvenlik Yapılandırması
Varsayılan olarak PostgreSQL yalnızca localhost (127.0.0.1) üzerinden gelen bağlantıları kabul eder. Eğer uygulamanız veritabanı ile aynı sunucudaysa bu ayar güvenlidir ve yeterlidir. Ancak uygulamanız başka bir sunucuda veya yerel makinenizden erişmeniz gerekiyorsa, PostgreSQL'in ağ yapılandırma dosyasını (postgresql.conf) düzenlemeniz gerekir.
sudo nano /etc/postgresql/14/main/postgresql.conf
(Versiyon numarası sizin kurulumunuza göre farklılık gösterebilir, örneğin 14 yerine 15 veya 16 olabilir.)
Bu dosya içinde listen_addresses satırını bulun ve aşağıdaki gibi değiştirin:
listen_addresses = 'localhost,SUNUCU_IP_ADRESINIZ' # Sadece kendi IP'nizden veya
# listen_addresses = '*' # Tüm arayüzlerden (Dikkatli kullanılmalı!)
Değişikliği kaydettikten sonra, client kimlik doğrulama yapılandırma dosyasını (pg_hba.conf) düzenlemelisiniz:
sudo nano /etc/postgresql/14/main/pg_hba.conf
Bu dosyaya, yeni bir bağlantı kuralı ekleyerek myuser kullanıcısının mydatabase veritabanına belirli bir IP adresinden (my_app_server_ip) veya herhangi bir yerden (0.0.0.0/0) bağlanmasına izin verebilirsiniz. En güvenli yol, sadece uygulamanızın çalıştığı sunucunun IP adresini belirtmektir:
# PostgreSQL veritabanı erişimini yapılandırın
# TYPE DATABASE USER ADDRESS METHOD
host mydatabase myuser my_app_server_ip/32 scram-sha-256
# Veya tüm IP'lerden erişime izin vermek isterseniz (güvenlik riski taşır!):
# host mydatabase myuser 0.0.0.0/0 scram-sha-256
Değişiklikleri kaydettikten sonra PostgreSQL servisini yeniden başlatın:
sudo systemctl restart postgresql
Performans Ayarları İçin İlk İpuçları
CX11 gibi düşük kaynaklı sunucularda performans ayarları daha da kritik hale gelir. postgresql.conf dosyasında küçük değişiklikler yaparak önemli iyileştirmeler elde edebilirsiniz:
shared_buffers: Genellikle toplam RAM'in %25'i civarında ayarlanır. 2GB RAM için 512MB (512MB) iyi bir başlangıç olabilir.work_mem: Sıralama (sort) ve karma (hash) işlemlerinde kullanılan bellek miktarı. Küçük sunucular için varsayılan değeri yeterli olabilir, ancak karmaşık sorgularınız varsa artırmayı düşünebilirsiniz (örn:16MB).maintenance_work_mem: Vakum ve indeks oluşturma gibi bakım işlemleri için kullanılır. Yine 2GB RAM için128MBveya256MBgibi değerler uygun olabilir.max_connections: Eş zamanlı bağlantı sayısını belirler. Küçük bir uygulama için 50-100 bağlantı yeterli olacaktır.
Bu ayarları sunucunuzun kaynaklarına ve uygulamanızın ihtiyaçlarına göre dikkatlice ayarlamalısınız. Yanlış yapılandırmalar performansı düşürebilir veya sistem kararsızlığına yol açabilir. Bu adımlarla birlikte, artık temel bir PostgreSQL veritabanına sahipsiniz. Şimdi bu veritabanını "yönetilen" bir hizmete dönüştürmenin yollarını keşfedebiliriz.
Yönetilen Özellikleri Geliştirmek: Yedekleme, İzleme ve Yüksek Erişilebilirlik
Bir veritabanı sadece kurulmakla kalmaz, aynı zamanda düzenli olarak bakımı yapılmalı, izlenmeli ve beklenmedik durumlar için hazırlıklı olunmalıdır. Bu bölüm, kendi yönetilen veritabanı hizmetinizin temelini oluşturacak otomasyon ve güvenlik adımlarını ele almaktadır. Özellikle €3'lük bir sunucu üzerinde bu özellikleri en verimli şekilde nasıl sağlayacağımızı inceleyeceğiz.
Yedekleme Stratejileri: Verilerinizi Nasıl Korursunuz?
Veritabanı yedeklemesi, bir felaket anında veri kaybını önlemek için en kritik adımdır. Otomatik yedekleme sistemleri kurmak, bu "yönetilen" deneyimin olmazsa olmazıdır. PostgreSQL için pg_dumpall veya pg_dump, MySQL/MariaDB için ise mysqldump gibi yerleşik araçlar mevcuttur. Basit bir Cron işi (cron job) ile bu yedeklemeleri otomatikleştirebiliriz.
Örnek bir PostgreSQL yedekleme betiği:
#!/bin/bash # Yedekleme dizini BACKUP_DIR="/var/backups/postgresql" TIMESTAMP=$(date +%Y%m%d%H%M%S) BACKUP_FILE="$BACKUP_DIR/mydatabase_$TIMESTAMP.sql.gz" DB_NAME="mydatabase" DB_USER="myuser" # Yedekleme dizini yoksa oluştur mkdir -p "$BACKUP_DIR" # Veritabanını yedekle ve sıkıştır PGPASSWORD='guclu_parolaniz' pg_dump -U "$DB_USER" -d "$DB_NAME" | gzip > "$BACKUP_FILE" # Yedeklemenin başarılı olup olmadığını kontrol et if [ $? -eq 0 ]; then echo "Veritabanı '$DB_NAME' başarıyla yedeklendi: $BACKUP_FILE" # Eski yedekleri temizle (son 7 günü sakla) find "$BACKUP_DIR" -type f -name "*.sql.gz" -mtime +7 -delete echo "Eski yedekler temizlendi." else echo "Veritabanı yedekleme başarısız oldu!" fi
Bu betiği
/usr/local/bin/backup_db.sholarak kaydedip çalıştırılabilir hale getirin (chmod +x /usr/local/bin/backup_db.sh). Ardından, Cron kullanarak düzenli olarak çalıştırabilirsiniz. Örneğin, her gece saat 03:00'te çalıştırmak için:sudo crontab -e # İçine şu satırı ekleyin: 0 3 * * * /usr/local/bin/backup_db.sh >> /var/log/backup_db.log 2>&1Depolama Stratejisi: Yedekleri aynı sunucuda tutmak, sunucu çökmesi durumunda işe yaramaz. Bu nedenle, yedekleri başka bir konuma taşımak önemlidir. Hetzner'in kendi Storage Box hizmeti, uygun maliyetli ve güvenli bir dış depolama seçeneğidir. Rclone veya SCP/SFTP kullanarak yedekleri Storage Box'a veya başka bir S3 uyumlu depolama hizmetine (örn: Backblaze B2, DigitalOcean Spaces) otomatik olarak senkronize edebilirsiniz.
# Rclone kurulumu (örneğin) # rclone config ile Storage Box bağlantısını yapılandırın rclone sync "$BACKUP_DIR" "my-hetzner-storagebox:backups/mydatabase"Bu komutu yedekleme betiğinizin sonuna ekleyerek yedeklerinizi otomatik olarak dışarıya aktarabilirsiniz.
Uzman İpucu: Sadece yedekleme yapmak yetmez, düzenli aralıklarla yedeklerinizin gerçekten geri yüklenebilir olduğunu test edin. Bir yedekleme planı, ancak test edildiğinde güvenilirdir.İzleme ve Uyarılar: Sorunları Nasıl Tespit Edersiniz?
Bir yönetilen hizmetin önemli bir parçası da izlemedir. Sunucunuzun ve veritabanınızın performansını sürekli izlemelisiniz. Küçük bir sunucu için Prometheus ve Grafana gibi ağır araçlar yerine daha hafif çözümlerle başlayabiliriz:
- Sistem Kaynakları:
top,htop,dstatveyaglancesgibi araçlarla CPU, RAM ve disk kullanımını anlık olarak izleyebilirsiniz. - Disk Alanı Takibi: Disk alanı dolmadan uyarı almak kritiktir. Basit bir betik yazıp Cron ile çalıştırarak diskin belli bir yüzdesinin üzerine çıktığında e-posta gönderebilirsiniz.
- Veritabanı Logları: PostgreSQL'in kendi log dosyalarını (
/var/log/postgresql/) düzenli olarak kontrol edin. Hata mesajları, yavaş sorgular veya beklenmedik aktiviteler hakkında bilgi edinebilirsiniz.log_min_duration_statementgibi ayarlarıpostgresql.confiçinde yapılandırarak yavaş sorguları tespit edebilirsiniz. - Basit Uyarılar:
monitgibi hafif bir sistem izleme aracı kurarak veritabanı servisinin çalışıp çalışmadığını veya disk kullanımının belirli bir eşiği aşıp aşmadığını kontrol edebilir ve size e-posta ile bildirim göndermesini sağlayabilirsiniz.
Vaka Analizi: Bir E-ticaret Sitesinin Yedekleme İhtiyacı
Düşük bütçeli bir butik e-ticaret sitesinin verilerini Hetzner CX11 üzerinde barındırdığını düşünelim. Her gün yeni siparişler, müşteri bilgileri ve ürün güncellemeleri yapılıyor. Bu verilerin kaybı, işletme için feci sonuçlar doğurabilir. Yukarıda bahsedilen otomatik yedekleme betiği, her gece bu kritik veritabanını yedekleyip Hetzner Storage Box'a yükleyerek felaket kurtarma senaryolarına karşı bir kalkan oluşturur. Ayrıca, disk doluluk oranını izleyen bir betik, disk dolmadan önlem alınmasını sağlayarak kesintisiz hizmete katkıda bulunur. Bu yaklaşım, büyük bulut servislerindeki otomatik yedekleme kadar sofistike olmasa da, benzer bir güvenlik seviyesi sunar ve küçük işletmeler için son derece maliyet etkindir.
Yüksek Erişilebilirlik (HA): €3 Bütçeyle Ne Kadar Mümkün?
Yüksek erişilebilirlik (HA), bir sistemin arıza durumunda bile çalışmaya devam etmesini sağlamaktır. €3'lük tek bir sunucuda gerçek yüksek erişilebilirlik sağlamak zordur, zira HA genellikle en az iki veya daha fazla sunucu gerektirir. Ancak tek bir sunucuda bile "yüksek erişilebilirlik benzeri" bazı adımlar atılabilir:
- Otomatik Yeniden Başlatma: Veritabanı servisinin çökmesi durumunda sistemin otomatik olarak yeniden başlatılmasını sağlamak (
systemdile kolayca yapılandırılabilir). - Yedekleme ve Geri Yükleme Hızı: Hızlı yedekleme ve kurtarma mekanizmalarına sahip olmak, bir felaket anında sistemi kısa sürede ayağa kaldırmanın anahtarıdır.
Daha gelişmiş HA çözümleri (örneğin PostgreSQL için replikasyon, Patroni, PgBouncer veya MySQL için Galera Cluster), birden fazla sunucu ve daha karmaşık bir yapılandırma gerektirir. Bu çözümler, tek bir €3 sunucunun ötesine geçse de, projeniz büyüdükçe Hetzner'deki daha güçlü sunuculara veya ek sunuculara geçerek bu tür yapılandırmaları uygulamak mümkündür. Özetle, tek bir CX11 sunucusunda tam bir HA sağlamak gerçekçi değildir, ancak temel "yönetilen" özelliklerle kesinti süresini minimize etmek ve veri kaybını önlemek için önemli adımlar atılabilir. Bu bölümle birlikte, kendi yönetilen veritabanı hizmetimizi bir adım daha ileri taşımış olduk. Şimdi, veri egemenliği ve güvenlik konularına daha derinlemesine bakalım.
Güvenlik ve Uyum: Veri Egemenliği Nasıl Sağlanır?
Veritabanı hizmeti kurarken güvenlik, yalnızca teknik bir zorunluluk değil, aynı zamanda AB içinde iş yapan şirketler için yasal bir uyumluluk gerekliliğidir. Özellikle veri egemenliği ve GDPR (Genel Veri Koruma Tüzüğü) ile birlikte düşünüldüğünde, güvenlik katmanları daha da önem kazanmaktadır. Hetzner sunucuları üzerinde kendi veritabanımızı barındırmanın en büyük avantajlarından biri, verilerinizin fiziksel olarak AB topraklarında kalacağını garanti edebilmektir. Ancak bu, tüm güvenlik sorumluluğunun ortadan kalktığı anlamına gelmez.
GDPR ve Veri Lokasyonu: Neden Önemli?
GDPR, AB vatandaşlarının kişisel verilerinin nasıl işleneceğini ve saklanacağını düzenleyen kapsamlı bir yasadır. Bu yasa, verilerin nerede bulunduğuna, kimin erişebildiğine ve hangi yasalara tabi olduğuna büyük önem verir. Özellikle Schrems II kararı sonrasında, AB dışındaki (özellikle ABD'deki) bulut sağlayıcılarını kullanmak, AB şirketleri için yasal belirsizlikler yaratmıştır. Hetzner gibi Almanya merkezli bir sağlayıcı kullanmak, verilerinizin AB veri koruma yasalarına tam olarak tabi olmasını sağlar ve bu yasal belirsizlikleri ortadan kaldırır. Bu, veri egemenliği yolculuğunda atılacak en sağlam adımlardan biridir.
Güvenlik Katmanları: Veritabanınızı Nasıl Korursunuz?
Kendi yönettiğiniz bir veritabanının güvenliğini sağlamak için birden fazla katmanı düşünmeniz gerekir:
- Ağ Güvenliği (Firewall): Daha önce de belirttiğimiz gibi, Uncomplicated Firewall (UFW) gibi bir araç kullanarak sunucunuza gelen trafiği sıkı bir şekilde kontrol edin. Sadece gerekli portları (SSH, HTTP, HTTPS ve veritabanı erişimi için belirli IP'lerden) açın. Veritabanı portunu (
5432for PostgreSQL) sadece uygulamanızın çalıştığı sunucunun IP adresinden gelen bağlantılara açmak en güvenli yöntemdir. - Veritabanı Kimlik Doğrulaması: Güçlü ve karmaşık parolalar kullanın. Parolaları düzenli olarak değiştirin. PostgreSQL'de
scram-sha-256gibi güvenli kimlik doğrulama yöntemlerini tercih edin. Asla varsayılan kullanıcı adlarını ve parolaları kullanmayın. - SSL/TLS ile Şifreleme: Veritabanı ile uygulama sunucunuz arasındaki iletişimi SSL/TLS ile şifreleyin. Bu, trafiği dinleyen kötü niyetli kişilerin verilerinizi ele geçirmesini engeller.
# PostgreSQL için SSL/TLS'i yapılandırmak amacıylapostgresql.confiçinde # ssl = on # ssl_cert_file = '/path/to/server.crt' # ssl_key_file = '/path/to/server.key' # gibi ayarlar yapılır. Sertifikaları Let's Encrypt gibi bir yerden alabilirsiniz. - Düzenli Yamalar ve Güncellemeler: İşletim sisteminizi ve veritabanı yazılımınızı düzenli olarak güncelleyin. Güvenlik açıkları, genellikle yeni yamalarla kapatılır. Bir
apt update && apt upgraderutini oluşturmak kritiktir. - Veri Şifrelemesi (at Rest): Hassas verileri veritabanında şifreli olarak saklamayı düşünün. Bu, veritabanına yetkisiz erişim sağlansa bile verilerin okunmasını zorlaştırır. Disk şifrelemesi (LUKS gibi) de sunucu seviyesinde bir koruma sağlayabilir, ancak bu €3 sunucunun performansını biraz etkileyebilir.
- Yetkilendirme ve Erişim Kontrolü: Veritabanı kullanıcılarına sadece ihtiyaç duydukları minimum yetkileri verin (principle of least privilege). Örneğin, bir web uygulaması kullanıcısına sadece
SELECT,INSERT,UPDATE,DELETEyetkileri verin,CREATE TABLEveyaDROP DATABASEgibi yetkileri değil. - Audit Logları ve İzleme: Veritabanı erişimlerini ve değişikliklerini kaydeden denetim (audit) günlüklerini etkinleştirin. Bu logları düzenli olarak inceleyerek şüpheli aktiviteleri tespit edebilirsiniz. PostgreSQL için
log_statementveyapgauditgibi uzantılar kullanılabilir.
Kendi sunucunuzda bu güvenlik önlemlerini uygulamak, büyük bulut sağlayıcılarının sunduğu standart güvenlik özelliklerine benzer bir koruma katmanı oluşturmanızı sağlar. Ancak en büyük fark, tüm bu yapılandırmaların sizin kontrolünüzde olmasıdır. Bu kontrol, özellikle hassas verilerle uğraşan finans, sağlık veya hukuk sektöründeki şirketler için vazgeçilmezdir. AB veri egemenliği bağlamında, bu tür detaylı güvenlik kontrolü, yasal uyumluluğun temelini oluşturur. Sonuç olarak, güvenlik, maliyet avantajından daha önemli bir faktör olarak ele alınmalı ve sürekli bir süreç olarak yönetilmelidir.
Maliyet Analizi ve Ölçeklenebilirlik: Gerçekten Kârlı mı?
Kendi yönetilen veritabanı hizmetimizi €3'lük Hetzner sunucuları üzerinde kurmanın teknik detaylarını ele aldık. Şimdi ise bu yaklaşımın ekonomik boyutunu ve gelecekteki ölçeklenebilirlik potansiyelini değerlendirelim. Bu, özellikle maliyet bilincine sahip girişimler ve KOBİ'ler için hayati önem taşımaktadır.
Büyük Bulut Sağlayıcılarıyla Maliyet Karşılaştırması
Büyük bulut sağlayıcılarının (AWS, Azure, GCP) yönetilen veritabanı hizmetleri, sağladıkları kolaylık ve otomasyon seviyesi göz önüne alındığında genellikle daha pahalıdır. Basit bir karşılaştırma yapalım:
- Hetzner CX11 (kendi yönetimi): Yaklaşık €3/ay. Buna iş gücü maliyetini (kurulum, bakım, izleme için harcanan zaman) eklemeniz gerekir. Ancak bu, düşük trafikli senaryolar için başlangıç maliyetini inanılmaz derecede düşürür.
- AWS RDS (örneğin db.t3.micro - 2 vCPU, 1 GB RAM, 20 GB GP2): Bu konfigürasyon, bölgeye ve rezervasyon tipine göre değişmekle birlikte, aylık ortalama 20-30 USD civarında bir maliyete sahiptir. Buna ek olarak veri transfer ücretleri, I/O işlemleri ve ek depolama maliyetleri de eklenebilir.
- Azure SQL Database (Basic tier - 5 DTU, 2 GB): Aylık ortalama 10-15 USD civarında bir maliyetle başlar.
- GCP Cloud SQL (PostgreSQL, db-f1-micro - 1 vCPU, 0.6 GB RAM, 10 GB depolama): Aylık ortalama 10-20 USD civarında bir maliyetle başlar.
Görüldüğü üzere, €3'lük bir Hetzner sunucusu, büyük bulut sağlayıcılarının en küçük yönetilen veritabanı örneklerinden bile belirgin şekilde daha ucuzdur. Bu maliyet avantajı, özellikle başlangıç aşamasındaki veya düşük bütçeli projeler için caziptir. Elbette, bu maliyetlere kendi zamanınızı veya bir uzmanın zamanını eklemek zorundasınız, ancak küçük bir uygulamanın bakımı ilk başta çok fazla zaman almayabilir.
€3 Sunucunun Sınırları ve Ne Zaman Yükseltme Yapılmalı?
€3'lük CX11 sunucu, belirli bir noktaya kadar iyi hizmet verecektir. Ancak uygulamanız büyüdükçe veya trafik arttıkça, aşağıdaki durumlarda daha güçlü bir sunucuya (veya birden fazlasına) geçiş yapmayı düşünmelisiniz:
- CPU Kullanımı: Veritabanı sorgularınız sürekli olarak CPU kaynaklarını %80-90'ın üzerinde kullanıyorsa.
- RAM Kullanımı: Sürekli olarak diskte swap alanı kullanılıyorsa (RAM yetersizliği).
- Disk I/O Bottleneck: Disk okuma/yazma hızları veritabanı performansınızı sınırlıyorsa (özellikle NVMe olsa bile büyük veritabanları veya yoğun işlemler için).
- Artan Gecikme: Uygulamanızda veritabanı sorgularının yanıt süreleri belirgin şekilde artıyorsa.
- Eş Zamanlı Bağlantı Sayısı: Veritabanının kaldırabileceğinden daha fazla eş zamanlı bağlantı talebi geliyorsa.
Hetzner Cloud paneli üzerinden sunucunuzu daha güçlü bir modele (örneğin CX21, CX31 veya CX41 gibi daha fazla vCPU, RAM ve depolama sunan) yükseltmek oldukça kolaydır. Genellikle sunucuyu kapatıp yeniden boyutlandırıp tekrar açmanız yeterlidir. Bu, "dikey ölçekleme" (vertical scaling) olarak bilinir.
Ölçeklenebilirlik Çözümleri: Yatay ve Dikey Ölçekleme
Projeniz daha da büyüdüğünde, sadece dikey ölçekleme yeterli olmayabilir. Bu durumda "yatay ölçekleme" (horizontal scaling) çözümlerini düşünmeniz gerekir:
- Veritabanı Replikasyonu (Replication): Bir ana (primary) veritabanı ve bir veya daha fazla ikincil (standby/replica) veritabanı kurarak okuma işlemlerini ikincil sunuculara dağıtabilirsiniz. Bu, veritabanı üzerindeki yükü azaltır ve okuma yoğun uygulamalar için performansı artırır. PostgreSQL'de Streaming Replication veya MySQL'de binlog replikasyonu bu amaca hizmet eder.
- Sharding: Verilerinizi birden fazla veritabanı sunucusuna bölmek (her sunucu verinin bir alt kümesini barındırır). Bu, çok büyük veritabanları ve çok yüksek trafikli uygulamalar için daha karmaşık ama etkili bir çözümdür. Ancak, bu çözüm genellikle uygulama tarafında önemli değişiklikler gerektirir ve tek bir €3 sunucu senaryosunun ötesindedir.
- Veritabanı Havuzlama (Connection Pooling): PgBouncer (PostgreSQL için) gibi araçlar kullanarak veritabanı bağlantılarını yönetebilir ve sunucudaki bağlantı yükünü azaltabilirsiniz.
Kendi yönetilen veritabanı hizmetinizi kurmak, maliyet açısından büyük avantajlar sunarken, ölçeklenebilirlik konusunda da size tam kontrol sağlar. Hetzner'in esnek bulut altyapısı sayesinde, küçük bir €3'lük sunucudan başlayıp, projenizin ihtiyaçları doğrultusunda kolayca daha büyük, daha güçlü veya dağıtılmış mimarilere geçiş yapabilirsiniz. Önemli olan, maliyet ve kontrol dengesini doğru kurmak ve projenizin gerçek ihtiyaçlarını anlamaktır.
Sonuç: AB Veri Egemenliği Yolculuğunda Kendi Çözümümüz
Bu makale boyunca, €3'lük Hetzner sunucuları üzerinde kendi yönetilen veritabanı hizmetimizi inşa etmenin teknik adımlarını, ekonomik boyutlarını ve özellikle AB bulut egemenliği bağlamındaki önemini detaylı bir şekilde inceledik. Gördüğümüz gibi, bu yaklaşım sadece maliyet avantajları sunmakla kalmıyor, aynı zamanda veri güvenliği, hukuki uyumluluk ve altyapı üzerinde tam kontrol gibi paha biçilmez faydalar da sağlıyor.
Kendi veritabanı hizmetinizi kurmak, başlangıçta biraz daha fazla teknik bilgi ve zaman gerektirse de, uzun vadede size önemli ölçüde esneklik ve bağımsızlık kazandırır. Büyük bulut sağlayıcılarının "kilitleme" etkilerinden kaçınabilir, veri egemenliği gereksinimlerini daha kolay karşılayabilir ve bütçenizi daha stratejik alanlara yönlendirebilirsiniz. Hetzner'in AB merkezli altyapısı sayesinde, GDPR gibi düzenlemelerle uyumlu kalarak, verilerinizin AB sınırları içinde kalmasını ve AB yasalarına tabi olmasını sağlayabilirsiniz.
Elbette, bu çözümün bazı sınırlamaları da vardır. Büyük ölçekli, küresel erişilebilirliği olan veya çok yüksek trafikli uygulamalar için, büyük bulut sağlayıcılarının sunduğu sofistike küresel altyapılar ve tam otomasyon avantajları daha cazip olabilir. Ancak, küçük ve orta ölçekli işletmeler, yeni başlayan girişimler, geliştirme ve test ortamları veya hassas verilere sahip projeler için Hetzner üzerindeki kendi çözümünüz, ideal bir denge noktası sunar. Bu, sadece bir teknik uygulama değil, aynı zamanda dijital egemenliğe doğru atılan bilinçli bir adımdır.
Sıkça Sorulan Sorular (SSS)
€3 Hetzner sunucusu hangi tür uygulamalar için yeterlidir?
€3'lük Hetzner CX11 sunucusu, düşük-orta trafikli web siteleri, kişisel bloglar, küçük e-ticaret siteleri, API arka uçları, geliştirme/test ortamları ve başlangıç aşamasındaki mobil uygulamalar gibi senaryolar için yeterlidir. Günlük birkaç yüz ila birkaç bin veritabanı işlemi ve sınırlı eş zamanlı kullanıcı sayısı olan uygulamalar için ideal bir başlangıç noktasıdır.
Yüksek trafikli bir site için bu yaklaşım uygun mu?
Hayır, yüksek trafikli (örneğin günlük yüz binlerce veya milyonlarca istek alan) bir site için tek bir €3'lük sunucu yetersiz kalacaktır. Bu tür senaryolarda Hetzner'in daha güçlü sunucularını (dikey ölçekleme) veya birden fazla sunucu kullanarak veritabanı replikasyonu, sharding gibi yatay ölçekleme çözümlerini düşünmeniz gerekir. Büyük bulut sağlayıcılarının küresel dağıtık sistemleri bu durumda daha uygun olabilir.
Yönetilen veritabanı hizmeti kurmak ne kadar teknik bilgi gerektirir?
Bu makalede açıklanan adımları uygulamak için temel Linux komut bilgisi, SSH kullanımı ve veritabanı yönetim sistemlerinin (PostgreSQL veya MySQL) temel prensipleri hakkında bilgi sahibi olmak gerekir. Ayrıca, güvenlik duvarı yapılandırması, cron jobs oluşturma ve temel betik yazma becerileri de faydalı olacaktır. Orta seviye bir geliştirici veya sistem yöneticisi için yönetilebilir bir süreçtir.
Hetzner'in kendi yönetilen veritabanı hizmeti yok mu?
Evet, Hetzner, yakın zamanda Managed Databases (Yönetilen Veritabanları) hizmetini duyurmuştur. Bu hizmet, PostgreSQL ve MySQL gibi veritabanlarını yönetilen bir hizmet olarak sunar ve yedekleme, ölçeklendirme gibi operasyonel yükleri Hetzner'in üstlenmesini sağlar. Bu makale, Hetzner'in kendi yönetilen hizmeti olmasa bile, aynı hizmeti manuel olarak nasıl oluşturabileceğinizi veya mevcut Hetzner hizmetine bir alternatif veya tamamlayıcı olarak kendi kontrolünüzde nasıl bir çözüm kurabileceğinizi göstermektedir. Kendi çözümünüzü kurmak, maliyetleri daha da düşürme ve bazı spesifik yapılandırmalar üzerinde tam kontrol sağlama potansiyeli sunar.
AB dışından erişim veri egemenliğini nasıl etkiler?
Verileriniz fiziksel olarak bir AB ülkesindeki Hetzner sunucusunda barınsa bile, eğer bu verilere AB dışından erişim sağlanıyorsa (örneğin ABD'deki bir geliştirici ekibi tarafından), bu durum veri aktarımı olarak kabul edilir ve GDPR'ın ilgili maddeleri (Bölüm V - Üçüncü Ülkelere veya Uluslararası Kuruluşlara Kişisel Veri Aktarımı) devreye girer. Bu durumda, standart sözleşme maddeleri (SCC'ler) veya diğer geçerli aktarım mekanizmaları gibi uygun önlemlerin alınması gerekebilir. Veri egemenliği, sadece fiziksel lokasyon değil, aynı zamanda veriye kimin, hangi koşullarda ve hangi yasalara tabi olarak erişebildiği ile de ilgilidir.