Cloud-init ile VPS/VDS İlk Kurulum Otomasyonu

Cloud-init ile VPS/VDS İlk Kurulum Otomasyonu - Corelux
Paylaş:

Cloud-init ile VPS/VDS İlk Kurulum Otomasyonu

Son Güncelleme: Haziran 2026

Cloud-init, yeni açılan bir VPS/VDS sunucunun ilk kurulum adımlarını otomatikleştirmek için kullanılan güçlü bir başlangıç yapılandırma aracıdır. Kullanıcı oluşturma, SSH anahtarı ekleme, paket kurulumu, güvenlik ayarları ve temel servis yapılandırmaları cloud-init ile tek bir user-data dosyası üzerinden yönetilebilir.

Bu rehberde cloud-init mantığını, VPS/VDS ortamlarında nasıl kullanıldığını, örnek yapılandırmaları, güvenlik ipuçlarını ve pratik senaryoları adım adım inceleyeceğiz. Özellikle çok sayıda sunucu yöneten ekipler için standart, tekrarlanabilir ve hızlı sunucu hazırlama süreci oluşturmak büyük avantaj sağlar.

İçindekiler

Cloud-init Nedir?

Cloud-init, Linux tabanlı bulut sunucu ve sanal sunucu imajlarının ilk açılışta otomatik olarak yapılandırılmasını sağlayan bir araçtır. İlk açılış sırasında sunucu; ağ bilgilerini, hostname değerini, kullanıcı hesaplarını, SSH anahtarlarını, paket kurulumlarını ve özel komutları cloud-init aracılığıyla alabilir.

Cloud-init genellikle Ubuntu, Debian, Rocky Linux, AlmaLinux ve Fedora gibi dağıtımlarda hazır gelir veya paket yöneticisi üzerinden kurulabilir. Sanallaştırma sağlayıcısı tarafından sunucuya iletilen meta-data ve user-data bilgileri okunur, ardından sistem belirlenen sıraya göre yapılandırılır.

Basit bir örnekle açıklamak gerekirse, her yeni sunucu kurulumunda manuel olarak SSH anahtarı eklemek, güncelleme yapmak, güvenlik duvarı kurmak ve izleme ajanı yüklemek yerine tüm bu adımlar tek bir cloud-init dosyasına yazılabilir. Böylece sunucu ilk kez açıldığında otomatik olarak hazır hale gelir.

VPS/VDS İçin Neden Önemlidir?

VPS ve VDS altyapılarında sunucu sayısı arttıkça manuel kurulum süreçleri zaman kaybına, yapılandırma tutarsızlıklarına ve güvenlik açıklarına neden olabilir. Cloud-init ile ilk kurulum otomasyonu, her sunucunun aynı standartta hazırlanmasını sağlar.

  • Hız: Sunucu açıldıktan birkaç dakika sonra temel paketler, kullanıcılar ve güvenlik ayarları hazır hale gelir.
  • Tutarlılık: Tüm sunucular aynı kullanıcı, SSH, firewall ve paket standartlarıyla başlatılır.
  • Güvenlik: Root şifreli giriş kapatılabilir, yalnızca SSH anahtarıyla erişim zorunlu hale getirilebilir.
  • Ölçeklenebilirlik: Aynı yapılandırma dosyası onlarca sunucuya uygulanabilir.
  • Dokümantasyon: Sunucu ilk kurulum adımları kod gibi saklandığı için ekip içinde kolayca incelenebilir.

Örneğin bir yazılım ajansı, her müşteri projesi için benzer özellikte Linux sunucular kuruyorsa cloud-init sayesinde standart güvenlik ve paket yapılandırmasını otomatik hale getirebilir. Corelux Sanal Sunucu, Türkiye VDS Sunucu veya Bulut Sunucu hizmetleri üzerinde bu yaklaşım, operasyonel verimliliği artırır.

Temel Kavramlar

Cloud-init kullanmadan önce bazı temel kavramları bilmek gerekir. Bu kavramlar, yapılandırma dosyalarının nasıl çalıştığını ve hangi aşamada uygulandığını anlamayı kolaylaştırır.

User-data

User-data, sunucuya ilk açılışta uygulanacak kullanıcı tanımlı yapılandırma verisidir. Genellikle YAML formatında yazılan #cloud-config dosyasıdır. Kullanıcı oluşturma, paket kurma, dosya yazma ve komut çalıştırma gibi işlemler burada tanımlanır.

Meta-data

