GNU/Linux >> Belajar Linux >  >> Linux

Panduan yang Mungkin:Buat Playbook yang Mungkin untuk LEMP Stack

Ansible adalah alat otomatisasi sederhana yang mengotomatiskan penerapan aplikasi perangkat lunak, penyediaan cloud, dan manajemen konfigurasi. Ini adalah alat orkestrasi server yang membantu Anda mengelola dan mengontrol sejumlah besar node server dari satu tempat yang disebut 'Mesin Kontrol'. Ansible dibuat oleh Michael DeHaan pada tahun 2012 dan ditulis dengan Python dan Powershell.

Dalam tutorial ini, kami akan menunjukkan cara membuat Ansible Playbook dasar untuk menyediakan LEMP Stack di Server Ubuntu 18.04. Anda akan belajar cara membuat Ansible Playbook dasar yang dapat diskalakan untuk aplikasi proyek PHP lainnya seperti WordPress, Nextcloud, dll.

Prasyarat

  • 2 OS Ubuntu.
    • 10.5.5.20   memungkinkan
    • 10.5.5.26   ketentuan
  • Pengetahuan tentang  penggunaan dasar Memungkinkan
  • Hak istimewa root

Apa yang akan kami lakukan:

  1. Menyiapkan Proyek Playbook yang Memungkinkan
  2. Buat Struktur Direktori Peran Playbook yang Memungkinkan
  3. Siapkan host dan site.yml
  4. Menyiapkan Peran 'umum' - Penyiapan dasar
  5. Siapkan Peran 'web' - Konfigurasi Nginx dan PHP-FPM
  6. Menyiapkan Peran 'db' - Konfigurasi Database MySQL
  7. Pengujian

Langkah 1 - Siapkan Proyek Playbook yang Memungkinkan

Playbook Ansible adalah sekumpulan instruksi yang Anda kirim untuk dijalankan pada satu atau sekelompok host server. Ini mewakili penyediaan yang memungkinkan, di mana otomatisasi didefinisikan sebagai tugas, dan semua pekerjaan seperti menginstal paket, mengedit file, akan dilakukan oleh modul yang memungkinkan.

Playbook Ansible berisi beberapa konfigurasi dasar, termasuk host dan informasi pengguna dari server penyediaan, daftar tugas yang akan diimplementasikan ke server penyediaan, konfigurasi template dan kustom, dan sekelompok variabel bagian dari template dan tugas.

Pertama, buat direktori proyek master pada mesin 'ansible-control'. Direktori proyek master akan menyimpan semua direktori, file, dan konfigurasi buku pedoman kami.

Buat direktori proyek Ansible yang disebut 'project-lemp' dan masuk ke dalamnya.

mkdir project-lemp/
cd project-lemp

Sekarang buat file konfigurasi baru 'hosts' dan 'site.yml', lalu buat direktori baru bernama 'roles'.

touch hosts site.yml
mkdir -p roles/

Detail tentang konfigurasi:

host - Ini adalah file inventaris yang berisi potongan informasi tentang server yang dikelola oleh ansible. Ini memungkinkan Anda membuat grup server yang membuat Anda lebih mudah mengelola dan menskalakan file inventaris itu sendiri. File inventaris dapat dibuat dengan berbagai format, termasuk format INI dan YAML.

site.yml - File buku pedoman master yang berisi grup host mana yang akan dikelola menggunakan peran kami yang tersedia.

peran - itu adalah grup playbook Ansible yang akan digunakan untuk menyediakan server. Peran yang memungkinkan memiliki struktur direktori sendiri, setiap peran akan berisi direktori seperti tugas, penangan, vars, dll.

Langkah 2 - Buat Peran yang Mungkin untuk Struktur Direktori

Pada langkah ini, kita akan membuat direktori peran yang memungkinkan menggunakan perintah ansible-galaxy. Kami akan menghasilkan dua peran yang disebut peran 'umum' dan peran 'web'.

Di dalam direktori 'project-lemp', buka direktori 'roles'.

cd roles/

Buat direktori struktur peran dan file untuk peran 'umum' dan 'web' dengan menjalankan perintah ansible-galaxy di bawah ini.

ansible-galaxy init common
ansible-galaxy init web
ansible-galaxy init db

