Ansible

LAMP Stack’i Ansible ile Ubuntu / Debian’a yükleyin

LAMP yığını, Linux, Apache, MySQL/MariaDB ve PHP yığınının kısaltmasıdır. Bu, internetteki birçok web sitesine ve web uygulamasına güç veren güçlü bir yığın oluşturur. LAMP yığını, bir araya getirildiğinde size eksiksiz bir çözüm sağlayacak dört açık kaynaklı projenin birleşimidir. Bu kılavuzda Ansible kullanarak Ubuntu/Debian üzerinde LAMP yığınının nasıl kurulacağını tartışacağız.

LAMP Stack aşağıdaki açık kaynaklı yazılım uygulamalarını içerir.

  • Linux – Bu, Uygulamaları barındıran işletim sistemidir.
  • Apache – Apache HTTP, ücretsiz ve açık kaynaklı, çapraz platformlu bir web sunucusudur.
  • MySQL/MariaDB – Açık Kaynak ilişkisel veritabanı yönetim sistemi.
  • PHP – Web uygulamaları geliştirmek için kullanılan Programlama/Komut Dosyası Dili.

 

Kurulum Önkoşulları

Başlamadan önce aşağıdaki minimum gereksinimlere sahip olduğunuzdan emin olun.

  1. Ubuntu 20.04 veya Debian 10/11  bilgisayarları
  2. Sudo ayrıcalıklarına sahip uzak bir kullanıcı
  3. Uzaktan yürütme için SSH anahtar kimlik doğrulaması kurulumu
  4. Ansible kontrol düğümünüze yüklendi

1) Ortam Hazırlıkları

Bu kılavuzda Ansible oyun kitaplarından ve rollerinden yararlanacağız. Bunlar Ansible’ın kullanımını çok kolaylaştıran modüllerden bazılarıdır.

Eğer makinenizde (iş istasyonunuz) Ansible kurulu değilse aşağıdaki komutlarla kurabilirsiniz. Unutmayın, bu LAMP yığınını dağıtmayı planladığımız sunucularda değil, ansible komutlarını çalıştırmak için kullanacağınız makinede yapılmalıdır.

Ubuntu/Debian için:

sudo apt install ansible -y

RPM tabanlı işletim sistemi için:

sudo yum install ansible -y

Uzak sunucuya SSH anahtarı kimlik doğrulamasını yapılandırın:

ssh-copy-id username@remote-server

İş istasyonunuzda bu kurulum için çalışma dizini olarak kullanılacak bir dizin oluşturun.

mkdir ansible_playbook && cd $_

2) Ansible Playbook’u ve Rolleri yapılandırın.

Daha önce tartışıldığı gibi, aşağıdaki görevleri gerçekleştirmek için Ansible oyun kitaplarını ve rollerini yapılandıracağız:

  1. Ansible için tercih edilen paket yöneticisi olan Aptitude’u yükleyin
  2. Apache, MariaDB sunucusu ve PHP’yi kuracak
  3. Apache için VirtualHost oluşturma ve etkinleştirme
  4. Apache için varsayılan VirtualHost’u devre dışı bırakın
  5. MariaDB için root şifresini yapılandırın
  6. PHP test dosyasını yapılandırın
  7. Güvenlik duvarı üzerinden HTTP trafiğine izin verin.

Apache ve PHP kurulumu için bir yanıtlayıcı rol ve MariaDB kurulumu için bir tane daha oluşturacağız.

Varsayılan Değişkenler Oluştur

Etki alanı adı, MariaDB kök parolası vb. gibi bilgileri içerecek varsayılan değişkenler dosyasını oluşturun.

Çalışma dizinimizde vars adında bir alt dizin oluşturun ve değişkenlerin yapılandırma dosyasını ekleyin.

mkdir vars && cd vars
vim default.yml

default.yml dosyasında, değişkenleri kendi ayrıntılarınızla değiştirerek aşağıdaki bilgileri ekleyin.

---
mysql_root_password: "P@ssw0rd"
app_user: "apache"
http_host: "lamp.example.com"
http_conf: "lamp.example.com.conf"
http_port: "80"
disable_default: true

Varsayılan çalışma dizininde bir ana bilgisayar envanter dosyası oluşturun. Burada LAMP stack kurmayı düşündüğümüz uzak sunucunun IP’sini ekliyoruz.

vim hosts
....
[lampstack]
192.168.100.227

Apache Rolü Oluştur

Çalışma dizininden bir roller alt dizini ve Apache için başka bir alt dizini oluşturun.

mkdir -p roles/apache

Burada Apache hizmeti için gerekli tüm adımları, modülleri ve şablonları içerecek olan Apache ve PHP rolünü oluşturmamız gerekiyor.

Apache ve PHP görevi oluştur

Apache dizini içinde Apache ve PHP için ana yürütme görevini oluşturun

mkdir tasks && cd tasks
vim main.yml

Aşağıdaki içeriği main.yml dosyasına ekleyin:

---
- name: Install prerequisites
  apt: name={{ item }} update_cache=yes state=latest force_apt_get=yes
  loop: [ 'aptitude' ]

  #Apache Configuration
- name: Install Apache and PHP Packages
  apt: name={{ item }} update_cache=yes state=latest
  loop: [ 'apache2', 'php', 'php-mysql', 'libapache2-mod-php' ]

- name: Create document root
  file:
    path: "/var/www/{{ http_host }}"
    state: directory
    owner: "{{ app_user }}"
    mode: '0755'

