İçeriğe geç
Uygulama yayınlama

VPS'te Docker Compose ile Uygulama Yayınlama

Docker'ın resmî Ubuntu deposundan kurulum, Compose dosyası, localhost portu ve kalıcı veri. Güncelleme, günlük, sağlık ve geri dönüş adımlarını öğrenin.

ServerQ Yayın Ekibi10 dk okuma

Docker Compose, bir uygulamanın image, ağ, ortam değişkeni ve kalıcı veri tanımlarını okunabilir bir dosyada toplar. Böylece “sunucuda hangi komutla başlatılmıştı?” sorusunun cevabı sürümü takip edilen bir yapılandırma olur.

Bu rehber Ubuntu Server 24.04 LTS üzerinde Docker’ın resmî paket deposunu kullanır. Örnek, Nginx container’ını yalnızca localhost üzerinden yayımlar; genel erişim ve HTTPS için sunucudaki ters vekile bağlanır. Bir container çalışıyor olması uygulamanın sağlıklı veya verinin yedekli olduğu anlamına gelmez.

Bu rehberle neler yapabilirsiniz?

  • Docker Engine ve Compose eklentisini resmî depodan kurmak
  • Yalnızca localhost’a bağlı örnek servisi çalıştırmak
  • Image güncellemesi, kalıcı veri ve geri dönüş ayrımını öğrenmek
Kapsam

Yeni Ubuntu 24.04 LTS kurulumu. Üzerinde container çalışan sunucuda mevcut paketleri veya veri dizinlerini silmeyin.

Başlamadan önce
  • Ubuntu Server 24.04 LTS ve sudo yetkisi
  • SSH erişimi ve planlanmış güvenlik duvarı
  • Mevcut Docker kurulumu varsa sürüm ve veri envanteri

1. Resmî paket deposunu ekleyin

Ubuntu’nun docker.io paketi ile Docker’ın docker-ce paketleri farklı dağıtım kanallarına aittir. Önce dpkg -l ile mevcut paketleri inceleyin; çalışan bir kurulumu bu komutlarla yerinde değiştirmeyin. Aşağıdaki tarif Docker kurulu olmayan bir Ubuntu 24.04 sunucusu içindir. İndirilmiş bir betiği doğrudan kabuğa çalıştırmak yerine depo anahtarı ve paket yöneticisi kullanılır.

Depo anahtarını indirin
sudo apt update
sudo apt install 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

Ubuntu 24.04’ün kod adı noble’dır. Farklı sürümde Suites alanını ezbere değiştirmeyin; Docker’ın desteklediği dağıtımlar listesini kontrol edin. Aşağıdaki komut mimariyi paket yöneticisinden okur.

Resmî Docker deposunu kaydedin
ARCH=$(dpkg --print-architecture)
sudo tee /etc/apt/sources.list.d/docker.sources > /dev/null <<EOF
Types: deb
URIs: https://download.docker.com/linux/ubuntu
Suites: noble
Components: stable
Architectures: ${ARCH}
Signed-By: /etc/apt/keyrings/docker.asc
EOF
sudo apt update
sudo apt install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
Kurulumu kontrol edin
sudo systemctl status docker --no-pager
sudo docker version
sudo docker compose version
sudo docker run --rm hello-world

2. Küçük bir Compose projesi oluşturun

Yönetici hesabında proje klasörü
mkdir -p ~/serverq-demo/html
cd ~/serverq-demo
printf "%s\n" "ServerQ Compose test sayfasi" > html/index.html

Aşağıdaki içeriği compose.yaml olarak kaydedin. Docker Compose’un güncel biçiminde üst seviye version alanı gerekli değildir. Göreli html klasörü yalnızca okunur bağlanır; örnek servis sayfayı değiştiremez. Host portunun önündeki 127.0.0.1 kısmı genel ağ erişimini sınırlar.

compose.yaml
name: serverq-demo
services:
  web:
    image: nginx:stable-alpine
    restart: unless-stopped
    ports:
      - "127.0.0.1:8080:80"
    volumes:
      - ./html:/usr/share/nginx/html:ro
    logging:
      driver: json-file
      options:
        max-size: "10m"
        max-file: "3"

stable-alpine güncellenebilir bir etikettir. İlk öğrenme örneğinde güncel stable image’ını almak için kullanılır. Üretimde indirdiğiniz image’ın RepoDigests değerini kaydedin ve image alanını doğruladığınız digest ile sabitleyin. Sürümü sabitlemek yedek almanın yerini tutmaz; yalnızca aynı uygulama paketine dönmenizi kolaylaştırır.

3. Yapılandırmayı doğrulayıp başlatın

