Chef-solo izmantošana, lai konfigurētu Django lietotni Ubuntu

Ir daudzi veidi, kā automatizēt kastes iestatīšanas un konfigurēšanas procesu. Kādu iemeslu dēļ, ja visa mūsu sistēma šobrīd sastāv tikai no viena lodziņa, pilnas SCM (programmatūras konfigurācijas pārvaldības) infrastruktūras iestatīšana ir pārmērīga. Viena no iespējām ir čaulas skripti, taču mēs varētu izmantot arī samazinātu SCM versiju, kas ir pieejama dažos rīkos. Šefpavārs ir viena no populārākajām opcijām, un "chef-solo" ir šefpavāra atsevišķais konfigurācijas režīms, kurā mums nav nepieciešams papildu mezgls, lai darbotos kā "šefpavārs-serveris". Viss, kas tam nepieciešams, ir URL vai ceļš uz tarball pakotni, kurā ir šefpavāra pavārgrāmatas. Salīdzinot ar čaulas skriptiem, šāda veida pieeja ir deklaratīvāka un efektīvāka jau sākotnēji, kā arī ir labs ievads, lai sāktu darbu ar SCM vai IaC (Infrastructure as Code) procesiem.

Dažas citas priekšrocības, izmantojot šefpavāra solo:

  • Saliekamība: izmantojiet kopienas pavārgrāmatas no šefpavāra lielveikala vai citām vietām.
  • Bezmaksas un atvērtā koda; licencēts saskaņā ar pieļaujamo Apache 2.0 licenci.
  • Piekļuve pārējai šefpavāra ekosistēmai (InSpec, ChefSpec, Cookstyle, Foodcritic, šefpavāra apvalks utt.)
  • Pavārgrāmatas un receptes vēlāk var pielāgot klienta/servera režīmam.

Un daži mīnusi:

  • Dažas kopienas pavārgrāmatas lielveikalā Chef ir novecojušas, bojātas un netiek uzturētas.
  • šefpavārs-solo nevar atrisināt atkarības viens pats.

Šefpavāra “pavārgrāmatas” “receptēm” ir rubīna bāzes DSL, kas apraksta “resursus”, kas atrodas noteiktā mezgla stāvoklī. Turpināsim ar aprakstu, lai iepazītos ar dažiem šefpavāra jēdzieniem, kas attiecas arī uz šefpavāru solo. Mūsu mērķis ir iestatīt Ubuntu mezglu, kurā darbojas Python/Django tīmekļa lietotne, izmantojot Gunicorn un 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.


(Viss no šī brīža, ja vien nav norādīts citādi, ir jādarbina mūsu iekārtā, ko dēvē arī par "pavāra darbstaciju")

Pavārgrāmatas izveide

Pavārgrāmatas šefpavārā ir atkārtoti lietojamas vienības, kurās ir viss nepieciešamais, lai atbalstītu konfigurācijas scenāriju. Pavārgrāmatās var būt vairākas “receptes”, un “receptes” lielākoties sastāv no resursu modeļiem. default.rbir noklusējuma recepte, kas tiks izpildīta, kad izpildes sarakstā būs atsauce uz pavārgrāmatu . Dažādas receptes ļauj nošķirt bažas. Tomēr šai apmācībai mēs pievienosim visas resursu deklarācijas vienā galvenajā recepšu failā, kas ir default.rb.

Izveidojiet mapi ar nosaukumu "mans šefpavāra projekts" un izveidojiet tajā mapi ar nosaukumu "pavārgrāmatas". No ./my-chef-project/cookbooks/, palaist:

$ chef generate cookbook my-cookbook

Mūsu direktoriju struktūra tagad izskatīsies šādi:

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

Pakešu pievienošana

Pirmais mūsu mezgla iestatīšanas solis ir noteikt, kādas pakotnes ir nepieciešamas mūsu lietotnei. Mūsu mezgls ir izvēlēts kā Ubuntu, tāpēc mēs varam paļauties uz APT pakotņu pārvaldnieku, lai apkopotu atkarības. OS izplatīšanas nodrošināto pakotņu instalēšana ir vienkārša:

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'

Tie ir diezgan pašsaprotami. Pirmajā rindā tiks atjaunināts apt repozitorijs, un nākamajās rindās tiks instalētas šīs pakotnes.

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 lietotāju izveide

Kad esam pabeiguši nepieciešamo pakotņu pievienošanu, mums ir jāizveido Linux lietotājs bez priviliģētām tiesībām, kuram piederēs lietojumprogrammas pirmkods.

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

Ņemiet vērā, ka parole ir ēnu hash formāts, ko izmanto Linux. To var iegūt, izmantojot OpenSSL:

$ openssl passwd -1 -salt alilbitof mypassword

Ieskaitot lietotnes avotu

Tagad iekļausim Django lietojumprogrammas pirmkodu mūsu pavārgrāmatā. Ievietojiet avota kodu iekšpusē ./my-chef-project/cookbooks/my-cookbook/files/default/myapp/ Izveidojiet ./my-chef-project/cookbooks/my-cookbook/files/defaultdirektoriju, ja tā neeksistē.

Norādījumi par šo failu kopēšanu uz attālo vietu mūsu mezglā ir aprakstīti, izmantojot resursu 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

Pitonu atkarību ievilkšana

Lai instalētu python pakotnes programmā requirements.txt, mēs varam izmantot izpildes resursu, lai palaistu patvaļīgu komandu. Šajā gadījumā mums ir jāizpilda pip instalēšanas komanda virs tā:

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 un NGINX iestatīšana

Tagad ir pienācis laiks sagatavot Gunicorn WSGI HTTP serveri ar NGINX kā mūsu reverso starpniekserveri. Nginx tiek izmantots arī visu Django statisko līdzekļu apstrādei.

Lai izmantotu Gunicorn kā pakalpojumu Ubuntu, var izmantot Systemd. Systemd_unit resurss ir iekļauts šefpavārs kopš versijā 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

Tagad mums ir jāiekļauj standarta NGINX starpniekservera konfigurācija šajā Gunicorn serverī, kā parādīts zemāk. Šo fragmentu var ievadīt ./my-cookbook/templates/nginx.conf.erb. Izveidojiet veidņu direktoriju, ja tā neeksistē.

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.

Lai kopētu šo konfigurāciju uz mezgla mapi, kurā ir iespējotas vietnes, izmantojiet Chef veidnes resursu.

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

Konfigurāciju aktivizēšana operētājsistēmā nginx parasti tiek veikta, izveidojot simsaiti, kas norāda uz konfigurāciju sites-availablenginx sites-enabledmapē. Simbolus var norādīt pavāru pavārgrāmatās, izmantojot tālāk norādīto saišu resursu:

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

un lai izdzēstu noklusējuma konfigurācijas simbolu:

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

Tiek palaists NGINX

Un visbeidzot, lai aktivizētu nginx pakalpojumu:

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

Skrējienu saraksti

Pavāra izpildes saraksti ir sakārtots lomu vai recepšu saraksts pavārgrāmatā, kas mezglā tiks izpildīts secīgi. Mums ir viena pavārgrāmata "mana pavārgrāmata" un tajā ietvertā "noklusējuma" recepte, kas mums jāizpilda Ubuntu lodziņā, tāpēc mūsu projekta direktorijā ( ./my-chef-project/runlist.json) esošajam failam runlist.json vajadzētu izskatīties šādi:

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

Pēdējie soļi

Mūsu pavārgrāmata šefpavāram solo ir gatava pasniegšanai. Ir pienācis laiks nodrošināt Ubuntu 18.04 mašīnu un instalēt tajā 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'

