Cara Mengotomatiskan Penerapan WordPress Secara Bersamaan di Beberapa Server Linux Menggunakan Ansible - Bagian 3


Dalam dua artikel sebelumnya dari seri Ansible ini, kami menjelaskan cara menginstal dan mengonfigurasi Ansible untuk menjalankan perintah dan melakukan tugas kompleks di beberapa server jarak jauh secara bersamaan.

Dalam tutorial kali ini kami akan menjelaskan cara menyiapkan WordPress di server jarak jauh yang sama:

node1: 192.168.0.29
node2: 192.168.0.30

tempat kami menginstal, mengaktifkan, dan memulai Apache (Anda mungkin sudah tahu mengapa kami memilih bekerja dengan server web sebagai contoh awal di tutorial terakhir).

Saya sangat menganjurkan Anda untuk membaca Bagian 1 dan Bagian 2 sebelum melanjutkan lebih jauh untuk memastikan Anda memahami konsep yang terkait dengan Ansible.

Cara Memasang dan Mengonfigurasi Alat Otomatisasi yang 'Mungkin' untuk Manajemen TI – Bagian 1

Cara Menggunakan Anisble Playbook untuk Mengotomatiskan Tugas Kompleks di Beberapa Server Jarak Jauh – Bagian 2

Langkah 1: Memperkenalkan Peran yang Mungkin

Saat Anda mulai menambahkan lebih banyak tugas untuk dimainkan, Playbook Anda bisa menjadi semakin sulit untuk ditangani. Oleh karena itu, pendekatan yang disarankan dalam situasi tersebut (sebenarnya, dalam semua kasus) adalah dengan menggunakan struktur direktori yang berisi arahan untuk setiap kelompok tugas dalam file berbeda.

Pendekatan ini memungkinkan kami untuk menggunakan kembali file konfigurasi ini dalam proyek terpisah di masa mendatang. Masing-masing file ini menentukan apa yang disebut peran dalam ekosistem yang mungkin.

Dalam kasus kami, kami akan membuat dua peran. Salah satunya (disebut wp-dependencies) akan digunakan untuk menginstal dependensi WordPress (PHP dan MariaDB – tidak perlu menginstal Apache karena sudah terinstal).

Peran lainnya (bernama wp-install-config) akan mencakup semua tugas penting yang terkait dengan instalasi dan konfigurasi WordPress.

Langkah 2: Menciptakan Peran yang Mungkin

Ansible hadir dengan utilitas bernama ansible-galaxy yang akan membantu kita membuat struktur direktori untuk peran kita. Kami akan melakukan ini di /etc/ansible/playbooks (yang kami buat di Bagian 2) namun secara teori Anda dapat mengaturnya di direktori lain jika Anda mau.

cd /etc/ansible/playbooks
ansible-galaxy init wp-dependencies
ansible-galaxy init wp-install-config

Selanjutnya konfirmasikan peran yang baru dibuat.

ls -R /etc/ansible/playbooks

Pada gambar di atas kita dapat melihat bahwa ansible-galaxy membuat dua direktori dengan nama yang sama dengan peran kita, dan subdirektori lainnya (defaults, files , penanganan, meta, tugas, templat, dan vars) dan < fileREADME.md di dalamnya masing-masing.

Selain itu, file YAML bernama main.yml dibuat di dalam semua direktori yang tercantum sebelumnya, kecuali file dan templat.

Kami akan mulai dengan mengedit file konfigurasi berikut seperti yang ditunjukkan:

1. /etc/ansible/playbooks/wp-dependencies/tasks/main.yml. Perhatikan bahwa kami menyertakan httpd jika Anda belum mengikuti tutorial sebelumnya dalam seri ini.

---
tasks file for wp-dependencies
- name: Update packages (this is equivalent to yum update -y)
  yum: name=* state=latest

- name: Install dependencies for WordPress
  yum: name={{ item }} state=present
  with_items:
        - httpd
        - mariadb-server 
        - mariadb
        - php 
        - php-mysql
        - MySQL-python

- name: Ensure MariaDB is running (and enable it at boot)
  service: name=mariadb state=started enabled=yes

- name: Copy ~/.my.cnf to nodes
  copy: src=/root/.my.cnf dest=/root/.my.cnf

- name: Create MariaDB database
  mysql_db: name={{ wp_mysql_db }} state=present

- name: Create MariaDB username and password
  mysql_user:
        login_user=root
        login_password=YourMariaDBRootPasswordHere
        name={{ wp_mysql_user }}
        password={{ wp_mysql_password }}
        priv=*.*:ALL

