Η αυτοματοποίηση διακομιστών είναι μια ασφαλής και αξιόπιστη διαδικασία διαχείρισης και παρακολούθησης διακομιστών με αποτελεσματικό και τεχνολογικά προηγμένο τρόπο. Σε αντίθεση με τον παραδοσιακό τρόπο διαχείρισης διακομιστών σε κέντρα δεδομένων που ελέγχονται από μια αποκλειστική ομάδα ειδικών, όλοι οι διακομιστές διαχειρίζονται με τη χρήση αυτοματοποίησης. Ως αποτέλεσμα, τα ανθρώπινα σφάλματα ελαχιστοποιούνται.
Εργαλεία διαχείρισης ρυθμίσεων όπως τα Ansible, Puppet, Terraform, για να αναφέρουμε μερικά, χρησιμοποιούνται συνήθως για την αυτοματοποίηση διακομιστών. Αυτά τα εργαλεία ρυθμίζουν διακομιστές χρησιμοποιώντας αυτοματοποίηση, καθιερώνοντας τυπικές διαδικασίες για νέους διακομιστές, ενώ παράλληλα εξαλείφουν πιθανά σφάλματα που προκύπτουν κατά τη χειροκίνητη εκτέλεση.
Ansible είναι ένα ισχυρό έργο ανοικτού κώδικα. Είναι ευέλικτο, εύκολο στη χρήση και διαθέτει την πιο απλοποιημένη αρχιτεκτονική. Δεν απαιτείται υπόβαθρο προγραμματισμού για τη χρήση των Ansible playbooks και δεν απαιτεί την εγκατάσταση λογισμικού στους κόμβους. Πάνω απ' όλα, είναι εξοπλισμένο με εξαιρετικές δυνατότητες που του επιτρέπουν να γράφει σενάρια κώδικα (scripts) και να απλοποιεί την αυτοματοποίηση.
Σε αυτόν τον οδηγό, θα σας καθοδηγήσουμε στα βήματα εγκατάστασης και ρύθμισης του LAMP σε Ubuntu 20.04 με το Ansible.
Προαπαιτούμενα
Για να παρακολουθήσετε αυτό το σεμινάριο, θα χρειαστείτε:
- Εγκατεστημένο Ubuntu στο σύστημά σας.
- Έναν ή περισσότερους κεντρικούς υπολογιστές Ansible: Ένας ή περισσότεροι απομακρυσμένοι κεντρικοί υπολογιστές Ansible που εκτελούν την τελευταία έκδοση Ubuntu πρέπει να ρυθμιστούν αρχικά. Ακολουθήστε το σεμινάριο Αυτοματοποίηση ρύθμισης διακομιστή με χρήση του Ansible και του Ubuntu 20.04 για τη ρύθμιση.
- Έναν κόμβο ελέγχου Ansible: Μια μηχανή Ubuntu με εγκατεστημένο και ρυθμισμένο το Ansible, συνδεδεμένη στους κεντρικούς υπολογιστές Ansible χρησιμοποιώντας κλειδιά SSH:
-
- Ο κόμβος ελέγχου πρέπει να διαθέτει έναν χρήστη με προνόμια sudo και ένα τείχος προστασίας ρυθμισμένο στο ON.
- Αν χρειάζεστε βοήθεια για τη ρύθμιση του Ansible, ανατρέξτε στο σεμινάριο σχετικά με την εγκατάσταση και ρύθμιση του Ansible στο Ubuntu 20.04.
Ποιος είναι ο σκοπός του Ansible Playbook;
Αυτό το Ansible playbook είναι ένας εναλλακτικός τρόπος για να εκτελέσετε τη διαδικασία που περιγράφεται στον οδηγό μας LAMP Stack Setup – Linux Apache MySQL PHP.
Η εκτέλεση του Ansible playbook θα έχει ως αποτέλεσμα τις ακόλουθες ενέργειες στους κεντρικούς υπολογιστές Ansible:
-
Εγκατάσταση του aptitude, μιας εναλλακτικής λύσης για τον διαχειριστή πακέτων apt όπως προτιμάται από το Ansible.
-
Εγκατάσταση όλων των απαραίτητων πακέτων LAMP.
-
Δημιουργία ενός νέου Apache VirtualHost και ρύθμιση ενός αποκλειστικού ριζικού καταλόγου εγγράφων (document root).
-
Ενεργοποιήστε (στο ON) το νέο VirtualHost.
-
Απενεργοποιήστε (στο OFF) τον προεπιλεγμένο ιστότοπο Apache, δηλαδή ορίστε τη μεταβλητή disable_default σε true.
-
Επιλέξτε έναν κωδικό πρόσβασης για τον root χρήστη της MySQL.
-
Κατάργηση ανώνυμων λογαριασμών MySQL και της δοκιμαστικής βάσης δεδομένων.
-
Ρυθμίστε το UFW ώστε να επιτρέπει την κίνηση HTTP στη διαμορφωμένη θύρα, όπου η προεπιλογή είναι 80.
-
Ρύθμιση ενός δοκιμαστικού σεναρίου PHP.
Αφού ολοκληρωθεί η εκτέλεση του Ansible playbook, θα δείτε ένα διαδικτυακό περιβάλλον PHP να εκτελείται πάνω από τον Apache σύμφωνα με τις ρυθμίσεις που έχουμε ορίσει.
Χρήση του Ansible Playbook
Αρχικά, λάβετε το LAMP playbook και τις εξαρτήσεις του από το αποθετήριο do-community/ansible-playbooks. Στη συνέχεια, κλωνοποιήστε το αποθετήριο με το LAMP playbook σε έναν τοπικό φάκελο μέσα στον Κόμβο Ελέγχου Ansible.
Εκτελέστε την εντολή git pull για να βεβαιωθείτε ότι έχετε πρόσβαση στο σωστό περιεχόμενο που πρόκειται να χρησιμοποιήσουμε σε αυτό το σεμινάριο:
|
1 2 |
cd ~/ansible-playbooks git pull |
Εάν χρησιμοποιείτε το αποθετήριο do-community/ansible-playbooks για πρώτη φορά, σκεφτείτε να κλωνοποιήσετε το αποθετήριο στον αρχικό σας φάκελο:
|
1 2 3 |
cd ~ git clone https://github.com/do-community/ansible-playbooks.git cd ansible-playbooks |
Μεταβείτε στον φάκελο lamp_ubuntu2004 και θα δείτε τη δομή:
|
1 2 3 4 5 6 7 8 |
lamp_ubuntu2004 ├── files │ ├── apache.conf.j2 │ └── info.php.j2 ├── vars │ └── default.yml ├── playbook.yml └── readme.md |
Ακολουθεί μια επισκόπηση της σημασίας αυτών των αρχείων:
-
files/info.php.j2: Αυτό είναι ένα αρχείο προτύπου όπου μπορείτε να ρυθμίσετε μια δοκιμαστική σελίδα PHP στη ρίζα του διακομιστή ιστού.
-
files/apache.conf.j2: Ένα άλλο αρχείο προτύπου που χρησιμοποιείται για τη ρύθμιση του Apache VirtualHost.
-
vars/default.yml: Είναι ένα αρχείο μεταβλητών για την προσαρμογή των ρυθμίσεων του playbook.
-
playbook.yml: Αυτό το αρχείο περιέχει όλα τα περιεχόμενα των εργασιών που πρόκειται να εκτελεστούν στον/στους απομακρυσμένο/ους διακομιστή/ές.
-
readme.md: Ένα αρχείο ανάγνωσης που περιέχει τις πληροφορίες σχετικά με αυτό το playbook.
Ας προσαρμόσουμε τις ρυθμίσεις των MySQL και Apache κάνοντας αλλαγές στο αρχείο μεταβλητών του playbook. Μεταβείτε στον κατάλογο lamp_ubuntu2004 και ανοίξτε το αρχείο vars/default.yml χρησιμοποιώντας τον επεξεργαστή nano:
|
1 2 |
cd lamp_ubuntu2004 nano vars/default.yml |
Ανοίγοντας το αρχείο vars/default.yml, θα υπάρχει μια λίστα μεταβλητών που πρέπει να τροποποιηθεί:
|
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 |
Ας κατανοήσουμε κάθε μία από τις μεταβλητές λεπτομερώς:
-
mysql_root_password: Αποθηκεύει τον κωδικό πρόσβασης για τον λογαριασμό root MySQL.
-
app_user: Είναι ένας απομακρυσμένος χρήστης μη-root στον κεντρικό υπολογιστή Ansible που λειτουργεί ως ιδιοκτήτης των αρχείων της εφαρμογής.
-
http_host: Εμφανίζει το όνομα τομέα σας.
-
http_conf: Εμφανίζει το όνομα του αρχείου ρυθμίσεων που δημιουργήθηκε μέσα στο Apache.
-
http_port: Είναι η θύρα HTTP για αυτόν τον εικονικό κεντρικό υπολογιστή, και 80 είναι η προεπιλογή.
-
disable_default: Χρησιμοποιείται για την αναίρεση των προεπιλεγμένων επιλογών που συνοδεύουν το Apache.
Στη συνέχεια, αποθηκεύστε και κλείστε το αρχείο vars/default.yml.
Μόλις ολοκληρωθεί όλη η εγκατάσταση, είμαστε έτοιμοι να εκτελέσουμε αυτό το playbook στους διακομιστές. Από προεπιλογή, οι περισσότεροι διακομιστές στα playbooks είναι ρυθμισμένοι να εκτελούνται σε κάθε διακομιστή στα inventories. Ας χρησιμοποιήσουμε τη σημαία -l για να επηρεάσουμε μόνο έναν συγκεκριμένο διακομιστή ή ένα επιλεγμένο υποσύνολο ομάδας που επηρεάζεται από το playbook. Εναλλακτικά, μπορούμε να χρησιμοποιήσουμε τη σημαία -u για να έχουμε μια λεπτομερή προβολή του ποιος απομακρυσμένος διακομιστής συνδέεται και εκτελείται στους απομακρυσμένους κεντρικούς υπολογιστές.
Ας εκτελέσουμε το playbook σε έναν διακομιστή server1 και ας τον συνδέσουμε με έναν χρήστη ως justin:
|
1 |
ansible-playbook playbook.yml -l server1 -u justin |
Θα λάβετε ένα αποτέλεσμα παρόμοιο με αυτό:
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
PLAY [all] ********************************************************************************************************* TASK [Συλλογή Στοιχείων] *********************************************************************************************************ok: [server1] TASK [Εγκατάσταση προαπαιτούμενων] *********************************************************************************************************ok: [server1] => (item=aptitude) ... TASK [UFW - Να επιτρέπεται HTTP στη θύρα 80] ********************************************************************************************************* changed: [server1] TASK [Ρύθμιση Up PHP Πληροφοριών Σελίδας] ********************************************************************************************************* changed: [server1] ΕΚΤΕΛΕΣΗ HANDLER [Επαναφόρτωση Apache] ********************************************************************************************************* changed: [server1] ΕΚΤΕΛΕΣΗ HANDLER [Επανεκκίνηση Apache] ********************************************************************************************************* changed: [server1] PLAY RECAP ********************************************************************************************************* server1 : ok=15 changed=11 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0 |
Μόλις δείτε ότι το playbook ολοκλήρωσε την εκτέλεσή του, μεταβείτε στο πρόγραμμα περιήγησης ιστού και αποκτήστε πρόσβαση στον κεντρικό υπολογιστή του διακομιστή. Μην ξεχάσετε να επισυνάψετε το /info.php στο τέλος της IP:
|
1 |
http://server_host_or_IP/info.php |
Κάνοντας κλικ σε αυτή τη διεύθυνση URL, θα δείτε μια σελίδα σαν αυτή:
|
Προειδοποίηση: Η σελίδα που εμφανίζεται περιέχει ευαίσθητες πληροφορίες σχετικά με το περιβάλλον PHP σας. Επομένως, συνιστάται να αφαιρέσετε τις προσωπικές σας πληροφορίες από τον διακομιστή χρησιμοποιώντας την ακόλουθη εντολή: rm -f /var/www/info.php |
Τι περιέχει το Playbook;
Στη συνέχεια, ας κατανοήσουμε τη σημασία και τη σπουδαιότητα των αρχείων που χρησιμοποιούνται στο ansible-playbook περιεχόμενο:
-
vars/default.yml
Το default.yml αρχείο μεταβλητών περιέχει το όνομα τομέα και τον κωδικό πρόσβασης του MySQL root λογαριασμού. Αυτές είναι οι προεπιλεγμένες τιμές που χρησιμοποιούνται στις εργασίες του ansible-playbook εργασίες:
|
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
Το apache.conf.j2 αρχείο είναι ένα Jinja 2 αρχείο προτύπου που χρησιμοποιείται για τη διαμόρφωση ενός νέου Apache VirtualHost. Οι μεταβλητές που χρησιμοποιούνται σε αυτό το πρότυπο πρέπει να οριστούν στο vars/default.yml αρχείο μεταβλητών:
|
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
Παρόμοια με το files/apache.conf.j2, το info.php.j2 αρχείο είναι επίσης ένα πρότυπο Jinja. Χρησιμοποιούμε αυτό το αρχείο για να ρυθμίσουμε ένα δοκιμαστικό σενάριο PHP στον ριζικό κατάλογο εγγράφων ενός πρόσφατα διαμορφωμένου διακομιστή LAMP:
|
1 2 |
<?php phpinfo(); |
-
playbook.yml
Το playbook.yml αρχείο είναι το μέρος όπου ορίζονται όλες οι εργασίες από αυτήν τη ρύθμιση. Σε αυτό το αρχείο, διαμορφώνονται όλες οι στοίβες LAMP. Ξεκινά με τον ορισμό της ομάδας των διακομιστών-στόχων και έχει οριστεί σε all. Επίσης, λαμβάνει την τιμή become ως true ( become: true), και ορίζει όλες τις εργασίες που πρέπει να εκτελεστούν. Στη συνέχεια, το yaml αρχείο περιέχει το προεπιλεγμένο αρχείο, το οποίο είναι το vars/default.yml αρχείο μεταβλητών, για τη φόρτωση των επιλογών διαμόρφωσης:
|
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: Εγκατάσταση προαπαιτούμενων apt: name={{ item }} update_cache=yes state=latest force_apt_get=yes loop: [ 'aptitude' ] # Ρύθμιση Apache - name: Εγκατάσταση LAMP Πακέτων apt: name={{ item }} update_cache=yes state=latest loop: [ 'apache2', 'mysql-server', 'python3-pymysql', 'php', 'php-mysql', 'libapache2-mod-php' ] - name: Δημιουργία document root file: path: "/var/www/{{ http_host }}" state: directory owner: "{{ app_user }}" mode: '0755' - name: Ρύθμιση up Apache virtualhost template: src: "files/apache.conf.j2" dest: "/etc/apache2/sites-available/{{ http_conf }}" notify: Επαναφόρτωση Apache - name: Ενεργοποίηση νέου ιστότοπου shell: /usr/sbin/a2ensite {{ http_conf }} notify: Επαναφόρτωση Apache - name: Απενεργοποίηση προεπιλεγμένου Apache ιστότοπου shell: /usr/sbin/a2dissite 000-default.conf when: disable_default notify: Επαναφόρτωση Apache # Ρύθμιση MySQL - name: Ορισμός του root κωδικού πρόσβασης mysql_user: name: root password: "{{ mysql_root_password }}" login_unix_socket: /var/run/mysqld/mysqld.sock - name: Κατάργηση όλων των ανώνυμων λογαριασμών χρηστών mysql_user: name: '' host_all: yes state: absent login_user: root login_password: "{{ mysql_root_password }}" - name: Κατάργηση της MySQL δοκιμαστικής βάσης δεδομένων mysql_db: name: test state: absent login_user: root login_password: "{{ mysql_root_password }}" # Ρύθμιση UFW - name: "UFW - Να επιτρέπεται το HTTP στη θύρα {{ http_port }}" ufw: rule: allow port: "{{ http_port }}" proto: tcp # Σελίδα Πληροφοριών PHP - name: Ρύθμιση Up PHP Info Σελίδας template: src: "files/info.php.j2" dest: "/var/www/{{ http_host }}/info.php" handlers: - name: Επαναφόρτωση Apache service: name: apache2 state: reloaded - name: Επανεκκίνηση Apache service: name: apache2 state: restarted |
Μπορείτε να τροποποιήσετε αυτά τα αρχεία με βάση τις ανάγκες και τις απαιτήσεις του έργου σας.
Συμπέρασμα
Σε αυτόν τον οδηγό, εξετάσαμε τα βήματα εγκατάστασης και ρύθμισης του LAMP σε έναν απομακρυσμένο διακομιστή με το Ansible. Υπάρχουν πολλές άλλες επιλογές προσαρμογής με τις οποίες μπορείτε να πειραματιστείτε. Για παράδειγμα, η χρήση της επίσημης τεκμηρίωσης του Ansible και η χρήση των περιπτώσεων του mysql_user από το πρόσθετο (module) του Ansible είναι ένας εξαιρετικός τρόπος για να αναβαθμίσετε τις γνώσεις σας. Επίσης, ακολουθήστε τα βήματα που περιγράφονται σε αυτόν τον οδηγό για να εξασκηθείτε στην αυτοματοποίηση χρησιμοποιώντας άλλα εργαλεία διαχείρισης ρυθμίσεων και λειτουργικά συστήματα για να αυξήσετε το επίπεδο δυσκολίας.
Είστε νέος στο LAMP stack και θέλετε να εμβαθύνετε σε αυτό το θέμα; Εξερευνήστε τους παρακάτω οδηγούς στο ιστολόγιό μας:
- Πώς να εγκαταστήσετε το WordPress με LAMP στο Ubuntu 20.04
- Πώς να εγκαταστήσετε το Linux, Apache, MySQL, PHP (LAMP) Stack στο Centos-7
- Πώς να εγκαταστήσετε το LEMP Stack Linux Nginx MySQL PHP στο Ubuntu 20.04
Καλή υπολογιστική!

Σχόλια
Δεν υπάρχουν σχόλια ακόμα. Γράψτε το πρώτο.