Setelah itu, periksa semua struktur direktori peran yang tersedia menggunakan perintah berikut.

tree .

Anda akan diperlihatkan hasilnya seperti di bawah ini.

Langkah 3 - Siapkan host dan site.yml

File 'hosts' akan berisi daftar dan grup server yang dikelola oleh Ansible. Untuk panduan ini, kami akan membuat grup bernama 'lemp' dengan anggota bernama 'server01' dan alamat IP 10.5.5.26.

Edit file 'hosts' menggunakan editor vim.

vim hosts

Tempelkan konfigurasi di bawah.

[lemp]
server01 ansible_host=10.5.5.26

Simpan dan tutup.

Selanjutnya, edit file konfigurasi site.yml.

vim site.yml

Tempelkan konfigurasi di bawah.

---

- hosts: lemp
  remote_user: hakase
  become: yes

  roles:
    - common
    - web
    - db

Simpan dan tutup.

Langkah 3 - Siapkan Peran Umum

Pada langkah ini, kita akan menyiapkan peran umum. Dan untuk melakukan itu, kita perlu membuat daftar tugas yang akan kita lakukan.

Di bawah daftar tugas yang akan kita lakukan pada peran 'umum'.

  1. Ubah repositori
  2. Perbarui repositori
  3. Tingkatkan paket ke versi terbaru
  4. Siapkan zona waktu server

Sekarang masuk ke direktori 'common' dan edit konfigurasi 'tasks/main.yml'.

cd common/
vim tasks/main.yml

Buat tugas untuk mengubah repositori, dan kita akan menggunakan modul 'copy' yang akan menyalin basis 'sources.list' pada direktori 'files' ke remote host '/etc/apt/'.

- name: Change repository Ubuntu 18.04Step 4 - Setup 'web' Roles
  copy:
    src: sources.list
    dest: /etc/apt/
    backup: yes

Buat tugas untuk memperbarui repositori dan tingkatkan semua paket ke versi terbaru menggunakan modul 'apt'.

- name: Update repository and Upgrade packages
  apt:
    upgrade: dist
    update_cache: yes

Sekarang buat tugas untuk mengonfigurasi zona waktu sistem menggunakan modul zona waktu yang memungkinkan.

- name: Setup timezone to Asia/Jakarta
  timezone:
    name: Asia/Jakarta
    state: latest

Simpan dan tutup.

Setelah itu, buat konfigurasi repositori baru 'sources.list' di dalam direktori 'file'.

vim files/sources.list

Pilih repositori terdekat dari lokasi server Anda, di bawah ini milik saya.

deb http://buaya.klas.or.id/ubuntu/ bionic main restricted
deb http://buaya.klas.or.id/ubuntu/ bionic-updates main restricted
deb http://buaya.klas.or.id/ubuntu/ bionic universe
deb http://buaya.klas.or.id/ubuntu/ bionic-updates universe
deb http://buaya.klas.or.id/ubuntu/ bionic multiverse
deb http://buaya.klas.or.id/ubuntu/ bionic-updates multiverse
deb http://buaya.klas.or.id/ubuntu/ bionic-backports main restricted universe multiverse
deb http://buaya.klas.or.id/ubuntu/ bionic-security main restricted
deb http://buaya.klas.or.id/ubuntu/ bionic-security universe
deb http://buaya.klas.or.id/ubuntu/ bionic-security multiverse

Simpan dan tutup.

terakhir, konfigurasi peran 'umum' telah selesai.

Langkah 4 - Siapkan Peran 'web'

Pada langkah ini, kita akan menyiapkan peran 'web'. Ini akan melakukan beberapa tugas termasuk menginstal server web Nginx, PHP-FPM dengan beberapa ekstensi dasar, dan mengkonfigurasi PHP-FPM dengan Nginx.

Di bawah ini adalah detail tugas yang akan kami lakukan pada peran 'web':

  1. Instal Nginx
  2. Instal PHP-FPM
  3. Konfigurasi php.ini
  4. Buat host virtual
  5. Tambahkan file phpinfo

Buka direktori 'web' dan edit file 'tasks/main.yml'.

cd web/
vim tasks/main.yml

Buat tugas pertama untuk instalasi nginx menggunakan modul apt.