Proje klasöründe
sudo docker compose config --quiet
sudo docker compose pull
sudo docker compose up -d
sudo docker compose ps
sudo docker compose logs --tail=50 web
curl --fail http://127.0.0.1:8080/
sudo docker image inspect nginx:stable-alpine --format "{{json .RepoDigests}}"

config --quiet dosyanın Compose tarafından okunabildiğini kontrol eder; uygulamanın doğru çalıştığını kanıtlamaz. curl örnek sayfayı döndürmeli, günlüklerde sürekli yeniden başlama olmamalıdır. docker compose config komutunun normal çıktısı ortam değişkenlerini açabilir; bu çıktıyı sır içerip içermediğini kontrol etmeden paylaşmayın.

Yayımlama yolu
  1. 01Ziyaretçi
  2. 02Nginx :443
  3. 03127.0.0.1:8080
  4. 04Container :80

Dış erişim host Nginx’te sonlanır; container’ın iç portu genel ağa açılmaz.

Node.js API rehberindeki Nginx proxy bloğunu kullanıp proxy_pass hedefini http://127.0.0.1:8080 olarak değiştirin. Alan adı ve sertifika adımlarını Nginx ve HTTPS rehberiyle tamamlayın. DNS, TLS ve HTTP durumunu dışarıdaki bir istemciden ayrıca kontrol edin. Docker port yönlendirmesi UFW kurallarını beklediğiniz biçimde izlemeyebileceği için localhost bağı önemlidir.

4. Kalıcı veriyi ve sırları ayırın

Neyi nerede tutmalı?
ÖğeYaklaşım
ImageTekrar indirilebilir uygulama paketi; sürüm veya digest kaydı tutun.
compose.yamlSır içermeyen kurulum tanımını sürüm kontrolünde saklayın.
.env / secret dosyasıSınırlı dosya izni ve ayrı şifreli yedek; Git’e eklemeyin.
Volume / bind mountVeritabanı, yüklenen dosyalar ve şifreleme anahtarları için kalıcı veri.
Container loglarıBoyut sınırı, hata takibi ve gerekiyorsa merkezi günlük saklama.

Container’ın yazılabilir katmanı kalıcı veri deposu değildir. Image değiştirilince kaybolmaması gereken veriyi volume veya açıkça seçilmiş host klasörüne koyun. Çalışan bir veritabanının dosyalarını basitçe kopyalamak tutarlı yedek oluşturmayabilir; veritabanının dump veya fiziksel yedekleme yöntemini kullanın.

5. Güncelleme ve geri dönüşü planlayın

  1. Mevcut image digest’ini, Compose dosyasını ve uygulama sürümünü kaydedin.
  2. Veriyi ve gerekli sırları yedekleyin; geri yükleme yöntemini kontrol edin.
  3. Yeni image sürümünün değişiklik ve veritabanı geçiş notlarını okuyun.
  4. Ayrı ortamda denedikten sonra bakım aralığında yeni image ile başlatın.
  5. HTTP sağlık kontrolü, arka plan işleri ve veri yazma işlemlerini doğrulayın.

Geri dönüş, yalnızca eski image’ı başlatmakla sınırlı değildir. Yeni sürüm veritabanı şemasını değiştirdiyse eski uygulama aynı veriyle çalışmayabilir. Böyle bir durumda eski image ve onunla uyumlu veri yedeği birlikte gerekir. Örnek statik servisi kapatmak için proje klasöründe sudo docker compose down kullanabilirsiniz; html klasörü host üzerinde kalır.

Disk kullanımını sudo docker system df ile inceleyin. Sorunu çözmek için neyi sileceğini okumadan prune komutları çalıştırmayın. Kullanılmıyor görünen image, beklediğiniz geri dönüş sürümü olabilir. Container sayısı büyüdükçe yedek, kaynak ölçümü ve dağıtım kayıtları en az Compose dosyası kadar önemli hale gelir.

İnceleme kapsamı

Bash örnekleri söz dizimi kontrolünden, Compose dosyası resmî Docker Compose CLI 5.5.1 ile yapılandırma kontrolünden geçti. Bu kontrol container başlatma veya uygulama çalışma testi değildir. Resmî dokümanlar ve örnek yapılandırmalar 30 Eylül 2026 tarihinde incelendi. Bu rehberdeki tam kurulum boş bir VPS üzerinde uçtan uca çalıştırılmadı. Mevcut sunucunuzu değiştirmeden önce ayrı bir deneme ortamında, kendi sürüm ve erişim koşullarınızla doğrulayın.

Resmî kaynaklar

Sürüm ve yapılandırma ayrıntılarını ilgili projenin güncel belgelerinden takip edin.