İçindekiler
- Giriş
- Web Sunucusu Seçimi: Caddy vs Nginx
- Gereksinimler
- Başlangıç Kurulumları
- Proje Yapısı
- Caddy Web Sunucusu Kurulumu
- Network Oluşturma
- Güvenlik Ayarları
Giriş
Bu makalede, bir web uygulamasını Docker kullanarak DigitalOcean Droplet üzerinde nasıl deploy edeceğimizi öğreneceğiz. İlk bölümde temel kurulumları ve Caddy web sunucusu yapılandırmasını ele alacağız.
Web Sunucusu Seçimi: Caddy vs Nginx
Nginx Nedir?
Nginx, yüksek performanslı, açık kaynaklı bir web sunucusudur. Özellikle yüksek trafik alan sitelerde tercih edilir. Yapılandırılması karmaşık olabilir ancak geniş bir topluluk desteği ve dokümantasyona sahiptir.
Caddy Nedir?
Caddy, Go dilinde yazılmış modern bir web sunucusudur. En önemli özelliği otomatik SSL sertifika yönetimidir. Let's Encrypt entegrasyonu sayesinde manuel müdahale gerektirmeden HTTPS güvenliğini sağlar.
Karşılaştırma
Konfigürasyon
Nginx:
server {
listen 80;
server_name example.com;
return 301 https://$server_name$request_uri;
}
server {
listen 443 ssl;
server_name example.com;
ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem;
location / {
proxy_pass http://backend:3000;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
}
}
Caddy:
example.com {
reverse_proxy backend:3000
}
Öne Çıkan Özellikler
Nginx:
- Yüksek performans
- Geniş modül ekosistemi
- Load balancing özellikleri
- Detaylı konfigürasyon imkanı
- Olgun ve test edilmiş
Caddy:
- Otomatik HTTPS
- HTTP/3 desteği
- Basit konfigürasyon
- Modern varsayılan ayarlar
- API Gateway özellikleri
- On-demand TLS
Neden Caddy Seçtik?
- Kolay Kurulum: Tek bir binary ile çalışır, ek paketlere ihtiyaç duymaz.
- Otomatik SSL: Let's Encrypt entegrasyonu ile SSL sertifikalarını otomatik yönetir.
- Modern Defaults: Güvenlik ayarları varsayılan olarak en iyi pratiklere uygun.
- Docker Uyumluluğu: Container ortamında sorunsuz çalışır.
- Basit Konfigürasyon: Okunması ve yazılması kolay yapılandırma dosyası.
Gereksinimler
- DigitalOcean hesabı
- Bir domain adı
- Temel Linux ve Docker bilgisi
Başlangıç Kurulumları
Droplet Oluşturma
DigitalOcean'da yeni bir Droplet oluşturalım:
- Image: Ubuntu 22.04 LTS
- Size: Basic Plan (2GB/1CPU)
- Region: Frankfurt (ya da size en yakın datacenter)
- Authentication: SSH key (güvenlik için önerilen)
DNS Ayarları
Domain sağlayıcınızda şu A kayıtlarını ekleyin:
api.frontrowai.com -> Droplet IP
n8n.frontrowai.com -> Droplet IP
frontrowai.com -> Droplet IP
Temel Kurulumlar
Droplet'a SSH ile bağlanıp gerekli kurulumları yapalım:
# Sistem güncellemesi
apt update && apt upgrade -y
# Docker kurulumu
apt install -y docker.io docker-compose
# Docker'ı başlatma ve otomatik başlatma ayarı
systemctl start docker
systemctl enable docker
Proje Yapısı
Projemiz için temel dizin yapısını oluşturalım:
mkdir -p /opt/docker
cd /opt/docker
# Alt dizinler
mkdir caddy api n8n
mkdir -p /var/log/caddy
Caddy Web Sunucusu Kurulumu
docker-compose.yml
version: '3'
services:
caddy:
image: caddy:latest
container_name: caddy
ports:
- "80:80"
- "443:443"
volumes:
- ./Caddyfile:/etc/caddy/Caddyfile
- /var/log/caddy:/var/log/caddy
- caddy_data:/data
- caddy_config:/config
networks:
- frontrowai_network
restart: always
networks:
frontrowai_network:
external: true
volumes:
caddy_data:
caddy_config:
Volume Yapılandırması Açıklaması
-
Caddyfile Mount:
./Caddyfile:/etc/caddy/Caddyfile
- Host makinedeki Caddyfile'ı container içine bağlar
- Konfigürasyon değişikliklerini kolaylaştırır
-
Log Dizini:
/var/log/caddy:/var/log/caddy
- Access ve error loglarını host makinede saklar
- Log rotasyonu ve analizi için erişilebilir
-
Caddy Data:
caddy_data:/data
- SSL sertifikalarını ve diğer kalıcı verileri saklar
- Container silinse bile veriler korunur
-
Caddy Config:
caddy_config:/config
- Runtime konfigürasyon verilerini saklar
- Caddy'nin iç yapılandırma dosyaları
Caddyfile
{
email your-email@example.com
}
(common) {
header {
# CORS ayarları
Access-Control-Allow-Origin *
Access-Control-Allow-Methods "GET, POST, PUT, DELETE, OPTIONS"
Access-Control-Allow-Headers *
# Security headers
Strict-Transport-Security "max-age=31536000; includeSubDomains"
X-Content-Type-Options "nosniff"
}
# SSL
tls {
protocols tls1.2 tls1.3
}
}
api.frontrowai.com {
import common
reverse_proxy api:3000
}
n8n.frontrowai.com {
import common
reverse_proxy n8n:5678
}
Header Yapılandırması Açıklaması
-
CORS Headers:
Access-Control-Allow-Origin
: Hangi domainlerin erişebileceğini belirlerAccess-Control-Allow-Methods
: İzin verilen HTTP metodlarıAccess-Control-Allow-Headers
: İzin verilen HTTP başlıkları
-
Security Headers:
Strict-Transport-Security
: HTTPS kullanımını zorunlu kılarX-Content-Type-Options
: MIME type sniffing'i engellerX-Frame-Options
: Clickjacking saldırılarına karşı koruma
Network Oluşturma
Docker container'ları arasındaki iletişim için bir network oluşturalım:
docker network create frontrowai_network
Servisleri Başlatma
# Caddy'yi başlat
cd /opt/docker/caddy
docker compose up -d
# Logları kontrol et
docker compose logs -f
Güvenlik Ayarları
Firewall Yapılandırması
# UFW Firewall kurulumu
apt install ufw
# Gerekli portları aç
ufw allow 22/tcp # SSH
ufw allow 80/tcp # HTTP
ufw allow 443/tcp # HTTPS
# Firewall'u etkinleştir
ufw enable
SSL/TLS Güvenliği
Caddy otomatik olarak:
- Let's Encrypt sertifikaları alır
- Sertifikaları yeniler
- Modern TLS protokollerini kullanır
- HTTPS yönlendirmelerini yönetir
Hata Ayıklama ve Log İnceleme
Caddy Logları
# Canlı log takibi
docker compose logs -f caddy
# Son 100 log satırı
docker compose logs --tail 100 caddy
SSL Sertifika Kontrolü
# Sertifika durumunu kontrol et
curl -vI https://api.frontrowai.com
Sonuç
Bu noktada:
- Temel sunucu kurulumlarını tamamladık
- Caddy web sunucusunu kurduk ve yapılandırdık
- SSL sertifikalarını otomatik olarak alacak şekilde ayarladık
- Temel güvenlik önlemlerini aldık
Part 2'de uygulamaların deployment sürecini, CI/CD pipeline kurulumunu ve monitoring ayarlarını ele alacağız.
Member discussion: