Chef-solon käyttäminen Django-sovelluksen määrittämiseen Ubuntussa

On monia tapoja automatisoida laatikon asennus- ja konfigurointiprosessi. Jostain syystä koko järjestelmämme koostuu tässä vaiheessa vain yhdestä laatikosta, täyden SCM (Software Configuration Management) -infrastruktuurin perustaminen on ylivoimaista. Shell-skriptit ovat yksi vaihtoehto, mutta voisimme myös käyttää SCM:n kevennettyä versiota, joka on saatavilla muutamissa työkaluissa. Chef on yksi suosituimmista vaihtoehdoista ja "chef-solo" on Chefin erillinen konfigurointitila, jossa emme vaadi ylimääräistä solmua toimiakseen "kokkipalvelimena". Se tarvitsee vain URL-osoitteen tai polun tarball-pakettiin, joka sisältää kokin keittokirjoja. Verrattuna shell-skripteihin tämäntyyppinen lähestymistapa on selkeämpi ja tehokkaampi heti, ja se on myös hyvä johdatus SCM- tai IaC-prosessien (Infrastructure as Code) aloittamiseen.

Muutamia muita etuja kokki-soolon käytöstä:

  • Kokoonpanokyky: Käytä keittiömestarin tai muiden paikkojen yhteisön keittokirjoja.
  • Ilmainen ja avoin lähdekoodi; lisensoitu sallivalla Apache 2.0 -lisenssillä.
  • Pääsy kokin muuhun ekosysteemiin (InSpec, ChefSpec, Cookstyle, Foodcritic, chef-shell jne.)
  • Keittokirjoja ja reseptejä voidaan myöhemmin mukauttaa asiakas/palvelin-tilaan.

Ja joitain huonoja puolia:

  • Jotkut Chef-supermarketin yhteisön keittokirjat ovat vanhentuneita, rikki eikä niitä ole huollettu.
  • chef-solo ei pysty ratkaisemaan riippuvuuksia yksin.

Kokin "keittokirjan" sisällä olevissa "resepteissä" on rubiinipohjainen DSL, joka kuvaa "resurssien" olevan tietyssä tilassa solmussa. Jatketaan läpikulkua tutustuaksesi muutamaan Chef-konseptiin, jotka soveltuvat myös kokki-sooloon. Tavoitteenamme on perustaa Ubuntu-solmu, joka käyttää Python/Django-verkkosovellusta Gunicornilla ja NGINX:llä.

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.


(Kaikki tästä eteenpäin, ellei toisin mainita, suoritetaan koneellamme, jota kutsutaan myös "Chef Workstationiksi")

Keittokirjan luominen

Keittiömestarin keittokirjat ovat uudelleenkäytettäviä yksiköitä, jotka sisältävät kaiken tarvittavan konfigurointiskenaarion tukemiseen. Keittokirjat voivat sisältää useita "reseptejä", ja "reseptit" koostuvat enimmäkseen resurssikuvioista. default.rbon oletuksena resepti, joka ajetaan kun keittokirja viitataan jossakin run-listan . Erilaiset reseptit mahdollistavat huolenaiheiden erottamisen. Tässä opetusohjelmassa lisäämme kuitenkin kaikki resurssiilmoitukset yhteen pääreseptitiedostoon, joka on default.rb.

Luo kansio nimeltä "my-chef-projekti" ja luo sen sisään kansio nimeltä "keittokirjat". Alkaen ./my-chef-project/cookbooks/, suorita:

$ chef generate cookbook my-cookbook

Hakemistorakenne näyttää nyt tältä:

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

Pakettien lisääminen

Ensimmäinen askel solmumme määrittämisessä on tunnistaa, mitä paketteja sovelluksemme tarvitsee. Solmumme on valittu Ubuntuksi, joten voimme luottaa APT-paketinhallintaan riippuvuuksien keräämisessä. Käyttöjärjestelmäjakelun tarjoamien pakettien asentaminen on sitten pala kakkua:

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'

Nämä ovat melko itsestäänselviä. Ensimmäinen rivi päivittää apt-arkiston ja seuraavat rivit asentavat kyseiset paketit.

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-käyttäjien luominen

Kun olemme lisänneet tarvittavat paketit, meidän on luotava ei-etuoikeutettu Linux-käyttäjä, joka omistaa sovelluksen lähdekoodin.

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

Huomaa, että salasana on varjohajautusmuoto, jota käytetään Linuxissa. Se voidaan johtaa OpenSSL:n avulla:

$ openssl passwd -1 -salt alilbitof mypassword

Mukaan lukien sovelluksen lähde