- name: Install Nginx
  apt:
    name: nginx
    state: latest

Sekarang buat tugas untuk menginstal PHP-FPM dengan beberapa ekstensi dasar. Dan untuk instalasi multiple package, kita bisa menggunakan format python 'list' seperti di bawah ini.

- name: Instal PHP-FPM
  apt:
    name: ['php','php-fpm','php-common','php-cli','php-curl']
    state: latest

Selanjutnya, kita akan menambahkan baris baru ke konfigurasi php.ini menggunakan modul 'blockinfile'. Dan di akhir baris, kami akan memberitahukan kemungkinan untuk me-restart layanan php-fpm setelah mengkonfigurasi file php.ini.

- name: Configure php.ini
  blockinfile:
    dest: /etc/php/{{ php_version }}/fpm/php.ini
    block: |
      date.time = Asia/Jakarta
      cgi-fix_pathinfo = 0
    backup: yes
  notify: restart php-fpm

Sekarang kita akan menyalin konfigurasi virtual host nginx menggunakan modul 'template'. Modul template akan menyalin konfigurasi dari direktori 'template' ke server jauh. Kami akan menyalin template host virtual jinja2 'vhost.j2' ke direktori '/etc/nginx/sites-enabled/', dan yang terakhir kami akan memberi tahu kemungkinan untuk memulai ulang layanan nginx.

- name: Create Nginx virtual host
  template:
    src: vhost.j2
    dest: /etc/nginx/sites-enabled/vhost-{{ domain_name }}
  notify: restart nginx

Setelah itu, kita akan membuat tugas baru untuk membuat direktori web-root menggunakan modul 'file' dan menyalin template index.php ke dalamnya.

- name: Create web-root directory
  file:
    path: /var/www/{{ domain_name }}
    state: directory

- name: Upload index.html and info.php files
  template:
    src: index.php.j2
    dest: /var/www/{{ domain_name }}/index.php

Simpan dan tutup.

Sekarang kita akan mengonfigurasi handler untuk memulai ulang layanan nginx dan php-fpm. Edit konfigurasi 'handlers/main.yml' menggunakan editor vim.

vim handlers/main.yml

Tempelkan konfigurasi di bawah.

- name: restart nginx
  service:
    name: nginx
    state: restarted
    enabled: yes

- name: restart php-fpm
  service:
    name: php{{ php_version }}-fpm
    state: restarted
    enabled: yes

Simpan dan tutup.

Selanjutnya, kita akan mengedit konfigurasi 'vars/main.yml'. Di bagian atas konfigurasi Anda akan melihat konfigurasi variabel '{{ php_version }}' dan '{{ domain_name }}'. Variabel-variabel tersebut mewakili pengaturan lingkungan kita untuk versi php dan nama domain yang akan digunakan. Variabel memungkinkan lebih dapat digunakan kembali karena kita hanya perlu mengedit konfigurasi variabel 'vars/main.yml' dan tidak mengedit konfigurasi dasar.

Edit konfigurasi variabel 'vars/main.yml' menggunakan editor vim.

vim vars/main.yml

Tempelkan konfigurasi di bawah.

php_version: 7.2
domain_name: hakase-labs.io

Simpan dan tutup.

Sekarang kita akan membuat konfigurasi template jinja2 'index.php.j2' dan 'vhost.j2' pada direktori 'templates/'.

vim templates/index.php.j2

Tempelkan konfigurasi di bawah.

<html>
<body>

<h1><center>index.html for domain {{ domain_name }}</center></h1>

<p>
<p>

<?php
phpinfo();
?>

</body>
</html>

Simpan dan tutup.

Setelah itu, buat template untuk konfigurasi virtual host nginx 'vhost.j2'.

vim templates/vhost.j2

Tempelkan konfigurasi di bawah.

server {
    listen 80;
    listen [::]:80;

    root /var/www/{{ domain_name }};
    index index.php index.html index.htm index.nginx-debian.html;

    server_name {{ domain_name }};

    location / {
        try_files $uri $uri/ =404;
    }

    # pass PHP scripts to FastCGI server
    #
        location ~ \.php$ {
            try_files $uri =404;
            fastcgi_split_path_info ^(.+\.php)(/.+)$;
            fastcgi_pass unix:/var/run/php/php{{ php_version }}-fpm.sock;
            fastcgi_index index.php;
            fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
            include fastcgi_params;
        }

}