Meta-data, sunucuya ait kimlik ve ortam bilgileridir. Örneğin instance ID, hostname, ağ bilgileri ve sağlayıcıya özel bazı değişkenler meta-data içinde bulunabilir. Cloud-init bu bilgileri kullanarak sunucunun hangi ortamda çalıştığını anlayabilir.

Datasource

Datasource, cloud-init verilerinin alındığı kaynaktır. Bulut platformları, sanallaştırma sistemleri veya NoCloud gibi yerel veri kaynakları cloud-init için datasource olabilir. Test ortamlarında NoCloud yöntemiyle ISO veya yerel dizin üzerinden user-data sağlanabilir.

Modüller

Cloud-init, işlemleri farklı modüller aracılığıyla yürütür. Kullanıcı yönetimi, paket kurulumu, komut çalıştırma, dosya oluşturma ve disk büyütme gibi görevler ayrı modüller tarafından işlenir. Bu modüler yapı, yapılandırmanın düzenli ve genişletilebilir olmasını sağlar.

Kavram Açıklama Örnek Kullanım
User-data Kullanıcı tarafından verilen ilk kurulum talimatları SSH anahtarı ekleme, paket kurma
Meta-data Sunucuya ait kimlik ve ortam bilgileri Hostname, instance ID
Datasource Cloud-init verilerinin okunduğu kaynak NoCloud, ConfigDrive, bulut sağlayıcı verisi
Module Belirli bir yapılandırma işini yapan cloud-init bileşeni Paket, kullanıcı, dosya yönetimi

Örnek Cloud-config Dosyası

Aşağıdaki örnek, yeni açılan bir Ubuntu sunucuda güvenli bir yönetici kullanıcısı oluşturur, SSH anahtarı ekler, paketleri günceller, temel güvenlik araçlarını kurar ve UFW güvenlik duvarını etkinleştirir. Bu dosya, cloud-init uyumlu bir VPS/VDS oluşturma ekranında user-data alanına girilebilir.

#cloud-config
hostname: web-01
manage_etc_hosts: true

users:
  - name: deploy
    groups: sudo
    shell: /bin/bash
    sudo: ['ALL=(ALL) NOPASSWD:ALL']
    lock_passwd: true
    ssh_authorized_keys:
      - ssh-ed25519 AAAA_ORNEK_PUBLIC_KEY deploy@example

package_update: true
package_upgrade: true

packages:
  - curl
  - git
  - ufw
  - htop
  - unzip
  - ca-certificates

write_files:
  - path: /etc/motd
    permissions: '0644'
    content: |
      Bu sunucu cloud-init ile otomatik hazirlanmistir.
      Yetkisiz erisim yasaktir.

runcmd:
  - ufw default deny incoming
  - ufw default allow outgoing
  - ufw allow OpenSSH
  - ufw --force enable
  - systemctl enable ssh
  - systemctl restart ssh

Bu örnekte deploy isimli bir kullanıcı oluşturulur ve şifreyle giriş kilitlenir. SSH erişimi yalnızca belirtilen açık anahtar üzerinden yapılır. package_update ve package_upgrade değerleri sayesinde sistem ilk açılışta güncellenir.

Cloud-init dosyalarında girinti çok önemlidir. YAML formatı boşluklara duyarlıdır; tab karakteri kullanmak veya hatalı hizalama yapmak yapılandırmanın uygulanmamasına neden olabilir. Bu nedenle dosyaları canlıya almadan önce bir YAML doğrulayıcıyla kontrol etmek iyi bir pratiktir.

Güvenlik Ayarları

Cloud-init, sunucunun ilk dakikalarında güvenli bir duruma getirilmesi için oldukça kullanışlıdır. Özellikle internete açık yeni bir sunucuda root şifreli girişin kapatılması, SSH anahtarının zorunlu hale getirilmesi ve güvenlik duvarının devreye alınması kritik adımlardır.

Root Girişini Sınırlandırma

Root kullanıcısıyla doğrudan giriş yapmak yerine yetkili bir yönetici hesabı oluşturmak ve gerektiğinde sudo kullanmak daha güvenli bir yaklaşımdır. Cloud-init içinde root hesabı kilitlenebilir veya SSH üzerinden root erişimi kapatılabilir.

#cloud-config
disable_root: true
ssh_pwauth: false

users:
  - name: sysadmin
    groups: sudo
    shell: /bin/bash
    sudo: ['ALL=(ALL) ALL']
    lock_passwd: true
    ssh_authorized_keys:
      - ssh-ed25519 AAAA_ORNEK_PUBLIC_KEY sysadmin@example

SSH Parola Girişini Kapatma

