Ansible ile VPS Kurulumunu Otomatikleştirme: Envanter ve İlk Oyun Kitabı
Giriş
Ansible, yapılandırma yönetimi, uygulama dağıtımı ve altyapı sağlama için kullanılan açık kaynaklı bir otomasyon aracıdır. Sunuculara SSH üzerinden bağlanır ve uzak makinelerde herhangi bir ajan kurulumu gerektirmez, bu da onu basit ve güvenli hale getirir. Yaygın kullanım durumları arasında sunucu kurulumunu otomatikleştirme, yapılandırmaları tutarlı tutma ve birden fazla sistemde aynı anda uygulama dağıtımı yer alır.
Bu eğitimde, yerel makinenizde Ansible'ı kuracak ve birden fazla VPS örneğinin yapılandırmasını otomatikleştirmek için kullanacaksınız. Her sunucuyu manuel olarak yapılandırmak yerine, görevleri bir kez tanımlar ve her yerde uygularsınız. Bir envanter oluşturur, ilk oyun kitabınızı yazar ve çalışan bir web uygulaması yığını dağıtırsınız.
Ansible Temel Kavramlarını Anlamak
Komutları tek tek çalıştıran bir betik yazmıyorsunuz. Oyun kitabı tamamlandıktan sonra sunucularınızın nasıl görünmesi gerektiğini tanımlıyorsunuz.
Bu eğitimde yalnızca birkaç temel bileşen kullanıyorsunuz. Envanter dosyası, VPS sunucularınızı ve Ansible'ın onlara nasıl bağlandığını tanımlar. Oyun kitabı, sunucularınızın istenen durumunu tanımladığınız yerdir. Oyun kitabının içinde, görevler, yüklenmiş paketler, çalışan hizmetler veya yapılandırma dosyaları gibi bu istenen durumun bireysel parçalarını tanımlar.
Buradaki en önemli kavram, deklaratifliktir. Bir kabuk betiğinde olduğu gibi tam komutlar yazmak yerine, istediğiniz sonucu tanımlarsınız. Örneğin, Ansible'a Nginx'i yüklemek için bir komut çalıştırmasını söylemezsiniz. Nginx'in yüklenmesi gerektiğini tanımlarsınız. Bir hizmeti manuel olarak başlatmasını söylemezsiniz. Hizmetin çalışması ve etkinleştirilmesi gerektiğini tanımlarsınız. Ansible, bu durumu elde etmek için hangi eylemlerin gerektiğine karar verir.
Bu, belirli bir sırayla komutları manuel olarak çalıştıracağınız geleneksel bir yaklaşımdan farklıdır. Böyle betiklerde, her olası durumu kendiniz ele almanız gerekir. Ansible ile, kullandığınız modüllerde, paket yönetimi, hizmet kontrolü, dosya yönetimi ve HTTP kontrolleri gibi mantık yerleşiktir.
Bir diğer önemli kavram ise idempotansdır. Bu, aynı oyun kitabını birden fazla kez çalıştırmanın gereksiz değişikliklere neden olmaması anlamına gelir. Sistem zaten istenen duruma uyuyorsa, Ansible onu değiştirmeden bırakır. Örneğin, Nginx zaten yüklüyse, yeniden yüklenmez. Bir yapılandırma dosyası zaten tanımladığınızla eşleşiyorsa, yeniden yazılmaz.
Deklaratiflik ve idempotans sayesinde, oyun kitabını güvenle birden fazla kez çalıştırabilirsiniz. İlk çalıştırmada, Ansible her şeyi yükler ve yapılandırır. Sonraki çalıştırmalarda, yalnızca sistem durumunu kontrol eder ve gerekirse değiştirir.
Ön Koşullar
- Hedef kitle: Başlangıç seviyesindeki sistem yöneticileri
- Tahmini süre: ~40–60 dakika
- İşletim sistemi: Yerel PC ve tüm VPS düğümlerinde Debian 13
- VPS düğümleri:
- ans0:
192.168.10.10 - ans1:
192.168.10.11 - ans2:
192.168.10.12
- ans0:
- Erişim:
- Tüm VPS örneklerine SSH erişimi
- Her VPS'de sudo ayrıcalıklarına sahip bir kullanıcı
- Ağ:
- SSH için
22portu açık - HTTP için
80portu açık
- SSH için
- Yerel makine:
- Python 3 yüklü
- İnternet erişimi
- Son hedef: Bu eğitimin sonunda, birden fazla VPS sunucusunu otomatik olarak yapılandıracak, Nginx'i yükleyecek, PocketBase'i dağıtacak ve bir web sunucusu aracılığıyla erişilebilir hale getireceksiniz.
Adım 1: Yerel Makineye Ansible Kurulumu
Ansible, yerel makinenizde çalışır ve uzak sunuculara bağlanır. Yalnızca bir kez kurulum yaparsınız.
Paket listelerini güncelleyin:
sudo apt update
Ansible'ı yükleyin:
sudo apt install ansible -y
Kurulumu kontrol edin:
ansible --version
Beklenen sonuç: Sürüm bilgilerini görürsünüz. Bu, Ansible'ın yüklendiğini ve hazır olduğunu doğrular.
Adım 2: SSH Erişimini Hazırlayın
Ansible, sunuculara bağlanmak için SSH kullanır. Her seferinde şifre yazmaktan kaçınmak için SSH anahtarlarını kullanırsınız.
SSH anahtarı oluşturun:
ssh-keygen
Varsayılanları kabul etmek için Enter tuşuna basın. Bu, bir anahtar çifti oluşturur:
- Özel anahtar PC'nizde kalır
- Açık anahtar sunuculara kopyalanır
Anahtarı VPS'ye kopyalayın:
ssh-copy-id <YOUR_USERNAME>@192.168.10.10
ssh-copy-id <YOUR_USERNAME>@192.168.10.11
ssh-copy-id <YOUR_USERNAME>@192.168.10.12
Erişimi test edin:
ssh <YOUR_USERNAME>@192.168.10.10
Beklenen sonuç: Şifre girmeden giriş yaparsınız.
Adım 3: Ansible Projesi ve Envanteri Oluşturun
Ansible, hangi sunucuları yöneteceğini bilmek için bir envanter dosyası kullanır.
Proje dizini oluşturun:
mkdir ~/ansible-vps
cd ~/ansible-vps
Envanter dosyası oluşturun:
nano inventory.ini
Envanter dosyasına aşağıdaki içeriği ekleyin:
[vps] ans0 ansible_host=192.168.10.10 ans1 ansible_host=192.168.10.11 ans2 ansible_host=192.168.10.12 [vps:vars] ansible_user=<YOUR_USERNAME> ansible_python_interpreter=/usr/bin/python3
Açıklama:
[vps]bir grup adıdırans0,ans1,ans2mantıksal adlardıransible_hostgerçek IP adreslerini tanımlaransible_user, Ansible'ın hangi kullanıcıyla giriş yapacağını belirtir
Bağlantıyı test edin:
ansible -i inventory.ini vps -m ping
Beklenen sonuç: Her sunucu "pong" döndürür.
Adım 4: İlk Oyun Kitabınızı Oluşturun
Bir oyun kitabı, sunucularda çalıştırmak istediğiniz görevleri tanımladığınız bir dosyadır.
Dosya oluşturun:
nano playbook.yml
Oyun kitabı dosyasına aşağıdaki içeriği ekleyin:
- name: VPS düğümlerini yapılandır hosts: vps become: true tasks: - name: Bağlantıyı test et ping: - name: Apt önbelleğini güncelle apt: update_cache: yes - name: Paketleri yükselt apt: upgrade: dist - name: Nginx'i yükle apt: name: nginx state: present - name: Nginx'in çalıştığından emin ol service: name: nginx state: started enabled: true - name: HTTP bağlantısını test et uri: url: http://127.0.0.1/ return_content: no - name: PocketBase için dizin oluştur file: path: /opt/pocketbase/pb_public state: directory - name: Unzip'i yükle apt: name: unzip state: present - name: PocketBase'i indir get_url: url: https://github.com/pocketbase/pocketbase/releases/download/v0.36.7/pocketbase_0.36.7_linux_amd64.zip dest: /opt/pocketbase/pocketbase.zip - name: PocketBase'i aç unarchive: src: /opt/pocketbase/pocketbase.zip dest: /opt/pocketbase/ remote_src: yes - name: Pocketbase index.html oluştur copy: dest: /opt/pocketbase/pb_public/index.html content: | <h1>Pocketbase</h1> - name: Systemd hizmeti oluştur copy: dest: /etc/systemd/system/pocketbase.service content: | [Unit] Description=PocketBase Hizmeti After=network.target [Service] Type=simple ExecStart=/opt/pocketbase/pocketbase serve --http=127.0.0.1:8090 Restart=always [Install] WantedBy=multi-user.target - name: Systemd'yi yeniden yükle command: systemctl daemon-reexec - name: PocketBase'i etkinleştir ve başlat service: name: pocketbase enabled: true state: started - name: Nginx sitesini yapılandır copy: dest: /etc/nginx/sites-available/pocketbase content: | server { listen 80; server_name _; location / { proxy_pass http://127.0.0.1:8090; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; } } - name: Nginx sitesini etkinleştir file: src: /etc/nginx/sites-available/pocketbase dest: /etc/nginx/sites-enabled/pocketbase state: link - name: Varsayılan siteyi kaldır file: path: /etc/nginx/sites-enabled/default state: absent - name: Nginx'i yeniden başlat service: name: nginx state: restarted - name: PocketBase kullanılabilirliğini kontrol et uri: url: http://127.0.0.1:8090/_/ return_content: no
Açıklama:
hosts: vpstüm grup sunucuları anlamına gelirbecome: truegörevleri yükseltilmiş ayrıcalıklarla çalıştırır- Her görev bir eylemi tanımlar
apt,service,filegibi modüller Ansible'a yerleşiktir
Adım 5: Oyun Kitabını Çalıştırın
ansible-playbook -i inventory.ini playbook.yml
Beklenen sonuç: Görevler tüm düğümlerde hatasız çalışır.
İlk çalıştırma, ağ hızına bağlı olarak birkaç dakika sürebilir.
Doğrulama
Web sunucusunu kontrol edin:
curl http://192.168.10.10/
Beklenen sonuç: HTTP yanıtı döner.
Tarayıcıda açın: http://192.168.10.10/_/
Beklenen sonuç: PocketBase arayüzü yüklenir.
Diğer düğümler için tekrarlayın.
Değişiklikleri Geri Alma
sudo systemctl stop pocketbase
sudo systemctl disable pocketbase
sudo rm /etc/systemd/system/pocketbase.service
sudo rm -rf /opt/pocketbase
sudo apt remove nginx unzip -y
Systemd'yi yeniden yükleyin:
sudo systemctl daemon-reload
Sorun Giderme
- SSH başarısız: anahtarları ve kullanıcıyı kontrol edin
- Ansible ping başarısız: ana bilgisayarlar arasında ağ bağlantısını kontrol edin
- Nginx sorunları:
systemctl status nginx - PocketBase sorunları:
journalctl -u pocketbase
Sonuç
Ansible otomasyon aracını kurdunuz, bir envanter oluşturdunuz ve ilk oyun kitabınızı yazdınız. Birden fazla sunucuya Nginx ve PocketBase dağıtımını otomatikleştirdiniz.
Sonraki adımlar:
- Daha iyi yapı için roller kullanın
- Değişkenler ve şablonlar ekleyin
- HTTPS yapılandırın