Notkun Chef-solo til að stilla Django app á Ubuntu

Það eru margar leiðir til að gera sjálfvirkan ferlið við að setja upp og stilla kassa. Af hvaða ástæðu sem er, ef allt kerfið okkar á þessum tímapunkti samanstendur af aðeins einum kassa, þá er of mikið af því að setja upp fullan SCM (Software Configuration Management) innviði. Skeljaforskriftir eru einn valkostur, en við gætum líka notað strípaða útgáfu af SCM sem er fáanleg í nokkrum af verkfærunum þarna úti. Chef er einn af vinsælustu valkostunum og „kokkur-solo“ er sjálfstæður stillingarhamur Chefs þar sem við þurfum ekki aukahnút til að starfa sem „kokkur-þjónn“. Allt sem það þarf er vefslóð eða slóð að tarball pakka sem inniheldur matreiðslubækur fyrir kokka. Í samanburði við skeljaforskriftir er þessi tegund af nálgun yfirlýsingaríkari og skilvirkari út úr kassanum og er einnig góð kynning til að byrja með SCM eða IaC (Infrastructure as Code) ferlum.

Nokkrir aðrir kostir við að nota kokkur-solo:

  • Samsetning: Notaðu matreiðslubækur samfélagsins frá matvörubúð matreiðslumanns eða á öðrum stöðum.
  • Ókeypis og opinn uppspretta; leyfi samkvæmt leyfilegu Apache 2.0 leyfinu.
  • Aðgangur að restinni af vistkerfi Chef (InSpec, ChefSpec, Cookstyle, Foodcritic, kokkur-skel osfrv)
  • Hægt er að aðlaga matreiðslubækurnar og uppskriftirnar síðar að biðlara/þjónsstillingu.

Og nokkrir gallar:

  • Sumar matreiðslubækur samfélagsins í matvörubúðinni Chef eru úreltar, bilaðar og ekki viðhaldið.
  • kokkur-sóló getur ekki leyst ósjálfstæði á eigin spýtur.

„Uppskriftirnar“ inni í „matreiðslubók“ matreiðslumeistara eru með rúbínbundið DSL sem lýsir því að „auðlindir“ séu í tilteknu ástandi á hnút. Við skulum halda áfram með leiðsögn til að kynnast nokkrum kokkahugtökum sem eiga einnig við um kokk-sóló. Markmið okkar er að setja upp Ubuntu hnút sem keyrir Python/Django vefforrit með Gunicorn og 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.


(Allt frá þessum tímapunkti og áfram, nema annað sé tekið fram, á að keyra á vélinni okkar, einnig kölluð „matreiðslustöðin“)

Að búa til matreiðslubókina

Matreiðslubækur í kokki eru endurnýtanlegar einingar sem innihalda allt sem þarf til að styðja við uppsetningaratburðarás. Matreiðslubækur geta innihaldið margar „uppskriftir“ og „uppskriftir“ samanstanda að mestu af auðlindamynstri. default.rber sjálfgefið uppskrift sem verður að keyra þegar matreiðslubók er vísað í hlaupa-listanum . Mismunandi uppskriftir leyfa aðskilnað áhyggjum. Fyrir þessa kennslu munum við hins vegar bæta öllum auðlindayfirlýsingum í eina aðaluppskriftaskrá, sem er default.rb.

Búðu til möppu sem heitir "my-chef-project" og búðu til möppu inni í henni sem heitir "kokkabækur". Frá ./my-chef-project/cookbooks/, keyra:

$ chef generate cookbook my-cookbook

Uppbygging möppu okkar mun nú líta svona út:

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

Bætir við pökkum

Fyrsta skrefið til að setja upp hnútinn okkar er að bera kennsl á hvaða pakka er krafist af appinu okkar. Hnúturinn okkar er valinn til að vera Ubuntu, svo við getum reitt okkur á APT pakkastjórann til að safna ósjálfstæðum. Að setja upp pakkana sem OS-dreifingin býður upp á er síðan smáköku:

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'

Þetta skýra sig nokkurn veginn sjálft. Fyrsta línan mun uppfæra apt geymsluna og eftirfarandi línur munu setja upp þessa pakka.

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.

Að búa til Linux notendur

Þegar við höfum lokið við að bæta við nauðsynlegum pökkum þurfum við að búa til Linux notanda sem ekki hefur forréttindi sem mun eiga frumkóða forritsins.

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

Athugaðu að lykilorðið er skuggahash snið sem notað er í Linux. Það er hægt að fá það með OpenSSL:

$ openssl passwd -1 -salt alilbitof mypassword

