Noțiuni introductive cu SaltStack pe Ubuntu 17.04
SaltStack este un program de gestionare a configurațiilor bazat pe python, care este optimizat pentru automatizarea fișierelor de configurare, implementări și orice altceva unde
Există multe modalități de a automatiza procesul de configurare și configurare a unei casete. Din orice motiv, dacă întregul nostru sistem în acest moment cuprinde doar o singură casetă, configurarea unei infrastructuri SCM complete (Software Configuration Management) este excesivă. Scripturile Shell sunt o singură opțiune, dar am putea folosi și o versiune strip-down a SCM, care este disponibilă în câteva dintre instrumentele de acolo. Chef este una dintre opțiunile populare, iar „chef-solo” este modul de configurare autonom al Chef, în care nu avem nevoie de un nod suplimentar pentru a acționa ca „server-chef”. Tot ce are nevoie este un URL sau o cale către un pachet de tarball care conține cărți de bucate. În comparație cu scripturile shell, acest tip de abordare este mai declarativ și mai eficient din cutie și este, de asemenea, o introducere bună pentru a începe procesele SCM sau IaC (Infrastructure as Code).
„Rețetele” din interiorul unui „bucătar de bucătărie” au un DSL pe bază de rubin care descrie „resursele” pentru a fi într-o anumită stare pe un nod. Haideți să parcurgem o etapă avansată pentru a face cunoștință cu câteva concepte Chef care sunt aplicabile și pentru chef-solo. Scopul nostru este să creăm un nod Ubuntu care rulează o aplicație web Python / Django folosind Gunicorn și NGINX.
Notă: Nu este necesar ca ChefDK să fie instalat pe „stația noastră de lucru” (mașina noastră), deși cu aceasta, putem folosi comenzile „chef” pentru a începe cu o structură de directoare pentru crearea de cărți de bucate, rețete și multe altele. În acest articol, vom presupune că ChefDK este instalat pe stația noastră de lucru. Comenzile au fost rulate folosind versiunea 4.7.26-1 a ChefDK.
(Totul din acest moment înainte, cu excepția cazului în care se specifică altfel, va fi rulat pe mașina noastră, denumită și „Stația de lucru pentru Chef”)
Cărțile de bucătărie în bucătar sunt unități reutilizabile care conțin tot ce este necesar pentru a susține un scenariu de configurare. Cărțile de bucate pot conține mai multe „rețete” și „rețete” constau în cea mai mare parte din modele de resurse. default.rb
este rețeta implicită care va fi rulată atunci când cartea de bucate este făcută referință într-o listă de rulare . Rețete diferite permit separarea preocupărilor. Cu toate acestea, pentru acest tutorial, vom adăuga toate declarațiile de resurse într-un singur fișier rețetă principală, care este default.rb
.
Creați un folder numit „my-chef-project” și creați un folder în interiorul său numit „cărți de bucate”. De la ./my-chef-project/cookbooks/
, executați:
$ chef generate cookbook my-cookbook
Structura noastră de directoare va arăta astfel:
.
└── my-chef-project
└── cookbooks
└── my-cookbook
├── CHANGELOG.md
├── LICENSE
├── Policyfile.rb
├── README.md
├── chefignore
├── kitchen.yml
├── metadata.rb
├── recipes
│ └── default.rb
├── spec
│ ├── spec_helper.rb
│ └── unit
│ └── recipes
│ └── default_spec.rb
└── test
└── integration
└── default
└── default_test.rb
Primul pas pentru configurarea nodului nostru este să identificăm ce pachete sunt necesare de aplicația noastră. Nodul nostru este selectat pentru a fi Ubuntu, așa că ne putem baza pe managerul de pachete APT pentru a aduna dependențele. Instalarea pachetelor furnizate de distribuția sistemului de operare este apoi o bucată de tort:
apt_update
package 'python3'
package 'python3-pip'
package 'nginx'
package 'pkg-config'
package 'libcairo2-dev'
package 'libjpeg-dev'
package 'libgif-dev'
package 'libgirepository1.0-dev'
Acestea sunt destul de auto-explicative. Prima linie va actualiza depozitul apt și următoarele linii vor instala acele pachete.
Notă: Pachetele care urmează „nginx” sunt necesare pentru compilarea unora dintre dependențele de piton prin pip. Acestea pot diferi în funcție de dependențele proiectului dvs. python / django specificate în
requirements.txt
. Puteți utiliza o metodă de încercare și eroare pentru a determina aceste pachete pe care trebuie să le includeți în cartea de bucate. Pentru a face acest lucru, efectuați un manualsudo pip install -r requirements.txt
(Notă: Acesta instalează pachete pe întregul sistem!) Pe o mașină ubuntu proaspăt inițiată pentru a vedea dacă rulează cu succes. Dacă nu, stderr ar trebui să vă dea indicații despre pachetele care lipsesc.
După ce am terminat adăugarea pachetelor necesare, trebuie să creăm un utilizator Linux ne privilegiat care să dețină codul sursă al aplicației.
user 'bob' do
uid 1212
gid 'users'
home '/home/bob'
shell '/bin/bash'
password '$1$alilbito$C83FsODuq0A1pUMeFPeR10'
end
Rețineți că parola este un format hash umbre utilizat în Linux. Poate fi derivat folosind OpenSSL:
$ openssl passwd -1 -salt alilbitof mypassword
Acum să includem codul sursă al aplicației Django în cartea noastră de bucate. Plasați codul sursă în interiorul ./my-chef-project/cookbooks/my-cookbook/files/default/myapp/
Creați ./my-chef-project/cookbooks/my-cookbook/files/default
directorul dacă acesta nu există.
Instrucțiunea de copiere a acestor fișiere într-o locație de la distanță de pe nodul nostru este descrisă folosind resursa remote_directory :
remote_directory '/home/bob/myapp' do
source 'myapp' # This is the name of the folder containing our source code that we kept in ./my-cookbook/files/default/
owner 'bob'
group 'users'
mode '0755'
action :create
end
Pentru a instala pachetele python în requirements.txt
, putem folosi resursa execute pentru a rula o comandă arbitrară. În acest caz, trebuie să executăm comanda de instalare pip peste ea:
execute 'install python dependencies' do
command 'pip3 install -r requirements.txt'
cwd '/home/bob/myapp'
end
Notă: Rețineți că acest lucru se va executa, deoarece utilizatorul root și bibliotecile python vor fi instalate în întregul sistem. Dacă nodul nostru este desemnat să ruleze exclusiv această singură aplicație python, atunci nu este o problemă. În ciuda acestui fapt, o opțiune mai bună pentru a menține lucrurile curate și sănătoase este să găsești și să folosești o carte de bucate comunitare care să gestioneze instalațiile piton sau „virtualenvs”. (sau cel puțin, scrieți o serie de blocuri de execuție pentru a reproduce acest lucru). Utilizarea virtualenvs în python vă asigură că orice instrumente de sistem bazate pe pitoni sau alte proiecte python nu vor fi afectate
Acum este timpul să pregătim Serverul HTTP Gunicorn WSGI cu NGINX ca proxy invers. Nginx este de asemenea utilizat pentru a gestiona toate activele statice de la Django.
Pentru a stoca Gunicorn ca serviciu pe Ubuntu, Systemd poate fi utilizat. Systemd_unit resursa este inclusă în Chef începând cu versiunea 12.11.
systemd_unit 'gunicorn.service' do
content({
Unit: {
Description: 'Django on Gunicorn',
After: 'network.target',
},
Service: {
ExecStart: '/usr/local/bin/gunicorn --workers 3 --bind localhost:8080 myapp.wsgi:application',
User: 'bob',
Group: 'www-data',
WorkingDirectory: '/home/bob/myapp'
Restart: 'always',
},
Install: {
WantedBy: 'multi-user.target',
}
})
action [:create, :enable, :start]
end
Acum trebuie să includem o configurație standard de proxy NGINX pentru acest server Gunicorn, după cum se arată mai jos. Acest fragment poate intra ./my-cookbook/templates/nginx.conf.erb
. Creați directorul de șabloane dacă nu există.
Notă: Șabloanele Chef acceptă fișiere ruby încorporate care pot conține variabile, expresii ruby și enunțuri. Deși acest fișier are extensia „erb”, nu am folosit niciuna dintre afirmațiile sau expresiile ruby. De asemenea, din simplitate, avem aici o configurație nginx non HTTPS (amintire blândă; vă rugăm să nu faceți acest lucru în producție!)
server {
listen 80;
server_name http://example.com/;
location = /favicon.ico { access_log off; log_not_found off; }
location /static/ {
root /home/bob/myapp/myapp/static;
}
location / {
include proxy_params;
proxy_pass http://localhost:8080/;
}
}
Notă: Există, de asemenea, o alternativă și o configurare mai bună, unde, de exemplu, serverul Gunicorn este legat de o priză de domeniu unix în loc de conexiune de buclă TCP. Merită să explorați asta din motive de performanță.
Pentru a copia această configurație în folderul activat pe site-uri pe nod, utilizați resursa șablon de la Chef.
template '/etc/nginx/sites-available/example.com.conf' do
source 'nginx.conf.erb'
owner 'root'
group 'root'
mode '0744'
end
Activarea configurațiilor pe nginx se realizează în mod normal prin crearea unui simbol care indică configurația sites-available
din sites-enabled
folderul nginx . Simbolurile pot fi declarate în cărțile de bucătărie cu bucătărie cu resursa link-ului așa cum se arată mai jos:
link '/etc/nginx/sites-enabled/example.com.conf' do
to '/etc/nginx/sites-available/example.com.conf'
end
și pentru a șterge simbolul de configurare implicit:
link '/etc/nginx/sites-enabled/default' do
action :delete
end
Și în sfârșit, pentru a porni serviciul nginx:
service 'nginx' do
action :enable
action :start
end
Listele de execuții în bucătar sunt o listă ordonată de roluri sau rețete dintr-o carte de bucate care va fi executată în secvență pe nod. Avem în interior o singură carte de bucate „my-cookbook” și rețeta „implicită” pe care trebuie să o executăm în caseta Ubuntu, deci runlist.json din directorul proiectului nostru ( ./my-chef-project/runlist.json
) ar trebui să arate astfel:
{
"run_list": [
"recipe[my-cookbook::default]"
]
}
Cartea noastră de bucate pentru Chef solo este gata de a fi servită. Este timpul să furnizați o mașină Ubuntu 18.04 și să instalați ChefDK pe ea:
$ ssh [email protected] 'apt-get update && yes | apt-get install curl && curl https://packages.chef.io/files/current/chefdk/4.7.45/ubuntu/18.04/chefdk_4.7.45-1_amd64.deb -o chefdk.deb && yes | dpkg -i chefdk.deb && rm chefdk.deb'
Revenind la stația noastră de lucru Chef , tot ce trebuie să facem este să punem folderul cărților de bucate în interiorul unui tarball, să transferăm tarballul împreună cu runlist.json
nodul de la distanță pe care l-am prevăzut mai sus și să executăm comanda chef-solo:
(Comanda de mai jos va fi rulată în interiorul nodului sau al „clientului bucătar” și nu al stației de lucru Chef)
$ chef-solo --recipe-url $(pwd)/chef-solo.tar.gz -j $(pwd)/runlist.json --chef-license=accept
Sau iată un singur liner (Pentru a fi executat de la ./my-chef-project/
CWD pe Chef Workstation):
tar zvcf chef-solo.tar.gz ./cookbooks &&\
scp chef-solo.tar.gz runlist.json [email protected]:~/ &&\
ssh [email protected] 'chef-solo --recipe-url $(pwd)/chef-solo.tar.gz -j $(pwd)/runlist.json --chef-license=accept'
Asta e! Urmăriți completarea standardului de activitate cu activitatea Chef încercând să vă converg nodul la ceea ce ați specificat în cărțile de bucate. Chef-solo va instala toate pietrele necesare pentru toate cărțile de bucate. Dacă comanda chef-solo are succes, vom avea o aplicație Django care funcționează în spatele nginx în caseta Ubuntu. Navigați la domeniu / IP pentru a-l testa.
Notă: nu uitați că în django poate fi necesar să setați acest domeniu / ip în
ALLOWED_HOSTS
lista dinsettings.py
.
Ori de câte ori facem o modificare a conținutului directorului nostru de proiect (rețete, șabloane sau codul sursă al aplicației etc), pur și simplu rulăm linia de mai sus din directorul de proiect.
Sfat: Dacă cartea de bucate este controlată în versiune cu git (așa cum trebuie), o recomandare bună este să setați cârlige de git pentru a rula acest liner.
Dacă te uiți atent la ultima comandă bucătar-solo, observați că aceasta --recipe-url
este menită să ia o adresă URL. Acest lucru înseamnă că puteți avea un flux de lucru în care un CI vă va construi tarballul chef-solo, îl va încărca undeva și va configura nodul pentru a-l extrage periodic.
Sfat: folosiți ondulatorul pentru a trage periodic tarball-ul schimbat ca cronjob.
curl -z $file
va onoraIf-Modified-Since
antetele și va descărca bila tar dacă numai fișierul de la distanță a fost schimbat de la marcajul de timp pe localul existent$file
.
SaltStack este un program de gestionare a configurațiilor bazat pe python, care este optimizat pentru automatizarea fișierelor de configurare, implementări și orice altceva unde
Folosind un sistem diferit? GoCD este un sistem de livrare și automatizare continuă a surselor deschise. Vă permite să modelați fluxuri de lucru complexe folosind paralelul său
Jenkins este un instrument popular de sursă deschisă (integrare continuă), care este utilizat pe scară largă pentru dezvoltarea proiectului, implementare și automatizare. Acest articol wil
Introducere Drone este o platformă automatizată, continuă de testare și livrare, care rulează pe propria infrastructură. Drone acceptă orice limbă, serviciu
Ce este un echilibru de încărcare Balanții de încărcare stau în fața aplicației și distribuie traficul primit pe mai multe instanțe ale aplicației. Fo
În timp ce SaltStack este un instrument excelent pentru a rula operațiuni pe mai multe servere simultan, acesta acceptă și presetări de configurare definite per gazdă stocate într-un
Folosind un sistem diferit? Ansible este un instrument open source pentru automatizarea sarcinilor. Gestionează configurația serverelor Linux și Windows. Functioneaza
Introducere Strider CD este o platformă de implementare continuă a surselor deschise. Aplicația este scrisă în Node.js și folosește MongoDB ca backend de stocare. Pas
SaltStack, sau Salt, este o soluție populară de gestionare a configurației open source, care poate fi folosită pentru a implementa execuția de la distanță, gestionarea configurației, codul
Folosind un sistem diferit? Ansible este un instrument open source pentru automatizarea sarcinilor. Gestionează configurația serverelor Linux și Windows. Functioneaza
Ce este Packer? Packer este un instrument de imagini pe server dezvoltat de HashiCorp. Imagistica server; sau, alternativ, infrastructură imuabilă; este un alternativ popular
Introducere Chocolatey aduce managementul pachetelor care facilitează administrarea software-ului și a dependențelor pe Linux, la Windows. Puteți rapid și ușura
Folosind un sistem diferit? Foreman este un instrument gratuit și open source care vă ajută la configurarea și gestionarea serverelor fizice și virtuale. Forema
Folosind un sistem diferit? Foreman este un instrument gratuit și open source care vă ajută la configurarea și gestionarea serverelor fizice și virtuale. Forema
Folosind un sistem diferit? Introducere Integrarea continuă este o practică de dezvoltare a software-ului DevOps care permite dezvoltatorilor să se unească frecvent cu cel de-al treilea
Folosind un sistem diferit? Introducere Integrarea continuă este o practică de dezvoltare a software-ului DevOps care permite dezvoltatorilor să se unească frecvent cu cel de-al treilea
O perspectivă asupra a 26 de tehnici de analiză a datelor mari: partea 1
Mulți dintre voi cunoașteți Switch care va fi lansat în martie 2017 și noile sale funcții. Pentru cei care nu știu, am pregătit o listă de funcții care fac din „Switch” un „gadget obligatoriu”.
Aștepți ca giganții tehnologiei să-și îndeplinească promisiunile? vezi ce a ramas nelivrat.
Citiți blogul pentru a cunoaște diferitele straturi din Arhitectura Big Data și funcționalitățile acestora în cel mai simplu mod.
Citiți asta pentru a afla cum devine populară inteligența artificială în rândul companiilor la scară mică și cum crește probabilitățile de a le face să crească și de a le oferi concurenților avantaje.
CAPTCHA a devenit destul de dificil de rezolvat pentru utilizatori în ultimii ani. Va fi capabil să rămână eficient în detectarea spam-ului și a botului în viitor?
Pe măsură ce Știința Evoluează într-un ritm rapid, preluând multe dintre eforturile noastre, crește și riscurile de a ne supune unei Singularități inexplicabile. Citiți, ce ar putea însemna singularitatea pentru noi.
Ce este telemedicina, îngrijirea medicală la distanță și impactul acesteia asupra generației viitoare? Este un loc bun sau nu în situația de pandemie? Citiți blogul pentru a găsi o vedere!
Poate ați auzit că hackerii câștigă mulți bani, dar v-ați întrebat vreodată cum câștigă acești bani? sa discutam.
Recent, Apple a lansat macOS Catalina 10.15.4 o actualizare suplimentară pentru a remedia problemele, dar se pare că actualizarea provoacă mai multe probleme care duc la blocarea mașinilor Mac. Citiți acest articol pentru a afla mai multe