Simpan dan tutup konfigurasi, dan kita telah menyelesaikan konfigurasi peran web.

Langkah 5 - Siapkan Peran 'db'

Pada langkah ini, kita akan mengonfigurasi peran 'db' untuk instalasi dan konfigurasi database MySQL.

Di bawah ini adalah detail tugas yang akan dilakukan pada peran 'db'.

  1. instal mysql
  2. Buat database MySQL
  3. Buat pengguna MySQL
  4. mulai ulang mysql

Buka direktori 'db' dan edit konfigurasi 'tasks/main.yml'.

cd db/
vim tasks/main.yml

Sekarang instal paket MySQL menggunakan modul 'apt' dan format python 'list' untuk instalasi beberapa paket.

- name: Install MySQL
  apt:
    name: ['mysql-server','mysql-client','python-mysqldb']
    state: latest
  notify: restart mysql

Kemudian buat tugas baru untuk membuat database MySQL dan pengguna, lalu berikan semua hak istimewa pengguna ke database.

- name: Create database
  mysql_db:
    name: '{{ db_name }}'
    state: present

- name: Create user for the database
  mysql_user:
    name: '{{ db_user }}'
    password: '{{ db_pass }}'
    encrypted: yes
    priv: '{{ db_name }}.*:ALL'
    state: present

Simpan dan tutup.

Selanjutnya, edit konfigurasi 'handlers/main.yml'.

vim handlers/main.yml

Tempel konfigurasi tugas untuk memulai ulang layanan MySQL.

- name: restart mysql
  service:
    name: mysql
    state: restarted
    enabled: yes

Simpan dan tutup.

Setelah itu, edit konfigurasi variabel vars 'vars/main.yml'.

vim vars/main.yml

Tempel variabel ini untuk database MySQL dan konfigurasi pengguna di bawah ini.

db_name: hakase-db
db_user: hakase
db_pass: '*C960D382DB42E57D3BAC33891CF87900DCB1A869'

Simpan dan tutup.

Variabel 'db_pass' memiliki kata sandi terenkripsi MySQL, dan Anda dapat membuat kata sandi MySQL terenkripsi menggunakan alat online.

Langkah 6 - Jalankan Playbook yang Mungkin

Masuk ke direktori proyek Ansible.

cd project-lemp/

Jalankan perintah ansible-playbook di bawah ini.

ansible-playbook -i hosts site.yml

Sekarang kemungkinannya akan menjalankan semua peran yang kita tetapkan ke host. Jika sudah selesai maka akan ditampilkan hasil seperti dibawah ini.

Pastikan Anda tidak mendapatkan kesalahan.

Langkah 7 - Pengujian

Buka browser web Anda dan ketik nama domain di bilah alamat http://hakase-labs.io.

Dan Anda akan ditampilkan halaman indeks dengan phpinfo seperti di bawah ini.

PHP-FPM dan Nginx berfungsi.

Selanjutnya, kembali ke terminal server dan login ke server MySQL menggunakan user dan password yang telah kita buat pada variabel role 'mysql'.

mysql -u hakase -p
PASSWORD: hakasepass

periksa daftar database yang dimiliki oleh pengguna.

show databases;

Dan Anda akan masuk ke shell MySQL dan akan ditampilkan database bernama 'hakase-db' pada daftar.

Terakhir, Ansible Playbook untuk instalasi dan konfigurasi LEMP Stack telah berhasil dibuat dan diuji.


Linux
  1. Mendekonstruksi buku pedoman Ansible

  2. Memahami YAML untuk Ansible

  3. bagaimana cara membuat playbook yang memungkinkan untuk mendapatkan versi OS dari host jarak jauh?

  1. Cara membuat Playbook yang Mungkin

  2. Pengantar singkat tentang peran Ansible untuk administrasi sistem Linux

  3. 6 keterampilan pemecahan masalah untuk buku pedoman Ansible

  1. Playbook yang Mungkin:Cara Membuat dan Mengonfigurasi Playbook

  2. Cara Menggunakan Tag di Ansible Playbook (Contoh)

  3. Seri Ansible RHCE #9:Peran yang Mungkin