Þar á meðal app uppspretta

Nú skulum við setja frumkóðann Django forritsins í matreiðslubókina okkar. Settu frumkóðann inn í ./my-chef-project/cookbooks/my-cookbook/files/default/myapp/ Búðu til ./my-chef-project/cookbooks/my-cookbook/files/defaultmöppuna ef hún er ekki til.

Leiðbeiningar um að afrita þessar skrár á afskekktan stað á hnútnum okkar er lýst með því að nota remote_directory auðlindina:

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

Draga í python ósjálfstæði

Til að setja upp python pakkana í requirements.txt, getum við notað execute auðlindina til að keyra handahófskennda skipun. Í þessu tilfelli þurfum við að framkvæma pip install skipunina yfir það:

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

Að setja upp Gunicorn & NGINX

Nú er kominn tími til að undirbúa Gunicorn WSGI HTTP Server með NGINX sem öfugri umboð. Nginx er einnig notað til að meðhöndla allar kyrrstæður eignir frá Django.

Til að festa Gunicorn sem þjónustu á Ubuntu er hægt að nota Systemd. The systemd_unit úrræði er innifalinn í Chef síðan útgáfa 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

Nú verðum við að láta venjulega NGINX proxy stillingu fylgja með þessum Gunicorn netþjóni eins og sýnt er hér að neðan. Þessi bútur getur farið inn í ./my-cookbook/templates/nginx.conf.erb. Búðu til sniðmátsskrána ef hún er ekki til.

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.

Til að afrita þessa stillingu yfir í möppu sem er virkt fyrir vefsvæði á hnútnum, notaðu sniðmátstilföngin frá Chef.

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

Að virkja stillingar á nginx er venjulega gert með því að búa til tákntengil sem bendir á stillinguna á sites-availableí sites-enabledmöppu nginx . Hægt er að lýsa yfir tákntenglum í matreiðslubókum matreiðslumanna með hlekknum eins og sýnt er hér að neðan:

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

og til að eyða sjálfgefna samstillingartákninu:

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

Ræsir NGINX

Og að lokum, til að kveikja á nginx þjónustu:

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

Hlaupalistar

Rekstrarlistar í kokki eru skipaður listi yfir hlutverk eða uppskriftir í matreiðslubók sem verður keyrður í röð á hnútnum. Við erum með eina matreiðslubók „my-cookbook“ og „default“ uppskriftina inni í henni sem við þurfum að framkvæma á Ubuntu kassanum, þannig að runlist.json í verkefnaskránni okkar ( ./my-chef-project/runlist.json) ætti að líta svona út:

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

Lokaskref

Matreiðslubókin okkar fyrir Chef Solo er tilbúin til framreiðslu. Það er kominn tími til að útvega Ubuntu 18.04 vél og setja upp ChefDK á hana:

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

Þegar við förum aftur á vinnustöðina okkar matreiðslumanns , það eina sem við þurfum að gera er að setja matreiðslubókamöppuna inn í tarball, flytja þann tarball ásamt yfir runlist.jsoná ytri hnútinn sem við útveguðum hér að ofan og keyra chef-solo skipunina:

(Skýringin hér að neðan á að keyra inni í hnútnum eða 'kokkur viðskiptavinur' en ekki matreiðslustöðina)

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

