Türkiye · Fransa · KKTC05372609483
Cloud VDS

VDS Üzerinde Docker: Ubuntu 24.04'te Kurulum, Compose ve Güvenli Yayın Rehberi

  • 2 Kasım 2026
  • 4 dk okuma
İçindekiler
    Bu yazıyı paylaş

    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 ports satı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 -f ile 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 stats kullanı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.

    Kaynaklar

    Yorumlar0

    Henüz Yorum Yok

    İlk düşüncenizi paylaşan siz olun.

    Tartışmaya Katıl

    Yorum bırakmak için lütfen giriş yapın veya kaydolun.

    Hiçbir Yazıyı Kaçırmayın

    En yeni eğitim, rehber ve ürün haberlerini gelen kutunuzda alın.

    Bülten aboneliğiniz alındı.