Introduzione
Al giorno d'oggi, i server devono essere creati e distrutti molto frequentemente. Questo perché, a volte, i server subiscono un carico di esecuzione elevato, mentre altre volte il carico si riduce, sprecando così le risorse del sistema. Un esempio comune sono i siti web di e-commerce durante le festività natalizie che attirano molto traffico. Quando la natura dell'applicazione è scalabile, c'è sempre la necessità di disporre di strumenti di gestione della configurazione per facilitare il processo complessivo di creazione dei server. Ansible è un ottimo strumento di gestione della configurazione che automatizza la creazione dei server utilizzando procedure standard, riducendo gli errori umani.
Ansible non richiede l'installazione di software speciale sui nodi dei server. Ha tutti gli strumenti necessari per scrivere, compilare e facilitare l'automazione degli script. Questo tutorial illustra in dettaglio come utilizzare Ansible per automatizzare i passaggi contenuti nel nostro Come configurare il tuo server Ubuntu tutorial.
Prerequisiti
Per completare questa guida utilizzeremo Ubuntu 20.04. Inoltre, avrai bisogno anche di:
-
Un nodo di controllo Ansible: una macchina Ubuntu che esegue l'ultima versione di Ubuntu. Il binario master di Ansible deve essere installato e in esecuzione su questa macchina. Questa macchina dovrebbe essere in grado di connettersi ai nodi Ansible. Per queste connessioni, è necessario utilizzare le chiavi SSH. Per evitare problemi durante la connessione, assicurati che il tuo nodo di controllo Ansible abbia un firewall abilitato. Se hai bisogno di assistenza, consulta il nostro Installazione e configurazione di Ansible su Ubuntu 20.04 blog.
-
Host Ansible: è necessario connettersi a uno o più host. Gli host sono essenzialmente i nodi gestiti in Ansible. Questi devono essere server Ubuntu.
Funzioni dell'Ansible Playbook
È possibile configurare manualmente tutti i passaggi indicati di seguito. Tuttavia, automatizzeremo questa esecuzione. Quando esegui questo playbook, eseguirà le seguenti operazioni sulla tua macchina:
-
Installerà aptitude, che è preferito da Ansible come gestore di pacchetti.
-
Creerà un gruppo amministrativo wheel con permessi sudo senza password.
-
Creerà un nuovo utente sudo.
-
Copierà una chiave SSH locale in authorized_keys. Questa deve essere utilizzata per un nuovo utente amministrativo su un host remoto.
-
Disabiliterà l'autenticazione basata su password per l'utente root.
-
Installerà i pacchetti necessari.
-
Configurerà il firewall UFW per consentire solo connessioni SSH. Qualsiasi altra connessione verrebbe bloccata.
Una volta terminata l'esecuzione del Playbook, sarà disponibile un nuovo utente. Puoi utilizzare questo utente per accedere al sistema.
Utilizzo dell'Ansible Playbook
Per configurare il server, avrai bisogno del playbook di configurazione iniziale del server e delle sue dipendenze. Se lo stai usando per la prima volta, dovrai clonare il repository utilizzando il link sottostante:
|
1 |
cd ~ |
|
1 |
git clone https://github.com/do-community/ansible-playbooks.git |
|
1 |
cd ansible-playbooks |
Se il repository è già esistente nel tuo sistema, esegui il comando seguente per ottenere gli ultimi aggiornamenti:
|
1 |
cd ~/ansible-playbooks |
|
1 |
git pull |
Otterrai la seguente struttura di file sulla tua macchina:
|
1 2 3 4 |
setup |-- playbook.yml |__vars |-- default,yml |
Di seguito è riportata la descrizione dei file:
-
vars/default.yml: questo file contiene le variabili per configurare il nodo Ansible.
-
playbook.yml: questo file contiene i job che devono essere eseguiti sul server.
Il file vars/default.yml si presenta in questo modo:
|
1 2 3 4 |
--- create_user: my_user copy_local_key: "{{ lookup('file', lookup('env','HOME') + '/.ssh/id_rsa.pub') }}" sys_packages: [ 'curl', 'vim', 'git', 'ufw'] |
Di seguito è riportata la descrizione di queste variabili. Se desideri modificarle, puoi sostituire i loro valori con i tuoi:
-
create_user: questo è l'utente che viene creato. Questo utente ha sudo privilegi.
-
copy_local_key: Questo contiene il percorso della chiave pubblica SSH locale. Verrà copiata sul server remoto come authorized_key.
-
sys_packages: Se desideri installare uno o più pacchetti sul tuo server, indicali qui come un array.
Una volta modificato questo file, salva il contenuto. Successivamente, su nano, premi CTRL+X , Y. Poi, INVIO per salvare il contenuto del file.
Ora sei pronto per eseguire questo playbook su più server. Per impostazione predefinita, i Playbook sono pronti per essere eseguiti sui server nel tuo inventario. Se desideri utilizzare il Playbook su alcuni server specifici, puoi utilizzare il -l flag. Ora supponi che il server remoto abbia più utenti, puoi utilizzare il -u flag per indicare a quale utente connettersi.
Se il nome del tuo server è my_server e il nome utente è my_user, quindi esegui il comando seguente per l'esecuzione sui nodi Ansible:
|
1 |
ansible-playbook playbook.yml -l my_server -u my_user |
Otterrai un output simile a questo:
|
1 2 3 4 5 6 7 8 9 |
PLAY [all] ***************************************************************************************************************************** TASK [Raccolta dei dati] ***************************************************************************************************************** ok: [my_server] TASK [Installare i prerequisiti] *********************************************************************************************************** changed: [my_server] TASK [Assicurarsi di avere un gruppo 'wheel' group] *********************************************************************************************** changed: [my_server] TASK [Consentire al gruppo 'wheel' di avere sudo senza password] *********************************************************************************** changed: [my_server] |
Una volta terminata questa esecuzione, puoi connetterti utilizzando il comando seguente:
|
1 |
ssh my_user@server_host_or_IP |
Ricorda my_user era il nome che avevamo utilizzato nel file vars/default.yml . Dovrai anche cambiare l'IP del server con l'IP del tuo server nel comando precedente. Se hai fornito la variabile copy_local_key per puntare a una chiave SSH personalizzata, specifica la posizione con lo switch -i:
|
1 |
ssh my_user@server_host_or_IP -i ~/.ssh/ansible_controller_key |
Successivamente, accedi al tuo server per verificare le regole del firewall UFW:
|
1 |
sudo ufw status |
Otterrai il seguente output:
|
1 2 3 4 5 |
Stato: attivo A Azione Da -- ------ ---- OpenSSH CONSENTI Ovunque OpenSSH (v6) CONSENTI Ovunque (v6) |
L'output sopra conferma che il firewall UFW è stato configurato con successo. Questo era l'ultimo passaggio del nostro playbook. Se questo viene eseguito correttamente, significa che l'esecuzione è andata a buon fine.
Contenuto dell'Ansible Playbook
I file del Playbook che abbiamo utilizzato in questo tutorial sono ospitati su ansible-playbooks/setup_ubuntu1804 at master · do-community/ansible-playbooks · GitHub. Se desideri vedere il contenuto di ciascun file per utilizzarlo o modificarlo, fai clic sul pulsante Raw in alto a ciascuno script.
Per un rapido riferimento, condivideremo l'intero contenuto del Playbook insieme ai file pertinenti:
-
vars/default.yml
Questo file contiene i valori che verranno utilizzati dai task del playbook. Questi includono valori come il nome dell'utente, i privilegi, le chiavi SSH, i pacchetti da installare come parte della configurazione iniziale e così via:
|
1 2 3 4 |
--- create_user: my_user copy_local_key: "{{ lookup('file', lookup('env','HOME') + '/.ssh/id_rsa.pub') }}" sys_packages: [ 'curl', 'vim', 'git', 'ufw'] |
-
playbook.yml
Il playbook.yml file contiene i job che devono essere eseguiti. Per prima cosa, il file elenca tutti gli host che devono essere targettizzati. Se vuoi specificare tutti i server, imposta il valore di questa chiave su all. Successivamente, se vuoi specificare i task da eseguire utilizzando i privilegi di sudo, imposta il valore della variabile become: true. Infine, questo file deve includere il contenuto del file sopra indicato vars/default.yml . Li includiamo di seguito per caricare le impostazioni da questo file:
|
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 |
--- - hosts: all become: true vars_files: - vars/default.yml tasks: - name: Installa prerequisiti apt: name=aptitude update_cache=yes state=latest force_apt_get=yes # Configurazione gruppo Sudo - name: Assicurati che ci sia un gruppo 'wheel' group group: name: wheel state: present - name: Consenti al gruppo 'wheel' di avere sudo senza password lineinfile: path: /etc/sudoers state: present regexp: '^%wheel' line: '%wheel ALL=(ALL) NOPASSWD: ALL' validate: '/usr/sbin/visudo -cf %s' # Configurazione utente + chiave - name: Crea un nuovo utente regolare con privilegi sudo user: name: "{{ create_user }}" state: present groups: wheel append: true create_home: true shell: /bin/bash - name: Imposta la chiave autorizzata per l'utente remoto authorized_key: user: "{{ create_user }}" state: present key: "{{ copy_local_key }}" - name: Disabilita l'autenticazione tramite password per root lineinfile: path: /etc/ssh/sshd_config state: present regexp: '^#?PermitRootLogin' line: 'PermitRootLogin prohibit-password' # Installa pacchetti - name: Aggiorna apt apt: update_cache=yes - name: Installa i pacchetti di sistema richiesti apt: name={{ sys_packages }} state=latest # Configurazione UFW - name: UFW - Consenti connessioni SSH ufw: rule: allow name: OpenSSH - name: UFW - Rifiuta tutto l'altro traffico in entrata per impostazione predefinita ufw: state: enabled policy: deny direction: incoming |
Conclusione
L'automazione è fondamentale nell'IT, poiché garantisce che tutti i processi siano privi di errori e seguano pratiche e procedure standard. Poiché la maggior parte del software oggi viene distribuita via web e ha una natura distribuita, creare nuovi server è diventato un compito quotidiano, ad esempio per diversi ambienti come staging o produzione, o persino ambienti demo.
In questo tutorial, abbiamo mostrato come ottenere l'automazione dei server utilizzando Ansible, uno strumento potente e facile da usare che può farti risparmiare molto tempo.
Buon computing!
Commenti
Ancora nessun commento. Scrivi il primo.