Коришћење Цхеф-соло за конфигурисање Дјанго апликације на Убунту-у

Постоји много начина да се аутоматизује процес подешавања и конфигурисања кутије. Из било ког разлога, ако се цео наш систем у овом тренутку састоји од само једне кутије, постављање потпуне СЦМ (Софтваре Цонфигуратион Манагемент) инфраструктуре је претерано. Схелл скрипте су једна од опција, али можемо користити и смањену верзију СЦМ-а која је доступна у неколико алата. Цхеф је једна од популарних опција, а "цхеф-соло" је Цхеф-ов самостални конфигурациони режим где нам није потребан додатни чвор да би деловао као "цхеф-сервер". Све што је потребно је УРЛ или путања до тарбалл пакета који садржи куварске књиге. У поређењу са схелл скриптама, овај тип приступа је декларативнији и ефикаснији и такође је добар увод за почетак рада са СЦМ-овима или ИаЦ (Инфраструктура као код) процесима.

Неколико других предности коришћења цхеф-соло:

  • Композиција: Користите куварске књиге заједнице из супермаркета кувара или на другим местима.
  • Бесплатан и отворен извор; лиценциран под дозвољеном Апацхе 2.0 лиценцом.
  • Приступ остатку Цхеф-овог екосистема (ИнСпец, ЦхефСпец, Цоокстиле, Фоодцритиц, цхеф-схелл итд.)
  • Куварске књиге и рецепти се касније могу прилагодити режиму клијент/сервер.

И неке недостатке:

  • Неке локалне куварице у Цхеф супермаркету су застареле, покварене и не одржавају се.
  • цхеф-соло не може самостално да реши зависности.

„Рецепти“ унутар „куварске књиге“ кувара имају ДСЛ заснован на рубину који описује „ресурсе“ да буду у одређеном стању на чвору. Хајде да наставимо са водичем да бисмо се упознали са неколико Цхеф концепата који су такође применљиви на цхеф-соло. Наш циљ је да поставимо Убунту чвор који покреће Питхон/Дјанго веб апликацију користећи Гуницорн и НГИНКС.

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.


(Све од ове тачке па надаље, осим ако није другачије наведено, треба да се покреће на нашој машини, која се такође назива „Радна станица кувара“)

Прављење кувара

Куварске књиге у цхеф-у су јединице за вишекратну употребу које садрже све што је потребно за подршку сценарију конфигурације. Куварске књиге могу да садрже више „рецепата“, а „рецепти“ се углавном састоје од образаца ресурса. default.rbје подразумевани рецепт који ће се покренути када се куварска књига референцира у рун-листи . Различити рецепти омогућавају одвајање брига. Међутим, за овај водич ћемо додати све декларације ресурса у једну главну датотеку рецепта, а то је default.rb.

Направите фасциклу под називом "ми-цхеф-пројецт" и направите фасциклу у њој под називом "цоокбоокс". Од ./my-chef-project/cookbooks/, покрените:

$ chef generate cookbook my-cookbook

Наша структура директоријума ће сада изгледати овако:

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

Додавање пакета

Први корак у постављању нашег чвора је да идентификујемо које пакете захтева наша апликација. Наш чвор је изабран да буде Убунту, тако да се можемо ослонити на АПТ менаџер пакета да прикупи зависности. Инсталирање пакета које обезбеђује дистрибуција ОС-а је онда лако:

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'

Ово је прилично разумљиво. Први ред ће ажурирати апт спремиште, а следећи редови ће инсталирати те пакете.

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.

Креирање линук корисника

Када завршимо са додавањем потребних пакета, морамо да креирамо непривилегованог Линук корисника који ће поседовати изворни код апликације.

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

Имајте на уму да је лозинка хеш формат који се користи у Линуку. Може се извести помоћу ОпенССЛ-а:

$ openssl passwd -1 -salt alilbitof mypassword

Укључујући извор апликације

Хајде да сада укључимо изворни код Дјанго апликације у нашу куварску књигу. Поставите изворни код унутар ./my-chef-project/cookbooks/my-cookbook/files/default/myapp/ Креирајте ./my-chef-project/cookbooks/my-cookbook/files/defaultдиректоријум ако не постоји.

