Uporaba Chef-solo za konfiguriranje aplikacije Django v Ubuntu

Obstaja veliko načinov za avtomatizacijo postopka nastavitve in konfiguracije škatle. Iz kakršnega koli razloga, če je naš celoten sistem na tej točki sestavljen samo iz ene škatle, je nastavitev celotne infrastrukture SCM (Upravljanje konfiguracije programske opreme) pretirana. Skripti lupine so ena od možnosti, vendar bi lahko uporabili tudi zmanjšano različico SCM, ki je na voljo v nekaterih orodjih. Chef je ena izmed priljubljenih možnosti in "chef-solo" je Chefov samostojni konfiguracijski način, kjer ne potrebujemo dodatnega vozlišča, da deluje kot "chef-server". Vse, kar potrebuje, je URL ali pot do paketa tarball, ki vsebuje kuharske knjige. V primerjavi z lupinskimi skripti je ta vrsta pristopa bolj deklarativno in učinkovitejša in je tudi dober uvod za začetek s procesi SCM ali IaC (infrastruktura kot koda).

Nekaj ​​​​drugih prednosti uporabe chef-solo:

  • Sestavljivost: Uporabite skupne kuharske knjige iz chef supermarketa ali drugih krajev.
  • Brezplačna in odprtokodna; licencirano pod dovoljeno licenco Apache 2.0.
  • Dostop do preostalega Chefovega ekosistema (InSpec, ChefSpec, Cookstyle, Foodcritic, chef-shell itd.)
  • Kuharske knjige in recepte lahko pozneje prilagodite načinu odjemalec/strežnik.

In nekaj slabosti:

  • Nekatere skupnostne kuharske knjige v supermarketu Chef so zastarele, pokvarjene in niso vzdrževane.
  • chef-solo ne more samostojno razrešiti odvisnosti.

"Recepti" v kuharski "kuharski knjigi" imajo DSL, ki temelji na rubinu, ki opisuje, da so "viri" v določenem stanju na vozlišču. Nadaljujmo s sprehodom, da se seznanimo z nekaj koncepti Chef, ki veljajo tudi za chef-solo. Naš cilj je vzpostaviti vozlišče Ubuntu, ki izvaja spletno aplikacijo Python/Django z uporabo Gunicorn in 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.


(Vse od te točke naprej, razen če ni določeno drugače, se izvaja na našem stroju, imenovanem tudi »Chef Workstation«)

Ustvarjanje kuharske knjige

Kuharske knjige v chefu so enote za večkratno uporabo, ki vsebujejo vse, kar je potrebno za podporo scenariju konfiguracije. Kuharske knjige lahko vsebujejo več "receptov", "recepti" pa so večinoma sestavljeni iz vzorcev virov. default.rbje privzeti recept, ki se bo zagnal, ko bo kuharska knjiga navedena na seznamu izvajanja . Različni recepti omogočajo ločevanje skrbi. Za to vadnico pa bomo vse deklaracije virov dodali v eno glavno datoteko recepta, to je default.rb.

Ustvarite mapo z imenom "my-chef-project" in v njej ustvarite mapo z imenom "cookbooks". Od ./my-chef-project/cookbooks/, zaženite:

$ chef generate cookbook my-cookbook

Naša struktura imenika bo zdaj videti takole:

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

Dodajanje paketov

Prvi korak pri nastavitvi našega vozlišča je ugotoviti, katere pakete zahteva naša aplikacija. Naše vozlišče je izbrano kot Ubuntu, zato se lahko zanesemo na upravitelja paketov APT, da zbere odvisnosti. Namestitev paketov, ki jih zagotavlja distribucija OS, je potem kos pogače:

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'

Te so precej samoumevne. Prva vrstica bo posodobila repozitorij apt, naslednje vrstice pa bodo namestile te pakete.

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.

Ustvarjanje uporabnikov Linuxa

Ko končamo z dodajanjem zahtevanih paketov, moramo ustvariti neprivilegiranega uporabnika Linuxa, ki bo lastnik izvorne kode aplikacije.

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

Upoštevajte, da je geslo senčni format hash, ki se uporablja v Linuxu. Izvede se lahko z uporabo OpenSSL:

$ openssl passwd -1 -salt alilbitof mypassword

Vključno z virom aplikacije

Zdaj pa v našo kuharsko knjigo vključimo izvorno kodo aplikacije Django. Postavite izvorno kodo v ./my-chef-project/cookbooks/my-cookbook/files/default/myapp/ Ustvari ./my-chef-project/cookbooks/my-cookbook/files/defaultimenik, če ne obstaja.

Navodila za kopiranje teh datotek na oddaljeno lokacijo v našem vozlišču so opisana z uporabo vira 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

Vlečenje odvisnosti python

Za namestitev paketov python v requirements.txt, lahko uporabimo execute vir za zagon poljubnega ukaza. V tem primeru moramo nad njim izvesti ukaz 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

Nastavitev Gunicorn & NGINX

Zdaj je čas, da pripravite strežnik Gunicorn WSGI HTTP z NGINX kot našim povratnim proxyjem. Nginx se uporablja tudi za obdelavo vseh statičnih sredstev iz Djanga.

Za priključitev Gunicorn kot storitve na Ubuntu lahko uporabite Systemd. Vir systemd_unit je vključen v Chef od različice 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

Zdaj moramo v ta strežnik Gunicorn vključiti standardno konfiguracijo proxyja NGINX, kot je prikazano spodaj. Ta delček lahko gre v ./my-cookbook/templates/nginx.conf.erb. Ustvarite imenik predlog, če ne obstaja.

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.

Če želite kopirati to konfiguracijo v mapo z omogočenimi spletnimi mesti na vozlišču, uporabite vir predloge iz Chefa.

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

Aktiviranje konfiguracij v nginxu se običajno izvede z ustvarjanjem simbolne povezave, ki kaže na konfiguracijo na sites-availablev sites-enabledmapi nginx . Simbolne povezave je mogoče deklarirati v kuharskih kuharskih knjigah z virom povezave, kot je prikazano spodaj:

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

in za brisanje privzete simbolne povezave konfiguracije:

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

Zagon NGINX

In končno, da zaženete storitev nginx:

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

Runlists

Run-listi v chef so urejen seznam vlog ali receptov v kuharski knjigi, ki se bodo izvajali v zaporedju na vozlišču. Imamo eno kuharsko knjigo "my-cookbook" in "privzeti" recept v njej, ki ju moramo izvesti v polju Ubuntu, zato bi moral runlist.json v našem imeniku projekta ( ./my-chef-project/runlist.json) izgledati takole:

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

Končni koraki

Naša kuharska knjiga za Chef solo je pripravljena za postrežbo. Čas je, da zagotovite stroj Ubuntu 18.04 in nanj namestite 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'

Če se vrnemo na našo delovno postajo Chef , vse, kar moramo storiti, je, da mapo kuharskih knjig vstavimo v tarball, prenesemo ta arhiv skupaj z runlist.jsonna oddaljeno vozlišče, ki smo ga določili zgoraj, in zaženemo ukaz chef-solo:

(Spodnji ukaz je treba zagnati znotraj vozlišča ali 'chef client' in ne Chef Workstation)

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

