Použitie Chef-solo na konfiguráciu aplikácie Django na Ubuntu

Existuje mnoho spôsobov, ako automatizovať proces nastavenia a konfigurácie boxu. Z akéhokoľvek dôvodu, ak celý náš systém v tomto bode pozostáva len z jedného boxu, nastavenie úplnej infraštruktúry SCM (Software Configuration Management) je prehnané. Shell skripty sú jednou z možností, ale mohli by sme použiť aj skrátenú verziu SCM, ktorá je dostupná v niekoľkých dostupných nástrojoch. Šéfkuchár je jednou z obľúbených možností a „chef-solo“ je samostatný konfiguračný režim šéfkuchára, v ktorom nepotrebujeme ďalší uzol, ktorý by fungoval ako „server šéfkuchára“. Všetko, čo potrebuje, je adresa URL alebo cesta k balíku tarball, ktorý obsahuje kuchárske knihy šéfkuchárov. V porovnaní s shell skriptami je tento typ prístupu deklaratívnejší a efektívnejší hneď po vybalení a je tiež dobrým úvodom na začatie procesov SCM alebo IaC (Infrastructure as Code).

Niekoľko ďalších výhod používania chef-solo:

  • Skladateľnosť: Použite komunitné kuchárske knihy zo supermarketu šéfkuchára alebo iných miest.
  • bezplatný a otvorený zdroj; licencovaný na základe permisívnej licencie Apache 2.0.
  • Prístup k zvyšku ekosystému šéfkuchára (InSpec, ChefSpec, Cookstyle, Foodcritic, chef-shell atď.)
  • Kuchárske knihy a recepty je možné neskôr prispôsobiť režimu klient/server.

A niektoré nevýhody:

  • Niektoré komunitné kuchárske knihy v supermarkete Chef sú zastarané, pokazené a neudržiavané.
  • chef-solo nedokáže vyriešiť závislosti sám.

„Recepty“ vo vnútri „kuchárskej knihy“ šéfkuchára majú rubínový DSL, ktorý popisuje „zdroje“, ktoré majú byť v konkrétnom stave v uzle. Pokračujme v návode na zoznámenie sa s niekoľkými konceptmi šéfkuchára, ktoré sú použiteľné aj pre šéfkuchára-sólo. Naším cieľom je nastaviť uzol Ubuntu s webovou aplikáciou Python/Django pomocou Gunicorn a 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.


(Všetko od tohto bodu, pokiaľ nie je uvedené inak, má byť spustené na našom stroji, ktorý sa tiež označuje ako „pracovná stanica šéfkuchára“).

Vytvorenie kuchárskej knihy

Kuchárske knihy v kuchárovi sú opakovane použiteľné jednotky, ktoré obsahujú všetko potrebné na podporu konfiguračného scenára. Kuchárske knihy môžu obsahovať viacero „receptov“ a „recepty“ väčšinou pozostávajú zo vzorov zdrojov. default.rbje predvolený recept, ktorý sa spustí, keď sa na kuchársku knihu odkazuje v zozname spustení . Rôzne recepty umožňujú oddelenie obáv. Pre tento tutoriál však pridáme všetky deklarácie prostriedkov do jedného hlavného súboru receptu, ktorým je default.rb.

Vytvorte priečinok s názvom „my-chef-project“ a vytvorte v ňom priečinok s názvom „kuchárske knihy“. Od ./my-chef-project/cookbooks/, spustiť:

$ chef generate cookbook my-cookbook

Naša adresárová štruktúra bude teraz vyzerať takto:

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

Pridávanie balíkov

Prvým krokom k nastaveniu nášho uzla je identifikovať, aké balíčky vyžaduje naša aplikácia. Náš uzol je vybraný ako Ubuntu, takže sa môžeme spoľahnúť na správcu balíkov APT, ktorý zhromaždí závislosti. Inštalácia balíkov poskytovaných distribúciou OS je potom hračkou:

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'

Tieto sú do značnej miery samovysvetľujúce. Prvý riadok aktualizuje úložisko apt a nasledujúce riadky nainštalujú tieto balíčky.

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.

Vytváranie používateľov linuxu

Po dokončení pridávania požadovaných balíkov musíme vytvoriť neprivilegovaného používateľa Linuxu, ktorý bude vlastniť zdrojový kód aplikácie.

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

Všimnite si, že heslo je tieňový hash formát používaný v Linuxe. Dá sa odvodiť pomocou OpenSSL:

$ openssl passwd -1 -salt alilbitof mypassword