Упутство за копирање ових датотека на удаљену локацију на нашем чвору је описано коришћењем ресурса ремоте_дирецтори :

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

Увлачење Питхон зависности

Да бисмо инсталирали питхон пакете у requirements.txt, можемо да користимо екецуте ресурс за покретање произвољне команде. У овом случају, преко њега треба да извршимо команду пип инсталл:

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

Подешавање Гуницорн & НГИНКС

Сада је време да припремите Гуницорн ВСГИ ХТТП сервер са НГИНКС-ом као нашим обрнутим проксијем. Нгинк се такође користи за руковање свим статичким средствима из Дјанга.

Да бисте поставили Гуницорн као услугу на Убунту, може се користити Системд. Системд_унит ресурс је укључен у Цхеф од верзије 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

Сада морамо да укључимо стандардну НГИНКС проки конфигурацију на овај Гуницорн сервер као што је приказано испод. Овај исечак може да иде у ./my-cookbook/templates/nginx.conf.erb. Креирајте директоријум шаблона ако не постоји.

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.

Да бисте копирали ову конфигурацију у фасциклу на којој су омогућене локације на чвору, користите ресурс шаблона из Цхеф-а.

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

Активирање конфигурација на нгинк-у се обично врши креирањем симболичне везе која указује на конфигурацију на sites-availableу нгинк-овој sites-enabledфасцикли. Симболи се могу декларисати у куварским куварима помоћу ресурса линка као што је приказано у наставку:

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

и да избришете подразумевану симболичку везу конфигурације:

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

Покретање НГИНКС-а

И на крају, да покренете нгинк услугу:

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

Рунлистс

Рун-листе у цхеф-у су уређена листа улога или рецепата у кувару који ће се извршавати у низу на чвору. Имамо једну куварску књигу „ми-цоокбоок“ и „подразумевани“ рецепт унутар ње коју треба да извршимо на Убунту кутији, тако да би рунлист.јсон у нашем директоријуму пројекта ( ./my-chef-project/runlist.json) требало да изгледа овако:

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

Завршни кораци

Наша куварица за соло кувара је спремна за сервирање. Време је да обезбедите Убунту 18.04 машину и инсталирате ЦхефДК на њу:

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

Враћајући се на нашу Цхеф радну станицу , све што треба да урадимо је да ставимо фасциклу куварских књига у тарбалл, пребацимо тај тарбалл заједно са runlist.jsonна удаљени чвор који смо претходно дали и покренемо команду цхеф-соло:

(Наредба испод треба да се покрене унутар чвора или 'цхеф клијента', а не Цхеф Воркстатион)

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

Или ево једног реда (који ће се покренути из ./my-chef-project/ЦВД-а на Цхеф Воркстатион):

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'

То је то! Гледајте како се стандардни излаз попуњава активностима Цхеф-а који покушава да конвергира ваш чвор са оним што сте навели у куварима. Цхеф-соло ће инсталирати све драгуље потребне за све куваре. Ако је команда цхеф-соло успешна, имаћемо Дјанго апликацију која ради иза нгинк-а на Убунту кутији. Идите на домен/ИП да бисте га тестирали.

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

Реаговање на промене

Кад год направимо промену у садржају нашег пројектног директоријума (рецепти, шаблони или изворни код апликације итд.), једноставно покрените горњи једноструки редак из директоријума пројекта.

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.

Хостовање тарбалл-а (опционо)

Ако пажљиво погледате последњу команду цхеф-соло, приметите да --recipe-urlје намењено да преузме УРЛ. То значи да можете имати ток посла у коме ће ЦИ направити ваш цхеф-соло тарбалл, отпремити га негде и конфигурисати ваш чвор да повремено извлачи из њега.

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.


Како инсталирати Јенкинс на ЦентОС 7

Како инсталирати Јенкинс на ЦентОС 7

Јенкинс је популарна ЦИ (континуирана интеграција) алатка отвореног кода која се широко користи за развој пројеката, примену и аутоматизацију. Овај чланак ће