Sisällytetään nyt Django-sovelluksen lähdekoodi keittokirjaamme. Aseta lähdekoodi sisään ./my-chef-project/cookbooks/my-cookbook/files/default/myapp/ Luo ./my-chef-project/cookbooks/my-cookbook/files/defaulthakemisto, jos sitä ei ole olemassa.

Ohjeet näiden tiedostojen kopioimiseksi solmumme etäsijaintiin kuvataan remote_directory- resurssilla:

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

Python-riippuvuuksien vetäminen sisään

Python-pakettien asentamiseksi requirements.txtsovellukseen voimme käyttää execute- resurssia mielivaltaisen komennon suorittamiseen. Tässä tapauksessa meidän on suoritettava pip install -komento sen päälle:

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

Asetetaan Gunicorn & NGINX

Nyt on aika valmistella Gunicorn WSGI HTTP Server NGINX käänteisenä välityspalvelimenamme. Nginxiä käytetään myös käsittelemään kaikkia Djangon staattisia resursseja.

Gunicornin kiinnittämiseen palveluksi Ubuntuun voidaan käyttää Systemdia. Systemd_unit resurssi sisältyy Chef sitten version 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

Nyt meidän on sisällytettävä standardi NGINX-välityspalvelinkokoonpano tähän Gunicorn-palvelimeen alla olevan kuvan mukaisesti. Tämä katkelma voi mennä ./my-cookbook/templates/nginx.conf.erb. Luo mallihakemisto, jos sitä ei ole olemassa.

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.

Kopioida tänä config sivustoille-käytössä kansio solmu, käytä mallin resurssi Chef.

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

Määritykset aktivoidaan nginxissä yleensä luomalla symbolilinkki, joka osoittaa konfiguraatioon osoitteessa sites-availablenginxin sites-enabledkansiossa. Symlinkit voidaan ilmoittaa kokkien keittokirjoissa alla olevan linkin avulla:

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

ja poistaaksesi oletusasetusten symbolin:

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

Käynnistetään NGINX

Ja lopuksi nginx-palvelun käynnistämiseksi:

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

Runlists

Kokin suorituslistat ovat järjestetty luettelo keittokirjan rooleista tai resepteistä, jotka suoritetaan järjestyksessä solmussa. Meillä on yksi keittokirja "my-cookbook" ja sen sisällä "oletus" resepti, joka meidän on suoritettava Ubuntu-laatikossa, joten projektihakemistossamme ( ./my-chef-project/runlist.json) olevan runlist.json-tiedoston pitäisi näyttää tältä:

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

Viimeiset vaiheet

Keittokirjamme Chef-soololle on valmis tarjottavaksi. On aika hankkia Ubuntu 18.04 -kone ja asentaa siihen 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'

Menee takaisin meidän Chef työasema , meidän tarvitsee tehdä, on laittaa keittokirjoja kansion sisällä tarrapallon, siirto, joka tarrapallon yhdessä runlist.jsonkauko solmuun me varauksia yläpuolelle ja ajaa kokki-soolo komennolla:

(Alla oleva komento on suoritettava solmun tai "kokkiasiakkaan" sisällä, ei Chef Workstationissa.)

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

Tai tässä yksikerroksinen versio (joka suoritetaan ./my-chef-project/CWD: ltä Chef Workstationissa):

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'

Se siitä! Katso, kuinka vakiotulostus täyttyy Chef-toiminnalla, joka yrittää lähentää solmuasi keittokirjoissa määrittämäsi kanssa. Chef-solo asentaa kaikki tarvittavat helmet kaikkiin keittokirjoihin. Jos chef-solo-komento onnistuu, meillä on toimiva Django-sovellus, joka toimii nginxin takana Ubuntu-laatikossa. Siirry verkkotunnukseen/IP-osoitteeseen testataksesi sitä.

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

Reagoi muutoksiin

Aina kun teemme muutoksia projektihakemistomme sisältöön (resepteihin, malleihin tai sovelluksen lähdekoodiin jne.), suorita yllä oleva yksilinjainen projektihakemistosta.

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.

Tarballin isännöinti (valinnainen)

Jos tarkastelet viimeistä chef-solo-komentoa tarkasti, huomaa, että sen --recipe-urlon tarkoitus ottaa URL-osoite. Tämä tarkoittaa, että sinulla voi olla työnkulku, jossa CI rakentaa chef-solo-tarballisi, lataa sen jonnekin ja määrittää solmun ottamaan siitä säännöllisesti.

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.


Jenkinsin asentaminen CentOS 7:ään

Jenkinsin asentaminen CentOS 7:ään

Jenkins on suosittu avoimen lähdekoodin CI (Continuous Integration) -työkalu, jota käytetään laajasti projektien kehittämiseen, käyttöönottoon ja automatisointiin. Tämä artikkeli tulee

