Cloud-init ile VPS/VDS İlk Kurulum Otomasyonu
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?
- VPS/VDS İçin Neden Önemlidir?
- Temel Kavramlar
- Örnek Cloud-config Dosyası
- Güvenlik Ayarları
- Paket, Servis ve Komut Yönetimi
- Hata Ayıklama ve Loglar
- Kullanım Senaryoları
- En İyi Uygulamalar
- Sıkça Sorulan Sorular
- Sonuç
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.
- Şifre yerine SSH anahtarı kullanın: Cloud-init içinde düz metin parola tanımlamak yerine
ssh_authorized_keyskullanın. - Gizli bilgileri user-data içinde saklamayın: API anahtarı, veritabanı şifresi veya özel sertifika gibi hassas verileri doğrudan dosyaya yazmayın.
- YAML doğrulaması yapın: Girinti hataları cloud-init işlemlerinin başarısız olmasına neden olabilir.
- Komutları idempotent tasarlayın: Aynı komut tekrar çalıştırıldığında sistemi bozmamalıdır. Örneğin klasör oluştururken
mkdir -pkullanın. - Kısa ve okunabilir tutun: Çok uzun betikleri ayrı dosyaya taşıyın ve cloud-init ile çağırın.
- Log kontrolünü standartlaştırın: Kurulum sonrası
cloud-init statusve log dosyalarını kontrol etmeyi süreç haline getirin. - 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.
- 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