Modern web uygulamaları geliştirirken veri güvenliği ve erişilebilirliği her zaman öncelikli olmuştur. PocketBase, hızlı ve hafif bir backend çözümü sunsa da, uygulamanızın internet üzerinde güvenli bir şekilde yayınlanması için alan adı (domain) ve TLS/SSL sertifikası kurulumu hayati önem taşır. Bu kapsamlı rehberde, PocketBase projenizi kendi alan adınız üzerinden güvenli (HTTPS) bir bağlantıyla nasıl yayınlayacağınızı adım adım öğrenecek, böylece kullanıcılarınız için hem güvenilir hem de profesyonel bir deneyim sunacaksınız.
Günümüzde dijital dünyanın her köşesinde veri akışı yaşanıyor ve bu verilerin güvenliği, hem geliştiriciler hem de son kullanıcılar için tartışmasız bir öncelik haline gelmiştir. PocketBase, Go tabanlı, tek bir ikili dosya içinde çalışan, kolayca entegre edilebilen bir backend çözümüdür. SQLite veritabanı, yönetici paneli, API ve kimlik doğrulama özelliklerini bir arada sunarak geliştirme sürecini önemli ölçüde hızlandırır. Ancak, PocketBase uygulamanızı basitçe bir sunucuya yükleyip HTTP üzerinden yayınlamak, beraberinde ciddi güvenlik risklerini getirir. Peki, bu riskler nelerdir ve PocketBase projenizi neden kendi alan adınız ve bir TLS/SSL sertifikası ile güvenli hale getirmelisiniz?
Öncelikle, şifresiz HTTP bağlantılarının en büyük zaafı, verilerin ağ üzerinden açık metin olarak iletilmesidir. Bu durum, hassas bilgilerinizin (kullanıcı adları, şifreler, kişisel veriler, ödeme bilgileri) kötü niyetli kişiler tarafından kolayca ele geçirilmesine zemin hazırlar. Man-in-the-Middle (MITM) saldırıları, dinleme (eavesdropping) ve veri kurcalama gibi tehditler, HTTP bağlantılarında yaygın olarak karşılaşılan durumlardır. Bu tür saldırılar, kullanıcılarınızın güvenini sarsmakla kalmaz, aynı zamanda yasal ve itibar kaybına yol açabilir.
İşte tam bu noktada TLS (Transport Layer Security) devreye girer. Halk arasında daha çok SSL (Secure Sockets Layer) olarak bilinen bu protokol, sunucu ile istemci arasındaki iletişimi şifreleyerek veri bütünlüğünü ve gizliliğini sağlar. Bir TLS sertifikası olmadan, tarayıcılar sitenizi “Güvenli Değil” olarak işaretleyecek ve bu da ziyaretçilerinizi sitenizden uzaklaştıracaktır. Arama motorları da (özellikle Google), HTTPS kullanan siteleri önceliklendirerek SEO sıralamanız üzerinde olumlu bir etki yaratır. Kendi alan adınız üzerinden güvenli bir bağlantı kurmak, markanızın profesyonelliğini ve kullanıcılarınıza verdiğiniz değeri de gösterir.
Bir vaka analizi olarak, küçük bir e-ticaret sitesi düşünelim. Başlangıçta PocketBase’i hızlıca kurup HTTP üzerinden yayınlamış olabilirler. Ancak, müşteriler ödeme bilgilerini girerken tarayıcının “Güvenli Değil” uyarısını görmeye başladığında, bu durum satışları ve müşteri güvenini doğrudan olumsuz etkileyecektir. Müşteriler, verilerinin güvende olmadığını düşünerek alışverişi terk edebilir. Bu senaryoda, bir alan adı ve TLS kurulumu, sadece teknik bir gereklilik olmaktan çıkıp, işletmenin hayatta kalması ve büyümesi için kritik bir iş kararına dönüşür. PocketBase’in esnek yapısı sayesinde, bu güvenlik katmanlarını entegre etmek düşündüğünüzden daha kolaydır. Bu makalenin devamında, PocketBase projenizi bu şekilde nasıl güçlendireceğinizi adım adım keşfedeceğiz.
Temel Kavramlar: Domain, DNS ve TLS Nelerdir?
PocketBase ile güvenli bir uygulamanın temellerini atmadan önce, bu sürecin ana bileşenlerini anlamak çok önemlidir. Alan adı (domain), DNS (Domain Name System) ve TLS (Transport Layer Security) birbirini tamamlayan ve internet üzerindeki güvenli iletişimin yapı taşlarını oluşturan kavramlardır. Bu bölümde, her birini detaylıca inceleyerek konuya yabancı olan okuyucular için sağlam bir temel oluşturacağız.
Alan Adı (Domain) Nedir ve Neden Önemlidir?
Alan adı, bir web sitesinin internet üzerindeki adresi gibidir. Örneğin, “google.com” bir alan adıdır. İnternet üzerindeki her sunucunun aslında bir IP adresi (örn. 192.0.2.1) vardır. Ancak insanların sayı dizilerini akılda tutması zor olduğu için, alan adları bu IP adreslerinin hatırlanabilir ve okunabilir karşılıklarıdır. Alan adları sayesinde kullanıcılar, karmaşık IP adresleri yerine anlamlı isimler yazarak web sitelerine erişebilirler. Kendi alan adınız olması, projenizin profesyonel görünmesini sağlar, marka bilinirliğini artırır ve kullanıcıların sitenize daha kolay ulaşmasını sağlar. Bir alan adı satın almak, bir kayıt kuruluşu (registrar) aracılığıyla yapılır ve belirli bir süre için (genellikle yıllık) kiralanır.
DNS (Domain Name System) Nasıl Çalışır?
DNS, internetin telefon rehberi gibidir. Kullanıcı bir web tarayıcısına bir alan adı yazdığında, DNS bu alan adını ilgili sunucunun IP adresine çevirir. Bu sayede tarayıcı, doğru sunucuya bağlanabilir. DNS, dünya genelinde dağıtılmış bir sunucu ağıdır ve bu sunucular, alan adları ile IP adresleri arasındaki eşleşmeleri tutar. Bir alan adını sunucunuza yönlendirmek için DNS kayıtları kullanılır. En yaygın DNS kayıt türleri şunlardır:
- A Kaydı (Address Record): Bir alan adını doğrudan bir IPv4 adresine eşler. Örneğin,
ornek.comadresini sunucunuzun IP adresine (örn.123.45.67.89) yönlendirir. - CNAME Kaydı (Canonical Name Record): Bir alan adını başka bir alan adına yönlendirir. Genellikle
www.ornek.comalt alan adını ana alan adıornek.com‘a yönlendirmek için kullanılır. Bu, ana alan adının IP adresi değiştiğinde, CNAME kaydını güncellemeye gerek kalmadan alt alan adının da otomatik olarak güncellenmesini sağlar. - NS Kaydı (Name Server Record): Bir alan adının hangi DNS sunucuları tarafından yönetildiğini belirtir.
- MX Kaydı (Mail Exchange Record): Alan adına gelen e-postaların hangi posta sunucusuna gönderileceğini belirtir.
Bir DNS kaydını değiştirdiğinizde, bu değişikliklerin tüm internet genelinde yayılması (DNS propagation) biraz zaman alabilir. Bu süre genellikle birkaç dakika ile 48 saat arasında değişebilir.
TLS (Transport Layer Security) Nedir ve Neden HTTP’den Farklıdır?
TLS, internet üzerinden gönderilen verilerin güvenliğini sağlamak için tasarlanmış kriptografik bir protokoldür. Daha önceki versiyonu SSL (Secure Sockets Layer) olarak bilinse de, günümüzde doğru terim TLS’dir. TLS, üç temel güvenlik hizmeti sunar:
- Şifreleme (Encryption): Sunucu ile istemci arasındaki tüm iletişimi şifreleyerek, verilerin kötü niyetli kişiler tarafından okunmasını engeller.
- Kimlik Doğrulama (Authentication): İstemcinin doğru sunucuya bağlandığından ve sunucunun iddia ettiği kişi olduğundan emin olmasını sağlar. Bu, bir TLS sertifikası aracılığıyla gerçekleşir.
- Veri Bütünlüğü (Data Integrity): İletilen verilerin yolculuk sırasında değiştirilmediğini garanti eder.
HTTP (Hypertext Transfer Protocol), web üzerinde veri iletmek için kullanılan temel protokoldür ancak verileri şifrelemez. Bu nedenle, HTTP üzerinden gönderilen bilgiler kolayca dinlenebilir. HTTPS (Hypertext Transfer Protocol Secure) ise, HTTP’nin TLS protokolü ile birleştirilmiş halidir. Tarayıcınızda bir web sitesinin adres çubuğunda “https://” gördüğünüzde, bu bağlantının TLS ile şifrelendiğini ve güvenli olduğunu anlarsınız. Bir TLS sertifikası, bir sertifika yetkilisi (CA – Certificate Authority) tarafından verilir ve web sitesinin kimliğini doğrular. Let’s Encrypt gibi hizmetler sayesinde bu sertifikaları ücretsiz olarak edinebilirsiniz.
Bu temel kavramlar, PocketBase uygulamanızı internete açarken size yol gösterecek ve neden her bir adımı attığınızı anlamanıza yardımcı olacaktır. İlerleyen bölümlerde, bu kavramları PocketBase projenize nasıl uygulayacağımızı detaylıca inceleyeceğiz.
PocketBase’i Bir Sunucuya Yükleme ve Başlatma: Güvenli İlk Adımlar
PocketBase uygulamanızı kendi alan adınız ve TLS ile güvenli hale getirme yolculuğumuzun ilk pratik adımı, onu bir sunucuya yüklemek ve düzgün bir şekilde çalıştırmaktır. Bu bölüm, sıfırdan bir sunucuda PocketBase’i nasıl kuracağınızı ve temel yapılandırmaları nasıl yapacağınızı anlatacaktır. Genellikle bir Linux sunucusu (Ubuntu, Debian vb.) kullanıldığını varsayarak ilerleyeceğiz.
Ön Gereksinimler ve Sunucu Hazırlığı
Başlamadan önce sahip olmanız gerekenler:
- Bir Linux Sunucusu: DijitalOcean, AWS EC2, Google Cloud, Vultr veya hatta kendi ev sunucunuz olabilir. SSH erişimi olan bir sunucuya ihtiyacınız var.
- SSH Erişimi: Sunucunuza uzaktan bağlanmak için bir SSH istemcisi (Linux/macOS için terminal, Windows için PuTTY veya WSL).
- Temel Linux Komut Bilgisi: Dizinlerde gezinme, dosya indirme, dosya izinleri vb.
Sunucunuza SSH ile bağlandıktan sonra, ilk olarak sisteminizi güncelleyerek başlayın. Bu, güvenlik yamalarını almanızı ve mevcut paketlerin en son sürümlerini kullanmanızı sağlar:
sudo apt update
sudo apt upgrade -y
PocketBase'i İndirme ve Çalıştırma
PocketBase, Go ile yazıldığı için tek bir ikili dosya olarak gelir ve kurulumu oldukça basittir. Genellikle en son sürümü projenizin kök dizinine indirip çalıştırırsınız.
- Bir Dizin Oluşturun: PocketBase için ayrı bir dizin oluşturmak iyi bir uygulamadır.
- PocketBase'i İndirin: PocketBase'in resmi GitHub sayfasından en son sürümün Linux için olan ikili dosyasını indirin. Mimariye (amd64, arm64) dikkat edin.
- Dosyayı Açın ve İzinleri Ayarlayın: İndirdiğiniz zip dosyasını açın ve çalıştırılabilir izinlerini verin.
- PocketBase'i Başlatın: İlk çalıştırmada yönetici paneli için bir kullanıcı oluşturmanız istenecektir.
mkdir -p /opt/pocketbase
cd /opt/pocketbase
# Örnek: Linux AMD64 için en son sürümü indirme (sürüm numarasını güncelleyin)
wget https://github.com/pocketbase/pocketbase/releases/download/v0.22.8/pocketbase_0.22.8_linux_amd64.zip
sudo apt install unzip # Eğer unzip kurulu değilse
unzip pocketbase_0.22.8_linux_amd64.zip
chmod +x pocketbase
./pocketbase serve --http 0.0.0.0:8090
Bu komut, PocketBase'i tüm arayüzlerde (0.0.0.0) 8090 portunda HTTP üzerinden başlatır. Tarayıcınızdan sunucunuzun IP adresi ve 8090 portu ile (örn. http://[SUNUCU_IP]:8090/_/) yönetici paneline erişebilirsiniz. İlk erişimde bir yönetici hesabı oluşturmanız istenecektir. Bu adım, PocketBase'in temel veri dosyalarını (pb_data/) ve ayarlarını oluşturacaktır.
PocketBase'i Bir Sistem Servisi Olarak Çalıştırma (systemd)
PocketBase'i elle çalıştırmak yerine, sunucu yeniden başlatıldığında otomatik olarak başlaması ve arka planda sürekli çalışması için bir systemd servisi olarak yapılandırmak en iyi yaklaşımdır. Bu, uygulamanızın kesintisiz çalışmasını sağlar.
- Servis Dosyasını Oluşturun:
- Aşağıdaki içeriği yapıştırın ve kaydedin (
Ctrl+O,Enter,Ctrl+X): - Servisi Etkinleştirin ve Başlatın:
- Servis Durumunu Kontrol Edin:
sudo nano /etc/systemd/system/pocketbase.service
[Unit]
Description=PocketBase Service
After=network.target
[Service]
Type=simple
User=www-data # veya kendi kullanıcı adınız, düşük yetkili bir kullanıcı tavsiye edilir
Group=www-data # veya kendi grup adınız
WorkingDirectory=/opt/pocketbase
ExecStart=/opt/pocketbase/pocketbase serve --http 0.0.0.0:8090
Restart=always
RestartSec=5
[Install]
WantedBy=multi-user.target
Uzman İpucu: User ve Group ayarlarını, uygulamanızı çalıştırmak için özel olarak oluşturduğunuz, düşük yetkili bir kullanıcıya (örn. pocketbase_user) atamanız, güvenlik açısından en iyi uygulamadır. Böylece, PocketBase'in çalışması sırasında herhangi bir güvenlik açığı oluşsa bile, sunucunun tamamına erişim engellenmiş olur.
sudo systemctl daemon-reload
sudo systemctl enable pocketbase
sudo systemctl start pocketbase
sudo systemctl status pocketbase
Artık PocketBase, sunucunuzun 8090 portunda arka planda çalışıyor. Bu kurulum, henüz güvenli bir bağlantı sağlamasa da, PocketBase'in temel operasyonel hazırlığını tamamlamış olursunuz. Sonraki adımlarda, alan adınızı sunucunuza yönlendirme ve TLS ile güvenli hale getirme işlemlerine geçeceğiz.
Alan Adınızı Sunucunuza Yönlendirme: DNS Ayarları Nasıl Yapılır?
PocketBase'i sunucunuzda çalışır duruma getirdikten sonraki en kritik adımlardan biri, satın aldığınız alan adını (domain) sunucunuzun IP adresine yönlendirmektir. Bu yönlendirme, DNS (Domain Name System) kayıtları aracılığıyla gerçekleştirilir. Bu bölümde, alan adınızı sunucunuza nasıl bağlayacağınızı ve bu sürecin detaylarını adım adım açıklayacağız.
Alan Adı Kayıt Kuruluşu (Registrar) İşlemleri
İlk olarak, alan adınızı satın aldığınız kayıt kuruluşunun (GoDaddy, Namecheap, Google Domains, Natro, İsimtescil vb.) yönetim paneline giriş yapmanız gerekmektedir. Her kayıt kuruluşunun arayüzü biraz farklı olsa da, temel olarak "DNS Yönetimi", "Domain Ayarları" veya "Gelişmiş DNS" gibi bir bölüm aramalısınız.
Bu bölümde, alan adınızla ilgili mevcut DNS kayıtlarını göreceksiniz. Eğer alan adınızı yeni aldıysanız veya ilk kez yapılandırıyorsanız, varsayılan kayıtlar bulunabilir. Amacımız, ana alan adınızı ve isteğe bağlı olarak "www" alt alan adınızı sunucunuzun IP adresine işaret etmektir.
Gerekli DNS Kayıtlarını Ekleme
Alan adınızı sunucunuza yönlendirmek için en az bir, genellikle iki adet DNS kaydına ihtiyacınız olacaktır:
- A Kaydı (Address Record) Ekleme:
Ana alan adınızı (örn.
ornek.com) sunucunuzun IPv4 adresine yönlendirmek için bir A kaydı oluşturmanız gerekir. Bu kayıt, tarayıcıların alan adınızı yazdıklarında doğrudan sunucunuzu bulmasını sağlar.- Tür (Type):
A - Ad/Host (Name/Host):
@(Bu genellikle ana alan adını temsil eder, bazı panellerde boş bırakılabilir veya alan adının kendisi yazılabilir.) - Değer (Value): Sunucunuzun genel IP adresi (örn.
123.45.67.89) - TTL (Time To Live): Genellikle varsayılan olarak bırakılır (örn. 3600 saniye veya 1 saat). Bu değer, DNS önbelleğe alma süresini belirler. Daha düşük bir TTL, değişikliklerin daha hızlı yayılmasını sağlar ancak DNS sunucuları üzerinde daha fazla yük oluşturur.
- Tür (Type):
- CNAME Kaydı (Canonical Name Record) Ekleme (İsteğe Bağlı ama Önerilir):
Kullanıcıların alan adınıza
www.ornek.comşeklinde de erişebilmesini sağlamak için bir CNAME kaydı eklemeniz önerilir. Bu kayıt,wwwalt alan adını ana alan adınıza yönlendirir. Böylece, ana alan adınızın IP adresi değiştiğinde, sadece A kaydını güncellemeniz yeterli olur.- Tür (Type):
CNAME - Ad/Host (Name/Host):
www - Değer (Value): Ana alan adınız (örn.
ornek.com) - TTL (Time To Live): Varsayılan olarak bırakılır.
- Tür (Type):
Örnek DNS Yapılandırma Tablosu:
| Tür | Ad/Host | Değer | TTL |
|---|---|---|---|
| A | @ |
|
3600 |
| CNAME | www |
|
3600 |
Uzman İpucu: Bazı kayıt kuruluşları, ana alan adı için @ yerine alan adının kendisini (örn. ornek.com) kullanmanızı isteyebilir. DNS paneli arayüzünü dikkatlice inceleyin.
DNS Yayılma Süreci (Propagation)
DNS kayıtlarını güncelledikten sonra, bu değişikliklerin tüm dünyadaki DNS sunucularına yayılması biraz zaman alabilir. Bu süreye "DNS yayılma süreci" (DNS propagation) denir ve genellikle birkaç dakika ile 48 saat arasında değişebilir. Bu süre zarfında, bazı kullanıcılar hala eski IP adresine yönlendirilirken, diğerleri yeni IP adresine yönlendirilebilir.
Yayılma durumunu kontrol etmek için çeşitli online araçları kullanabilirsiniz. Örneğin, whatsmydns.net gibi sitelere alan adınızı yazarak, dünya genelindeki DNS sunucularının alan adınızı hangi IP adresine çözdüğünü görebilirsiniz. Tüm sunucuların doğru IP adresini göstermesi, yönlendirmenin başarılı olduğu anlamına gelir.
Bu adımları tamamladıktan sonra, alan adınız artık sunucunuzun IP adresine işaret ediyor olacaktır. Ancak, PocketBase uygulamanız hala HTTP üzerinden çalışmaktadır. Bir sonraki adım, güvenli bir bağlantı sağlamak için TLS/SSL sertifikası edinmek ve bunu bir reverse proxy ile entegre etmektir. Bu sayede, kullanıcılarınız https://ornek.com adresinden uygulamanıza güvenli bir şekilde erişebilecektir.
Güvenli Bağlantı için TLS/SSL Sertifikası Edinin: Let's Encrypt ile Adım Adım
Alan adınızı sunucunuza yönlendirdikten sonra, PocketBase uygulamanızın güvenli bir HTTPS bağlantısı üzerinden çalışmasını sağlamak için bir TLS/SSL sertifikasına ihtiyacımız var. TLS sertifikaları, verileri şifreleyerek gizliliği ve veri bütünlüğünü sağlarken, aynı zamanda sitenizin kimliğini doğrular. Geçmişte bu sertifikalar oldukça pahalı olabiliyordu, ancak Let's Encrypt sayesinde artık herkes ücretsiz ve otomatik olarak güvenilir TLS sertifikaları edinebilir. Bu bölüm, Let's Encrypt'in nasıl çalıştığını ve bir reverse proxy kullanarak sertifika edinme sürecini açıklayacaktır.
Neden Let's Encrypt?
Let's Encrypt, Internet Security Research Group (ISRG) tarafından işletilen ücretsiz, otomatik ve açık bir Sertifika Yetkilisidir (CA). Misyonu, web'in tamamını şifrelemektir. Temel avantajları şunlardır:
- Ücretsiz: Sertifika edinmek için herhangi bir ücret ödemezsiniz.
- Otomatik: Sertifika alma ve yenileme süreçleri otomatikleştirilebilir, bu da yönetimi kolaylaştırır.
- Açık: Protokolleri ve yazılımları açık kaynaklıdır.
- Güvenilir: Tüm büyük tarayıcılar tarafından güvenilen bir CA'dır.
TLS Sertifikası Nasıl Çalışır?
Bir TLS sertifikası, web sitenizin kimliğini doğrular ve istemci ile sunucu arasındaki iletişimi şifrelemek için kullanılan bir anahtar çifti (açık anahtar ve özel anahtar) içerir. Sertifika, web sitenizin alan adıyla ilişkilendirilir ve Sertifika Yetkilisi tarafından imzalanır. Tarayıcılar, bir siteye bağlandığında bu sertifikayı kontrol eder ve eğer geçerliyse, HTTPS bağlantısını kurar.
Reverse Proxy ve TLS Entegrasyonu
PocketBase kendi içinde temel bir HTTP sunucusuna sahip olsa da, doğrudan internete açmak yerine bir "reverse proxy" (ters vekil sunucu) kullanmak en iyi uygulama ve güvenlik açısından önerilir. Reverse proxy, kullanıcı isteklerini alır, bunları PocketBase gibi backend uygulamanıza iletir ve yanıtları kullanıcıya geri gönderir. Bu mimarinin birçok faydası vardır:
- TLS Sonlandırma: Reverse proxy, TLS bağlantısını sonlandırabilir. Bu, PocketBase'in kendisinin TLS yönetimiyle uğraşmasına gerek kalmadan, yalnızca HTTP üzerinden çalışmasına izin verir. Reverse proxy, gelen HTTPS isteklerini şifresini çözer ve bunları dahili olarak HTTP üzerinden PocketBase'e iletir.
- Yük Dengeleme: Birden fazla backend sunucunuz varsa, reverse proxy gelen trafiği dağıtabilir.
- Güvenlik: PocketBase'i doğrudan dışarıya maruz bırakmak yerine, reverse proxy bir güvenlik katmanı görevi görür. Örneğin, saldırıları filtreleyebilir veya hız sınırlamaları uygulayabilir.
- Ek Özellikler: HTTP/2, sıkıştırma, önbelleğe alma gibi ek web sunucusu özelliklerini sunar.
Bu rehberde, Let's Encrypt sertifikalarını yönetmek ve PocketBase için reverse proxy görevi görmek üzere iki popüler seçeneği inceleyeceğiz: Caddy ve Nginx + Certbot.
Vaka Analizi: Küçük Bir İşletmenin Güvenlik İhtiyacı
Bir web geliştiricisi olan Ayşe, yerel bir fırın için online sipariş sistemi kuruyor. Müşterilerin kişisel bilgilerini ve ödeme tercihlerini gireceği bu sistemin güvenli olması, fırının itibarı ve yasal uyumluluğu açısından kritik. Ayşe, PocketBase ile hızlıca bir MVP (Minimum Viable Product) geliştirmiş ancak HTTP üzerinden erişilen uygulamanın tarayıcılarda "Güvenli Değil" uyarısı vermesi müşteri güvenini sarsacağını biliyor. Ayrıca, SEO açısından da HTTPS'in bir avantaj olduğunu unutmamıştı.
Ayşe, Let's Encrypt ve bir reverse proxy kullanarak bu sorunu çözmeye karar verdi. Caddy'nin otomatik TLS yönetiminden etkilenerek, fırının alan adı (firinadi.com) için Caddy'yi kurup yapılandırdı. Caddy, saniyeler içinde Let's Encrypt'ten sertifika alıp otomatik olarak yeniledi. Böylece müşteriler, https://firinadi.com adresinden güvenli bir şekilde sipariş verebildi, ödeme bilgilerini endişe duymadan girebildi ve fırın, dijital ortamda güvenilir bir imaj sergileyebildi. Bu sayede Ayşe, PocketBase'in hızını güvenlikle birleştirerek hem fırına hem de müşterilerine büyük bir fayda sağladı.
Bir sonraki bölümde, Caddy ve Nginx kullanarak PocketBase'i nasıl bir reverse proxy'nin arkasına alacağımızı ve Let's Encrypt sertifikalarını nasıl yapılandıracağımızı adım adım göreceğiz.
Reverse Proxy ile PocketBase ve TLS Kurulumu: Güvenliği Sağlama
PocketBase'i sunucunuzda çalıştırdık ve alan adınızı doğru IP adresine yönlendirdik. Şimdi, uygulamanızı HTTPS üzerinden güvenli hale getirmek için bir reverse proxy kurma zamanı. Bu bölümde, iki popüler reverse proxy seçeneği olan Caddy ve Nginx'i kullanarak PocketBase'i Let's Encrypt ile nasıl güvenli hale getireceğinizi detaylıca inceleyeceğiz. İki yöntem de kendi avantajlarına sahiptir; size en uygun olanı seçebilirsiniz.
Caddy ile Kolay ve Otomatik TLS Kurulumu
Caddy, otomatik HTTPS özelliğiyle öne çıkan modern, açık kaynaklı bir web sunucusu ve reverse proxy'dir. Let's Encrypt sertifikalarını otomatik olarak alır, yapılandırır ve yeniler, bu da onu PocketBase gibi uygulamalar için mükemmel bir seçenek yapar.
Caddy Kurulumu
Caddy'yi Linux sisteminize kurmak için aşağıdaki adımları izleyebilirsiniz:
sudo apt install -y debian-keyring debian-archive-keyring apt-transport-https
curl -1sLf 'https://dl.cloudsmith.io/public/caddy/stable/gpg.key' | sudo gpg --dearmor -o /usr/share/keyrings/caddy-stable-archive-keyring.gpg
curl -1sLf 'https://dl.cloudsmith.io/public/caddy/stable/debian.deb.txt' | sudo tee /etc/apt/sources.list.d/caddy-stable.list
sudo apt update
sudo apt install caddy
Caddyfile Yapılandırması
Caddy'nin yapılandırma dosyası olan Caddyfile, kullanımı son derece kolay ve güçlüdür. PocketBase'i bir reverse proxy olarak yapılandırmak ve otomatik TLS sağlamak için aşağıdaki adımları izleyin:
- Mevcut Caddyfile'ı düzenleyin veya yeni bir tane oluşturun:
- Aşağıdaki içeriği ekleyin/güncelleyin: (
your-domain.comvewww.your-domain.comkısımlarını kendi alan adınızla değiştirin) - Caddy servisini yeniden başlatın:
sudo nano /etc/caddy/Caddyfile
# Ana alan adınız
your-domain.com {
# HTTP'den HTTPS'ye yönlendirme (otomatik)
# www.your-domain.com'dan your-domain.com'a yönlendirme (otomatik)
# PocketBase'in çalıştığı dahili adrese reverse proxy yap
reverse_proxy localhost:8090 # PocketBase'in çalıştığı dahili port
}
# İsteğe bağlı olarak www alt alan adını ana alan adına yönlendirme
# Caddy bunu your-domain.com { ... } bloğunda otomatik halletse de
# açıkça belirtmek isteyebilirsiniz.
# www.your-domain.com {
# redir https://your-domain.com{uri}
# }
Uzman İpucu: Caddyfile'da http://localhost:8090 yerine doğrudan localhost:8090 kullanmak Caddy'nin varsayılan davranışıyla daha uyumludur. Caddy, dahili istekleri HTTP üzerinden yönlendirecektir.
sudo systemctl reload caddy
# Eğer bir hata olursa, durdurup tekrar başlatmak isteyebilirsiniz:
# sudo systemctl restart caddy
Caddy, servisi yeniden başlattığınızda otomatik olarak Let's Encrypt ile bağlantı kuracak, alan adınız için sertifika talebinde bulunacak ve bunu kuracaktır. Ayrıca, sertifikanızın süresi dolmak üzereyken otomatik olarak yenileme işlemini de gerçekleştirecektir. Artık tarayıcınızdan https://your-domain.com adresine giderek PocketBase uygulamanıza güvenli bir şekilde erişebilirsiniz.
Nginx ve Certbot ile Manuel TLS Kurulumu
Nginx, yüksek performanslı ve çok yönlü bir web sunucusu ve reverse proxy'dir. Caddy kadar otomatik olmasa da, Nginx geniş yapılandırma seçenekleri sunar ve büyük ölçekli uygulamalarda sıkça tercih edilir. Let's Encrypt sertifikaları için Nginx ile birlikte Certbot aracını kullanacağız.
Nginx Kurulumu
Nginx'i sunucunuza kurun:
sudo apt update
sudo apt install nginx
Nginx'in otomatik olarak başlamasını ve çalışmasını sağlayın:
sudo systemctl start nginx
sudo systemctl enable nginx
Nginx Yapılandırması
PocketBase için bir Nginx sunucu bloğu oluşturacağız:
- Nginx yapılandırma dosyasını oluşturun:
- Aşağıdaki içeriği ekleyin: (
your-domain.comkısımlarını kendi alan adınızla değiştirin) - Yapılandırma dosyasını etkinleştirin ve Nginx'i yeniden yükleyin:
sudo nano /etc/nginx/sites-available/your-domain.com
server {
listen 80;
listen [::]:80;
server_name your-domain.com www.your-domain.com;
# Certbot'un sertifika doğrulamasını yapabilmesi için gerekli
location /.well-known/acme-challenge/ {
root /var/www/html;
}
# HTTP isteklerini HTTPS'ye yönlendir
location / {
return 301 https://$host$request_uri;
}
}
# Bu blok Certbot tarafından HTTPS yapılandırması için otomatik olarak güncellenecektir.
# İlk Certbot çalıştırmasından sonra buraya HTTPS ayarları eklenecek.
sudo ln -s /etc/nginx/sites-available/your-domain.com /etc/nginx/sites-enabled/
sudo nginx -t # Yapılandırma sentaksını kontrol et
sudo systemctl reload nginx
Certbot ile Let's Encrypt Sertifikası Alma
Certbot, Let's Encrypt sertifikalarını almak ve yönetmek için kullanılan bir araçtır:
- Certbot'u kurun:
- Sertifika alın ve Nginx'i yapılandırın:
- Nginx yapılandırmasının güncellenmiş hali: (Bu Certbot tarafından otomatik eklenecektir)
sudo apt install certbot python3-certbot-nginx
sudo certbot --nginx -d your-domain.com -d www.your-domain.com
Certbot, size e-posta adresi ve hizmet koşullarını kabul etme gibi bazı sorular soracaktır. Ardından, otomatik olarak sertifikayı alacak ve Nginx yapılandırma dosyanızı HTTPS'i (port 443) kullanacak şekilde güncelleyecektir. Bu işlemden sonra /etc/nginx/sites-available/your-domain.com dosyanız güncellenmiş ve HTTPS ayarları eklenmiş olacaktır.
server {
# ... (önceki HTTP bloğu) ...
}
server {
listen 443 ssl http2;
listen [::]:443 ssl http2;
server_name your-domain.com www.your-domain.com;
ssl_certificate /etc/letsencrypt/live/your-domain.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/your-domain.com/privkey.pem;
include /etc/letsencrypt/options-ssl-nginx.conf;
ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem;
location / {
# PocketBase'in çalıştığı dahili adrese reverse proxy yap
proxy_pass http://localhost:8090;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
}
}
Sertifika Yenilemeyi Otomatikleştirme
Let's Encrypt sertifikaları 90 gün geçerlidir. Certbot, bunları otomatik olarak yenilemek için bir cron job kurar. Yenileme işlemini test edebilirsiniz:
sudo certbot renew --dry-run
Eğer test başarılı olursa, Certbot'un otomatik yenileme mekanizması düzgün çalışıyor demektir. Artık PocketBase uygulamanız Nginx reverse proxy'sinin arkasında, Let's Encrypt sertifikalarıyla güvenli (HTTPS) bir şekilde yayınlanmaktadır. https://your-domain.com adresinden erişilebilir olacaktır.
İleri Düzey İpuçları ve En İyi Uygulamalar
PocketBase uygulamanızın alan adı ve TLS kurulumunu başarıyla gerçekleştirdiniz. Ancak, dijital güvenlik sürekli gelişen bir alandır ve uygulamanızın performansını, güvenliğini ve erişilebilirliğini daha da artırmak için bazı ileri düzey ipuçları ve en iyi uygulamaları göz önünde bulundurmanız faydalı olacaktır. Bu bölümde, PocketBase projenizi bir adım öteye taşıyacak önemli stratejileri ele alacağız.
HTTP/2 ve HTTP/3 Kullanımı
Web performansını artırmak için modern HTTP protokollerini kullanmak önemlidir. HTTP/1.1'e göre daha hızlı ve verimli olan HTTP/2, genellikle reverse proxy'leriniz (Caddy veya Nginx) tarafından TLS ile birlikte otomatik olarak etkinleştirilir. Caddy varsayılan olarak HTTP/2 kullanırken, Nginx yapılandırmanızda listen 443 ssl http2; satırını ekleyerek HTTP/2'yi aktif hale getirebilirsiniz.
Daha yeni bir protokol olan HTTP/3, UDP tabanlı QUIC protokolünü kullanarak gecikmeyi daha da azaltır ve bağlantı kopmalarına karşı daha dirençlidir. Caddy 2, HTTP/3 desteğini varsayılan olarak sunarken, Nginx için HTTP/3 desteği hala deneysel aşamadadır ve özel derlemeler gerektirebilir. Performans odaklı uygulamalar için bu protokolleri değerlendirmek, kullanıcı deneyimini önemli ölçüde iyileştirebilir.
Güvenlik Başlıkları (Security Headers)
Tarayıcılara web sitenizle nasıl etkileşim kurmaları gerektiğini söyleyen HTTP güvenlik başlıklarını eklemek, çeşitli web tabanlı saldırılara karşı ek bir savunma katmanı oluşturur. Bu başlıklar, reverse proxy'niz (Nginx veya Caddy) üzerinden kolayca eklenebilir.
- Strict-Transport-Security (HSTS): Tarayıcılara sitenize her zaman HTTPS üzerinden bağlanmalarını söyler, potansiyel HTTP düşürme saldırılarını önler.
- Content-Security-Policy (CSP): XSS (Cross-Site Scripting) saldırılarını azaltarak, tarayıcının hangi kaynaklardan (scriptler, stiller, resimler vb.) yükleme yapabileceğini kontrol etmesini sağlar.
- X-Frame-Options: Clickjacking saldırılarını önlemek için sitenizin başka sitelerde iframe içinde görüntülenip görüntülenemeyeceğini kontrol eder.
- X-Content-Type-Options: MIME tipi koklama saldırılarını önler.
Örnek Nginx yapılandırması:
server {
# ... diğer ayarlar ...
add_header Strict-Transport-Security "max-age=63072000; includeSubDomains; preload";
add_header X-Frame-Options "DENY";
add_header X-Content-Type-Options "nosniff";
add_header Content-Security-Policy "default-src 'self'; script-src 'self' 'unsafe-inline'; style-src 'self' 'unsafe-inline'; img-src 'self' data:; font-src 'self';";
# CSP yapılandırması uygulamanıza göre değişir ve dikkatli yapılmalıdır.
location / {
proxy_pass http://localhost:8090;
# ... proxy header'ları ...
}
}
Örnek Caddyfile yapılandırması:
your-domain.com {
reverse_proxy localhost:8090
header {
Strict-Transport-Security "max-age=63072000; includeSubDomains; preload"
X-Frame-Options "DENY"
X-Content-Type-Options "nosniff"
Content-Security-Policy "default-src 'self'; script-src 'self' 'unsafe-inline'; style-src 'self' 'unsafe-inline'; img-src 'self' data:; font-src 'self';"
}
}
Uzman İpucu: CSP'yi uygularken dikkatli olun. Yanlış yapılandırma, sitenizin işlevselliğini bozabilir. Uygulamanızdaki tüm kaynakları doğru şekilde listelediğinizden emin olun.
Güvenlik Duvarı (Firewall) Ayarları
Sunucunuzda gereksiz portları kapatmak, saldırı yüzeyini önemli ölçüde azaltır. Sadece web trafiği (HTTP port 80 ve HTTPS port 443) ve SSH (port 22) için gerekli olan portları açık bırakın. Ubuntu için UFW (Uncomplicated Firewall) kullanabilirsiniz:
sudo ufw allow 22/tcp # SSH erişimi için
sudo ufw allow 80/tcp # HTTP trafiği için
sudo ufw allow 443/tcp # HTTPS trafiği için
sudo ufw enable # Güvenlik duvarını etkinleştir
sudo ufw status # Durumu kontrol et
PocketBase'in çalıştığı dahili port (örn. 8090) yalnızca localhost üzerinden erişilebilir olmalıdır, yani dışarıdan doğrudan erişilemez olmalıdır.
PocketBase Verilerinin Yedeklenmesi
PocketBase'in tüm verileri (SQLite veritabanı, dosyalar, ayarlar) pb_data dizininde saklanır. Bu dizinin düzenli olarak yedeklenmesi hayati önem taşır. Verilerinizi kaybetmemek için otomatik yedekleme çözümleri kurmayı düşünün (örn. cron işleri ile rsync, S3'e yedekleme vb.).
# Örnek: Basit bir yedekleme komutu
tar -czvf /path/to/backup/pocketbase_backup_$(date +%Y%m%d%H%M%S).tar.gz /opt/pocketbase/pb_data/
Bu yedekleri sunucudan ayrı bir yerde (örneğin bulut depolama) saklamak, felaket kurtarma senaryoları için kritik öneme sahiptir.
Mobil Uyumlu Tasarım ve İçerik
Makale içerisinde istenen mobil uyumluluk örneği genellikle frontend ile ilgili olsa da, bir backend olarak PocketBase'in sunduğu API'lerin ve yönetici panelinin mobil cihazlardan erişilebilirliği de önemlidir. Eğer PocketBase üzerinde kendi frontend uygulamanızı geliştiriyorsanız, responsive tasarım prensiplerine uymanız gerekir. Web sitenizin veya uygulamanızın farklı ekran boyutlarına uyum sağlaması, CSS media query'ler aracılığıyla gerçekleştirilebilir:
/* Genel stil */
body {
font-family: Arial, sans-serif;
}
/* Mobil cihazlar için özel stil */
@media (max-width: 768px) {
.container {
width: 100%;
padding: 10px;
}
.navbar a {
display: block;
text-align: center;
}
}
Bu ileri düzey ipuçları, PocketBase uygulamanızın sadece çalışmasını değil, aynı zamanda güvenli, hızlı ve bakımı kolay olmasını sağlayarak uzun vadede size büyük faydalar sağlayacaktır.
Sonuç ve Sıkça Sorulan Sorular
Bu kapsamlı rehber boyunca, PocketBase uygulamanızı kendi alan adınız üzerinden güvenli bir HTTPS bağlantısı ile nasıl yayınlayacağınızı adım adım öğrendik. PocketBase'in sunucuda kurulumundan, alan adınızın DNS ayarlarıyla sunucunuza yönlendirilmesine, Let's Encrypt ile ücretsiz TLS sertifikası edinmeye ve Caddy veya Nginx gibi reverse proxy'ler kullanarak güvenliği sağlamaya kadar her aşamayı detaylıca inceledik. Ayrıca, uygulamanızın performansını ve güvenliğini daha da artıracak ileri düzey ipuçları ve en iyi uygulamalara da değindik.
Artık PocketBase projeniz, kullanıcılar için şifreli ve güvenilir bir bağlantı sunarak hassas verileri koruyor, tarayıcıların "Güvenli" uyarısını gösteriyor ve arama motorlarında daha iyi sıralanma potansiyeli taşıyor. Bu kurulum, hem sizin hem de kullanıcılarınız için dijital güvenliğin temelini oluşturur. Unutmayın ki, güvenlik sürekli bir süreçtir; güncellemeleri takip etmek ve en iyi uygulamaları sürdürmek her zaman önemlidir. PocketBase'in basitliği ve bu güvenlik katmanlarının eklenmesiyle, güçlü ve güvenilir bir web uygulaması geliştirmeniz için sağlam bir zemin inşa etmiş oldunuz.
Sıkça Sorulan Sorular (SSS)
1. PocketBase'i doğrudan 443 portundan HTTPS ile çalıştırabilir miyim?
Evet, PocketBase'i doğrudan HTTPS ile çalıştırabilirsiniz. Bunun için pocketbase serve --https 0.0.0.0:443 --certsDir ./pb_data/certs gibi bir komut kullanabilir ve sertifika dosyalarınızı belirtmeniz gerekir. Ancak, bu durumda sertifika yenileme ve diğer web sunucusu özelliklerini kendiniz yönetmeniz gerekir. Reverse proxy kullanmak (Nginx veya Caddy gibi) genellikle daha fazla esneklik, güvenlik ve kolay sertifika yönetimi (otomatik yenileme gibi) sağlar, bu yüzden tavsiye edilen yöntemdir.
2. DNS değişikliklerimin ne zaman yayılacağını nasıl anlarım?
DNS değişikliklerinin yayılması (propagation) genellikle birkaç dakika ile 48 saat arasında sürebilir. Bu durumu kontrol etmek için whatsmydns.net veya dnschecker.org gibi online araçları kullanabilirsiniz. Alan adınızı bu sitelere yazdığınızda, dünya genelindeki farklı DNS sunucularının alan adınızı hangi IP adresine çözdüğünü görebilirsiniz. Tüm sunucuların doğru IP adresini göstermesi, yayılmanın tamamlandığı anlamına gelir.
3. Let's Encrypt sertifikalarımı nasıl yenileyebilirim?
Eğer Caddy kullanıyorsanız, sertifikalarınız otomatik olarak yenilenecektir, sizin müdahalenize gerek yoktur. Nginx ve Certbot kullanıyorsanız, Certbot otomatik bir cron job kurar. Yenilemenin düzgün çalıştığını test etmek için sudo certbot renew --dry-run komutunu kullanabilirsiniz. Certbot, sertifikaların süresi dolmadan önce otomatik olarak yenileme işlemini gerçekleştirir.
4. PocketBase'in verilerini yedeklemek için en iyi yöntem nedir?
PocketBase, verilerini (veritabanı, depolama dosyaları, ayarlar) uygulamanın çalıştığı dizinde bulunan pb_data/ klasöründe tutar. En iyi yedekleme yöntemi, bu klasörün düzenli aralıklarla güvenli bir yere (örneğin, bulut depolama hizmetleri veya başka bir sunucu) kopyalanmasıdır. Sunucunuzda bir cron job ile çalışan bir script (tar veya rsync kullanarak) veya PocketBase'in kendi dahili yedekleme özelliklerini (CLI aracılığıyla) kullanabilirsiniz. Önemli olan, yedeklemelerinizi farklı bir lokasyonda saklamaktır.