Concourse CI:n asentaminen ja määrittäminen Ubuntu 16.04:ssä

Concourse CI:n asentaminen ja määrittäminen Ubuntu 16.04:ssä

Käytätkö erilaista järjestelmää? Johdanto Continuous Integration on DevOps-ohjelmistokehityskäytäntö, jonka avulla kehittäjät voivat usein yhdistää

Ansiblen asentaminen ja määrittäminen Debian 9:ssä käytettäväksi Windows Serverin kanssa

Ansiblen asentaminen ja määrittäminen Debian 9:ssä käytettäväksi Windows Serverin kanssa

Käytätkö erilaista järjestelmää? Ansible on avoimen lähdekoodin työkalu tehtävien automatisointiin. Se hallitsee Linux- ja Windows-palvelimiesi kokoonpanoa. Se toimi

Kuinka asentaa ja määrittää GoCD CentOS 7: ssä

Kuinka asentaa ja määrittää GoCD CentOS 7: ssä

Käytätkö erilaista järjestelmää? GoCD on avoimen lähdekoodin jatkuva toimitus- ja automaatiojärjestelmä. Sen avulla voit mallintaa monimutkaisia ​​työnkulkuja käyttämällä sen rinnakkaista an

SaltStack with Pillars käyttö Ubuntussa 17.04

SaltStack with Pillars käyttö Ubuntussa 17.04

Vaikka SaltStack on loistava työkalu toimintojen suorittamiseen useilla palvelimilla samanaikaisesti, se tukee myös isäntäkohtaisesti määritettyjä kokoonpanon esiasetuksia, jotka on tallennettu

Ansiblen asentaminen ja määrittäminen CentOS 7:ään käytettäväksi Windows Serverin kanssa

Ansiblen asentaminen ja määrittäminen CentOS 7:ään käytettäväksi Windows Serverin kanssa

Käytätkö erilaista järjestelmää? Ansible on avoimen lähdekoodin työkalu tehtävien automatisointiin. Se hallitsee Linux- ja Windows-palvelimiesi kokoonpanoa. Se toimi

Drone CI:n asentaminen Ubuntuun 18.04

Drone CI:n asentaminen Ubuntuun 18.04

Johdanto Drone on automatisoitu, jatkuva testaus- ja toimitusalusta, joka toimii omassa infrastruktuurissasi. Drone tukee mitä tahansa kieltä, palvelua o

Kuinka asentaa Foreman CentOS 7:ään

Kuinka asentaa Foreman CentOS 7:ään

Käytätkö erilaista järjestelmää? Foreman on ilmainen ja avoimen lähdekoodin työkalu, joka auttaa sinua määrittämään ja hallitsemaan fyysisiä ja virtuaalisia palvelimia. Forema

Kuinka asentaa SaltStack CentOS 7:ään

Kuinka asentaa SaltStack CentOS 7:ään

SaltStack tai Salt on suosittu avoimen lähdekoodin kokoonpanonhallintaratkaisu, jota voidaan käyttää etäsuorituksen, kokoonpanonhallinnan, koodin toteuttamiseen.

Strider-CD:n asentaminen Ubuntuun 18.04

Strider-CD:n asentaminen Ubuntuun 18.04

Johdanto Strider CD on avoimen lähdekoodin jatkuvan käyttöönoton alusta. Sovellus on kirjoitettu Node.js:ssä ja käyttää MongoDB:tä tallennustaustana. Askel

Chocolatey Package Managerin käyttäminen Windowsissa

Chocolatey Package Managerin käyttäminen Windowsissa

Johdanto Chocolatey tuo Windowsiin pakettien hallinnan, joka tekee ohjelmistojen ja riippuvuuksien hallinnasta helppoa Linuxissa. Voit nopeasti ja helposti

Tilannekuvien luominen Packerilla

Tilannekuvien luominen Packerilla

Mikä on Packer? Packer on HashiCorpin kehittämä palvelimen kuvantamistyökalu. Palvelimen kuvantaminen; tai vaihtoehtoisesti muuttumaton infrastruktuuri; on suosittu vaihtoehto

Concourse CI:n asentaminen ja määrittäminen CentOS 7:ssä

Concourse CI:n asentaminen ja määrittäminen CentOS 7:ssä

Käytätkö erilaista järjestelmää? Johdanto Continuous Integration on DevOps-ohjelmistokehityskäytäntö, jonka avulla kehittäjät voivat usein yhdistää

Chef-solon käyttäminen Django-sovelluksen määrittämiseen Ubuntussa

Chef-solon käyttäminen Django-sovelluksen määrittämiseen Ubuntussa

On monia tapoja automatisoida laatikon asennus- ja konfigurointiprosessi. Mistä tahansa syystä, jos koko järjestelmämme tässä vaiheessa koostuu vain