Vrátane zdroja aplikácie

Teraz zahrňme zdrojový kód aplikácie Django do našej kuchárskej knihy. Umiestnite zdrojový kód dovnútra ./my-chef-project/cookbooks/my-cookbook/files/default/myapp/ Vytvorte ./my-chef-project/cookbooks/my-cookbook/files/defaultadresár, ak neexistuje.

Inštrukcia na skopírovanie týchto súborov na vzdialené miesto v našom uzle je popísaná pomocou prostriedku 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

Sťahovanie závislostí pythonu

Ak chcete nainštalovať balíky python v requirements.txt, môžeme použiť prostriedok na vykonanie na spustenie ľubovoľného príkazu. V tomto prípade musíme nad ním vykonať príkaz pip install:

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

Nastavenie Gunicorn & NGINX

Teraz je čas pripraviť Gunicorn WSGI HTTP Server s NGINX ako naším reverzným proxy. Nginx sa tiež používa na spracovanie všetkých statických aktív z Django.

Na pripútanie Gunicorna ako služby na Ubuntu je možné použiť Systemd. Prostriedok systemd_unit je súčasťou Chef od verzie 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

Teraz musíme do tohto servera Gunicorn zahrnúť štandardnú konfiguráciu proxy NGINX, ako je uvedené nižšie. Tento úryvok môže ísť do ./my-cookbook/templates/nginx.conf.erb. Vytvorte adresár šablón, ak neexistuje.

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.

Ak chcete skopírovať túto konfiguráciu do priečinka s povolenými lokalitami v uzle, použite zdroj šablóny od šéfkuchára.

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

Aktivácia konfigurácií na nginx sa zvyčajne vykonáva vytvorením symbolického odkazu smerujúceho na konfiguráciu sites-availablev sites-enabledpriečinku nginx . Symbolické odkazy je možné deklarovať v kuchárskych knihách šéfkuchárov pomocou odkazu, ako je uvedené nižšie:

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

a odstrániť predvolený konfiguračný symbolický odkaz:

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

Spustenie NGINX

A nakoniec, aby som spustil službu nginx:

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

Runlisty

Run-listy v kuchárovi sú usporiadaným zoznamom rolí alebo receptov v kuchárskej knihe, ktoré sa budú postupne spúšťať v uzle. Máme jednu kuchársku knihu „moja kuchárka“ a v nej „predvolený“ recept, ktorý musíme spustiť v poli Ubuntu, takže súbor runlist.json v adresári nášho projektu ( ./my-chef-project/runlist.json) by mal vyzerať takto:

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

Záverečné kroky

Naša kuchárska kniha pre šéfkuchára sólo je pripravená na servírovanie. Je čas poskytnúť počítač Ubuntu 18.04 a nainštalovať naň 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'

Vráťme sa späť na našu pracovnú stanicu Chef , všetko, čo musíme urobiť, je vložiť priečinok kuchárskych kníh do tarballu, preniesť tento tarball spolu s tarballom runlist.jsondo vzdialeného uzla, ktorý sme poskytli vyššie, a spustiť príkaz chef-solo:

(Nižšie uvedený príkaz sa má spustiť v uzle alebo v „kliente šéfkuchára“ a nie v pracovnej stanici šéfkuchára)

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

