„Chef-solo“ naudojimas norint sukonfigūruoti „Django“ programą „Ubuntu“.

Yra daug būdų, kaip automatizuoti dėžutės nustatymo ir konfigūravimo procesą. Dėl kokių nors priežasčių, jei visą mūsų sistemą šiuo metu sudaro tik vienas langelis, visos SCM (programinės įrangos konfigūracijos valdymo) infrastruktūros nustatymas yra perdėtas. „Shell“ scenarijai yra viena iš galimybių, tačiau taip pat galime naudoti supaprastintą SCM versiją, kurią galima rasti keliuose įrankiuose. „Chef“ yra viena iš populiariausių parinkčių, o „chef-solo“ yra atskiras „Chef“ konfigūracijos režimas, kai nereikia papildomo mazgo, kad veiktų kaip „šefo serveris“. Viskas, ko reikia, yra URL arba kelias į tarball paketą, kuriame yra virėjų kulinarinių knygų. Palyginti su apvalkalo scenarijais, tokio tipo metodas yra labiau deklaratyvus ir efektyvesnis, be to, tai yra geras įvadas norint pradėti naudoti SCM arba IaC (infrastruktūra kaip kodas) procesus.

Keletas kitų privalumų naudojant „chef-solo“:

  • Sukomponuojamumas: naudokite bendruomenės kulinarines knygas iš virėjų prekybos centro ar kitų vietų.
  • Nemokamas ir atviras šaltinis; licencijuota pagal leistiną Apache 2.0 licenciją.
  • Prieiga prie likusios šefo ekosistemos (InSpec, ChefSpec, Cookstyle, Foodcritic, chef-shell ir kt.)
  • Kulinarinės knygos ir receptai vėliau gali būti pritaikyti kliento/serverio režimui.

Ir keletas minusų:

  • Kai kurios bendruomenės virtuvės knygos „Chef“ prekybos centre yra pasenusios, sugedusios ir neprižiūrimos.
  • šefas-solo negali išspręsti priklausomybių vienas.

„Receptai“, esantys virėjo „kulinarinės knygos“ viduje, turi rubinų pagrindu sukurtą DSL, apibūdinantį „išteklius“, kurie turi būti tam tikros būsenos mazge. Tęskime apžvalgą, kad susipažintume su keliomis šefo sąvokomis, kurios taip pat taikomos šefui solo. Mūsų tikslas yra nustatyti Ubuntu mazgą, kuriame veikia Python / Django žiniatinklio programa, naudojant Gunicorn ir NGINX.

Note: We do not necessarily require ChefDK to be installed on our "Chef workstation" (our machine), although with it, we can use 'chef generate' commands to start-off with a directory structure for creating cookbooks, recipes and more. In this article, we will assume ChefDK is installed on our workstation. Commands were run using the version 4.7.26-1 of ChefDK.


(Viskas nuo šio momento, jei nenurodyta kitaip, turi būti paleista mūsų aparate, dar vadinamame „virėjo darbo vieta“)

Kulinarinės knygos kūrimas

Virėjos kulinarijos knygos yra daugkartinio naudojimo vienetai, kuriuose yra viskas, ko reikia konfigūracijos scenarijui palaikyti. Kulinarijos knygose gali būti keli „receptai“, o „receptai“ dažniausiai susideda iš išteklių modelių. default.rbyra numatytasis receptas, kuris bus paleistas, kai kulinarijos knyga bus nurodyta vykdymo sąraše . Skirtingi receptai leidžia atskirti rūpesčius. Tačiau šioje mokymo programoje visas išteklių deklaracijas įtrauksime į vieną pagrindinį recepto failą, kuris yra default.rb.

Sukurkite aplanką pavadinimu „mano virėjo projektas“ ir jame sukurkite aplanką, vadinamą „kuinystės knygomis“. Nuo ./my-chef-project/cookbooks/, paleiskite:

$ chef generate cookbook my-cookbook

Mūsų katalogo struktūra dabar atrodys taip:

.
└── 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

Paketų pridėjimas

Pirmasis mūsų mazgo nustatymo žingsnis yra nustatyti, kokių paketų reikia mūsų programai. Mūsų mazgas pasirinktas kaip Ubuntu, todėl galime pasikliauti APT paketų tvarkykle, kad surinktų priklausomybes. Tada OS paskirstymo pateiktų paketų įdiegimas yra paprastas dalykas:

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'

Tai beveik savaime aišku. Pirmoje eilutėje bus atnaujinta apt saugykla, o kitose eilutėse bus įdiegti tie paketai.

