Static HTML Web Sitesini Ansible ile Ubuntu 20.04 Üzerine Dağıtma (Nginx)
Bu makale, statik bir HTML web sitesini Ubuntu 20.04 işletim sistemine sahip sunuculara Ansible otomasyon aracı ve Nginx web sunucusu kullanarak nasıl dağıtacağınızı adım adım açıklamaktadır. Ansible’ın gücünü kullanarak, dağıtım sürecini tekrarlanabilir, hatasız ve verimli hale getireceğiz.
Giriş
Günümüzde yazılım geliştirme ve sistem yönetimi süreçlerinde otomasyon, verimlilik ve tutarlılık açısından kritik bir rol oynamaktadır. Özellikle web sitelerinin veya uygulamaların sunuculara dağıtımı (deployment) gibi tekrarlayan görevler, manuel yapıldığında zaman alıcı, hataya açık ve tutarsız sonuçlar doğurabilir. İşte tam bu noktada Ansible gibi yapılandırma yönetimi araçları devreye girer.
Bu makalede, basit bir statik HTML web sitesini Ubuntu 20.04 işletim sistemine sahip bir veya daha fazla sunucuya dağıtmak için Ansible’ı kullanacağız. Web sunucusu olarak hızlı, hafif ve yüksek performanslı Nginx’i tercih edeceğiz. Adım adım bir Ansible kontrol makinesinin kurulumundan, hedef sunucuların hazırlanmasına, Ansible playbook’larının yazılmasına ve son olarak web sitesinin başarıyla dağıtılmasına kadar tüm süreci ele alacağız. Amacımız, bu süreci otomatikleştirerek gelecekteki dağıtımları kolaylaştırmak ve “altyapıyı kod olarak” (Infrastructure as Code) prensibini uygulamaktır.
Neden Ansible?
Ansible, IT otomasyonu için tasarlanmış açık kaynaklı bir araçtır. Yapılandırma yönetimi, uygulama dağıtımı, görev otomasyonu ve sürekli dağıtım (CD) gibi birçok alanda kullanılabilir. Peki, neden özellikle Ansible’ı tercih etmeliyiz?
Agentless Mimari
Ansible’ın en önemli avantajlarından biri “agentless” olmasıdır. Hedef sunuculara herhangi bir özel yazılım (agent) yüklemenize gerek yoktur. Sadece SSH erişimi ve Python yüklü olması yeterlidir. Bu, kurulumu basitleştirir ve ek bağımlılıkları ortadan kaldırır.
Basit ve Okunabilir YAML Sintaksı
Ansible playbook’ları, insan tarafından kolayca okunabilen ve yazılabilen YAML formatında yazılır. Bu, karmaşık otomasyon görevlerinin bile anlaşılır bir şekilde ifade edilmesini sağlar ve ekip üyeleri arasında işbirliğini kolaylaştırır.
Idempotent Yapı
Ansible, görevleri idempotent bir şekilde yürütür. Bu, bir playbook’u birden çok kez çalıştırdığınızda, sistemin yalnızca gerekli değişiklikleri yapacağı ve zaten doğru durumda olan bileşenlere dokunmayacağı anlamına gelir. Bu özellik, sistemin tutarlı bir durumda kalmasını garanti eder ve beklenmeyen yan etkileri önler.
Geniş Modül Kütüphanesi
Ansible, dosya yönetimi, paket kurulumu, servis yönetimi, veritabanı işlemleri, bulut sağlayıcıları ile entegrasyon gibi binlerce hazır modül sunar. Bu modüller, çoğu otomasyon ihtiyacını karşılayacak kadar zengin bir işlevsellik sağlar.
Ölçeklenebilirlik
Ansible, küçük ölçekli dağıtımlardan, yüzlerce hatta binlerce sunucuyu içeren büyük ölçekli altyapılara kadar kolayca ölçeklenebilir. Inventory (envanter) dosyaları sayesinde sunucuları gruplandırabilir ve belirli gruplara veya tüm sunuculara aynı anda görevler uygulayabilirsiniz.
Ön Koşullar
Bu rehberi takip edebilmek için aşağıdaki ön koşulların sağlanmış olması gerekmektedir:
* İki Adet Ubuntu 20.04 Sunucu: Biri Ansible kontrol makinesi (deployment’ı yöneteceğiniz makine), diğeri ise statik web sitesini barındıracak hedef sunucu olacaktır. Her iki sunucunun da internet erişimi olmalıdır.
* SSH Erişimi: Ansible kontrol makinesinden hedef sunucuya SSH ile parola kullanmadan (SSH anahtar çifti ile) erişim sağlanmalıdır. Hedef sunucuda sudo yetkilerine sahip bir kullanıcı olmalıdır.
* Temel Linux Bilgisi: Komut satırı kullanımı, dosya sistemi navigasyonu ve temel Linux komutlarına aşinalık faydalı olacaktır.
* Metin Düzenleyici: Playbook’ları ve yapılandırma dosyalarını düzenlemek için bir metin düzenleyici (nano, vim, VS Code vb.) gereklidir.
Ansible Kontrol Makinesinin Kurulumu
İlk adım, Ansible’ı çalıştıracağınız kontrol makinesini hazırlamaktır. Bu makine, hedef sunucularla SSH üzerinden iletişim kuracaktır.
Python ve Pip Kurulumu
Ubuntu 20.04 genellikle Python ile birlikte gelir, ancak pip (Python paket yöneticisi) kurulu olmayabilir. Ansible, Python tabanlı olduğu için bu bileşenlere ihtiyacımız var.
sudo apt update
sudo apt install python3 python3-pip -y
Ansible Kurulumu
Pip kullanarak Ansible’ı kolayca kurabiliriz:
pip3 install ansible
Kurulumun başarılı olduğunu doğrulamak için Ansible sürümünü kontrol edin:
ansible --version
SSH Anahtar Çifti Oluşturma ve Hedef Sunucuya Kopyalama
Ansible, hedef sunucularla SSH üzerinden parola kullanmadan iletişim kurmak için SSH anahtar çiftlerini kullanır. Kontrol makinenizde bir anahtar çifti oluşturun (eğer yoksa):
ssh-keygen -t rsa -b 4096
Komut, anahtarı kaydedeceğiniz yeri ve bir parola isteyecektir. Varsayılan konumları kabul edebilir ve parolayı boş bırakabilirsiniz (otomatik dağıtımlar için daha uygundur).
Şimdi genel anahtarınızı (~/.ssh/id_rsa.pub) hedef sunucuya kopyalayın. your_user kısmını hedef sunucudaki kullanıcı adınızla, your_target_ip kısmını ise hedef sunucunuzun IP adresiyle değiştirin:
ssh-copy-id your_user@your_target_ip
Bu komut, hedef sunucudaki .ssh/authorized_keys dosyasına genel anahtarınızı ekleyecektir. İlk bağlantıda parola isteyecektir, daha sonra parola sormadan bağlanabilmelisiniz.
Bağlantıyı test edin:
ssh your_user@your_target_ip
Eğer parola sormadan bağlanabiliyorsanız, SSH kurulumunuz başarılı demektir.
Hedef Sunucuların Hazırlanması
Hedef sunucuda özel bir kurulum yapmaya gerek yoktur, çünkü Ansible “agentless” çalışır. Ancak, Ansible’ın bağlanacağı kullanıcının sudo yetkilerine sahip olduğundan ve SSH anahtarınızın kopyalandığından emin olun. Eğer Ansible’ın root dışı bir kullanıcıyla bağlanmasını istiyorsanız ve bu kullanıcının sudo yetkisi yoksa, aşağıdaki gibi bir komutla sudo yetkisi verebilirsiniz (hedef sunucuda root olarak veya sudo yetkisi olan başka bir kullanıcıyla çalıştırın):
sudo usermod -aG sudo your_user
Ansible Proje Yapısı Oluşturma
Düzenli ve ölçeklenebilir bir Ansible projesi için iyi bir dizin yapısı oluşturmak önemlidir. Kontrol makinenizde aşağıdaki gibi bir yapı oluşturalım:
ansible-project/
├── inventory/
│ └── hosts.ini
├── playbooks/
│ └── deploy_static_website.yml
├── roles/
│ ├── nginx/
│ │ ├── tasks/
│ │ │ └── main.yml
│ │ └── templates/
│ │ └── nginx_site.conf.j2
│ └── website/
│ ├── tasks/
│ │ └── main.yml
│ └── files/
│ └── index.html
│ └── css/
│ └── style.css
└── site/
├── index.html
└── css/
└── style.css
Bu yapı:
* inventory/: Sunucu envanter dosyalarını içerir.
* playbooks/: Ana playbook dosyalarını içerir.
* roles/: Yeniden kullanılabilir görev setlerini (rolleri) içerir. Her rol, belirli bir bileşenin (Nginx, web sitesi) yapılandırmasını yönetir.
* site/: Dağıtılacak statik web sitesi dosyalarını içerir.
Bu makalede, başlangıçta roles yerine doğrudan playbooks içinde görevleri tanımlayarak basitleştirebiliriz. Ancak büyük projelerde roles kullanmak daha iyi bir pratiktir. Biz site/ dizinindeki dosyaları doğrudan hedef sunucuya kopyalayacağız.
Inventory (Envanter) Dosyası
Ansible, üzerinde işlem yapacağı sunucuları inventory dosyasından okur. ansible-project/inventory/hosts.ini dosyasını oluşturalım ve içeriğini düzenleyelim:
# ansible-project/inventory/hosts.ini
[webservers]
your_domain_or_ip ansible_user=your_user ansible_ssh_private_key_file=~/.ssh/id_rsa
[all:vars]
ansible_python_interpreter=/usr/bin/python3
Açıklamalar:
* [webservers]: Bu, sunucularımızı gruplandırdığımız bir grup adıdır. Birden fazla web sunucunuz varsa, her birini bu grubun altına listeleyebilirsiniz.
* your_domain_or_ip: Hedef sunucunuzun IP adresi veya alan adı.
* ansible_user: Hedef sunucuya bağlanmak için kullanılacak SSH kullanıcı adı (sudo yetkisine sahip olmalı).
* ansible_ssh_private_key_file: SSH anahtarınızın kontrol makinesindeki yolu.
* [all:vars]: Tüm sunucular için geçerli olacak değişkenleri tanımlar.
* ansible_python_interpreter: Hedef sunucudaki Python 3 yorumlayıcısının yolunu belirtir. Ubuntu 20.04’te /usr/bin/python3 varsayılan olarak doğru yoldur.
Statik Web Sitesi İçin Örnek Dosyalar
Dağıtacağımız statik web sitesi için ansible-project/site/ dizininde örnek dosyalar oluşturalım.
ansible-project/site/index.html:
Ansible ile Dağıtılan Web Sitesi
Bu statik web sitesi, Ansible kullanılarak otomatik olarak dağıtılmıştır.
Dağıtım tarihi:
ansible-project/site/css/style.css:
body {
font-family: 'Arial', sans-serif;
background-color: #f4f4f4;
color: #333;
display: flex;
justify-content: center;
align-items: center;
min-height: 100vh;
margin: 0;
}
.container {
background-color: #fff;
padding: 40px;
border-radius: 8px;
box-shadow: 0 4px 10px rgba(0, 0, 0, 0.1);
text-align: center;
max-width: 600px;
width: 90%;
}
h1 {
color: #0056b3;
margin-bottom: 20px;
}
p {
font-size: 1.1em;
line-height: 1.6;
}
#deployment-date {
font-weight: bold;
color: #007bff;
}
Ansible Playbook Oluşturma
Şimdi ansible-project/playbooks/deploy_static_website.yml dosyasını oluşturacağız. Bu playbook, Nginx’i kuracak, yapılandıracak ve web sitesi dosyalarını hedef sunucuya kopyalayacaktır.
# ansible-project/playbooks/deploy_static_website.yml
---
- name: Statik Web Sitesini Dağıtma
hosts: webservers
become: yes # Görevleri sudo yetkisiyle çalıştır
vars:
web_root: "/var/www/{{ ansible_hostname }}" # Web sitesi kök dizini
nginx_conf_path: "/etc/nginx/sites-available/{{ ansible_hostname }}"
nginx_enabled_path: "/etc/nginx/sites-enabled/{{ ansible_hostname }}"
nginx_default_conf: "/etc/nginx/sites-enabled/default"
your_domain: "{{ ansible_hostname }}" # Alan adınız, veya IP adresi
tasks:
- name: Nginx paketini yükle
ansible.builtin.apt:
name: nginx
state: present
update_cache: yes
- name: Web sitesi kök dizinini oluştur
ansible.builtin.file:
path: "{{ web_root }}"
state: directory
owner: www-data
group: www-data
mode: '0755'
recurse: yes
- name: Statik web sitesi dosyalarını kopyala
ansible.builtin.copy:
src: ../site/ # Kontrol makinesindeki site dizini
dest: "{{ web_root }}"
owner: www-data
group: www-data
mode: '0644' # Dosyalar için varsayılan izin
# mode: '0755' # Dizinler için izin (copy modülü recurse ile dizin izinlerini otomatik ayarlar)
# recurse: yes # copy modülü src dizin ise otomatik olarak recurse yapar
- name: Nginx varsayılan yapılandırmasını kaldır
ansible.builtin.file:
path: "{{ nginx_default_conf }}"
state: absent
notify: Nginx'i yeniden başlat
- name: Nginx site yapılandırma dosyasını oluştur
ansible.builtin.template:
src: ../templates/nginx_site.conf.j2 # Nginx yapılandırma şablonu
dest: "{{ nginx_conf_path }}"
owner: root
group: root
mode: '0644'
notify: Nginx'i yeniden yükle
- name: Nginx site yapılandırmasını etkinleştir (sembolik link oluştur)
ansible.builtin.file:
src: "{{ nginx_conf_path }}"
dest: "{{ nginx_enabled_path }}"
state: link
notify: Nginx'i yeniden yükle
- name: Nginx servisini başlat ve etkinleştir
ansible.builtin.service:
name: nginx
state: started
enabled: yes
handlers:
- name: Nginx'i yeniden başlat
ansible.builtin.service:
name: nginx
state: restarted
- name: Nginx'i yeniden yükle
ansible.builtin.service:
name: nginx
state: reloaded
Playbook Açıklaması
* hosts: webservers: Bu playbook’un inventory/hosts.ini dosyasındaki [webservers] grubundaki tüm sunucularda çalışacağını belirtir.
* become: yes: Görevlerin sudo yetkileriyle çalıştırılmasını sağlar. Bu, paket yükleme, dizin oluşturma gibi ayrıcalıklı işlemler için gereklidir.
* vars: Playbook’ta kullanılacak değişkenleri tanımlar. Bu değişkenler, playbook’u daha esnek ve okunabilir hale getirir. ansible_hostname değişkeni, Ansible tarafından otomatik olarak toplanan hedef sunucunun hostname bilgisidir.
* tasks: Playbook’un asıl işini yapan görev listesidir.
* Nginx Kurulumu: apt modülü ile Nginx paketini yükler. update_cache: yes ile paket listesini günceller.
* Web Sitesi Kök Dizinini Oluşturma: file modülü ile web sitesi dosyalarının yer alacağı /var/www/your_domain dizinini oluşturur ve izinlerini ayarlar.
* Statik Web Sitesi Dosyalarını Kopyalama: copy modülü ile ansible-project/site/ dizinindeki tüm dosyaları hedef sunucudaki {{ web_root }} dizinine kopyalar. owner ve group olarak www-data kullanılır, bu Nginx’in genellikle kullandığı kullanıcı ve gruptur.
* Nginx Varsayılan Yapılandırmasını Kaldırma: Ubuntu’da Nginx yüklendiğinde /etc/nginx/sites-enabled/default adında bir varsayılan yapılandırma dosyası gelir. Bu görevi file modülü ile kaldırırız. Bu adım, bizim özel yapılandırmamızın çakışmamasını sağlar.
* Nginx Site Yapılandırma Dosyasını Oluşturma: template modülü ile nginx_site.conf.j2 şablon dosyasını kullanarak hedef sunucuda Nginx site yapılandırma dosyasını oluşturur. notify anahtar kelimesi, bu görev tamamlandığında Nginx'i yeniden yükle handler’ını tetikler.
* Nginx Site Yapılandırmasını Etkinleştirme: Nginx, /etc/nginx/sites-available dizinindeki yapılandırma dosyalarını okumaz, /etc/nginx/sites-enabled dizinindeki sembolik linkleri okur. Bu görev, file modülü ile sites-available dizinindeki yapılandırma dosyamıza bir sembolik link oluşturur.
* Nginx Servisini Başlatma ve Etkinleştirme: service modülü ile Nginx servisini başlatır ve sunucu yeniden başladığında otomatik olarak başlaması için etkinleştirir.
* handlers: notify ile tetiklenen özel görevlerdir. Bir handler, yalnızca bir görevde değişiklik olduğunda çalışır. Bu, gereksiz servis yeniden başlatmalarını önler. Örneğin, Nginx yapılandırma dosyasında bir değişiklik olduğunda Nginx’in yeniden yüklenmesi gerekir, ancak her playbook çalıştığında değil.
Nginx Yapılandırma Şablonu (nginx_site.conf.j2)
ansible-project/templates/nginx_site.conf.j2 dosyasını oluşturalım. Bu dosya, Jinja2 şablon motoru kullanılarak playbook’taki değişkenlerle dinamik olarak oluşturulacaktır.
# ansible-project/templates/nginx_site.conf.j2
server {
listen 80;
listen [::]:80;
root {{ web_root }};
index index.html index.htm;
server_name {{ your_domain }}; # Alan adınız veya IP adresiniz
location / {
try_files $uri $uri/ =404;
}
# Hata sayfaları (isteğe bağlı)
# error_page 404 /404.html;
# location = /404.html {
# internal;
# }
# log dosyaları
access_log /var/log/nginx/{{ your_domain }}_access.log;
error_log /var/log/nginx/{{ your_domain }}_error.log;
}
Açıklamalar:
* listen 80;: Nginx’in HTTP isteklerini 80 numaralı porttan dinlemesini sağlar.
* root {{ web_root }};: Web sitesi dosyalarının kök dizinini belirtir. {{ web_root }} değişkeni, playbook’tan gelir.
* index index.html index.htm;: Dizin istendiğinde hangi dosyaların aranacağını belirtir.
* server_name {{ your_domain }};: Bu sanal sunucunun hangi alan adları için istekleri işleyeceğini belirtir. {{ your_domain }} değişkeni playbook’tan gelir.
* location / { ... }: Tüm istekler için temel yapılandırmayı tanımlar. try_files yönergesi, istenen dosyanın veya dizinin var olup olmadığını kontrol eder.
* access_log ve error_log: Erişim ve hata günlüklerinin nereye yazılacağını belirtir.
Playbook’u Çalıştırma
Tüm dosyaları oluşturduktan sonra, Ansible kontrol makinenizden aşağıdaki komutu çalıştırarak playbook’u dağıtabilirsiniz:
ansible-playbook -i inventory/hosts.ini playbooks/deploy_static_website.yml
Komutun çıktısını dikkatlice izleyin. Her görev tamamlandığında durumunu (changed, ok, skipped, failed) göreceksiniz. Eğer her şey yolundaysa, tüm görevlerin “ok” veya “changed” olarak işaretlendiğini görmelisiniz. “changed” bir değişikliğin yapıldığı anlamına gelirken, “ok” sistemin zaten istenen durumda olduğu anlamına gelir (idempotency).
Başarılı bir dağıtımın ardından, web tarayıcınızı açın ve hedef sunucunuzun IP adresine veya alan adına gidin. Statik HTML web sitenizi görmelisiniz.
Ek Güvenlik ve İyileştirmeler
Web sitenizi dağıttıktan sonra, sunucunuzun güvenliğini artırmak ve kullanıcı deneyimini iyileştirmek için bazı ek adımlar atmanız önerilir.
UFW Firewall Kurulumu
Ubuntu’da varsayılan olarak gelen UFW (Uncomplicated Firewall) ile sunucunuzun güvenlik duvarını yapılandırabilirsiniz. Bu, yalnızca gerekli portlara (SSH, HTTP, HTTPS) erişime izin vererek sunucunuzu dışarıdan gelebilecek saldırılara karşı korur.
Playbook’unuza aşağıdaki görevleri ekleyebilirsiniz (veya ayrı bir playbook oluşturabilirsiniz):
# UFW Firewall kurulumu ve yapılandırması
- name: UFW'yi yükle
ansible.builtin.apt:
name: ufw
state: present
- name: SSH (22), HTTP (80) ve HTTPS (443) portlarına izin ver
community.general.ufw:
rule: allow
port: "{{ item }}"
proto: tcp
loop:
- '22'
- '80'
- '443' # HTTPS için, eğer kullanacaksanız
- name: UFW'yi etkinleştir
community.general.ufw:
state: enabled
policy: deny # Varsayılan olarak tüm gelen bağlantıları reddet
Bu görevleri playbook’unuza ekledikten sonra tekrar çalıştırdığınızda, sunucunuzun güvenlik duvarı yapılandırılacaktır.
HTTPS İçin Let’s Encrypt (Opsiyonel)
Web sitenizi HTTPS üzerinden yayınlamak, hem güvenlik hem de SEO açısından önemlidir. Let’s Encrypt, ücretsiz SSL/TLS sertifikaları sağlayan bir hizmettir ve Certbot aracıyla kolayca entegre edilebilir.
HTTPS kurulumu biraz daha karmaşık olabilir ve DNS yapılandırması gerektirir. Bu nedenle, bu makalenin kapsamı dışında tutulsa da, Ansible ile bu süreci de otomatikleştirebilirsiniz. Genel adımlar şunlardır:
1. Certbot Kurulumu: apt modülü ile Certbot’u ve Nginx eklentisini kurun.
2. Sertifika Alma: community.general.certbot modülünü kullanarak Let’s Encrypt’ten sertifika alın. Bu adım, alan adınızın doğru DNS kayıtlarına sahip olmasını gerektirir.
3. Nginx Yapılandırmasını Güncelleme: Nginx yapılandırma dosyanızı (nginx\_site.conf.j2) HTTPS’i dinleyecek ve sertifikaları kullanacak şekilde güncelleyin.
4. Otomatik Yenileme: Certbot’un sertifikaları otomatik olarak yenilemesini sağlayın (genellikle cronjob olarak ayarlanır).
Sonuç
Bu makalede, Ansible’ı kullanarak statik bir HTML web sitesini Ubuntu 20.04 sunucularına Nginx ile nasıl dağıtacağımızı öğrendik. Ansible kontrol makinesinin kurulumundan, hedef sunucuların hazırlanmasına, inventory dosyasının oluşturulmasına, playbook’ların yazılmasına ve son olarak web sitesinin başarıyla dağıtılmasına kadar tüm süreci adım adım inceledik.
Ansible’ın agentless mimarisi, idempotent yapısı ve okunabilir YAML sintaksı sayesinde, dağıtım süreçlerini otomatikleştirmek, tekrarlanabilir hale getirmek ve insan hatasını minimize etmek mümkün hale gelmektedir. Oluşturduğumuz playbook, gelecekte benzer statik web sitelerini saniyeler içinde dağıtmak veya mevcut olanları güncellemek için kolayca kullanılabilir. Bu yaklaşım, “altyapıyı kod olarak” prensibinin temelini oluşturur ve DevOps pratiklerinin önemli bir parçasıdır.
Bu rehber, basit bir statik web sitesi dağıtımını ele alsa da, öğrendiğiniz prensipleri daha karmaşık uygulamaların (örneğin, veritabanı kurulumu, uygulama sunucusu yapılandırması) dağıtımına da kolayca uygulayabilirsiniz. Ansible ile otomasyon yolculuğunuzda başarılar dileriz!
Sıkça Sorulan Sorular (SSS)
Ansible’da “idempotent” ne anlama geliyor?
Idempotent, bir işlemin birden çok kez uygulanmasının, tek bir kez uygulanmasıyla aynı sonuca yol açmasıdır. Ansible bağlamında, bir playbook’u birden çok kez çalıştırdığınızda, Ansible yalnızca sistemin istenen duruma ulaşması için gerekli değişiklikleri yapar. Eğer bir bileşen zaten doğru durumdaysa, Ansible ona dokunmaz. Bu, sistemin tutarlılığını garanti eder ve gereksiz değişiklikleri veya hataları önler.
Neden Nginx’i web sunucusu olarak seçtik?
Nginx, yüksek performanslı, hafif ve kaynak tüketimi düşük bir web sunucusudur. Özellikle statik içerik sunumu, ters proxy (reverse proxy) ve yük dengeleme (load balancing) gibi görevlerde mükemmel performans gösterir. Apache’ye kıyasla daha az bellek kullanır ve aynı anda daha fazla bağlantıyı işleyebilir, bu da onu statik web siteleri için ideal bir seçim yapar.
Statik web sitemi güncellemek istersem ne yapmalıyım?
Web sitenizi güncellemek için yapmanız gereken tek şey, ansible-project/site/ dizinindeki HTML, CSS, JavaScript veya resim dosyalarınızı değiştirmek ve ardından playbook’u tekrar çalıştırmaktır:
ansible-playbook -i inventory/hosts.ini playbooks/deploy_static_website.yml
Ansible’ın copy modülü, yalnızca değişen dosyaları hedef sunucuya kopyalayarak güncellemeyi idempotent bir şekilde yapacaktır. Nginx yapılandırması değişmediği sürece Nginx yeniden başlatılmayacak, sadece dosya değişiklikleri uygulanacaktır.
Farklı bir portta yayın yapmak istersem ne yapmalıyım?
Eğer web sitenizi 80 (HTTP) dışındaki bir portta yayınlamak isterseniz, ansible-project/templates/nginx_site.conf.j2 dosyasındaki listen 80; satırını istediğiniz port numarasıyla değiştirmeniz gerekir. Örneğin, 8080 portunda yayın yapmak için listen 8080; yapabilirsiniz. Ayrıca, bu portun sunucunuzun güvenlik duvarında (UFW) açık olduğundan emin olmalısınız.
Ansible rolleri neden önemlidir?
Bu makalede basitlik adına görevleri doğrudan playbook içinde tanımladık, ancak büyük ve karmaşık projelerde Ansible rolleri çok önemlidir. Rol, belirli bir bileşenin (örneğin Nginx, veritabanı, uygulama) kurulumu ve yapılandırması için tüm ilgili görevleri, şablonları, değişkenleri ve dosya yapılarını bir araya getiren düzenli bir dizin yapısıdır. Roller, kodun yeniden kullanılabilirliğini artırır, playbook’ları daha modüler hale getirir ve büyük ekiplerde işbirliğini kolaylaştırır. Bir rolü bir kez yazdıktan sonra, farklı playbook’larda veya farklı projelerde kolayca kullanabilirsiniz.