SSH parola doğrulaması, zayıf veya tekrar kullanılan parolalar nedeniyle risk oluşturabilir. Bunun yerine SSH anahtarı kullanmak daha güvenlidir. Cloud-init içinde ssh_pwauth: false ayarı ile parola tabanlı SSH girişi kapatılabilir.

Firewall Başlangıç Kuralları

Yeni bir sunucuda yalnızca gerekli portları açmak gerekir. Web sunucusu için 80 ve 443 portları, yönetim için ise SSH portu açık bırakılabilir. Gereksiz servislerin dış dünyaya açık olması saldırı yüzeyini büyütür.

#cloud-config
packages:
  - ufw

runcmd:
  - ufw default deny incoming
  - ufw default allow outgoing
  - ufw allow 22/tcp
  - ufw allow 80/tcp
  - ufw allow 443/tcp
  - ufw --force enable

SSH portunu değiştirmek tek başına güçlü bir güvenlik önlemi değildir; ancak log gürültüsünü azaltabilir. Asıl güvenlik katmanı güçlü anahtar yönetimi, güncel paketler, kısıtlı kullanıcı yetkileri ve düzenli izleme ile sağlanmalıdır.

Paket, Servis ve Komut Yönetimi

Cloud-init ile yalnızca kullanıcı oluşturmak değil, aynı zamanda paket yüklemek, servisleri etkinleştirmek ve özel komutlar çalıştırmak da mümkündür. Bu özellik, web uygulaması çalıştıracak sunucuların ilk kurulumunda büyük kolaylık sağlar.

Paket Kurulumu

packages bölümü, sistem paket yöneticisi üzerinden kurulacak paketleri tanımlar. Ubuntu ve Debian tabanlı sistemlerde apt, RHEL türevlerinde ise dnf veya yum kullanılır.

#cloud-config
package_update: true
packages:
  - nginx
  - git
  - curl
  - fail2ban

Dosya Oluşturma

write_files bölümü, sunucu üzerinde dosya oluşturmak veya mevcut dosyayı belirli içerikle yazmak için kullanılır. Örneğin basit bir Nginx karşılama sayfası ilk açılışta oluşturulabilir.

#cloud-config
write_files:
  - path: /var/www/html/index.html
    permissions: '0644'
    owner: www-data:www-data
    content: |
      <h1>Cloud-init ile hazirlanan sunucu</h1>
      <p>Ilk kurulum otomatik tamamlandi.</p>

Komut Çalıştırma

runcmd, cloud-init sürecinin son aşamalarında komut çalıştırmak için kullanılır. Servis başlatma, izin düzenleme, repository ekleme veya uygulama dağıtımı gibi işlemler burada yapılabilir.

#cloud-config
runcmd:
  - systemctl enable nginx
  - systemctl restart nginx
  - mkdir -p /opt/app
  - chown -R deploy:deploy /opt/app

Önemli bir nokta, runcmd içine çok uzun ve karmaşık kurulum betikleri yazmamaktır. Karmaşık işlemler için ayrı bir shell script dosyası oluşturmak, bu dosyayı write_files ile yazmak ve ardından çalıştırmak daha okunabilir bir yöntemdir.

Hata Ayıklama ve Loglar

Cloud-init yapılandırması beklediğiniz gibi çalışmadığında ilk kontrol edilmesi gereken yer log dosyalarıdır. Hatalı YAML girintisi, paket deposuna erişim sorunu, yanlış SSH anahtarı veya komut hataları sık görülen problemlerdir.

  • /var/log/cloud-init.log: Cloud-init servisinin ayrıntılı çalışma kayıtlarını içerir.
  • /var/log/cloud-init-output.log: Çalıştırılan komutların çıktılarını ve hata mesajlarını gösterir.
  • cloud-init status: Cloud-init sürecinin tamamlanıp tamamlanmadığını kontrol eder.
  • cloud-init analyze: Başlangıç aşamalarının ne kadar sürdüğünü analiz etmek için kullanılabilir.
cloud-init status --long
cat /var/log/cloud-init.log
cat /var/log/cloud-init-output.log
cloud-init analyze blame

Test amacıyla cloud-init durumunu sıfırlayıp tekrar çalıştırmak mümkündür; ancak bu işlem canlı sunucularda dikkatli yapılmalıdır. Kullanıcı, SSH veya dosya ayarlarını yeniden uygulayabileceği için beklenmeyen değişikliklere yol açabilir.

cloud-init clean --logs
reboot

Bu komutlar, özellikle laboratuvar ortamlarında yapılandırma denemeleri yaparken işe yarar. Üretim ortamında ise önce snapshot veya yedek almak önerilir. Yedekleme süreçleri için Corelux Yedekleme Hizmeti tercih edilebilir.