2. /etc/ansible/playbooks/wp-dependencies/defaults/main.yml

---
defaults file for wp-dependencies
  wp_mysql_db: MyWP
  wp_mysql_user: wpUser
  wp_mysql_password: wpP4ss

3. /etc/ansible/playbooks/wp-install-config/tasks/main.yml:

---
tasks file for wp-install-config
- name: Create directory to download WordPress
  command: mkdir -p /opt/source/wordpress

- name: Download WordPress
  get_url: url=https://www.wordpress.org/latest.tar.gz dest=/opt/source/wordpress/wordpress.tar.gz validate_certs=no

- name: Extract WordPress
  command: "tar xzf /opt/source/wordpress/wordpress.tar.gz -C /var/www/html --strip-components 1"

- name: Send config file
  copy: src=/root/wp-config-sample.php dest=/var/www/html/wp-config.php mode=0644

4. wp-config-sample.php (disediakan dalam Pastebin ini) sebagai berikut dan simpan ke mesin pengontrol Ansible Anda (seperti yang Anda lihat pada arahan salinan terakhir di atas , saya mengunduhnya ke direktori home pengguna super (/root/wp-config-sample.php).

Penting: Harap diperhatikan bahwa nilai untuk variabel DB_NAME, DB_USER, dan DB_PASSWORD sama seperti di /etc/ansible/playbooks/wp-dependencies/defaults/main.yml:

…
/** The name of the database for WordPress */
define('DB_NAME', 'MyWP');

/** MySQL database username */
define('DB_USER', 'wpUser');

/** MySQL database password */
define('DB_PASSWORD', 'wpP4ss');
…

5. Untuk instalasi server database baru yang kata sandi rootnya kosong, seperti dalam kasus ini, sayangnya kita perlu menyiapkan kata sandi untuk root pengguna satu per satu di setiap mesin melalui mysql_secure_installation .

Sejauh yang saya tahu, tidak ada solusi yang memungkinkan Anda mengatur kata sandi root melalui Ansible pada langkah yang sama saat Anda membuat akun database administratif untuk WordPress.

Pastikan Anda menggunakan kata sandi yang sama di semua host, lalu salin kredensial di /root/.my.cnf (lokasi sebenarnya mungkin berbeda dalam kasus Anda, namun dalam semua kasus, lokasi tersebut harus cocok dengan nilainya dari parameter src untuk tugas Salin ~/.my.cnf ke node di /etc/ansible/playbooks/wp-dependencies/tasks/main.yml ).

Dalam file tersebut (lihat di atas) kami berasumsi bahwa kata sandi untuk root adalah YourMariaDBRootPassword.

6. Selanjutnya, playbook kita (/etc/ansible/playbooks/playbook.yml) akan terlihat jauh lebih terorganisir dan sederhana jika dibandingkan dengan tutorial sebelumnya:

cat playbook.yml

- hosts: webservers
  roles:
        - wp-dependencies
        - wp-install-config

Terakhir, saatnya menjalankan tugas ini dengan menerapkan pedoman kami:

ansible-playbook playbook.yml

Sekarang mari kita periksa apakah kita dapat mengakses halaman Admin WordPress menggunakan alamat IP node1 192.168.0.29 dan node2 192.168.0.30:

Anda dapat melihat dua langkah terakhir di screencast berikut:

Seperti yang Anda lihat, Anda dapat menyiapkan beberapa instalasi WordPress dengan sedikit atau tanpa usaha menggunakan Ansible. Kemudian Anda dapat menggunakan antarmuka pengguna Admin masing-masing untuk mengonfigurasi setiap situs secara terpisah.

Pertimbangan terakhir

Jika Anda menggunakan distribusi lain untuk menerapkan WordPress, nama paket mungkin berbeda, namun tergantung pada instalasi server web Apache, server database MariaDB, dan modul Python MySQL. Jika demikian, gunakan sistem manajemen perangkat lunak distribusi Anda untuk mencari nama paket yang tepat yang perlu Anda instal.

Ringkasan

Dalam seri ini kami telah menjelaskan cara menggunakan Ansible untuk menjalankan perintah dan menjalankan tugas kompleks di beberapa mesin Linux secara bersamaan.

Salah satu contohnya adalah menyiapkan WordPress, seperti yang telah kita bahas dalam panduan ini. Baik Anda seorang administrator sistem atau blogger, saya harap konsep dan contoh dalam tutorial ini bermanfaat bagi Anda.

Semoga beruntung dan jangan ragu untuk menghubungi kami jika Anda memerlukan bantuan atau memiliki komentar atau saran!