Eða hér er einskipa (á að keyra frá ./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'

Það er það! Horfðu á staðlaða úttakið fyllast af kokkavirkni sem reynir að sameina hnútinn þinn að því sem þú hefur tilgreint í matreiðslubókunum. Chef-solo mun setja upp alla gimsteina sem þarf fyrir allar matreiðslubækurnar. Ef kokkur-solo skipunin heppnast, munum við vera með virkt Django forrit sem keyrir á bak við nginx á Ubuntu kassanum. Farðu að léninu/IP til að prófa það.

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

Að bregðast við breytingum

Alltaf þegar við gerum breytingar á innihaldi verkefnaskrárinnar okkar (uppskriftir, sniðmát eða frumkóða forritsins osfrv.), keyrðu einfaldlega ofangreinda einlínu úr verkefnaskránni.

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.

Að hýsa tarballið (valfrjálst)

Ef þú skoðar síðustu kokkur-solo skipunina vel, --recipe-urltaktu eftir því að það er ætlað að taka slóð. Þetta þýðir að þú getur haft verkflæði þar sem CI mun byggja kokka-solo tarballið þitt, hlaða því upp einhvers staðar og stilla hnútinn þinn til að draga úr honum reglulega.

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.


Hvernig á að setja upp Jenkins á CentOS 7

Hvernig á að setja upp Jenkins á CentOS 7

Jenkins er vinsælt opinn uppspretta CI (Continuous Integration) tól sem er mikið notað fyrir þróun verkefna, dreifingu og sjálfvirkni. Þessi grein vill

Hvernig á að setja upp og stilla Concourse CI á Ubuntu 16.04

Hvernig á að setja upp og stilla Concourse CI á Ubuntu 16.04

Að nota annað kerfi? Inngangur Stöðug samþætting er DevOps hugbúnaðarþróunaraðferð sem gerir hönnuðum kleift að sameinast oft

Hvernig á að setja upp og stilla Ansible á Debian 9 til notkunar með Windows Server

Hvernig á að setja upp og stilla Ansible á Debian 9 til notkunar með Windows Server

Að nota annað kerfi? Ansible er opinn hugbúnaður til að gera sjálfvirk verkefni. Það stjórnar uppsetningu Linux og Windows netþjóna. Það virkar

Hvernig á að setja upp og stilla GoCD á CentOS 7

Hvernig á að setja upp og stilla GoCD á CentOS 7

Að nota annað kerfi? GoCD er opinn uppspretta stöðugt afhendingar- og sjálfvirknikerfi. Það gerir þér kleift að móta flókin verkflæði með því að nota samhliða þess

Notkun SaltStack með stoðum á Ubuntu 17.04

Notkun SaltStack með stoðum á Ubuntu 17.04

Þó að SaltStack sé frábært tól til að keyra aðgerðir á mörgum netþjónum samtímis, styður það einnig skilgreindar stillingar fyrir hverja gestgjafa sem eru geymdar í

Hvernig á að setja upp og stilla Ansible á CentOS 7 til notkunar með Windows Server

Hvernig á að setja upp og stilla Ansible á CentOS 7 til notkunar með Windows Server

Að nota annað kerfi? Ansible er opinn hugbúnaður til að gera sjálfvirk verkefni. Það stjórnar uppsetningu Linux og Windows netþjóna. Það virkar

Hvernig á að setja upp Drone CI á Ubuntu 18.04

Hvernig á að setja upp Drone CI á Ubuntu 18.04

Inngangur Drone er sjálfvirkur, stöðugur prófunar- og afhendingarvettvangur sem keyrir á þínum eigin innviðum. Drone styður hvaða tungumál sem er, þjónustu o

Vultr álagsjafnarar

Vultr álagsjafnarar

Hvað er hleðslujafnari Hleðslujafnarar sitja fyrir framan forritið þitt og dreifa komandi umferð yfir mörg tilvik af forritinu þínu. Fo

Hvernig á að setja Foreman upp á CentOS 7

Hvernig á að setja Foreman upp á CentOS 7

Að nota annað kerfi? Foreman er ókeypis og opinn uppspretta tól sem hjálpar þér við uppsetningu og stjórnun á líkamlegum og sýndarþjónum. Forema

Hvernig á að setja upp SaltStack á CentOS 7

Hvernig á að setja upp SaltStack á CentOS 7

SaltStack, eða Salt, er vinsæl opinn uppspretta stillingarstjórnunarlausn sem hægt er að nota til að útfæra fjarframkvæmd, stillingarstjórnun, cod

Hvernig á að setja upp Strider CD á Ubuntu 18.04

Hvernig á að setja upp Strider CD á Ubuntu 18.04

Inngangur Strider CD er opinn uppspretta samfelld dreifingarvettvangur. Forritið er skrifað í Node.js og notar MongoDB sem geymslustuðning. Skref

Notkun Chocolatey Package Manager á Windows

Notkun Chocolatey Package Manager á Windows

Inngangur Chocolatey færir pakkastjórnun sem auðveldar stjórnun hugbúnaðar og ósjálfstæðis á Linux í Windows. Þú getur fljótt og auðveldlega

Að búa til skyndimyndir með Packer

Að búa til skyndimyndir með Packer

Hvað er Packer? Packer er myndtól fyrir netþjóna þróað af HashiCorp. Myndgreining miðlara; eða að öðrum kosti óbreytanleg innviði; er vinsæll valkostur

Hvernig á að setja upp og stilla Concourse CI á CentOS 7

Hvernig á að setja upp og stilla Concourse CI á CentOS 7

Að nota annað kerfi? Inngangur Stöðug samþætting er DevOps hugbúnaðarþróunaraðferð sem gerir hönnuðum kleift að sameinast oft

Notkun Chef-solo til að stilla Django app á Ubuntu

Notkun Chef-solo til að stilla Django app á Ubuntu

Það eru margar leiðir til að gera sjálfvirkan ferlið við að setja upp og stilla kassa. Af hvaða ástæðu sem er, ef allt kerfið okkar á þessum tímapunkti samanstendur af bara

Hvernig á að setja upp Foreman á Ubuntu 16.04 LTS

Hvernig á að setja upp Foreman á Ubuntu 16.04 LTS

Að nota annað kerfi? Foreman er ókeypis og opinn uppspretta tól sem hjálpar þér við uppsetningu og stjórnun á líkamlegum og sýndarþjónum. Forema

Byrjaðu með SaltStack á Ubuntu 17.04

Byrjaðu með SaltStack á Ubuntu 17.04

SaltStack er python-undirstaða stillingastjórnunarforrit sem er fínstillt fyrir sjálfvirkni stillingarskráa, uppsetningar og allt annað sem er óvirkt.

The Rise of Machines: Real World Applications of AI

The Rise of Machines: Real World Applications of AI

Gervigreind er ekki í framtíðinni, hún er hér í nútímanum Í þessu bloggi Lestu hvernig gervigreindarforrit hafa haft áhrif á ýmsa geira.

DDOS árásir: Stutt yfirlit

DDOS árásir: Stutt yfirlit

Ertu líka fórnarlamb DDOS árása og ruglaður með forvarnaraðferðirnar? Lestu þessa grein til að leysa spurningar þínar.

Hefur þú einhvern tíma velt því fyrir þér hvernig tölvuþrjótar græða peninga?

Hefur þú einhvern tíma velt því fyrir þér hvernig tölvuþrjótar græða peninga?

Þú gætir hafa heyrt að tölvuþrjótar græða mikið af peningum, en hefur þú einhvern tíma velt því fyrir þér hvernig þeir vinna sér inn svona peninga? við skulum ræða.

Byltingarkenndar uppfinningar frá Google sem munu auðvelda lífi þínu.

Byltingarkenndar uppfinningar frá Google sem munu auðvelda lífi þínu.

Viltu sjá byltingarkenndar uppfinningar frá Google og hvernig þessar uppfinningar breyttu lífi hvers manns í dag? Lestu síðan til að blogga til að sjá uppfinningar frá Google.

Föstudagur Nauðsynlegur: Hvað varð um gervigreindardrifna bíla?

Föstudagur Nauðsynlegur: Hvað varð um gervigreindardrifna bíla?

Hugmyndin um að sjálfkeyrandi bílar fari á göturnar með hjálp gervigreindar er draumur sem við höfum átt um tíma núna. En þrátt fyrir nokkur loforð eru þau hvergi sjáanleg. Lestu þetta blogg til að læra meira…

Tæknileg sérkenni: Fjarlæg framtíð mannlegrar siðmenningar?

Tæknileg sérkenni: Fjarlæg framtíð mannlegrar siðmenningar?

Þar sem vísindin þróast hratt og taka yfir mikið af viðleitni okkar, eykst hættan á því að verða fyrir óútskýranlegri einstæðu. Lestu, hvað sérkenni gæti þýtt fyrir okkur.

Þróun gagnageymslu – Infographic

Þróun gagnageymslu – Infographic

Geymsluaðferðir gagna hafa verið að þróast gæti verið frá fæðingu gagna. Þetta blogg fjallar um þróun gagnageymslu á grundvelli upplýsingamynda.

Virkni Big Data Reference Architecture Layers

Virkni Big Data Reference Architecture Layers

Lestu bloggið til að þekkja mismunandi lög í Big Data Architecture og virkni þeirra á einfaldasta hátt.

6 ótrúlegir kostir þess að hafa snjall heimilistæki í lífi okkar

6 ótrúlegir kostir þess að hafa snjall heimilistæki í lífi okkar

Í þessum stafræna heimi hafa snjallheimilistæki orðið afgerandi hluti af lífi. Hér eru nokkrir ótrúlegir kostir snjallheimatækja um hvernig þau gera líf okkar þess virði að lifa því og einfaldara.

macOS Catalina 10.15.4 viðbót uppfærsla veldur fleiri vandamálum en að leysa

macOS Catalina 10.15.4 viðbót uppfærsla veldur fleiri vandamálum en að leysa

Nýlega gaf Apple út macOS Catalina 10.15.4 viðbótaruppfærslu til að laga vandamál en svo virðist sem uppfærslan sé að valda fleiri vandamálum sem leiða til múrsteins á Mac vélum. Lestu þessa grein til að læra meira