Atgriežoties pie mūsu šefpavāra darbstacijas , viss, kas mums jādara, ir jāievieto pavārgrāmatu mape tarbolā, jāpārsūta šī tarbola runlist.jsonuz attālo mezglu, ko nodrošinājām iepriekš, un jāpalaiž komanda chef-solo:

(Tālāk norādītā komanda ir jāpalaiž mezglā vai 'pavāra klienta', nevis šefpavāra darbstacijā)

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

Vai arī šeit ir viena lādīte (tiek darbināta no ./my-chef-project/CWD uz 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'

Tieši tā! Skatieties, kā standarta izvade piepildās ar šefpavāra aktivitātēm, mēģinot saskaņot jūsu mezglu ar pavārgrāmatās norādīto. Pavārs-solo uzstādīs visus dārgakmeņus, kas nepieciešami visām pavārgrāmatām. Ja komanda chef-solo ir veiksmīga, Ubuntu lodziņā aiz nginx darbosies Django lietojumprogramma. Pārejiet uz domēnu/IP, lai to pārbaudītu.

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

Reaģējot uz izmaiņām

Ikreiz, kad mēs veicam izmaiņas sava projekta direktorija saturā (receptes, veidnes vai lietojumprogrammas pirmkods utt.), vienkārši palaidiet iepriekš minēto vienu līniju no projekta direktorijas.

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.

Tarbola mitināšana (pēc izvēles)

Ja uzmanīgi aplūkojat pēdējo komandu šefpavārs-solo, ievērojiet, ka --recipe-urlir paredzēts URL. Tas nozīmē, ka jums var būt darbplūsma, kurā CI izveidos jūsu šefpavāra solo tarbolu, augšupielādēs to kaut kur un konfigurēs jūsu mezglu, lai tas periodiski izvilktu no tā.

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.


Kā instalēt Jenkins operētājsistēmā CentOS 7

Kā instalēt Jenkins operētājsistēmā CentOS 7

Jenkins ir populārs atvērtā pirmkoda CI (Continuous Integration) rīks, ko plaši izmanto projektu izstrādei, izvietošanai un automatizācijai. Šis raksts tiks

Kā instalēt un konfigurēt Concourse CI Ubuntu 16.04

Kā instalēt un konfigurēt Concourse CI Ubuntu 16.04

Vai izmantojat citu sistēmu? Ievads Nepārtrauktā integrācija ir DevOps programmatūras izstrādes prakse, kas ļauj izstrādātājiem bieži apvienot

Kā instalēt un konfigurēt Ansible operētājsistēmā Debian 9 lietošanai ar Windows Server

Kā instalēt un konfigurēt Ansible operētājsistēmā Debian 9 lietošanai ar Windows Server

Vai izmantojat citu sistēmu? Ansible ir atvērtā pirmkoda rīks uzdevumu automatizēšanai. Tas pārvalda jūsu Linux un Windows serveru konfigurāciju. Tas strādā

Kā instalēt un konfigurēt GoCD operētājsistēmā CentOS 7

Kā instalēt un konfigurēt GoCD operētājsistēmā CentOS 7

Vai izmantojat citu sistēmu? GoCD ir atvērtā koda nepārtrauktas piegādes un automatizācijas sistēma. Tas ļauj modelēt sarežģītas darbplūsmas, izmantojot tās paralēlo an

SaltStack izmantošana ar pīlāriem Ubuntu 17.04

SaltStack izmantošana ar pīlāriem Ubuntu 17.04

Lai gan SaltStack ir lielisks rīks darbību veikšanai daudzos serveros vienlaikus, tas atbalsta arī katram resursdatoram definētus konfigurācijas sākotnējos iestatījumus, kas saglabāti

Kā instalēt un konfigurēt Ansible operētājsistēmā CentOS 7 lietošanai ar Windows Server

Kā instalēt un konfigurēt Ansible operētājsistēmā CentOS 7 lietošanai ar Windows Server

Vai izmantojat citu sistēmu? Ansible ir atvērtā pirmkoda rīks uzdevumu automatizēšanai. Tas pārvalda jūsu Linux un Windows serveru konfigurāciju. Tas strādā

How to Install Drone CI on Ubuntu 18.04

How to Install Drone CI on Ubuntu 18.04

Introduction Drone is an automated, continuous testing and delivery platform which runs on your own infrastructure. Drone supports any language, service o

Vultr Load Balancers

Vultr Load Balancers

Kas ir slodzes līdzsvarotājs Slodzes līdzsvarotāji atrodas jūsu lietojumprogrammas priekšā un sadala ienākošo trafiku vairākos jūsu lietojumprogrammas gadījumos. Fo

Kā instalēt Foreman operētājsistēmā CentOS 7

Kā instalēt Foreman operētājsistēmā CentOS 7

Vai izmantojat citu sistēmu? Foreman ir bezmaksas atvērtā koda rīks, kas palīdz konfigurēt un pārvaldīt fiziskos un virtuālos serverus. Forema

Kā instalēt SaltStack operētājsistēmā CentOS 7

Kā instalēt SaltStack operētājsistēmā CentOS 7

SaltStack jeb Salt ir populārs atvērtā pirmkoda konfigurācijas pārvaldības risinājums, ko var izmantot attālinātas izpildes, konfigurācijas pārvaldības, kodēšanas ieviešanai.

Kā instalēt Strider kompaktdisku Ubuntu 18.04

Kā instalēt Strider kompaktdisku Ubuntu 18.04

Ievads Strider CD ir atvērtā koda nepārtrauktas izvietošanas platforma. Lietojumprogramma ir rakstīta Node.js un izmanto MongoDB kā krātuves aizmugursistēmu. Solis

Chocolatey Package Manager izmantošana operētājsistēmā Windows

Chocolatey Package Manager izmantošana operētājsistēmā Windows

Ievads Chocolatey nodrošina pakotņu pārvaldību, kas atvieglo programmatūras un atkarību administrēšanu operētājsistēmā Linux sistēmā Windows. Jūs varat ātri un viegli

Momentuzņēmumu izveide, izmantojot pakotāju

Momentuzņēmumu izveide, izmantojot pakotāju

Kas ir Packer? Packer ir servera attēlveidošanas rīks, ko izstrādājis HashiCorp. Servera attēlveidošana; vai alternatīvi, nemainīga infrastruktūra; ir populāra alternatīva

Kā instalēt un konfigurēt Concourse CI operētājsistēmā CentOS 7

Kā instalēt un konfigurēt Concourse CI operētājsistēmā CentOS 7

Vai izmantojat citu sistēmu? Ievads Nepārtrauktā integrācija ir DevOps programmatūras izstrādes prakse, kas ļauj izstrādātājiem bieži apvienot

Chef-solo izmantošana, lai konfigurētu Django lietotni Ubuntu

Chef-solo izmantošana, lai konfigurētu Django lietotni Ubuntu

Ir daudzi veidi, kā automatizēt kastes iestatīšanas un konfigurēšanas procesu. Kādu iemeslu dēļ, ja visa mūsu sistēma šobrīd sastāv no tikai

Kā instalēt Foreman Ubuntu 16.04 LTS

Kā instalēt Foreman Ubuntu 16.04 LTS

Vai izmantojat citu sistēmu? Foreman ir bezmaksas atvērtā koda rīks, kas palīdz konfigurēt un pārvaldīt fiziskos un virtuālos serverus. Forema

Darba sākšana ar SaltStack uz Ubuntu 17.04

Darba sākšana ar SaltStack uz Ubuntu 17.04

SaltStack ir uz python balstīta konfigurācijas pārvaldības programma, kas ir optimizēta konfigurācijas failu, izvietošanas un visa cita unde automatizācijai.

Mašīnu pieaugums: AI reālās pasaules lietojumi

Mašīnu pieaugums: AI reālās pasaules lietojumi

Mākslīgais intelekts nav nākotnē, tas ir šeit, tagadnē. Šajā emuārā lasiet, kā mākslīgā intelekta lietojumprogrammas ir ietekmējušas dažādas nozares.

DDOS uzbrukumi: īss pārskats

DDOS uzbrukumi: īss pārskats

Vai arī jūs esat DDOS uzbrukumu upuris un esat neizpratnē par profilakses metodēm? Izlasiet šo rakstu, lai atrisinātu savus jautājumus.

Vai esat kādreiz domājis, kā hakeri pelna naudu?

Vai esat kādreiz domājis, kā hakeri pelna naudu?

Iespējams, esat dzirdējuši, ka hakeri pelna daudz naudas, bet vai esat kādreiz domājuši, kā viņi nopelna šādu naudu? pārrunāsim.

Google revolucionāri izgudrojumi, kas atvieglos jūsu dzīvi.

Google revolucionāri izgudrojumi, kas atvieglos jūsu dzīvi.

Vai vēlaties redzēt revolucionārus Google izgudrojumus un to, kā šie izgudrojumi mainīja katra cilvēka dzīvi mūsdienās? Pēc tam lasiet emuārā, lai redzētu Google izgudrojumus.

Piektdiena: kas notika ar AI vadītām automašīnām?

Piektdiena: kas notika ar AI vadītām automašīnām?

Pašpiedziņas automobiļu koncepcija izbraukt uz ceļiem ar mākslīgā intelekta palīdzību ir mūsu sapnis jau kādu laiku. Bet, neskatoties uz vairākiem solījumiem, tie nekur nav redzami. Lasiet šo emuāru, lai uzzinātu vairāk…

Tehnoloģiskā singularitāte: cilvēces civilizācijas tāla nākotne?

Tehnoloģiskā singularitāte: cilvēces civilizācijas tāla nākotne?

Zinātnei strauji attīstoties, pārņemot lielu daļu mūsu pūļu, palielinās arī risks pakļaut sevi neizskaidrojamai singularitātei. Izlasiet, ko singularitāte varētu nozīmēt mums.

Datu glabāšanas evolūcija – infografika

Datu glabāšanas evolūcija – infografika

Datu uzglabāšanas metodes ir attīstījušās kopš datu dzimšanas. Šajā emuārā ir aprakstīta datu uzglabāšanas attīstība, pamatojoties uz infografiku.

Lielo datu atsauces arhitektūras slāņu funkcijas

Lielo datu atsauces arhitektūras slāņu funkcijas

Lasiet emuāru, lai vienkāršākā veidā uzzinātu dažādus lielo datu arhitektūras slāņus un to funkcijas.

6 brīnišķīgas priekšrocības, ko sniedz viedo mājas ierīču izmantošana mūsu dzīvē

6 brīnišķīgas priekšrocības, ko sniedz viedo mājas ierīču izmantošana mūsu dzīvē

Šajā digitālajā pasaulē viedās mājas ierīces ir kļuvušas par būtisku dzīves sastāvdaļu. Šeit ir daži pārsteidzoši viedo mājas ierīču ieguvumi, lai padarītu mūsu dzīvi dzīves vērtu un vienkāršāku.

MacOS Catalina 10.15.4 papildinājuma atjauninājums rada vairāk problēmu nekā to risināšana

MacOS Catalina 10.15.4 papildinājuma atjauninājums rada vairāk problēmu nekā to risināšana

Nesen Apple izlaida macOS Catalina 10.15.4 papildinājuma atjauninājumu, lai novērstu problēmas, taču šķiet, ka atjauninājums rada vairāk problēmu, kas izraisa Mac datoru bloķēšanu. Izlasiet šo rakstu, lai uzzinātu vairāk