Mentre SaltStack è un ottimo strumento per eseguire operazioni su molti server contemporaneamente, supporta anche predefiniti di configurazione definiti per host memorizzati in un file univoco che sono ulteriormente chiamati "pilastro". In questa guida, scriveremo una piccola formula SaltStack per l'installazione di Nginx e l'automazione della distribuzione di host virtuali tramite pilastri.
Requisiti
- Istanza Vultr che esegue Ubuntu 17.04 (master)
- Due istanze di Vultr che eseguono Ubuntu 17.04 (minion)
Impostazione del master
Se hai appena iniziato e non hai ancora configurato il tuo master SaltStack, consulta questo articolo che spiega come iniziare con SaltStack.
Iniziamo con la creazione della cartella per la nostra formula che contiene ulteriormente i file necessari per le operazioni di SaltStack sui nostri servitori.
mkdir -p /srv/salt/nginx
Dopo aver creato la cartella, possiamo continuare a scrivere il init.sls
file che è una parte essenziale di ogni formula:
nginx:
pkg:
- installed
/etc/nginx/sites-enabled/virtualhosts.conf:
file.managed:
- source: salt://nginx/files/virtualhosts.jinja
- template: jinja
- user: root
- group: root
- mode: 655
cmd:
- run
- names:
- service nginx restart
Come probabilmente avrai notato, SaltStack utilizza il motore di template Jinja per generare file di configurazione dinamici. Ciò offre una vasta gamma di possibilità all'interno dei nostri file modello di configurazione, come l'accesso al codice nativo Python o l'impostazione di variabili e simili. Il passaggio successivo consiste nella creazione del modello per il nostro virtualhosts.conf
file, mentre prima dobbiamo creare la cartella:
mkdir -p /srv/salt/nginx/files
Una volta creata la cartella, possiamo continuare a scrivere il virtualhosts.jinja
file:
{% for vhost in pillar['vhosts'] %}
server {
listen {{ vhost['listenPort'] }};
server_name {{ vhost['serverName'] }};
root {{ vhost['documentRoot'] }};
index {%- for index in vhost['indexFiles'] -%}{{ index }}{%- endfor -%};
location / {
try_files $uri $uri/ =404;
}
}
{% endfor %}
Pilastro
Dopo aver creato la formula, possiamo andare avanti e impostare la nostra base Pillar:
mkdir -p /srv/pillar/
Eventuali riferimenti per host corrispondenti a un determinato file pilastro vengono scritti nel top.sls
file all'interno della directory che abbiamo appena creato. Nel nostro esempio, supponiamo che esistano due servitori con il nome host nginxwww1
e nginxwww2
che assegneremo loro entrambi i file pilastri univoci:
base:
'id:nginxwww1':
- match: grain
- nginxwww1
'id:nginxwww2':
- match: grain
- nginxwww2
Successivamente, continueremo con la creazione di un file pilastro per nginxwww1
mentre creeremo un vhost in ascolto sulla porta 81 per il dominio example.com
, essendo la radice del documento /var/www/example_com/
e i file di indice index.shtml
:
vhosts:
-
listenPort: '81'
serverName: 'example.com'
documentRoot: '/var/www/example_com'
indexFiles:
- index.shtml
Continueremo con la creazione di un file pilastro per nginxwww2
mentre creeremo un vhost in ascolto sulla porta 82 per il dominio example2.com
, essendo la radice del documento /var/www/example2_com/
e i file di indice index.js
e index.css
:
vhosts:
-
listenPort: '82'
serverName: 'example2.com'
documentRoot: '/var/www/example2_com'
indexFiles:
- index.js
- index.css
Nota: i file pilastro sono memorizzati all'interno/srv/pillar/
Distribuzione
Ora possiamo completare il nostro primo tentativo con i pilastri aggiornandoli sui nostri seguaci:
salt '*' saltutil.refresh_pillar
Successivamente, possiamo eseguire la formula SaltStack:
salt '*' state.sls nginx
confermando
Una volta che la formula SaltStack è stato eseguito e completato senza errori, dovremmo essere in grado di vedere nginx
in ascolto sulla porta 81
su nginxwww1
e sulla porta 82
su nginxwww2
come conferma.
Conclusione
Questa formula SaltStack piuttosto leggera ma già potente può essere estesa ulteriormente per aggiungere supporto per HTTPS, possibilmente con un'integrazione di Let's Encrypt, supporto per backend CGI o PHP e tutto ciò che puoi fare manualmente. Questa guida avrebbe dovuto darti un'idea di base delle formule e dei pilastri SaltStack utilizzati per la distribuzione dei file di configurazione. Buona automazione!