Како инсталирати и конфигурисати Цонцоурсе ЦИ на Убунту 16.04

Како инсталирати и конфигурисати Цонцоурсе ЦИ на Убунту 16.04

Користите другачији систем? Увод Континуирана интеграција је ДевОпс пракса развоја софтвера која омогућава програмерима да често спајају

Како инсталирати и конфигурисати Ансибле на Дебиан 9 за коришћење са Виндовс сервером

Како инсталирати и конфигурисати Ансибле на Дебиан 9 за коришћење са Виндовс сервером

Користите другачији систем? Ансибле је алатка отвореног кода за аутоматизацију задатака. Он управља конфигурацијом ваших Линук и Виндовс сервера. Је рад

Како инсталирати и конфигурисати ГоЦД на ЦентОС 7

Како инсталирати и конфигурисати ГоЦД на ЦентОС 7

Користите другачији систем? ГоЦД је систем за континуирану испоруку и аутоматизацију отвореног кода. Омогућава вам да моделујете сложене токове рада користећи свој паралелни ан

Коришћење СалтСтацк-а са стубовима на Убунту 17.04

Коришћење СалтСтацк-а са стубовима на Убунту 17.04

Иако је СалтСтацк одличан алат за истовремено покретање операција на многим серверима, он такође подржава унапред дефинисана подешавања конфигурације по хосту ускладиштена у

Како инсталирати и конфигурисати Ансибле на ЦентОС 7 за коришћење са Виндовс сервером

Како инсталирати и конфигурисати Ансибле на ЦентОС 7 за коришћење са Виндовс сервером

Користите другачији систем? Ансибле је алатка отвореног кода за аутоматизацију задатака. Он управља конфигурацијом ваших Линук и Виндовс сервера. Је рад

Како инсталирати Дроне ЦИ на Убунту 18.04

Како инсталирати Дроне ЦИ на Убунту 18.04

Увод Дроне је аутоматизована, континуирана платформа за тестирање и испоруку која ради на вашој сопственој инфраструктури. Дрон подржава било који језик, услугу о

Вултр балансери оптерећења

Вултр балансери оптерећења

Шта је балансатор оптерећења Балансери оптерећења седе испред ваше апликације и дистрибуирају долазни саобраћај на више инстанци ваше апликације. Фо

Како инсталирати Форемана на ЦентОС 7

Како инсталирати Форемана на ЦентОС 7

Користите другачији систем? Фореман је бесплатан алат отвореног кода који вам помаже у конфигурацији и управљању физичким и виртуелним серверима. Форема

Како инсталирати СалтСтацк на ЦентОС 7

Како инсталирати СалтСтацк на ЦентОС 7

СалтСтацк, или Салт, је популарно решење за управљање конфигурацијом отвореног кода које се може користити за имплементацију даљинског извршавања, управљања конфигурацијом, код

Како инсталирати Стридер ЦД на Убунту 18.04

Како инсталирати Стридер ЦД на Убунту 18.04

Увод Стридер ЦД је платформа за континуирано примену отвореног кода. Апликација је написана у Ноде.јс и користи МонгоДБ као позадину за складиштење. Стриде

Коришћење Цхоцолатеи Пацкаге Манагер-а на Виндовс-у

Коришћење Цхоцолатеи Пацкаге Манагер-а на Виндовс-у

Увод Цхоцолатеи доноси управљање пакетима које олакшава администрацију софтвера и зависности на Линук-у у Виндовс. Можете брзо и лако

Прављење снимака помоћу Пацкер-а

Прављење снимака помоћу Пацкер-а

Шта је Пацкер? Пацкер је алатка за обраду слика сервера коју је развио ХасхиЦорп. Сервер имагинг; или алтернативно, непроменљива инфраструктура; је популарна алтернатива

Како инсталирати и конфигурисати Цонцоурсе ЦИ на ЦентОС 7

Како инсталирати и конфигурисати Цонцоурсе ЦИ на ЦентОС 7

