Ansible ile VPS Kurulumunu Otomatikleştirme: Envanter ve İlk Oyun Kitabı | INTROSERV
EUR
european

EUR

usa

USD

Turkish Tr
Ex. VAT Ex. VAT 0%

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
  • 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 22 portu açık
    • HTTP için 80 portu açık
  • 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ır
  • ans0, ans1, ans2 mantıksal adlardır
  • ansible_host gerçek IP adreslerini tanımlar
  • ansible_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: vps tüm grup sunucuları anlamına gelir
  • become: true görevleri yükseltilmiş ayrıcalıklarla çalıştırır
  • Her görev bir eylemi tanımlar
  • apt, service, file gibi 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.

Info

İ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

VAT

  • Other

    Ex. VAT

    0%
  • austria

    Austria

    20%
  • Belgium

    Belgium

    21%
  • Bulgaria

    Bulgaria

    20%
  • Croatia

    Croatia

    25%
  • Cyprus

    Cyprus

    19%
  • Czech Republic

    Czech Republic

    21%
  • Denmark

    Denmark

    25%
  • Estonia

    Estonia

    22%
  • France

    France

    20%
  • Finland

    Finland

    24%
  • Germany

    Germany

    19%
  • Greece

    Greece

    24%
  • Hungary

    Hungary

    27%
  • Ireland

    Ireland

    23%
  • Italy

    Italy

    22%
  • Latvia

    Latvia

    21%
  • Lithuania

    Lithuania

    21%
  • Luxembourg

    Luxembourg

    17%
  • Malta

    Malta

    18%
  • Netherlands

    Netherlands

    21%
  • Poland

    Poland

    23%
  • Portugal

    Portugal

    23%
  • Romania

    Romania

    19%
  • Slovakia

    Slovakia

    20%
  • Slovenia

    Slovenia

    22%
  • Spain

    Spain

    21%
  • Sweden

    Sweden

    25%
  • USA

    USA

    0%
european
states
  • germany
  • Español
  • Italiano
  • Poland
  • Русский
  • Slovenski
  • Türkçe
  • ukraine
  • kingdom
  • French
  • Hrvatska
  • Other
  • Austria
  • Belgium
  • Bulgaria
  • Croatia
  • Cyprus
  • Czech Republic
  • Denmark
  • Estonia
  • Finland
  • France
  • Germany
  • Greece
  • Hungary
  • Ireland
  • Italy
  • Latvia
  • Lithuania
  • Luxembourg
  • Malta
  • Netherlands
  • Poland
  • Portugal
  • Romania
  • Slovakia
  • Slovenia
  • Spain
  • Sweden
  • USA