- name: Set up Apache virtualhost
  template:
    src: "files/apache.conf.j2"
    dest: "/etc/apache2/sites-available/{{ http_conf }}"
    
- name: Enable new site
  shell: /usr/sbin/a2ensite {{ http_conf }}
  
- name: Disable default Apache site
  shell: /usr/sbin/a2dissite 000-default.conf
  when: disable_default
  notify: Reload Apache
# UFW Configuration
- name: "UFW - Allow HTTP on port {{ http_port }}"
  ufw:
    rule: allow
    port: "{{ http_port }}"
    proto: tcp

  # PHP Info Page
- name: Sets Up PHP Info Page
  template:
    src: "files/info.php.j2"
    dest: "/var/www/{{ http_host }}/info.php"

- name: Reload Apache
  service:
    name: apache2
    state: reloaded

- name: Restart Apache
  service:
    name: apache2
    state: restarted

Apache İşleyicileri Oluşturun

Apache için İşleyicileri ekleyin. Bu Apache rol dizini altında yapılmalıdır:

mkdir handlers && cd handlers
vim main.yml

Apache işleyicileri için aşağıdaki içeriği ekleyin

---
- name: Reload Apache
  service:
    name: apache2
    state: reloaded

- name: Restart Apache
  service:
    name: apache2
    state: restarted

Apache Dosyalarını Ekle

VirtualHost’un ve info.php dizin dosyasının oluşturulması için kullanılacak dosyaları oluşturun. Bu aynı zamanda Apache rol dizininde de yapılır.

mkdir files && cd files

VirtualHost dosyasını oluşturun

vim apache.conf.j2

<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>

PHP test dosyasını oluşturun

$ vim info.php.j2
<?php
phpinfo();

Dizin ağacınızın şu şekilde göründüğünden emin olun:

../apache$ tree

├── files
│   ├── apache.conf.j2
│   └── info.php.j2
├── handlers
│   └── main.yml
└── tasks
    └── main.yml

3 directories, 4 files

MariaDB Rolü Oluşturun

MariaDB için bir rol oluşturun. Roller dizininde MariaDB görevi için bir dizin oluşturun.

mkdir -p mariadb/tasks && cd mariadb/tasks

MariaDB görevi için bir yapılandırma dosyası oluşturun:

vim main.yml
---
- name: Install prerequisites
  apt: name={{ item }} update_cache=yes state=latest force_apt_get=yes
  loop: [ 'aptitude' ]

 #Install MariaDB server
- name: Install MariaDB Packages
  apt: name={{ item }} update_cache=yes state=latest
  loop: [ 'mariadb-server', 'python3-pymysql' ]

# Start MariaDB Service
- name: Start MariaDB service
  service:
    name: mariadb
    state: started
  become: true

 # MariaDB Configuration
- name: Sets the root password
  mysql_user:
    name: root
    password: "{{ mysql_root_password }}"
    login_unix_socket: /var/run/mysqld/mysqld.sock

- name: Removes all anonymous user accounts
  mysql_user:
    name: ''
    host_all: yes
    state: absent
    login_user: root
    login_password: "{{ mysql_root_password }}"

- name: Removes the MySQL test database
  mysql_db:
    name: test
    state: absent
    login_user: root
    login_password: "{{ mysql_root_password }}"

Ansible rollerine ilişkin yapınızın şöyle göründüğünü doğrulayın:

../roles$ tree
.
├── apache
│   ├── files
│   │   ├── apache.conf.j2
│   │   └── info.php.j2
│   ├── handlers
│   │   └── main.yml
│   └── tasks
│       └── main.yml
└── mariadb
    └── tasks
        └── main.yml

6 directories, 5 files

Ansible Başucu Kitabı’nı oluşturun

Ana çalışma dizininde yukarıda oluşturduğumuz rollerden yararlanan bir oyun kitabı oluşturun.

$ vim lampstack.yml
---
- name: configure lamp
  hosts: lampstack
  become: yes
  become_method: sudo
  vars_files:
    - vars/default.yml
  roles:
    - apache
    - mariadb

Çalışma dizinindeki tüm konfigürasyon ağacı buna uygun olmalıdır:

../ansible_playbook$ tree
.
├── hosts
├── lampstack.yml
├── roles
│   ├── apache
│   │   ├── files
│   │   │   ├── apache.conf.j2
│   │   │   └── info.php.j2
│   │   ├── handlers
│   │   │   └── main.yml
│   │   └── tasks
│   │       └── main.yml
│   └── mariadb
│       └── tasks
│           └── main.yml
└── vars
    └── default.yml

8 directories, 8 files

 LAMP Stack’i Ubuntu / Debian’a kurmak için Ansible Playbook’u çalıştırın

Ortamımız hazır olduğunda, LAMP yığınını Debian/Ubuntu’ya kurmak için oyun kitabını çalıştırmamız gerekecek

$ ansible-playbook -i hosts lampstack.yml -u <remote-user>

<uzak kullanıcı> seçeneğini SSH için yapılandırdığınız kullanıcıyla değiştirin.

Yapılandırma başlamalıdır. Başarılı bir yürütme sonrasında aşağıdaki gibi bir çıktı almalısınız:

Kurulumumuz başarılı oldu. Artık tarayıcıdan sunucuya ulaşıp ulaşamayacağımızı kontrol edebiliriz.

Navigate to http://server-IP/info.php

 

 

Yazının orijinalini buradan okuyabilirsiniz

 

Skip to content