Ansible è un semplice strumento di automazione che automatizza la distribuzione di applicazioni software, il provisioning del cloud e la gestione della configurazione. È uno strumento di orchestrazione del server che ti aiuta a gestire e controllare un gran numero di nodi del server da singole posizioni chiamate "Macchine di controllo". Ansible è stato creato da Michael DeHaan nel 2012 ed è scritto in Python e Powershell.
In questo tutorial, ti mostreremo come creare Ansible Playbook di base per il provisioning dello stack LEMP su Ubuntu 18.04 Server. Imparerai come creare Ansible Playbook di base che può essere ridimensionato per altre applicazioni di progetto PHP come WordPress, Nextcloud ecc.
Prerequisito
- 2 SO Ubuntu.
- 10.5.5.20 disponibile
- 10.5.5.26 disposizione
- Conoscenza dell'utilizzo di base Ansible
- Privilegi di root
Cosa faremo:
- Imposta il progetto Ansible Playbook
- Genera una struttura di directory dei ruoli di Ansible Playbook
- Imposta host e site.yml
- Imposta ruoli "comuni" - Configurazione di base
- Imposta ruoli 'web' - Configurazione Nginx e PHP-FPM
- Imposta ruoli 'db' - Configurazione database MySQL
- Test
Passaggio 1:impostazione del progetto Ansible Playbook
Ansible Playbook è un insieme di istruzioni che invii per l'esecuzione su un singolo o gruppo di host server. Rappresenta l'ansible-provisioning, in cui l'automazione è definita come attività e tutti i lavori come l'installazione di pacchetti, la modifica di file, saranno eseguiti da moduli ansible.
Ansible Playbook contiene alcune configurazioni di base, inclusi host e informazioni sull'utente dei server di fornitura, un elenco di attività che verrà implementato nei server di fornitura, modelli e configurazioni personalizzate e un gruppo di variabili che fanno parte di modelli e attività.
Innanzitutto, crea la directory del progetto principale sulla macchina "ansible-control". Nella directory del progetto principale verranno archiviate tutte le directory, i file e le configurazioni del nostro playbook.
Crea la directory del progetto Ansible chiamata 'project-lemp' ed entra in essa.
mkdir project-lemp/
cd project-lemp
Ora crea un nuovo file di configurazione 'hosts' e 'site.yml', quindi crea una nuova directory chiamata 'roles'.
touch hosts site.yml
mkdir -p roles/
Dettagli sulle configurazioni:
host - È un file di inventario che contiene informazioni sui server gestiti da ansible. Ti consente di creare un gruppo di server che semplificano la gestione e la scalabilità del file di inventario stesso. Il file di inventario può essere creato con molti formati diversi, inclusi i formati INI e YAML.
site.yml - Il file del playbook principale che contiene il gruppo di host che verrà gestito utilizzando i nostri ruoli disponibili.
ruoli - è un gruppo di playbook Ansible che verranno utilizzati per il provisioning del server. I ruoli ansible hanno le proprie strutture di directory, ogni ruolo conterrà directory come task, handler, vars ecc.
Passaggio 2:genera ruoli ansible per la struttura della directory
In questo passaggio, creeremo la directory dei ruoli ansible utilizzando il comando ansible-galaxy. Genereremo due di ruoli chiamati ruoli "comuni" e ruoli "web".
All'interno della directory 'project-lemp', vai alla directory 'ruoli'.
cd roles/
Genera directory e file della struttura dei ruoli per i ruoli "comuni" e "web" eseguendo il comando ansible-galaxy di seguito.
ansible-galaxy init common
ansible-galaxy init web
ansible-galaxy init db
Successivamente, controlla tutte le strutture di directory dei ruoli disponibili utilizzando il comando seguente.
tree .
Ti verrà mostrato il risultato come di seguito.
Passaggio 3 - Imposta host e site.yml
Il file 'hosts' conterrà l'elenco e il gruppo dei server gestiti da Ansible. Per questa guida creeremo un gruppo chiamato 'lemp' con il membro chiamato 'server01' e l'indirizzo IP 10.5.5.26.
Modifica il file 'hosts' usando l'editor vim.
vim hosts
Incolla la configurazione di seguito.
[lemp]
server01 ansible_host=10.5.5.26
Salva e chiudi.
Quindi, modifica il file di configurazione site.yml.
vim site.yml
Incolla le configurazioni di seguito.
---
- hosts: lemp
remote_user: hakase
become: yes
roles:
- common
- web
- db
Salva e chiudi.
Passaggio 3:impostazione dei ruoli comuni
In questo passaggio, imposteremo i ruoli comuni. E per farlo, dobbiamo creare un elenco di attività che andremo a svolgere.
Di seguito l'elenco delle attività che andremo a svolgere sui ruoli "comuni".
- Cambia repository
- Aggiorna repository
- Aggiorna i pacchetti all'ultima versione
- Imposta il fuso orario del server
Ora vai alla directory 'common' e modifica la configurazione 'tasks/main.yml'.
cd common/
vim tasks/main.yml
Crea un'attività per modificare il repository e useremo il modulo 'copy' che copierà la base 'sources.list' nella directory 'files' nell'host remoto '/etc/apt/'.
- name: Change repository Ubuntu 18.04Step 4 - Setup 'web' Roles
copy:
src: sources.list
dest: /etc/apt/
backup: yes
Crea un'attività per aggiornare il repository e aggiorna tutti i pacchetti all'ultima versione utilizzando il modulo 'apt'.
- name: Update repository and Upgrade packages
apt:
upgrade: dist
update_cache: yes
Ora crea l'attività per la configurazione del fuso orario del sistema utilizzando il modulo fuso orario ansible.
- name: Setup timezone to Asia/Jakarta
timezone:
name: Asia/Jakarta
state: latest
Salva e chiudi.
Successivamente, crea una nuova configurazione del repository 'sources.list' all'interno della directory 'files'.
vim files/sources.list
Scegli il repository più vicino alla posizione del tuo server, di seguito è il mio.
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
Salva e chiudi.
infine, è stata completata la configurazione dei ruoli 'comuni'.
Passaggio 4:impostazione dei ruoli "web"
In questo passaggio, imposteremo i ruoli "web". Eseguirà alcune attività tra cui l'installazione del server Web Nginx, PHP-FPM con alcune estensioni di base e la configurazione di PHP-FPM con Nginx.
Di seguito sono riportati i dettagli delle attività che eseguiremo sui ruoli "web":
- Installa Nginx
- Installa PHP-FPM
- Configura php.ini
- Crea un host virtuale
- Aggiungi file phpinfo
Vai alla directory 'web' e modifica il file 'tasks/main.yml'.
cd web/
vim tasks/main.yml
Crea la prima attività per l'installazione di nginx usando il modulo apt.
- name: Install Nginx
apt:
name: nginx
state: latest
Ora crea l'attività per l'installazione di PHP-FPM con alcune estensioni di base. E per l'installazione di più pacchetti, possiamo usare il formato 'lista' di Python come di seguito.
- name: Instal PHP-FPM
apt:
name: ['php','php-fpm','php-common','php-cli','php-curl']
state: latest
Successivamente, aggiungeremo nuove righe alla configurazione di php.ini utilizzando il modulo 'blockinfile'. E alla fine della riga, avviseremo l'ansible di riavviare il servizio php-fpm dopo aver configurato il 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
Ora copieremo la configurazione dell'host virtuale nginx usando il modulo 'template'. Il modulo template copierà la configurazione dalla directory 'templates' al server remoto. Copieremo il modello di host virtuale jinja2 'vhost.j2' nella directory '/etc/nginx/sites-enabled/' e l'ultimo notificheremo all'ansible di riavviare il servizio nginx.
- name: Create Nginx virtual host
template:
src: vhost.j2
dest: /etc/nginx/sites-enabled/vhost-{{ domain_name }}
notify: restart nginx
Successivamente, creeremo nuove attività per la creazione della directory web-root utilizzando il modulo 'file' e vi copieremo il modello index.php.
- 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
Salva e chiudi.
Ora configureremo i gestori per il riavvio del servizio nginx e php-fpm. Modifica la configurazione 'handlers/main.yml' usando l'editor vim.
vim handlers/main.yml
Incolla le configurazioni di seguito.
- name: restart nginx
service:
name: nginx
state: restarted
enabled: yes
- name: restart php-fpm
service:
name: php{{ php_version }}-fpm
state: restarted
enabled: yes
Salva e chiudi.
Successivamente, modificheremo la configurazione 'vars/main.yml'. Nella parte superiore delle configurazioni noterai le configurazioni delle variabili '{{ php_version }}' e '{{ domain_name }}'. Tali variabili rappresentano la configurazione dell'ambiente per la versione php e il nome di dominio che verrà utilizzato. La variabile rende ansible più riutilizzabile perché dobbiamo solo modificare la configurazione della variabile 'vars/main.yml' e non modificare la configurazione di base.
Modifica la configurazione delle variabili 'vars/main.yml' usando l'editor vim.
vim vars/main.yml
Incolla le configurazioni di seguito.
php_version: 7.2
domain_name: hakase-labs.io
Salva e chiudi.
Ora creeremo le configurazioni dei modelli jinja2 'index.php.j2' e 'vhost.j2' nella directory 'templates/'.
vim templates/index.php.j2
Incolla la configurazione di seguito.
<html>
<body>
<h1><center>index.html for domain {{ domain_name }}</center></h1>
<p>
<p>
<?php
phpinfo();
?>
</body>
</html>
Salva e chiudi.
Successivamente, crea il modello per la configurazione dell'host virtuale nginx 'vhost.j2'.
vim templates/vhost.j2
Incolla le configurazioni di seguito.
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;
}
}
Salva e chiudi la configurazione e abbiamo terminato la configurazione dei ruoli web.
Passaggio 5 - Impostazione dei ruoli 'db'
A questo punto, configureremo i ruoli 'db' per l'installazione e la configurazione del database MySQL.
Di seguito sono riportati i dettagli delle attività che verranno eseguite sui ruoli 'db'.
- installa mysql
- Crea database MySQL
- Crea utente MySQL
- riavvia MySQL
Vai alla directory 'db' e modifica la configurazione 'tasks/main.yml'.
cd db/
vim tasks/main.yml
Ora installa i pacchetti MySQL usando il modulo 'apt' e il formato 'list' di Python per l'installazione di più pacchetti.
- name: Install MySQL
apt:
name: ['mysql-server','mysql-client','python-mysqldb']
state: latest
notify: restart mysql
Quindi crea nuove attività per la creazione del database MySQL e dell'utente, quindi concedi tutti i privilegi dell'utente al 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
Salva e chiudi.
Quindi, modifica la configurazione 'handlers/main.yml'.
vim handlers/main.yml
Incolla la configurazione dell'attività per il riavvio del servizio MySQL.
- name: restart mysql
service:
name: mysql
state: restarted
enabled: yes
Salva e chiudi.
Successivamente, modifica la configurazione della variabile vars 'vars/main.yml'.
vim vars/main.yml
Incolla queste variabili per il database MySQL e la configurazione utente di seguito.
db_name: hakase-db
db_user: hakase
db_pass: '*C960D382DB42E57D3BAC33891CF87900DCB1A869'
Salva e chiudi.
La variabile 'db_pass' ha la password crittografata MySQL e puoi generare una password MySQL crittografata utilizzando gli strumenti online.
Passaggio 6:esegui Ansible Playbook
Vai alla directory del progetto Ansible.
cd project-lemp/
Esegui il comando ansible-playbook di seguito.
ansible-playbook -i hosts site.yml
Ora l'ansible eseguirà tutti i ruoli che assegniamo all'host. Al termine, ti verrà mostrato il risultato come di seguito.
Assicurati di non ricevere errori.
Fase 7 - Test
Apri il tuo browser web e digita il nome del dominio nella barra degli indirizzi http://hakase-labs.io.
E ti verrà mostrata la pagina dell'indice con phpinfo come di seguito.
PHP-FPM e Nginx funzionano.
Quindi, torna al terminale del server e accedi al server MySQL utilizzando l'utente e la password che abbiamo creato nella variabile dei ruoli 'mysql'.
mysql -u hakase -p
PASSWORD: hakasepass
controlla l'elenco dei database di proprietà dell'utente.
show databases;
E verrai registrato sulla shell MySQL e ti verrà mostrato il database chiamato 'hakase-db' nell'elenco.
Infine, l'Ansible Playbook per l'installazione e la configurazione di LEMP Stack è stato creato e testato con successo.