Note: The packages following 'nginx' are needed for compiling some of the python dependencies through pip. These may differ based on your python/django project dependencies specified in requirements.txt. You can use a trial and error method to determine these packages that you need to include in your cookbook. To do that, perform a manual sudo pip install -r requirements.txt (Note: This installs packages system wide!) on a freshly instantiated ubuntu machine to see if it runs successfully. If not, the stderr should give you hints on what packages are missing.

„Linux“ vartotojų kūrimas

Pridėję reikiamus paketus, turime sukurti neprivilegijuotą „Linux“ vartotoją, kuriam priklausys programos šaltinio kodas.

user 'bob' do
  uid 1212
  gid 'users'
  home '/home/bob'
  shell '/bin/bash'
  password '$1$alilbito$C83FsODuq0A1pUMeFPeR10'
end

Atminkite, kad slaptažodis yra šešėlinis maišos formatas, naudojamas Linux. Jį galima gauti naudojant OpenSSL:

$ openssl passwd -1 -salt alilbitof mypassword

Įskaitant programos šaltinį

Dabar įtraukime Django programos šaltinio kodą į mūsų kulinarijos knygą. Įdėkite šaltinio kodą viduje ./my-chef-project/cookbooks/my-cookbook/files/default/myapp/ Sukurkite ./my-chef-project/cookbooks/my-cookbook/files/defaultkatalogą, jei jo nėra.

Instrukcija, kaip nukopijuoti šiuos failus į nuotolinę mūsų mazgo vietą, aprašyta naudojant Remote_directory šaltinį:

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

Pitono priklausomybių įtraukimas

Norėdami įdiegti python paketus requirements.txt, galime naudoti vykdymo išteklius, kad paleistume savavališką komandą. Tokiu atveju turime vykdyti pip install komandą per jį:

execute 'install python dependencies' do
  command 'pip3 install -r requirements.txt'
  cwd '/home/bob/myapp'
end

Note: Bear in mind that this is going to execute as the root user and the python libraries will be installed system-wide. If our node is designated to exclusively run this one single python app, then it isn't much of a problem. Despite that, a better option to keep things clean and sane is to find and use a community cookbook that manages python installations or 'virtualenvs'. (or at the very least, write a series of execute blocks to replicate this). Using virtualenvs in python ensures that any python based system tools or other python projects will not be affected

Gunicorn ir NGINX nustatymas

Dabar laikas paruošti Gunicorn WSGI HTTP serverį su NGINX kaip atvirkštiniu tarpiniu serveriu. „Nginx“ taip pat naudojamas visam „Django“ statiniam turtui tvarkyti.

Norint panaudoti „Gunicorn“ kaip paslaugą „Ubuntu“, galima naudoti „Systemd“. „ Systemd_unit“ išteklius įtrauktas į „Chef“ nuo 12.11 versijos.

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

Dabar į šį Gunicorn serverį turime įtraukti standartinę NGINX tarpinio serverio konfigūraciją, kaip parodyta toliau. Šis fragmentas gali būti įtrauktas į ./my-cookbook/templates/nginx.conf.erb. Sukurkite šablonų katalogą, jei jo nėra.

Note: Chef's templates support embedded ruby files that can contain variables, ruby expressions and statements. Although this file has the 'erb' extension, we did not use any of the ruby statements or expressions. Also, for the sake of simplicity, we only have a non HTTPS nginx config here (gentle reminder; please do not do this in production!)

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/;
  }
}

Note: There is also an alternative and a better config, where, for instance the Gunicorn server is bound to a unix domain socket instead of a TCP loopback connection. It's worth exploring that for performance reasons.

Norėdami nukopijuoti šią konfigūraciją į mazgo aplanką, kuriame įgalintos svetainės, naudokite šablono išteklius iš Chef.

template '/etc/nginx/sites-available/example.com.conf' do
  source 'nginx.conf.erb'
  owner 'root'
  group 'root'
  mode '0744'
end

„nginx“ konfigūracijos paprastai suaktyvinamos sukuriant simbolinę nuorodą, nukreipiančią į konfigūraciją „ sites-availablenginx“ sites-enabledaplanke. Simboliai gali būti deklaruojami virėjų kulinarijos knygose su nuorodų šaltiniu, kaip parodyta toliau:

link '/etc/nginx/sites-enabled/example.com.conf' do
  to '/etc/nginx/sites-available/example.com.conf'
end

ir norėdami ištrinti numatytąją konfigūracijos nuorodą:

link '/etc/nginx/sites-enabled/default' do
  action :delete
end

Paleidžiamas NGINX

Ir galiausiai, norėdami paleisti „nginx“ paslaugą:

service 'nginx' do
  action :enable
  action :start
end

Runlists

Vykdymo sąrašai virėjoje yra sutvarkytas vaidmenų arba receptų sąrašas kulinarinėje knygoje, kuris bus vykdomas iš eilės mazge. Turime vieną kulinarijos knygą „mano kulinarijos knyga“ ir joje esantį „numatytąjį“ receptą, kurį turime vykdyti Ubuntu dėžutėje, todėl mūsų projekto kataloge ( ./my-chef-project/runlist.json) esantis runlist.json turėtų atrodyti taip:

{
  "run_list": [
    "recipe[my-cookbook::default]"
  ]
}

Paskutiniai žingsniai

Mūsų kulinarijos knyga šefui solo paruošta patiekti. Atėjo laikas aprūpinti Ubuntu 18.04 mašiną ir jame įdiegti ChefDK:

$ 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'

Ėjimas atgal į mūsų Chef darbo vietos , visi mes turime padaryti, tai įdėti receptų knygos aplankas viduje tar archyvą, perdavimo, kad tar kartu su runlist.jsonprie nuotolinio mazgas mes sąlyginės aukščiau ir paleisti virėja-solo komandą:

(Toliau pateikta komanda turi būti vykdoma mazge arba „virėjo kliente“, o ne virėjo darbo vietoje)

$ chef-solo --recipe-url $(pwd)/chef-solo.tar.gz -j $(pwd)/runlist.json --chef-license=accept

