Capitolo 8 – Deploy Applicativo e Template Jinja2
Dopo aver appreso ruoli, variabili e gestione dei segreti, il passo successivo è imparare a deployare applicazioni in modo automatizzato e a utilizzare template Jinja2 per configurazioni dinamiche.
8.1 Cos’è un Template Jinja2
I template Jinja2 permettono di creare file di configurazione dinamici.
Caratteristiche principali:
- Sintassi semplice simile a Python
- Variabili sostituite al momento dell’esecuzione
- Supporto per cicli, condizioni e filtri
- Ideale per configurazioni come nginx, apache, systemd, ecc.
Esempio minimo di template nginx.conf.j2:
server {
listen {{ http_port }};
server_name {{ server_name }};
root {{ web_root }};
index index.html;
}
8.2 Creazione di un Template per il Web Server
Esempio ruolo roles/nginx/templates/nginx.conf.j2:
user www-data;
worker_processes auto;
pid /run/nginx.pid;
events {
worker_connections 768;
}
http {
server {
listen {{ http_port }};
server_name {{ server_name }};
root {{ web_root }};
index index.html index.htm;
location / {
try_files $uri $uri/ =404;
}
}
}
Variabili tipiche da definire in group_vars/web.yml:
http_port: 80
server_name: example.com
web_root: /var/www/html
8.3 Copiare Template con il Modulo template
Playbook esempio: playbooks/deploy_web.yml
- name: Deploy Web Server
hosts: web
become: true
roles:
- nginx
tasks:
- name: Deploy configurazione nginx
template:
src: nginx.conf.j2
dest: /etc/nginx/sites-available/default
owner: root
group: root
mode: '0644'
- name: Riavvia nginx se configurazione cambiata
service:
name: nginx
state: restarted
when: ansible_os_family == "Debian"
8.4 Gestione Deploy Applicativo Completo
Oltre al web server, un deploy tipico include:
- Creazione cartella applicazione
- Copia codice (modulo
gitocopy) - Gestione dipendenze (es.
pip,npm,apt) - Configurazione variabili ambiente
- Avvio servizi (es. systemd o docker)
Esempio snippet per copia codice:
- name: Clona repository applicativo
git:
repo: 'https://github.com/tuo-progetto/app.git'
dest: /var/www/html
version: main
8.5 Gestione Segreti nel Deploy
Variabili sensibili (API key, password DB) mai hardcodate.
Esempio group_vars/web/secrets.yml cifrato con Vault:
db_password: "SuperSegreta123"
api_key: "XYZ987654321"
Utilizzo nel template:
DB_PASSWORD={{ db_password }}
API_KEY={{ api_key }}
Esecuzione playbook con Vault:
ansible-playbook playbooks/deploy_web.yml --ask-vault-pass
8.6 Best Practice per Deploy
- Creare ruoli per ogni componente (nginx, app, db)
- Usare template per tutte le configurazioni modificabili
- Separare variabili di ambiente da variabili di default
- Testare sempre con
--checkprima di eseguire in produzione - Versionare codice e playbook su Git
- Automatizzare restart servizi solo se necessario (
notifyehandlers)
8.7 Conclusione
L’utilizzo di template Jinja2 e playbook modulare permette di:
- Standardizzare deploy
- Rendere configurazioni dinamiche e riutilizzabili
- Gestire segreti in sicurezza
- Automatizzare tutte le operazioni di setup applicativo
Nei prossimi capitoli si può approfondire:
- Hardening e sicurezza server
- Logging e troubleshooting avanzato
- Deploy multi-tier e orchestrazione
No comments to display
No comments to display