Sunucu otomasyonu, sunucuları etkili ve teknolojiye uygun bir şekilde yönetmenin ve izlemenin güvenli ve güvenilir bir sürecidir. Özel bir uzman ekibi tarafından kontrol edilen veri merkezlerindeki geleneksel sunucu yönetimi tarzının aksine, tüm sunucular otomasyon kullanılarak yönetilir. Sonuç olarak, insan hataları en aza indirilir.
Gibi yapılandırma yönetimi araçları Ansible, Puppet, Terraform, bunlardan sadece birkaçı, genellikle sunucuları otomatikleştirmek için kullanılır. Bu araçlar, yeni sunucular için standart prosedürler oluşturarak sunucuları otomasyon kullanarak kurar ve manuel olarak yapıldığında oluşabilecek olası hataları ortadan kaldırır.
Ansible güçlü bir açık kaynaklı projedir. Esnektir, kullanımı kolaydır ve en basitleştirilmiş mimariye sahiptir. Ansible playbook'larını kullanmak için kodlama geçmişi gerekmez ve düğümlere yazılım yüklemeyi gerektirmez. Her şeyden önce, betikler yazmasına ve otomasyonu kolaylaştırmasına olanak tanıyan mükemmel yeteneklerle donatılmıştır.
Bu kılavuzda, Ansible ile Ubuntu 20.04 üzerinde LAMP kurulumu ve yapılandırması adımlarında size yol göstereceğiz.
Gereksinimler
Bu öğreticiyi takip etmek için şunlara ihtiyacınız olacak:
- Sisteminizde kurulu bir Ubuntu.
- Bir veya daha fazla Ansible Ana Bilgisayarı: Başlangıçta, en son Ubuntu sürümünü çalıştıran bir veya daha fazla uzak Ansible ana bilgisayarı kurulmalıdır. Kurulum için Ansible ve Ubuntu 20.04 kullanarak Sunucu Kurulumunu Otomatikleştirme öğreticisini takip edin.
- Bir Ansible kontrol düğümü: Ansible kurulu, yapılandırılmış ve Ansible ana bilgisayarlarınıza şu yöntemle bağlanmış bir Ubuntu makinesi: SSH anahtarları:
-
- Kontrol düğümünde sudo yetkilerine sahip bir kullanıcı bulunmalı ve güvenlik duvarı şu durumda olmalıdır: AÇIK.
- Ansible'ı kurmak için yardıma ihtiyacınız varsa, şu öğreticiye göz atın: Ubuntu 20.04 üzerinde Ansible kurulumu ve yapılandırması.
Ansible Playbook'un Amacı Nedir?
Bu Ansible playbook'u, şu kılavuzumuzda belirtilen prosedürü uygulamanın alternatif bir yoludur: LAMP Yığını Kurulumu – Linux Apache MySQL PHP.
Ansible playbook'unu çalıştırmak, Ansible ana bilgisayarlarınızda aşağıdaki eylemlerin gerçekleşmesini sağlayacaktır:
-
Şunu yükleyin: aptitude (Ansible tarafından tercih edilen apt paket yöneticisine bir alternatif).
-
Gerekli tüm LAMP paketlerini yükleyin.
-
Yeni bir Apache VirtualHost oluşturun ve özel bir belge kök dizini (document root) yapılandırın.
-
Şunu AÇIK konuma getirin: yeni VirtualHost.
-
Şunu KAPALI konuma getirin: varsayılan Apache web sitesi, yani disable_default değişkenini true.
-
MySQL root kullanıcısı için bir şifre seçin.
-
Anonim MySQL hesaplarını ve test veritabanını kaldırın.
-
Varsayılanı olan yapılandırılmış bağlantı noktasında HTTP trafiğine izin vermek için UFW'yi kurun.80.
-
Bir PHP test betiği kurun.
Ansible playbook'unun çalışması tamamlandıktan sonra, belirlediğimiz yapılandırmalara göre Apache üzerinde çalışan bir web PHP ortamı göreceksiniz.
Ansible Playbook'unu Kullanma
İlk olarak, LAMP playbook'unu ve bağımlılıklarını do-community/ansible-playbooks deposundan alın. Ardından, LAMP playbook'unu içeren depoyu Ansible Kontrol Düğümü içindeki yerel bir klasöre kopyalayın (clone).
Şu komutu çalıştırın: git pull (bu öğreticide kullanacağımız doğru içeriğe erişiminiz olduğundan emin olmak için):
|
1 2 |
cd ~/ansible-playbooks git pull |
Eğer do-community/ansible-playbooks deposunu ilk kez kullanıyorsanız, depoyu ana klasörünüze kopyalamayı (clone) düşünün:
|
1 2 3 |
cd ~ git clone https://github.com/do-community/ansible-playbooks.git cd ansible-playbooks |
Go to the lamp_ubuntu2004 klasörüne gidin, şu yapıyı göreceksiniz:
|
1 2 3 4 5 6 7 8 |
lamp_ubuntu2004 ├── files │ ├── apache.conf.j2 │ └── info.php.j2 ├── vars │ └── default.yml ├── playbook.yml └── readme.md |
İşte bu dosyaların ne anlama geldiğine dair bir genel bakış:
-
files/info.php.j2: Bu, web sunucusunun kök dizininde bir PHP test sayfası kurabileceğiniz bir şablon dosyasıdır.
-
files/apache.conf.j2: Apache VirtualHost'u kurmak için kullanılan başka bir şablon dosyasıdır.
-
vars/default.yml: Playbook ayarlarını özelleştirmek için kullanılan bir değişken dosyasıdır.
-
playbook.yml: Bu dosya, uzak sunucuda/sunucularda yürütülecek görevlerin tüm içeriğini içerir.
-
readme.md: Bu playbook hakkında bilgi içeren bir okuma dosyası.
Playbook'un değişken dosyasında değişiklikler yaparak MySQL ve Apache yapılandırmalarını özelleştirelim. Şu dizine gidin: lamp_ubuntu2004 dizinine gidin ve şu dosyayı açın: vars/default.yml dosyasını şu editörü kullanarak açın: nano editörü:
|
1 2 |
cd lamp_ubuntu2004 nano vars/default.yml |
Şu dosyayı açtığınızda: vars/default.yml dosyası, değiştirilmesi gereken değişkenlerin bir listesini içerecektir:
|
1 2 3 4 5 6 7 |
--- mysql_root_password: "mysql_root_password" app_user: "justin" http_host: "your_domain" http_conf: "your_domain.conf" http_port: "80" disable_default: true |
Değişkenlerin her birini ayrıntılı olarak inceleyelim:
-
mysql_root_password: Şu hesap için şifreyi depolar: root MySQL hesabı.
-
app_user: Ansible ana bilgisayarında, uygulama dosyalarının sahibi olarak hareket eden uzak, root olmayan bir kullanıcıdır.
-
http_host: Alan adınızı görüntüler.
-
http_conf: Apache içinde oluşturulan yapılandırma dosyasının adını görüntüler.
-
http_port: Bu sanal ana bilgisayar için HTTP bağlantı noktasıdır ve 80 varsayılandır.
-
disable_default: Apache ile birlikte gelen varsayılan seçenekleri geri almak için kullanılır.
Ardından, şu dosyayı kaydedip kapatın: vars/default.yml dosyası.
Tüm kurulum tamamlandıktan sonra, bu playbook'u sunucularda çalıştırmaya hazırız. Varsayılan olarak, playbook'lardaki sunucuların çoğu envanterlerdeki her sunucuda yürütülecek şekilde yapılandırılmıştır. Playbook'tan yalnızca tek bir sunucunun veya seçilen bir grup alt kümesinin etkilenmesini sağlamak için -l bayrağını kullanalım. Alternatif olarak, hangi uzak sunucuya bağlanıldığını ve uzak ana bilgisayarlarda nelerin yürütüldüğünü ayrıntılı olarak görmek için -u bayrağını kullanabiliriz.
Playbook'u tek bir sunucuda çalıştıralım: server1 ve şu kullanıcıyla bağlanalım: justin:
|
1 |
ansible-playbook playbook.yml -l server1 -u justin |
Şuna benzer bir çıktı alacaksınız:
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
PLAY [all] ********************************************************************************************************* TASK [Gathering Facts] *********************************************************************************************************ok: [server1] TASK [Install prerequisites] *********************************************************************************************************ok: [server1] => (item=aptitude) ... TASK [UFW - Allow HTTP on port 80] ********************************************************************************************************* changed: [server1] TASK [Sets Up PHP Info Page] ********************************************************************************************************* changed: [server1] RUNNING HANDLER [Reload Apache] ********************************************************************************************************* changed: [server1] RUNNING HANDLER [Restart Apache] ********************************************************************************************************* changed: [server1] PLAY RECAP ********************************************************************************************************* server1 : ok=15 changed=11 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0 |
Playbook'un çalışmasının tamamlandığını gördükten sonra, web tarayıcınıza gidin ve sunucunun ana bilgisayarına erişin. IP'nin sonuna şunu eklemeyi unutmayın: /info.php :
|
1 |
http://server_host_or_IP/info.php |
Bu URL'ye tıkladığınızda, şuna benzer bir sayfa göreceksiniz:
|
Uyarı: Görüntülenen sayfa, PHP ortamınız hakkında hassas bilgiler içermektedir. Bu nedenle, aşağıdaki komutu kullanarak kişisel bilgilerinizi sunucudan kaldırmanız önerilir: rm -f /var/www/info.php |
Playbook'ta Neler Var?
Ardından, içinde kullanılan dosyaların anlamını ve önemini anlayalımansible-playbook içeriği:
-
vars/default.yml
The default.yml değişken dosyası, MySQL root hesabının alan adını ve şifresini içerir. Bunlar, ansible-playbook görevlerinde kullanılan varsayılan değerlerdir:
|
1 2 3 4 5 6 7 |
--- mysql_root_password: "mysql_root_password" app_user: "justin" http_host: "your_domain" http_conf: "your_domain.conf" http_port: "80" disable_default: true |
- files/apache.conf.j2
The apache.conf.j2 dosyası, yeni bir Apache VirtualHost yapılandırmak için kullanılan bir Jinja 2 şablon dosyasıdır. Bu şablon içinde kullanılan değişkenler, vars/default.yml değişken dosyasında tanımlanmalıdır:
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
<VirtualHost *:{{ http_port }}> ServerAdmin webmaster@localhost ServerName {{ http_host }} ServerAlias www.{{ http_host }} DocumentRoot /var/www/{{ http_host }} ErrorLog ${APACHE_LOG_DIR}/error.log CustomLog ${APACHE_LOG_DIR}/access.log combined <Directory /var/www/{{ http_host }}> Options -Indexes </Directory> <IfModule mod_dir.c> DirectoryIndex index.php index.html index.cgi index.pl index.xhtml index.htm </IfModule> </VirtualHost> |
- files/info.php.j2
Similar to files/apache.conf.j2 dosyasına benzer şekilde, info.php.j2 dosyası da bir Jinja şablonudur. Bu dosyayı, yeni yapılandırılmış bir LAMP sunucusunun belge kök dizininde bir test PHP betiği kurmak için kullanırız:
|
1 2 |
<?php phpinfo(); |
-
playbook.yml
The playbook.yml dosyası, bu kurulumdaki tüm görevlerin tanımlandığı yerdir. Bu dosyada tüm LAMP yığınları yapılandırılır. Hedeflenen sunucu grubunun tanımlanmasıyla başlar ve all olarak ayarlanır. Ayrıca, become değerini true ( become: true) olarak alır ve yürütülmesi gereken tüm görevleri tanımlar. Ardından, yaml dosyası, yapılandırma seçeneklerini yüklemek için varsayılan dosya olan vars/default.yml değişken dosyasına sahiptir:
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 |
--- - hosts: all become: true vars_files: - vars/default.yml tasks: - name: Yükle önkoşullar apt: name={{ item }} update_cache=yes state=latest force_apt_get=yes loop: [ 'aptitude' ] #Apache Yapılandırması - name: Yükle LAMP Paketleri apt: name={{ item }} update_cache=yes state=latest loop: [ 'apache2', 'mysql-server', 'python3-pymysql', 'php', 'php-mysql', 'libapache2-mod-php' ] - name: Oluştur belge kökü file: path: "/var/www/{{ http_host }}" state: directory owner: "{{ app_user }}" mode: '0755' - name: Ayarla up Apache sanal konağı template: src: "files/apache.conf.j2" dest: "/etc/apache2/sites-available/{{ http_conf }}" notify: Yeniden Yükle Apache - name: Etkinleştir yeni siteyi shell: /usr/sbin/a2ensite {{ http_conf }} notify: Yeniden Yükle Apache - name: Devre dışı bırak varsayılan Apache sitesini shell: /usr/sbin/a2dissite 000-default.conf when: disable_default notify: Yeniden Yükle Apache # MySQL Yapılandırması - name: Ayarlar the root şifresini mysql_user: name: root password: "{{ mysql_root_password }}" login_unix_socket: /var/run/mysqld/mysqld.sock - name: Kaldırır tüm anonim kullanıcı hesaplarını mysql_user: name: '' host_all: yes state: absent login_user: root login_password: "{{ mysql_root_password }}" - name: Kaldırır the MySQL test veritabanını mysql_db: name: test state: absent login_user: root login_password: "{{ mysql_root_password }}" # UFW Yapılandırması - name: "UFW - {{ http_port }} portunda HTTP'ye izin ver" ufw: rule: allow port: "{{ http_port }}" proto: tcp # PHP Bilgi Sayfası - name: Ayarlar Up PHP Bilgi Sayfasını template: src: "files/info.php.j2" dest: "/var/www/{{ http_host }}/info.php" handlers: - name: Yeniden Yükle Apache service: name: apache2 state: reloaded - name: Yeniden Başlat Apache service: name: apache2 state: restarted |
Bu dosyaları projenizin ihtiyaçlarına ve gereksinimlerine göre değiştirebilirsiniz.
Sonuç
Bu eğitimde, Ansible ile uzak bir sunucuda LAMP kurulumu ve yapılandırması adımlarını inceledik. Deneyebileceğiniz pek çok başka özelleştirme seçeneği de mevcuttur. Örneğin, Ansible resmi belgelerini kullanmak ve Ansible modülündeki mysql_user durumlarını kullanmak, kendinizi geliştirmek için mükemmel bir yoldur. Ayrıca, zorluk seviyesini artırmak amacıyla diğer yapılandırma yönetimi araçlarını ve işletim sistemlerini kullanarak otomasyon pratiği yapmak için bu kılavuzda ele alınan adımları takip edin.
LAMP yığınına yeni misiniz ve bu konunun derinliklerine inmek mi istiyorsunuz? Aşağıdaki eğitimleri şurada inceleyin: blogumuz:
- Ubuntu 20.04 üzerinde LAMP ile WordPress Nasıl Kurulur
- Centos-7 üzerinde Linux, Apache, MySQL, PHP (LAMP) Yığını nasıl kurulur
- Ubuntu 20.04 üzerinde LEMP Yığını Linux Nginx MySQL PHP nasıl kurulur
Keyifli bilişimler!

Yorumlar
Henüz yorum yapılmamış. İlk siz olun.