Arba čia yra vienas įdėklas (paleidžiamas iš ./my-chef-project/CWD 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'

Viskas! Stebėkite, kaip standartinė produkcija pasipildo virėjo veikla, bandančia priartinti jūsų mazgą prie to, ką nurodėte kulinarinėse knygose. Chef-solo įdiegs visus brangakmenius, reikalingus visoms kulinarinėms knygoms. Jei komanda chef-solo bus sėkminga, Ubuntu dėžutėje už nginx veiks veikianti „Django“ programa. Eikite į domeną / IP, kad jį patikrintumėte.

Note: Remember that in django you may need to set this domain/ip in the ALLOWED_HOSTS list in settings.py.

Reagavimas į pokyčius

Kai keičiame savo projekto katalogo turinį (receptus, šablonus ar programos šaltinio kodą ir t. t.), tiesiog paleiskite aukščiau pateiktą vieną eilutę iš projekto katalogo.

Tip: If the cookbook is version controlled with git (as it should), one good recommendation is to set git hooks to run this one-liner.

„Tarball“ talpinimas (neprivaloma)

Jei atidžiai pažvelgsite į paskutinę chef-solo komandą, pastebėkite, kad --recipe-urlji skirta paimti URL. Tai reiškia, kad galite turėti darbo eigą, kai CI sukurs jūsų virėjo solo tarballą, įkels jį kur nors ir sukonfigūruos jūsų mazgą, kad jis periodiškai imtųsi iš jo.

Tip: Use curl to pull the changed tarball periodically as a cronjob. curl -z $file will honor If-Modified-Since headers and will only download the tar ball if the remote file has been changed since the timestamp on the existing local $file.


Kaip įdiegti „Jenkins“ „CentOS 7“.

Kaip įdiegti „Jenkins“ „CentOS 7“.

„Jenkins“ yra populiarus atvirojo kodo CI (nuolatinės integracijos) įrankis, plačiai naudojamas projektų kūrimui, diegimui ir automatizavimui. Šis straipsnis bus

Kaip įdiegti ir konfigūruoti „Concourse CI“ Ubuntu 16.04

Kaip įdiegti ir konfigūruoti „Concourse CI“ Ubuntu 16.04

Naudojate kitą sistemą? Įvadas Nuolatinis integravimas yra „DevOps“ programinės įrangos kūrimo praktika, leidžianti kūrėjams dažnai sujungti

Kaip įdiegti ir konfigūruoti „Ansible“ sistemoje „Debian 9“, kad būtų galima naudoti su „Windows Server“.

Kaip įdiegti ir konfigūruoti „Ansible“ sistemoje „Debian 9“, kad būtų galima naudoti su „Windows Server“.

Naudojate kitą sistemą? Ansible yra atvirojo kodo įrankis, skirtas automatizuoti užduotis. Jis valdo jūsų Linux ir Windows serverių konfigūraciją. Tai veikia

Kaip įdiegti ir konfigūruoti „GoCD“ „CentOS 7“.

Kaip įdiegti ir konfigūruoti „GoCD“ „CentOS 7“.

Naudojate kitą sistemą? GoCD yra atvirojo kodo nuolatinio pristatymo ir automatizavimo sistema. Tai leidžia modeliuoti sudėtingas darbo eigas naudojant lygiagrečią an

„SaltStack“ naudojimas su stulpeliais „Ubuntu 17.04“.

„SaltStack“ naudojimas su stulpeliais „Ubuntu 17.04“.

Nors „SaltStack“ yra puikus įrankis, leidžiantis vienu metu vykdyti operacijas daugelyje serverių, jis taip pat palaiko konfigūracijos nustatymus, kuriuos nustato pagrindinis kompiuteris.

Kaip įdiegti ir konfigūruoti „Ansible“ „CentOS 7“, kad būtų galima naudoti su „Windows Server“.

Kaip įdiegti ir konfigūruoti „Ansible“ „CentOS 7“, kad būtų galima naudoti su „Windows Server“.

Naudojate kitą sistemą? Ansible yra atvirojo kodo įrankis, skirtas automatizuoti užduotis. Jis valdo jūsų Linux ir Windows serverių konfigūraciją. Tai veikia

Kaip įdiegti Drone CI Ubuntu 18.04

Kaip įdiegti Drone CI Ubuntu 18.04

Įvadas Drone yra automatizuota, nuolatinio testavimo ir pristatymo platforma, kuri veikia jūsų infrastruktūroje. Dronas palaiko bet kokią kalbą, paslaugą o

Vultr apkrovos balansuotojai

Vultr apkrovos balansuotojai

Kas yra apkrovos balansavimo priemonė Apkrovos balansavimo įrenginiai yra priešais jūsų programą ir paskirsto gaunamą srautą keliuose jūsų programos egzemplioriuose. Fo

Kaip įdiegti „Foreman“ „CentOS 7“.

Kaip įdiegti „Foreman“ „CentOS 7“.

Naudojate kitą sistemą? „Foreman“ yra nemokamas atvirojo kodo įrankis, padedantis konfigūruoti ir valdyti fizinius ir virtualius serverius. Forema

Kaip įdiegti „SaltStack“ „CentOS 7“.

Kaip įdiegti „SaltStack“ „CentOS 7“.

„SaltStack“ arba „Salt“ yra populiarus atvirojo kodo konfigūracijos valdymo sprendimas, kurį galima naudoti nuotoliniam vykdymui, konfigūracijos valdymui, kodavimui.

Kaip įdiegti Strider CD Ubuntu 18.04

Kaip įdiegti Strider CD Ubuntu 18.04

Įvadas Strider CD yra atvirojo kodo nuolatinio diegimo platforma. Programa parašyta Node.js ir naudoja MongoDB kaip saugyklos užpakalinę programą. Žingsnis

Chocolatey Package Manager naudojimas sistemoje Windows

Chocolatey Package Manager naudojimas sistemoje Windows

Įvadas „Chocolatey“ sistemoje „Windows“ pateikia paketų valdymą, kuris palengvina programinės įrangos ir priklausomybių administravimą sistemoje „Linux“. Galite greitai ir lengvai

Momentinių nuotraukų kūrimas naudojant „Packer“.

Momentinių nuotraukų kūrimas naudojant „Packer“.

Kas yra Pakeris? Packer yra serverio vaizdo gavimo įrankis, kurį sukūrė HashiCorp. Serverio vaizdavimas; arba, alternatyviai, nekintanti infrastruktūra; yra populiari alternatyva

Kaip įdiegti ir konfigūruoti „Concourse CI“ „CentOS 7“.

Kaip įdiegti ir konfigūruoti „Concourse CI“ „CentOS 7“.

Naudojate kitą sistemą? Įvadas Nuolatinis integravimas yra „DevOps“ programinės įrangos kūrimo praktika, leidžianti kūrėjams dažnai sujungti

„Chef-solo“ naudojimas norint sukonfigūruoti „Django“ programą „Ubuntu“.

„Chef-solo“ naudojimas norint sukonfigūruoti „Django“ programą „Ubuntu“.

Yra daug būdų, kaip automatizuoti dėžutės nustatymo ir konfigūravimo procesą. Dėl kokios nors priežasties, jei visą mūsų sistemą šiuo metu sudaro tik

Kaip įdiegti „Foreman“ Ubuntu 16.04 LTS

Kaip įdiegti „Foreman“ Ubuntu 16.04 LTS

Naudojate kitą sistemą? „Foreman“ yra nemokamas atvirojo kodo įrankis, padedantis konfigūruoti ir valdyti fizinius ir virtualius serverius. Forema

Darbo su SaltStack pradžia Ubuntu 17.04

Darbo su SaltStack pradžia Ubuntu 17.04

„SaltStack“ yra „python“ pagrindu sukurta konfigūracijos valdymo programa, optimizuota automatizuoti konfigūracijos failus, diegimus ir bet ką kitą

Mašinų augimas: AI pritaikymas realiame pasaulyje

Mašinų augimas: AI pritaikymas realiame pasaulyje

Dirbtinis intelektas nėra ateityje, jis čia, dabartyje Šiame tinklaraštyje Skaitykite, kaip dirbtinio intelekto programos paveikė įvairius sektorius.

DDOS atakos: trumpa apžvalga

DDOS atakos: trumpa apžvalga

Ar taip pat esate DDOS atakų auka ir esate sumišęs dėl prevencijos metodų? Perskaitykite šį straipsnį, kad išspręstumėte savo užklausas.

Ar kada nors susimąstėte, kaip įsilaužėliai uždirba pinigų?

Ar kada nors susimąstėte, kaip įsilaužėliai uždirba pinigų?

Galbūt girdėjote, kad įsilaužėliai uždirba daug pinigų, bet ar kada susimąstėte, kaip jie uždirba tokius pinigus? padiskutuokime.

Revoliuciniai „Google“ išradimai, kurie palengvins jūsų gyvenimą.

Revoliuciniai „Google“ išradimai, kurie palengvins jūsų gyvenimą.

Ar norite pamatyti revoliucinius „Google“ išradimus ir kaip šie išradimai pakeitė kiekvieno žmogaus gyvenimą šiandien? Tada skaitykite tinklaraštį, kad pamatytumėte „Google“ išradimus.

Penktadienio esminiai dalykai: kas atsitiko AI varomiems automobiliams?

Penktadienio esminiai dalykai: kas atsitiko AI varomiems automobiliams?

Savavaledžių automobilių koncepcija, kuri išvažiuotų į kelius su dirbtinio intelekto pagalba, yra svajonė, kurią jau kurį laiką svajojame. Tačiau nepaisant kelių pažadų, jų niekur nematyti. Skaitykite šį tinklaraštį, kad sužinotumėte daugiau…

Technologinis išskirtinumas: tolima žmogaus civilizacijos ateitis?

Technologinis išskirtinumas: tolima žmogaus civilizacijos ateitis?

Kadangi mokslas sparčiai vystosi, perimdamas daug mūsų pastangų, taip pat didėja rizika, kad pateksime į nepaaiškinamą singuliarumą. Skaitykite, ką mums gali reikšti išskirtinumas.

Duomenų saugojimo raida – infografika

Duomenų saugojimo raida – infografika

Duomenų saugojimo metodai gali būti tobulinami nuo pat Duomenų gimimo. Šiame tinklaraštyje, remiantis infografika, aprašoma duomenų saugojimo raida.

Didžiųjų duomenų atskaitos architektūros sluoksnių funkcijos

Didžiųjų duomenų atskaitos architektūros sluoksnių funkcijos

Skaitykite tinklaraštį, kad paprasčiausiai sužinotumėte apie skirtingus didžiųjų duomenų architektūros sluoksnius ir jų funkcijas.

6 nuostabūs išmaniųjų namų įrenginių privalumai

6 nuostabūs išmaniųjų namų įrenginių privalumai

Šiame skaitmeniniu būdu pagrįstame pasaulyje išmanieji namų įrenginiai tapo svarbia gyvenimo dalimi. Štai keletas nuostabių išmaniųjų namų įrenginių privalumų, kaip jie daro mūsų gyvenimą vertą gyventi ir paprastesnį.

„macOS Catalina 10.15.4“ priedo atnaujinimas kelia daugiau problemų, nei sprendžia

„macOS Catalina 10.15.4“ priedo atnaujinimas kelia daugiau problemų, nei sprendžia

Neseniai „Apple“ išleido „macOS Catalina 10.15.4“ priedą, skirtą problemoms išspręsti, tačiau atrodo, kad dėl atnaujinimo kyla daugiau problemų, dėl kurių „Mac“ įrenginiai blokuojami. Norėdami sužinoti daugiau, perskaitykite šį straipsnį