Ali pa tukaj je ena vrstica (ki se izvaja iz ./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 to! Oglejte si, kako se standardni izhod polni z dejavnostjo Chef, ki poskuša zbližati vaše vozlišče s tem, kar ste navedli v kuharskih knjigah. Chef-solo bo namestil vse dragulje, potrebne za vse kuharske knjige. Če je ukaz chef-solo uspešen, bomo imeli delujočo aplikacijo Django, ki se izvaja za nginxom v polju Ubuntu. Pomaknite se do domene/IP, da jo preizkusite.

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

Odziv na spremembe

Kadar koli spremenimo vsebino našega projektnega imenika (recepti, predloge ali izvorna koda aplikacije itd.), preprosto zaženite zgornjo eno vrstico iz imenika projekta.

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.

Gostovanje tarball (izbirno)

Če natančno pogledate zadnji ukaz chef-solo, opazite, da --recipe-urlnaj bi prevzel URL. To pomeni, da lahko imate delovni tok, v katerem bo CI zgradil vašo arhivsko datoteko chef-solo, jo naložil nekam in konfiguriral vaše vozlišče, da se iz njega občasno povleče.

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.


Kako namestiti Jenkins na CentOS 7

Kako namestiti Jenkins na CentOS 7

Jenkins je priljubljeno odprtokodno orodje CI (Continuous Integration), ki se pogosto uporablja za razvoj projektov, uvajanje in avtomatizacijo. Ta članek bo

Kako namestiti in konfigurirati Concourse CI v Ubuntu 16.04

Kako namestiti in konfigurirati Concourse CI v Ubuntu 16.04

Uporaba drugega sistema? Uvod Neprekinjena integracija je praksa razvoja programske opreme DevOps, ki razvijalcem omogoča pogosto združevanje

Kako namestiti in konfigurirati Ansible na Debian 9 za uporabo z Windows Server

Kako namestiti in konfigurirati Ansible na Debian 9 za uporabo z Windows Server

Uporaba drugega sistema? Ansible je odprtokodno orodje za avtomatizacijo opravil. Upravlja konfiguracijo vaših strežnikov Linux in Windows. Deluje

Kako namestiti in konfigurirati GoCD na CentOS 7

Kako namestiti in konfigurirati GoCD na CentOS 7

Uporaba drugega sistema? GoCD je odprtokodni sistem za neprekinjeno dostavo in avtomatizacijo. Omogoča vam modeliranje zapletenih delovnih tokov z uporabo njegovega vzporednega an

Uporaba SaltStacka s stebri v Ubuntu 17.04

Uporaba SaltStacka s stebri v Ubuntu 17.04

Čeprav je SaltStack odlično orodje za hkratno izvajanje operacij na več strežnikih, podpira tudi prednastavitve konfiguracije, določene za posamezne gostitelje, shranjene v

Kako namestiti in konfigurirati Ansible na CentOS 7 za uporabo z Windows Server

Kako namestiti in konfigurirati Ansible na CentOS 7 za uporabo z Windows Server

Uporaba drugega sistema? Ansible je odprtokodno orodje za avtomatizacijo opravil. Upravlja konfiguracijo vaših strežnikov Linux in Windows. Deluje

Kako namestiti Drone CI na Ubuntu 18.04

Kako namestiti Drone CI na Ubuntu 18.04

Uvod Drone je avtomatizirana platforma za stalno testiranje in dostavo, ki deluje na vaši lastni infrastrukturi. Drone podpira kateri koli jezik, storitev o

Vultr uravnoteženja obremenitve

Vultr uravnoteženja obremenitve

Kaj je balansirnik obremenitve Uravnavalniki obremenitve sedijo pred vašo aplikacijo in razporejajo dohodni promet po več primerkih vaše aplikacije. Fo

Kako namestiti Foremana na CentOS 7

Kako namestiti Foremana na CentOS 7

Uporaba drugega sistema? Foreman je brezplačno in odprtokodno orodje, ki vam pomaga pri konfiguraciji in upravljanju fizičnih in virtualnih strežnikov. Forema

Kako namestiti SaltStack na CentOS 7

Kako namestiti SaltStack na CentOS 7

SaltStack ali Salt je priljubljena odprtokodna rešitev za upravljanje konfiguracije, ki se lahko uporablja za izvajanje oddaljenega izvajanja, upravljanja konfiguracije, cod

Kako namestiti Strider CD na Ubuntu 18.04

Kako namestiti Strider CD na Ubuntu 18.04

Uvod Strider CD je odprtokodna platforma za neprekinjeno uvajanje. Aplikacija je napisana v Node.js in uporablja MongoDB kot ozadje za shranjevanje. Korak

Uporaba Chocolatey Package Managerja v sistemu Windows

Uporaba Chocolatey Package Managerja v sistemu Windows

Uvod Chocolatey prinaša upravljanje paketov, ki olajša upravljanje programske opreme in odvisnosti v sistemu Windows. Lahko hitro in enostavno

Ustvarjanje posnetkov s Packerjem

Ustvarjanje posnetkov s Packerjem

Kaj je Packer? Packer je orodje za slikanje strežnikov, ki ga je razvil HashiCorp. Strežniško slikanje; ali pa nespremenljiva infrastruktura; je priljubljena alternativa

Kako namestiti in konfigurirati Concourse CI na CentOS 7

Kako namestiti in konfigurirati Concourse CI na CentOS 7

Uporaba drugega sistema? Uvod Neprekinjena integracija je praksa razvoja programske opreme DevOps, ki razvijalcem omogoča pogosto združevanje

Uporaba Chef-solo za konfiguriranje aplikacije Django v Ubuntu

Uporaba Chef-solo za konfiguriranje aplikacije Django v Ubuntu

Obstaja veliko načinov za avtomatizacijo postopka nastavitve in konfiguracije škatle. Iz kakršnega koli razloga, če je naš celoten sistem na tej točki sestavljen iz samo

Kako namestiti Foremana na Ubuntu 16.04 LTS

Kako namestiti Foremana na Ubuntu 16.04 LTS

Uporaba drugega sistema? Foreman je brezplačno in odprtokodno orodje, ki vam pomaga pri konfiguraciji in upravljanju fizičnih in virtualnih strežnikov. Forema

Kako začeti uporabljati SaltStack v Ubuntu 17.04

Kako začeti uporabljati SaltStack v Ubuntu 17.04

SaltStack je program za upravljanje konfiguracije, ki temelji na pythonu, ki je optimiziran za avtomatizacijo konfiguracijskih datotek, razmestitev in vsega drugega.

Vzpon strojev: aplikacije AI v resničnem svetu

Vzpon strojev: aplikacije AI v resničnem svetu

Umetna inteligenca ni v prihodnosti, tukaj je prav v sedanjosti. V tem blogu preberite, kako so aplikacije umetne inteligence vplivale na različne sektorje.

DDOS napadi: kratek pregled

DDOS napadi: kratek pregled

Ste tudi vi žrtev DDOS napadov in ste zmedeni glede načinov preprečevanja? Preberite ta članek, če želite rešiti svoja vprašanja.

Ste se kdaj vprašali, kako hekerji zaslužijo denar?

Ste se kdaj vprašali, kako hekerji zaslužijo denar?

Morda ste že slišali, da hekerji zaslužijo veliko denarja, a ste se kdaj vprašali, kako zaslužijo takšen denar? razpravljajmo.

Revolucionarni Googlovi izumi, ki vam bodo olajšali življenje.

Revolucionarni Googlovi izumi, ki vam bodo olajšali življenje.

Ali želite videti revolucionarne izume Googla in kako so ti izumi danes spremenili življenje vsakega človeka? Nato preberite v blogu in si oglejte Googlove izume.

Friday Essential: Kaj se je zgodilo z avtomobili, ki jih poganja umetna inteligenca?

Friday Essential: Kaj se je zgodilo z avtomobili, ki jih poganja umetna inteligenca?

Koncept samovozečih avtomobilov, ki zapeljejo na ceste s pomočjo umetne inteligence, so sanje, ki jih imamo že nekaj časa. A kljub številnim obljubam jih ni nikjer. Preberite ta blog, če želite izvedeti več…

Tehnološka singularnost: oddaljena prihodnost človeške civilizacije?

Tehnološka singularnost: oddaljena prihodnost človeške civilizacije?

Ker se znanost hitro razvija in prevzame veliko naših prizadevanj, se povečuje tudi tveganje, da se podvržemo nerazložljivi singularnosti. Preberite, kaj bi za nas lahko pomenila singularnost.

Razvoj shranjevanja podatkov – Infografika

Razvoj shranjevanja podatkov – Infografika

Metode shranjevanja podatkov so se lahko razvijale od rojstva podatkov. Ta blog pokriva razvoj shranjevanja podatkov na podlagi infografike.

Funkcionalnosti slojev referenčne arhitekture velikih podatkov

Funkcionalnosti slojev referenčne arhitekture velikih podatkov

Preberite blog, če želite na najpreprostejši način spoznati različne plasti v arhitekturi velikih podatkov in njihove funkcionalnosti.

6 neverjetnih prednosti pametnih naprav za dom v našem življenju

6 neverjetnih prednosti pametnih naprav za dom v našem življenju

V tem digitalno vodenem svetu so pametne naprave za dom postale ključni del življenja. Tukaj je nekaj neverjetnih prednosti pametnih naprav za dom o tem, kako naredijo naše življenje vredno življenja in poenostavijo.

Posodobitev dodatka macOS Catalina 10.15.4 povzroča več težav kot jih rešuje

Posodobitev dodatka macOS Catalina 10.15.4 povzroča več težav kot jih rešuje

Pred kratkim je Apple izdal macOS Catalina 10.15.4 dopolnilno posodobitev za odpravo težav, vendar se zdi, da posodobitev povzroča več težav, ki vodijo do opečenja računalnikov Mac. Preberite ta članek, če želite izvedeti več