Користите другачији систем? Увод Континуирана интеграција је ДевОпс пракса развоја софтвера која омогућава програмерима да често спајају

Коришћење Цхеф-соло за конфигурисање Дјанго апликације на Убунту-у

Коришћење Цхеф-соло за конфигурисање Дјанго апликације на Убунту-у

Постоји много начина да се аутоматизује процес подешавања и конфигурисања кутије. Из било ког разлога, ако се цео наш систем у овом тренутку састоји од праведних

Како инсталирати Форемана на Убунту 16.04 ЛТС

Како инсталирати Форемана на Убунту 16.04 ЛТС

Користите другачији систем? Фореман је бесплатан алат отвореног кода који вам помаже у конфигурацији и управљању физичким и виртуелним серверима. Форема

Почетак рада са СалтСтацк-ом на Убунту 17.04

Почетак рада са СалтСтацк-ом на Убунту 17.04

СалтСтацк је програм за управљање конфигурацијом заснован на питхон-у који је оптимизован за аутоматизацију конфигурационих датотека, имплементације и било чега другог.

Успон машина: Примене вештачке интелигенције у стварном свету

Успон машина: Примене вештачке интелигенције у стварном свету

Вештачка интелигенција није у будућности, она је овде управо у садашњости. У овом блогу Прочитајте како су апликације вештачке интелигенције утицале на различите секторе.

ДДОС напади: кратак преглед

ДДОС напади: кратак преглед

Да ли сте и ви жртва ДДОС напада и збуњени сте методама превенције? Прочитајте овај чланак да бисте решили своја питања.

Да ли сте се икада запитали како хакери зарађују новац?

Да ли сте се икада запитали како хакери зарађују новац?

Можда сте чули да хакери зарађују много новца, али да ли сте се икада запитали како зарађују толики новац? Хајде да причамо.

Гоогле-ови револуционарни изуми који ће вам олакшати живот.

Гоогле-ови револуционарни изуми који ће вам олакшати живот.

Да ли желите да видите револуционарне изуме Гугла и како су ти изуми променили живот сваког људског бића данас? Затим читајте на блогу да бисте видели Гооглеове изуме.

Фридаи Ессентиал: Шта се десило са аутомобилима које покреће вештачка интелигенција?

Фридаи Ессентиал: Шта се десило са аутомобилима које покреће вештачка интелигенција?

Концепт самовозећих аутомобила који путују на путеве уз помоћ вештачке интелигенције је сан који већ неко време имамо. Али упркос неколико обећања, њих нема нигде. Прочитајте овај блог да сазнате више…

Технолошка сингуларност: далека будућност људске цивилизације?

Технолошка сингуларност: далека будућност људске цивилизације?

Како се наука развија великом брзином, преузимајући многе наше напоре, расте и ризик да се подвргнемо необјашњивој сингуларности. Прочитајте шта би сингуларност могла да значи за нас.

Еволуција складиштења података – Инфографика

Еволуција складиштења података – Инфографика

Методе складиштења података су се развијале можда од рођења података. Овај блог покрива еволуцију складиштења података на основу инфографике.

Функционалности слојева референтне архитектуре великих података

Функционалности слојева референтне архитектуре великих података

Прочитајте блог да бисте на најједноставнији начин упознали различите слојеве у архитектури великих података и њихове функционалности.

6 невероватних предности поседовања паметних кућних уређаја у нашим животима

6 невероватних предности поседовања паметних кућних уређаја у нашим животима

У овом дигиталном свету, паметни кућни уређаји постали су кључни део живота. Ево неколико невероватних предности паметних кућних уређаја о томе како они чине наш живот вредним живљења и једноставнијим.

Ажурирање додатка за мацОС Цаталина 10.15.4 изазива више проблема него што их решава

Ажурирање додатка за мацОС Цаталина 10.15.4 изазива више проблема него што их решава

Недавно је Аппле издао мацОС Цаталина 10.15.4 додатак за исправку проблема, али изгледа да ажурирање изазива више проблема који доводе до квара Мац машина. Прочитајте овај чланак да бисте сазнали више