GNU/Linux >> Linux Esercitazione >  >> Linux

Ansible Guide:crea Ansible Playbook per LEMP Stack

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:

  1. Imposta il progetto Ansible Playbook
  2. Genera una struttura di directory dei ruoli di Ansible Playbook
  3. Imposta host e site.yml
  4. Imposta ruoli "comuni" - Configurazione di base
  5. Imposta ruoli 'web' - Configurazione Nginx e PHP-FPM
  6. Imposta ruoli 'db' - Configurazione database MySQL
  7. 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".

  1. Cambia repository
  2. Aggiorna repository
  3. Aggiorna i pacchetti all'ultima versione
  4. 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":

  1. Installa Nginx
  2. Installa PHP-FPM
  3. Configura php.ini
  4. Crea un host virtuale
  5. 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'.

  1. installa mysql
  2. Crea database MySQL
  3. Crea utente MySQL
  4. 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.


Linux
  1. Decostruire un playbook Ansible

  2. Comprendere YAML per Ansible

  3. Come creare un Playbook Ansible

  4. Una breve introduzione ai ruoli Ansible per l'amministrazione del sistema Linux

  5. come creare un playbook Ansible per ottenere le versioni del sistema operativo degli host remoti?

Ansible Guide:Il comando ad hoc

Come creare playbook Ansible per l'automazione IT

Webinoly - Imposta facilmente lo stack LEMP ottimizzato per WordPress in Ubuntu

Come creare ed eseguire file Ansible Playbook

Guida rapida ad Ansible per amministratori di sistema Linux

Crea una partizione in Linux:una guida passo passo