Krav
Sette opp master
Formel
Pilar
Utplassering
Bekrefter
Konklusjon
Mens SaltStack er et flott verktøy for å kjøre operasjoner på mange servere samtidig, støtter det også per-verts definerte konfigurasjonsforhåndsinnstillinger lagret i en unik fil som videre kalles "pilar". I denne guiden vil vi skrive en liten SaltStack-formel for å installere Nginx og automatisere distribusjonen av virtuelle verter ved hjelp av pilarer.
Krav
- Vultr-forekomst som kjører Ubuntu 17.04 (master)
- To Vultr-forekomster som kjører Ubuntu 17.04 (minions)
Sette opp master
Hvis du akkurat har begynt og ikke har satt opp SaltStack-masteren ennå, sjekk ut denne artikkelen som forklarer hvordan du kommer i gang med SaltStack.
Vi starter med å lage mappen for formelen vår som videre inneholder filene som kreves for SaltStacks operasjoner på våre undersåtter.
mkdir -p /srv/salt/nginx
Etter å ha opprettet mappen, kan vi fortsette med å skrive opp init.slsfilen som er en viktig del av hver formel:
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
Som du sikkert har lagt merke til, bruker SaltStack Jinja-malmotoren for å generere dynamiske konfigurasjonsfiler. Dette gir et bredt spekter av muligheter innenfor våre konfigurasjonsmalfiler, for eksempel tilgang til innebygd Python-kode eller innstillingsvariabler og lignende. Det neste trinnet består av å lage malen for virtualhosts.conffilen vår , mens vi først må lage mappen:
mkdir -p /srv/salt/nginx/files
Når mappen er opprettet, kan vi fortsette med å skrive opp virtualhosts.jinjafilen:
{% 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 %}
Pilar
Etter å ha laget formelen, kan vi gå videre og sette opp vår søylebase:
mkdir -p /srv/pillar/
Eventuelle referanser for verter som samsvarer med en bestemt søylefil skrives inn i top.slsfilen i katalogen vi nettopp opprettet. I vårt eksempel antar vi at det eksisterer to undersåtter med vertsnavnet, nginxwww1og nginxwww2mens vi vil tilordne dem begge unike pilarfiler:
base:
'id:nginxwww1':
- match: grain
- nginxwww1
'id:nginxwww2':
- match: grain
- nginxwww2
Deretter vil vi fortsette med å lage en pilar-fil for nginxwww1mens vi vil lage en vhost-lytting på port 81 for domenet example.com, hvor dokumentroten /var/www/example_com/og indeksfilene er index.shtml:
vhosts:
-
listenPort: '81'
serverName: 'example.com'
documentRoot: '/var/www/example_com'
indexFiles:
- index.shtml
Vi vil fortsette med å lage en pilarfil for nginxwww2mens vi vil lage en vhost-lytting på port 82 for domenet example2.com, hvor dokumentroten /var/www/example2_com/og indeksfilene er index.jsog index.css:
vhosts:
-
listenPort: '82'
serverName: 'example2.com'
documentRoot: '/var/www/example2_com'
indexFiles:
- index.js
- index.css
Merk: Pilar-filer lagres innenfor/srv/pillar/
Utplassering
Vi kan nå fullføre vårt første forsøk med pilarer ved å oppdatere dem på våre undersåtter:
salt '*' saltutil.refresh_pillar
Etterpå kan vi kjøre SaltStack-formelen:
salt '*' state.sls nginx
Bekrefter
Når SaltStack-formelen er kjørt og fullført uten noen feil, bør vi kunne se nginxlytting på port 81på nginxwww1og på port 82på nginxwww2som bekreftelse.
Konklusjon
Denne ganske lette, men allerede kraftige SaltStack-formelen kan utvides ytterligere for å legge til støtte for HTTPS, muligens med en integrasjon av Let's Encrypt, støtte for CGI- eller PHP-backends og alt du kan gjøre manuelt også. Denne veiledningen skulle ha gitt deg en grunnleggende idé om SaltStack-formler og pilarer som brukes for distribusjon av konfigurasjonsfiler. Lykke til med automatisering!