Πώς να αυτοματοποιήσετε ταυτόχρονες αναπτύξεις WordPress σε πολλούς διακομιστές Linux χρησιμοποιώντας το Ansible - Μέρος 3


Στα προηγούμενα δύο άρθρα αυτής της σειράς Ansible, εξηγήσαμε πώς να εγκαταστήσετε και να ρυθμίσετε το Ansible για να εκτελείτε εντολές και να εκτελείτε σύνθετες εργασίες σε πολλούς απομακρυσμένους διακομιστές ταυτόχρονα.

Στο τρέχον σεμινάριο θα εξηγήσουμε πώς να ρυθμίσετε το WordPress στους ίδιους απομακρυσμένους διακομιστές:

node1: 192.168.0.29
node2: 192.168.0.30

όπου εγκαταστήσαμε, ενεργοποιήσαμε και ξεκινήσαμε το Apache (πιθανότατα γνωρίζετε ήδη γιατί επιλέξαμε να εργαστούμε με έναν διακομιστή web ως αρχικό παράδειγμα στο τελευταίο σεμινάριο).

Σας συνιστώ ιδιαίτερα να διαβάσετε το Μέρος 1 και το Μέρος 2 προτού συνεχίσετε περαιτέρω, προκειμένου να βεβαιωθείτε ότι είστε εξοικειωμένοι με τις έννοιες που σχετίζονται με το Ansible.

Βήμα 1: Παρουσίαση των Ansible Roles

Καθώς αρχίζετε να προσθέτετε όλο και περισσότερες εργασίες στα παιχνίδια, τα Playbook σας μπορεί να γίνονται όλο και πιο δύσκολο να χειριστούν. Για το λόγο αυτό, η συνιστώμενη προσέγγιση σε αυτές τις περιπτώσεις (στην πραγματικότητα, σε όλες τις περιπτώσεις) είναι η χρήση μιας δομής καταλόγου που περιέχει τις οδηγίες για κάθε ομάδα εργασιών σε διαφορετικά αρχεία.

Αυτή η προσέγγιση μας επιτρέπει να επαναχρησιμοποιούμε αυτά τα αρχεία διαμόρφωσης σε ξεχωριστά έργα πιο κάτω. Κάθε ένα από αυτά τα αρχεία καθορίζει αυτό που ονομάζεται ρόλος στο Ansible ecosystem.

Στην περίπτωσή μας, θα δημιουργήσουμε δύο ρόλους. Ένα από αυτά (που ονομάζεται wp-dependencies) θα χρησιμοποιηθεί για την εγκατάσταση των εξαρτήσεων WordPress (PHP και MariaDB – δεν χρειάζεται να εγκαταστήσετε το Apacheόπως είναι ήδη εγκατεστημένο).

Ο άλλος ρόλος (με το όνομα wp-install-config) θα περιλαμβάνει όλες τις απαραίτητες εργασίες που σχετίζονται με την εγκατάσταση και τη διαμόρφωση του WordPress.

Βήμα 2: Δημιουργία Ansible Roles

Το Ansible συνοδεύεται από ένα βοηθητικό πρόγραμμα που ονομάζεται ansible-galaxy που θα μας βοηθήσει να δημιουργήσουμε τη δομή καταλόγου για τους ρόλους μας. Θα το κάνουμε αυτό στο /etc/ansible/playbooks (το οποίο δημιουργήσαμε στο Μέρος 2), αλλά θεωρητικά μπορείτε να το ρυθμίσετε σε άλλον κατάλογο αν θέλετε.

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

Στη συνέχεια επιβεβαιώνει τους νέους ρόλους.

# ls -R /etc/ansible/playbooks

Στην παραπάνω εικόνα μπορούμε να δούμε ότι το ansible-galaxy δημιούργησε δύο καταλόγους με το ίδιο όνομα με τους ρόλους μας και άλλους υποκαταλόγους (προεπιλογές, αρχεία , χειριστές, meta, εργασίες, πρότυπα και vars) και ένα < αρχείοREADME.md μέσα σε καθένα από αυτά.

Επιπλέον, ένα αρχείο YAML με το όνομα main.yml δημιουργήθηκε μέσα σε όλους τους καταλόγους που παρατίθενται προηγουμένως, με εξαίρεση τα αρχεία και τα πρότυπα.

Θα ξεκινήσουμε με την επεξεργασία των ακόλουθων αρχείων διαμόρφωσης όπως υποδεικνύεται:

1. /etc/ansible/playbooks/wp-dependencies/tasks/main.yml. Λάβετε υπόψη ότι συμπεριλαμβάνουμε το httpd σε περίπτωση που δεν έχετε παρακολουθήσει μαζί με τα προηγούμενα σεμινάρια αυτής της σειράς.