Kuinka asentaa Foreman Ubuntu 16.04 LTS:ään

Kuinka asentaa Foreman Ubuntu 16.04 LTS:ään

Käytätkö erilaista järjestelmää? Foreman on ilmainen ja avoimen lähdekoodin työkalu, joka auttaa sinua määrittämään ja hallitsemaan fyysisiä ja virtuaalisia palvelimia. Forema

SaltStackin käytön aloittaminen Ubuntussa 17.04

SaltStackin käytön aloittaminen Ubuntussa 17.04

SaltStack on python-pohjainen kokoonpanonhallintaohjelma, joka on optimoitu määritystiedostojen, käyttöönottojen ja kaiken muun automatisointiin.

Koneiden nousu: tekoälyn todelliset sovellukset

Koneiden nousu: tekoälyn todelliset sovellukset

Tekoäly ei ole tulevaisuudessa, se tässä nykyisyydessä Tässä blogissa Lue kuinka tekoälysovellukset ovat vaikuttaneet eri sektoreihin.

DDOS-hyökkäykset: lyhyt katsaus

DDOS-hyökkäykset: lyhyt katsaus

Oletko myös DDOS-hyökkäysten uhri ja hämmentynyt ehkäisymenetelmistä? Lue tämä artikkeli ratkaistaksesi kysymyksesi.

Oletko koskaan miettinyt, kuinka hakkerit ansaitsevat rahaa?

Oletko koskaan miettinyt, kuinka hakkerit ansaitsevat rahaa?

Olet ehkä kuullut, että hakkerit ansaitsevat paljon rahaa, mutta oletko koskaan miettinyt, kuinka he ansaitsevat tuollaista rahaa? keskustellaan.

Googlen vallankumouksellisia keksintöjä, jotka helpottavat elämääsi.

Googlen vallankumouksellisia keksintöjä, jotka helpottavat elämääsi.

Haluatko nähdä Googlen vallankumouksellisia keksintöjä ja kuinka nämä keksinnöt muuttivat jokaisen ihmisen elämää nykyään? Lue sitten blogia nähdäksesi Googlen keksinnöt.

Essential perjantai: Mitä tekoäly-ohjatuille autoille tapahtui?

Essential perjantai: Mitä tekoäly-ohjatuille autoille tapahtui?

Konsepti itseohjautuvista autoista lähteä tielle tekoälyn avulla on ollut haaveena jo jonkin aikaa. Mutta useista lupauksista huolimatta niitä ei näy missään. Lue tämä blogi saadaksesi lisätietoja…

Teknologinen singulaarisuus: ihmissivilisaation kaukainen tulevaisuus?

Teknologinen singulaarisuus: ihmissivilisaation kaukainen tulevaisuus?

Kun tiede kehittyy nopeasti ja ottaa haltuunsa suuren osan ponnisteluistamme, myös riskit altistaa itsemme selittämättömälle singulariteetille kasvavat. Lue, mitä singulaarisuus voisi tarkoittaa meille.

Tietojen tallennuksen evoluutio – Infografiikka

Tietojen tallennuksen evoluutio – Infografiikka

Tietojen säilytystavat ovat kehittyneet mahdollisesti Datan syntymästä lähtien. Tämä blogi käsittelee tiedon tallennuksen kehitystä infografian pohjalta.

Big Datan referenssiarkkitehtuurikerrosten toiminnot

Big Datan referenssiarkkitehtuurikerrosten toiminnot

Blogista saat tietää Big Data -arkkitehtuurin eri kerroksista ja niiden toiminnoista yksinkertaisimmalla tavalla.

6 uskomatonta etua älykkäiden kotilaitteiden käyttämisestä elämässämme

6 uskomatonta etua älykkäiden kotilaitteiden käyttämisestä elämässämme

Tässä digitaalisessa maailmassa kodin älylaitteista on tullut tärkeä osa elämää. Tässä on muutamia älykkäiden kodin laitteiden hämmästyttäviä etuja, joiden avulla ne tekevät elämästämme elämisen arvoista ja yksinkertaisempaa.

macOS Catalina 10.15.4 -täydennyspäivitys aiheuttaa enemmän ongelmia kuin ratkaiseminen

macOS Catalina 10.15.4 -täydennyspäivitys aiheuttaa enemmän ongelmia kuin ratkaiseminen

Apple julkaisi äskettäin macOS Catalina 10.15.4 -lisäpäivityksen ongelmien korjaamiseksi, mutta näyttää siltä, ​​että päivitys aiheuttaa lisää ongelmia, jotka johtavat mac-koneiden tiilikaamiseen. Lue tämä artikkeli saadaksesi lisätietoja