Alebo tu je jeden riadok (na spustenie z ./my-chef-project/CWD na 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'

To je všetko! Sledujte, ako sa štandardný výstup zapĺňa aktivitou šéfkuchára, ktorý sa snaží zblížiť váš uzol k tomu, čo ste špecifikovali v kuchárskych knihách. Chef-solo nainštaluje všetky drahokamy potrebné pre všetky kuchárske knihy. Ak bude príkaz chef-solo úspešný, budeme mať funkčnú aplikáciu Django spustenú za nginx na boxe Ubuntu. Prejdite na doménu/IP a otestujte ju.

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

Reagovanie na zmeny

Kedykoľvek vykonáme zmenu v obsahu nášho projektového adresára (recepty, šablóny alebo zdrojový kód aplikácie atď.), jednoducho spustite vyššie uvedený riadok z projektového adresára.

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.

Hostenie tarballu (voliteľné)

Ak sa pozorne pozriete na posledný príkaz chef-solo, všimnite si, že tento príkaz --recipe-urlmá prevziať adresu URL. To znamená, že môžete mať pracovný postup, v ktorom CI vytvorí váš tarball pre šéfkuchára, nahrá ho niekam a nakonfiguruje váš uzol, aby z neho pravidelne čerpal.

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.


Ako nainštalovať Jenkins na CentOS 7

Ako nainštalovať Jenkins na CentOS 7

Jenkins je populárny open source nástroj CI (Continuous Integration), ktorý sa široko používa na vývoj projektov, nasadenie a automatizáciu. Tento článok bude

Ako nainštalovať a nakonfigurovať Concourse CI na Ubuntu 16.04

Ako nainštalovať a nakonfigurovať Concourse CI na Ubuntu 16.04

Používate iný systém? Úvod Kontinuálna integrácia je postup vývoja softvéru DevOps, ktorý umožňuje vývojárom často spájať th

Ako nainštalovať a nakonfigurovať Ansible na Debian 9 na použitie so serverom Windows

Ako nainštalovať a nakonfigurovať Ansible na Debian 9 na použitie so serverom Windows

Používate iný systém? Ansible je open source nástroj na automatizáciu úloh. Spravuje konfiguráciu vašich serverov Linux a Windows. funguje to

Ako nainštalovať a nakonfigurovať GoCD na CentOS 7

Ako nainštalovať a nakonfigurovať GoCD na CentOS 7

Používate iný systém? GoCD je open source systém nepretržitého doručovania a automatizácie. Umožňuje vám modelovať komplexné pracovné postupy pomocou jeho paralelných an

Používanie SaltStack With Pillars na Ubuntu 17.04

Používanie SaltStack With Pillars na Ubuntu 17.04

Zatiaľ čo SaltStack je skvelý nástroj na spustenie operácií na mnohých serveroch súčasne, podporuje aj predvoľby konfigurácie definované pre jednotlivých hostiteľov uložené v

Ako nainštalovať a nakonfigurovať Ansible na CentOS 7 na použitie so systémom Windows Server

Ako nainštalovať a nakonfigurovať Ansible na CentOS 7 na použitie so systémom Windows Server

Používate iný systém? Ansible je open source nástroj na automatizáciu úloh. Spravuje konfiguráciu vašich serverov Linux a Windows. funguje to

Ako nainštalovať Drone CI na Ubuntu 18.04

Ako nainštalovať Drone CI na Ubuntu 18.04

Úvod Drone je automatizovaná, nepretržitá testovacia a doručovacia platforma, ktorá beží na vašej vlastnej infraštruktúre. Drone podporuje akýkoľvek jazyk, službu o

Vultr Load Balancers

Vultr Load Balancers

Čo je to Load Balancer Load Balancer je umiestnený pred vašou aplikáciou a distribuuje prichádzajúcu návštevnosť medzi viaceré inštancie vašej aplikácie. Fo

Ako nainštalovať Foreman na CentOS 7

Ako nainštalovať Foreman na CentOS 7

Používate iný systém? Foreman je bezplatný a open source nástroj, ktorý vám pomôže s konfiguráciou a správou fyzických a virtuálnych serverov. Forema

Ako nainštalovať SaltStack na CentOS 7

Ako nainštalovať SaltStack na CentOS 7

SaltStack alebo Salt je populárne riešenie na správu konfigurácie s otvoreným zdrojom, ktoré možno použiť na implementáciu vzdialeného spúšťania, správy konfigurácie, kódov

Ako nainštalovať Strider CD na Ubuntu 18.04

Ako nainštalovať Strider CD na Ubuntu 18.04

Úvod Strider CD je open source platforma nepretržitého nasadenia. Aplikácia je napísaná v Node.js a používa MongoDB ako backend úložiska. Kráčať

Používanie aplikácie Chocolatey Package Manager v systéme Windows

Používanie aplikácie Chocolatey Package Manager v systéme Windows

Úvod Chocolatey prináša správu balíkov, ktorá uľahčuje správu softvéru a závislostí v systéme Linux, do systému Windows. Môžete rýchlo a jednoducho

Vytváranie snímok pomocou nástroja Packer

Vytváranie snímok pomocou nástroja Packer

Čo je Packer? Packer je serverový zobrazovací nástroj vyvinutý spoločnosťou HashiCorp. Serverové zobrazovanie; alebo alternatívne, nemenná infraštruktúra; je obľúbenou alternatívou

Ako nainštalovať a nakonfigurovať Concourse CI na CentOS 7

Ako nainštalovať a nakonfigurovať Concourse CI na CentOS 7

Používate iný systém? Úvod Kontinuálna integrácia je postup vývoja softvéru DevOps, ktorý umožňuje vývojárom často spájať th

Použitie Chef-solo na konfiguráciu aplikácie Django na Ubuntu

Použitie Chef-solo na konfiguráciu aplikácie Django na Ubuntu

Existuje mnoho spôsobov, ako automatizovať proces nastavenia a konfigurácie boxu. Z akéhokoľvek dôvodu, ak celý náš systém v tomto bode pozostáva z spravodlivého

Ako nainštalovať Foreman na Ubuntu 16.04 LTS

Ako nainštalovať Foreman na Ubuntu 16.04 LTS

Používate iný systém? Foreman je bezplatný a open source nástroj, ktorý vám pomôže s konfiguráciou a správou fyzických a virtuálnych serverov. Forema

Začíname so SaltStack na Ubuntu 17.04

Začíname so SaltStack na Ubuntu 17.04

SaltStack je program na správu konfigurácie založený na pythone, ktorý je optimalizovaný pre automatizáciu konfiguračných súborov, nasadení a čohokoľvek iného

The Rise of Machines: Real World Applications of AI

The Rise of Machines: Real World Applications of AI

Umelá inteligencia nie je v budúcnosti, je tu priamo v súčasnosti V tomto blogu si prečítajte, ako aplikácie umelej inteligencie ovplyvnili rôzne sektory.

Útoky DDOS: Stručný prehľad

Útoky DDOS: Stručný prehľad

Ste aj vy obeťou DDOS útokov a máte zmätok ohľadom metód prevencie? Ak chcete vyriešiť svoje otázky, prečítajte si tento článok.

Zaujímalo vás niekedy, ako hackeri zarábajú peniaze?

Zaujímalo vás niekedy, ako hackeri zarábajú peniaze?

Možno ste už počuli, že hackeri zarábajú veľa peňazí, ale premýšľali ste niekedy nad tým, ako môžu zarábať také peniaze? poďme diskutovať.

Revolučné vynálezy od spoločnosti Google, ktoré vám uľahčia život.

Revolučné vynálezy od spoločnosti Google, ktoré vám uľahčia život.

Chcete vidieť revolučné vynálezy od Google a ako tieto vynálezy zmenili život každého dnešného človeka? Potom si prečítajte na blogu a pozrite si vynálezy spoločnosti Google.

Piatok Essential: Čo sa stalo s autami poháňanými AI?

Piatok Essential: Čo sa stalo s autami poháňanými AI?

Koncept samoriadených áut vyraziť na cesty s pomocou umelej inteligencie je snom, ktorý máme už nejaký čas. Ale napriek niekoľkým prísľubom ich nikde nevidno. Prečítajte si tento blog a dozviete sa viac…

Technologická singularita: vzdialená budúcnosť ľudskej civilizácie?

Technologická singularita: vzdialená budúcnosť ľudskej civilizácie?

Ako sa veda vyvíja rýchlym tempom a preberá veľa nášho úsilia, zvyšuje sa aj riziko, že sa vystavíme nevysvetliteľnej singularite. Prečítajte si, čo pre nás môže znamenať singularita.

Vývoj ukladania dát – Infografika

Vývoj ukladania dát – Infografika

Spôsoby ukladania údajov sa môžu vyvíjať už od zrodu údajov. Tento blog sa zaoberá vývojom ukladania údajov na základe infografiky.

Funkcionality vrstiev referenčnej architektúry veľkých dát

Funkcionality vrstiev referenčnej architektúry veľkých dát

Prečítajte si blog, aby ste čo najjednoduchším spôsobom spoznali rôzne vrstvy architektúry veľkých dát a ich funkcie.

6 úžasných výhod toho, že máme v živote inteligentné domáce zariadenia

6 úžasných výhod toho, že máme v živote inteligentné domáce zariadenia

V tomto digitálnom svete sa inteligentné domáce zariadenia stali kľúčovou súčasťou života. Tu je niekoľko úžasných výhod inteligentných domácich zariadení o tom, ako robia náš život, ktorý stojí za to žiť, a ktorý zjednodušujú.

Aktualizácia doplnku macOS Catalina 10.15.4 spôsobuje viac problémov, ako ich rieši

Aktualizácia doplnku macOS Catalina 10.15.4 spôsobuje viac problémov, ako ich rieši

Spoločnosť Apple nedávno vydala doplnkovú aktualizáciu macOS Catalina 10.15.4 na opravu problémov, ale zdá sa, že táto aktualizácia spôsobuje ďalšie problémy, ktoré vedú k blokovaniu počítačov Mac. Prečítajte si tento článok a dozviete sa viac