---
# 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 (παρέχεται σε αυτό το Pastebin) ως εξής και αποθηκεύστε το στο μηχάνημα ελεγκτή Ansible (όπως μπορείτε να δείτε στην παραπάνω οδηγία για το τελευταίο αντίγραφο , το κατέβασα στον αρχικό κατάλογο του υπερχρήστη (/root/wp-config-sample.php).

Σημαντικό: Λάβετε υπόψη ότι η τιμή για τις μεταβλητές DB_NAME, DB_USER και DB_PASSWORD< Τα είναι τα ίδια όπως στο /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. Για νέες εγκαταστάσεις διακομιστή βάσης δεδομένων όπου ο κωδικός πρόσβασης root είναι κενός, όπως σε αυτήν την περίπτωση, δυστυχώς πρέπει να ρυθμίσουμε τον κωδικό πρόσβασης για τη ρίζα χρήστη ξεχωριστά σε κάθε υπολογιστή μέσω του mysql_secure_installation .

Από όσο γνωρίζω, δεν υπάρχει διαθέσιμη λύση που θα σας επιτρέψει να ρυθμίσετε τον κωδικό πρόσβασης root μέσω του Ansible στο ίδιο βήμα όπου δημιουργείτε τον λογαριασμό βάσης δεδομένων διαχείρισης για το WordPress.

Βεβαιωθείτε ότι χρησιμοποιείτε τον ίδιο κωδικό πρόσβασης σε όλους τους κεντρικούς υπολογιστές και, στη συνέχεια, αντιγράψτε τα διαπιστευτήρια στο /root/.my.cnf (η πραγματική τοποθεσία μπορεί να διαφέρει στην περίπτωσή σας, αλλά σε όλες τις περιπτώσεις πρέπει να ταιριάζει με την τιμή της παραμέτρου src για την εργασία Αντιγραφή ~/.my.cnf σε κόμβους στο /etc/ansible/playbooks/wp-dependencies/tasks/main.yml ).

Σε αυτό το αρχείο (δείτε παραπάνω) υποθέσαμε ότι ο κωδικός πρόσβασης για το root είναι ο YourMariaDBRootPassword.

6. Στη συνέχεια, το βιβλίο μας (/etc/ansible/playbooks/playbook.yml) θα φαίνεται πολύ πιο οργανωμένο και απλό σε σύγκριση με το προηγούμενο σεμινάριο:

# cat playbook.yml
- hosts: webservers
  roles:
        - wp-dependencies
        - wp-install-config

Τέλος, ήρθε η ώρα να εκτελέσουμε αυτές τις εργασίες επικαλούμενοι το βιβλίο μας:

# ansible-playbook playbook.yml

Τώρα ας ελέγξουμε αν μπορούμε να αποκτήσουμε πρόσβαση στη σελίδα Διαχειριστή του WordPress χρησιμοποιώντας τις διευθύνσεις IP των node1 192.168.0.29 και node2 192.168.0.30:

Μπορείτε να προβάλετε τα δύο τελευταία βήματα στην παρακάτω εκπομπή οθόνης:

Όπως μπορείτε να δείτε, μπορείτε να ρυθμίσετε πολλές εγκαταστάσεις WordPress με λίγη έως καθόλου προσπάθεια χρησιμοποιώντας το Ansible. Στη συνέχεια, μπορείτε να χρησιμοποιήσετε την αντίστοιχη διεπαφή χρήστη Διαχειριστή για να διαμορφώσετε κάθε τοποθεσία ξεχωριστά.

Τελικές σκέψεις

Εάν χρησιμοποιείτε άλλη διανομή για την ανάπτυξη του WordPress, το όνομα των πακέτων μπορεί να διαφέρει, αλλά εξαρτάται από την εγκατάσταση του διακομιστή ιστού Apache, του διακομιστή βάσης δεδομένων MariaDB και της λειτουργικής μονάδας Python MySQL. Εάν συμβαίνει αυτό, χρησιμοποιήστε το σύστημα διαχείρισης λογισμικού της διανομής σας για να αναζητήσετε το ακριβές όνομα πακέτου που πρέπει να εγκαταστήσετε.

Περίληψη

Σε αυτήν τη σειρά εξηγήσαμε πώς να χρησιμοποιήσετε το Ansible για να εκτελέσετε εντολές και να εκτελέσετε σύνθετες εργασίες σε πολλά μηχανήματα Linux ταυτόχρονα.

Ένα από αυτά τα παραδείγματα είναι η ρύθμιση του WordPress, όπως έχουμε συζητήσει σε αυτόν τον οδηγό. Είτε είστε διαχειριστής συστήματος είτε blogger, ελπίζω να σας φάνηκαν χρήσιμες οι έννοιες και τα παραδείγματα σε αυτό το σεμινάριο.

Καλή τύχη και μη διστάσετε να μας στείλετε μια γραμμή εάν χρειάζεστε βοήθεια ή έχετε οποιαδήποτε σχόλια ή προτάσεις!