Kullanım Senaryoları

Cloud-init yalnızca temel sunucu hazırlığı için değil, farklı operasyonel senaryolarda da kullanılabilir. Aşağıdaki örnekler, VPS/VDS ve bulut sunucu ortamlarında sık karşılaşılan ihtiyaçlara yöneliktir.

Web Sunucusu Hazırlama

Yeni bir web projesi için Nginx, PHP-FPM, Git ve güvenlik duvarı otomatik kurulabilir. Böylece geliştirici ekip, sunucu açıldıktan sonra doğrudan kod dağıtımına geçebilir. Bu yapı, Linux Hosting yerine daha fazla kontrol isteyen kullanıcılar için VPS/VDS üzerinde esnek bir alternatif sunar.

Standart Yönetici Kullanıcısı Oluşturma

Kurumsal ekiplerde her sunucuda aynı yönetici standardını uygulamak önemlidir. Cloud-init ile devops, deploy veya sysadmin gibi kullanıcılar oluşturulabilir; her kullanıcıya farklı SSH anahtarları tanımlanabilir.

İzleme Ajanı Dağıtımı

Prometheus node exporter, log ajanı veya merkezi izleme aracı ilk açılışta kurulabilir. Böylece sunucu aktif olur olmaz metrik ve log üretmeye başlar. Bu yaklaşım, altyapı görünürlüğünü artırır ve sorunların daha erken fark edilmesini sağlar.

Uygulama Ön Hazırlığı

Node.js, Python, PHP veya Laravel tabanlı uygulamalar için gerekli runtime bileşenleri cloud-init ile kurulabilir. Örneğin Git deposu klonlanabilir, uygulama dizini hazırlanabilir ve sistem servisi oluşturulabilir. Daha yönetilebilir uygulama platformları için Corelux Uygulama Sunucuları kategorisi de değerlendirilebilir.

Geçici Test Ortamları

QA veya geliştirme ekipleri, kısa süreli test sunucularını cloud-init ile dakikalar içinde hazır hale getirebilir. Test tamamlandığında sunucu silinir ve ihtiyaç olduğunda aynı yapılandırmayla tekrar oluşturulur. Bu yöntem, maliyet kontrolü ve ortam tutarlılığı açısından verimlidir.

En İyi Uygulamalar

Cloud-init verimli kullanıldığında sunucu yönetimini kolaylaştırır; ancak hatalı tasarlanmış yapılandırmalar güvenlik ve bakım sorunlarına neden olabilir. Aşağıdaki öneriler, daha güvenli ve sürdürülebilir bir kullanım için dikkate alınmalıdır.

  1. Şifre yerine SSH anahtarı kullanın: Cloud-init içinde düz metin parola tanımlamak yerine ssh_authorized_keys kullanın.
  2. Gizli bilgileri user-data içinde saklamayın: API anahtarı, veritabanı şifresi veya özel sertifika gibi hassas verileri doğrudan dosyaya yazmayın.
  3. YAML doğrulaması yapın: Girinti hataları cloud-init işlemlerinin başarısız olmasına neden olabilir.
  4. Komutları idempotent tasarlayın: Aynı komut tekrar çalıştırıldığında sistemi bozmamalıdır. Örneğin klasör oluştururken mkdir -p kullanın.
  5. Kısa ve okunabilir tutun: Çok uzun betikleri ayrı dosyaya taşıyın ve cloud-init ile çağırın.
  6. Log kontrolünü standartlaştırın: Kurulum sonrası cloud-init status ve log dosyalarını kontrol etmeyi süreç haline getirin.
  7. Yedek veya snapshot alın: Özellikle üretim ortamında tekrar çalıştırma veya yeniden yapılandırma işlemlerinden önce geri dönüş planı oluşturun.
  8. Sürüm kontrolü kullanın: Cloud-init şablonlarını Git gibi bir sistemde saklayarak değişiklik geçmişini takip edin.

Cloud-init dosyalarını bir altyapı standardı olarak görmek önemlidir. Nasıl uygulama kodu test ediliyor ve sürüm kontrolünde tutuluyorsa, sunucu başlangıç yapılandırmaları da aynı disiplinle yönetilmelidir.

