İçindekiler
Docker, uygulamanızı bağımlılıklarıyla birlikte paketleyip aynı sunucuda yan yana çalıştırmanın en pratik yolu. Paylaşımlı hostingde Docker çalışmaz; root yetkisi verdiği için Türkiye VDS ya da Fransa VDS doğru zemindir. Bu rehber, temiz bir Ubuntu 24.04 LTS kurulumundan yayında bir uygulamaya kadar giden adımları anlatır.
Hangi VDS paketi?
- Tek küçük uygulama (ör. n8n, Uptime Kuma, küçük bir API): 2 çekirdek, 2 GB RAM, 35 GB NVMe yeterlidir.
- Uygulama + veritabanı + reverse proxy: 4 çekirdek, 4 GB RAM ile rahat çalışır; veritabanı için NVMe disk fark yaratır.
- Birden fazla proje ya da CI çalıştırıcısı: 8 çekirdek, 8 GB RAM ve üstü. Fransa lokasyonundaki AMD EPYC 4584PX işlemcili, DDR5 bellekli paketler derleme ağırlıklı işler için daha hızlıdır.
Kurulumdan önce FiberVM panelinden bir snapshot alın; bir şey ters giderse bir dakikada geri dönersiniz. Panelde işletim sistemi olarak Ubuntu 24.04'ü seçip sıfır kurulum da yapabilirsiniz.
1. Sunucuyu hazırlayın
apt update && apt upgrade -y
adduser deploy && usermod -aG sudo deploy
timedatectl set-timezone Europe/Istanbul
SSH anahtarı, parola girişini kapatma ve UFW adımları için ilk kurulum güvenlik kontrol listemize bakın. UFW'de şimdilik yalnızca 22, 80 ve 443 portlarını açın.
2. Docker'ı resmi depodan kurun
Ubuntu'nun kendi deposundaki docker.io paketi geride kalır; Docker'ın resmi deposunu kullanın:
sudo apt install -y ca-certificates curl
sudo install -m 0755 -d /etc/apt/keyrings
sudo curl -fsSL https://download.docker.com/linux/ubuntu/gpg -o /etc/apt/keyrings/docker.asc
sudo chmod a+r /etc/apt/keyrings/docker.asc
echo "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.asc] https://download.docker.com/linux/ubuntu $(. /etc/os-release && echo $VERSION_CODENAME) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
sudo apt update
sudo apt install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
sudo usermod -aG docker deploy
Oturumu kapatıp açtıktan sonra docker run --rm hello-world ile doğrulayın. docker grubuna eklenen kullanıcı fiilen root yetkisine sahiptir; bu gruba yalnızca güvendiğiniz hesapları ekleyin.
3. Günlük ve yeniden başlatma ayarları
Varsayılan ayarda konteyner günlükleri sınırsız büyür ve diski doldurur. /etc/docker/daemon.json dosyasına şunu yazıp systemctl restart docker deyin:
{
"log-driver": "json-file",
"log-opts": { "max-size": "20m", "max-file": "5" }
}
Compose dosyalarında her servise restart: unless-stopped ekleyin; sunucu yeniden başladığında uygulama kendiliğinden kalkar.
4. Reverse proxy ile SSL: Caddy örneği
Uygulamaları doğrudan 80/443'e bağlamak yerine önlerine bir reverse proxy koyun. Caddy, Let's Encrypt sertifikasını kendisi alır ve yeniler. Örnek compose.yaml:
services:
caddy:
image: caddy:2
restart: unless-stopped
ports: ["80:80", "443:443"]
volumes:
- ./Caddyfile:/etc/caddy/Caddyfile
- caddy_data:/data
app:
image: ghcr.io/ornek/uygulama:latest
restart: unless-stopped
environment:
- DATABASE_URL=postgres://app:gizli@db:5432/app
depends_on: [db]
db:
image: postgres:16
restart: unless-stopped
environment:
- POSTGRES_USER=app
- POSTGRES_PASSWORD=gizli
- POSTGRES_DB=app
volumes:
- db_data:/var/lib/postgresql/data
volumes:
caddy_data:
db_data:
Caddyfile iki satır: uygulama.ornek.com { reverse_proxy app:3000 }. Alan adının A kaydını VDS IP'sine yönlendirin, docker compose up -d deyin; sertifika ilk istekte alınır. Veritabanı ve uygulama dış dünyaya port açmadığı için yalnızca Caddy üzerinden erişilir.
5. UFW tuzağı: Docker kuralları atlar
Docker, ports: "5432:5432" gibi bir yayın gördüğünde iptables'a kendi kuralını yazar ve UFW'deki engeli devre dışı bırakır. Yani UFW'de kapalı sandığınız veritabanı portu internete açık olabilir. İki güvenli yol:
- Dışarı açılması gerekmeyen servislerde
portssatırı yazmayın; konteynerler aynı Compose ağında birbirine isimle ulaşır. - Yerelden erişmeniz gerekiyorsa portu yalnızca loopback'e bağlayın:
"127.0.0.1:5432:5432". Sonra SSH tüneliyle bağlanın.
Kontrol için başka bir makineden nmap -p 1-65535 VDS_IP çalıştırın; yalnızca 22, 80 ve 443 açık görünmelidir.
6. Güncelleme ve yedekleme
- İmaj güncelleme:
docker compose pull && docker compose up -d; eski imajlarıdocker image prune -file temizleyin. - Veri yedeği: veritabanını konteyner içinden dökün:
docker compose exec db pg_dump -U app app | gzip > yedek-$(date +%F).sql.gz. Volume klasörlerini (/var/lib/docker/volumes) çalışır haldeyken kopyalamak tutarsız yedek üretir; dökümü tercih edin. - Sunucu dışı kopya: yedekleri başka lokasyondaki bir VDS'ye ya da nesne depolamaya gönderin. Snapshot tek başına yedek değildir; ayrıntı VDS yedekleme yazımızda.
- İzleme: FiberVM panelindeki canlı CPU, RAM ve disk grafikleri konteynerlerin toplam yükünü gösterir; servis bazında
docker statskullanın.
Docker için sunucu seçerken şüpheniz varsa destek talebiyle çalıştıracağınız uygulamaları yazın, uygun paketi birlikte belirleyelim. Tüm VDS paketlerinde sınırsız trafik ve DDoS koruması dahildir.

Yorumlar0
Henüz Yorum Yok
İlk düşüncenizi paylaşan siz olun.
Yorum bırakmak için lütfen giriş yapın veya kaydolun.