İhtiyaç Cloud-init Yaklaşımı Dikkat Edilecek Nokta
Güvenli SSH erişimi SSH anahtarı ekleme ve parola girişini kapatma Anahtarları düzenli olarak güncelleyin
Hızlı web ortamı Nginx, PHP veya Node.js paketlerini kurma Servislerin aktif çalıştığını kontrol edin
Standart kullanıcı yönetimi Ortak kullanıcı ve grup şablonu oluşturma Gereksiz sudo yetkisi vermeyin
İzlenebilirlik İzleme ve log ajanlarını ilk açılışta yükleme Ajan token bilgilerini güvenli yönetin

Sıkça Sorulan Sorular

Cloud-init her Linux dağıtımında çalışır mı?

Cloud-init birçok modern Linux dağıtımında desteklenir; ancak her imajda varsayılan olarak kurulu olmayabilir. Ubuntu bulut imajlarında genellikle hazır gelir. Debian, AlmaLinux, Rocky Linux ve benzeri sistemlerde paket yöneticisiyle kurulabilir veya sağlayıcının cloud-init destekli imajı tercih edilebilir.

Cloud-init sadece ilk açılışta mı çalışır?

Cloud-init çoğunlukla ilk açılış yapılandırması için kullanılır. Bazı modüller her açılışta, bazıları ise yalnızca ilk başlatmada çalışacak şekilde tasarlanmıştır. Bu davranış modül frekansına bağlıdır. Yeniden çalıştırma işlemleri mümkündür; fakat üretim sunucularında dikkatli uygulanmalıdır.

User-data içine parola yazmak güvenli midir?

Genellikle önerilmez. User-data bazı ortamlarda sağlayıcı paneli, loglar veya metadata servisleri üzerinden erişilebilir olabilir. Bu nedenle parola, API anahtarı ve özel sertifika gibi hassas veriler doğrudan user-data içinde saklanmamalıdır. SSH anahtarı ve güvenli gizli bilgi yönetimi tercih edilmelidir.

Cloud-init ile Docker veya uygulama kurulumu yapılabilir mi?

Evet, cloud-init ile Docker, web sunucusu, veritabanı istemcisi, izleme ajanı veya uygulama bağımlılıkları kurulabilir. Ancak çok karmaşık dağıtımlar için cloud-init yalnızca başlangıç hazırlığı olarak kullanılmalı; devamında Ansible, CI/CD veya özel dağıtım araçları tercih edilmelidir.

Cloud-init hatalarını nasıl görebilirim?

En önemli log dosyaları /var/log/cloud-init.log ve /var/log/cloud-init-output.log dosyalarıdır. Ayrıca cloud-init status --long komutu ile işlem durumu, cloud-init analyze blame komutu ile hangi aşamanın ne kadar sürdüğü incelenebilir.

Cloud-init ile hostname değiştirmek mümkün mü?

Evet. hostname ve fqdn alanları kullanılarak sunucunun adı ilk açılışta ayarlanabilir. Ayrıca manage_etc_hosts: true ayarı ile /etc/hosts dosyasının cloud-init tarafından yönetilmesi sağlanabilir.

Cloud-init, kontrol paneli kurulumları için kullanılabilir mi?

Temel hazırlıklar için kullanılabilir. Örneğin kullanıcı oluşturma, güncelleme, paket kurma ve güvenlik duvarı ayarları cloud-init ile yapılabilir. Ancak cPanel, Plesk veya benzeri panellerin kurulumları lisans, işletim sistemi uyumluluğu ve özel gereksinimler içerdiği için üretici dokümantasyonuna uygun şekilde ayrıca planlanmalıdır.

Sonuç

Cloud-init ile VPS/VDS ilk kurulum otomasyonu, sunucu yönetiminde hız, güvenlik ve standartlaşma sağlayan etkili bir yöntemdir. Kullanıcı oluşturma, SSH anahtarı tanımlama, paket güncelleme, firewall etkinleştirme, servis başlatma ve temel dosya yapılandırmaları tek bir YAML dosyasıyla otomatik hale getirilebilir.

Özellikle birden fazla sunucu yöneten ekipler için cloud-init, manuel işlem yükünü azaltır ve yapılandırma hatalarını en aza indirir. İyi hazırlanmış bir cloud-init şablonu, yeni sunucuların dakikalar içinde güvenli ve kullanıma hazır olmasını sağlar.

Projeleriniz için esnek ve yönetilebilir altyapı arıyorsanız Corelux Sanal Sunucu, Kiralık Sunucu ve Bulut Sunucu seçeneklerini değerlendirebilirsiniz. Doğru otomasyon yaklaşımıyla sunucu kurulum süreçlerinizi daha güvenli, hızlı ve sürdürülebilir hale getirebilirsiniz.

Yazar

Boran BAR

Chat on WhatsApp