Używanie Chef-solo do konfigurowania aplikacji Django na Ubuntu

Istnieje wiele sposobów na zautomatyzowanie procesu konfiguracji i konfiguracji skrzynki. Z jakiegokolwiek powodu, jeśli cały nasz system w tym momencie składa się tylko z jednej skrzynki, skonfigurowanie pełnej infrastruktury SCM (Software Configuration Management) to przesada. Skrypty powłoki są jedną z opcji, ale możemy również użyć uproszczonej wersji SCM, która jest dostępna w kilku dostępnych narzędziach. Chef jest jedną z popularnych opcji, a „chef-solo” to samodzielny tryb konfiguracji szefa kuchni, w którym nie potrzebujemy dodatkowego węzła, aby działał jako „kucharz-serwer”. Wszystko czego potrzebuje to adres URL lub ścieżka do pakietu tarball, który zawiera książki kucharskie. W porównaniu ze skryptami powłoki ten rodzaj podejścia jest bardziej deklaratywny i wydajny od samego początku, a także stanowi dobre wprowadzenie do rozpoczęcia pracy z SCM lub procesami IaC (Infrastructure as Code).

Kilka innych korzyści z używania szefa kuchni solo:

  • Kompozycyjność: korzystaj ze wspólnotowych książek kucharskich z supermarketu szefa kuchni lub innych miejsc.
  • Darmowe i otwarte oprogramowanie; licencjonowane na podstawie zezwolenia Apache 2.0.
  • Dostęp do reszty ekosystemu szefa kuchni (InSpec, ChefSpec, Cookstyle, Foodcritic, szef kuchni itp.)
  • Książki kucharskie i przepisy można później dostosować do trybu klient / serwer.

I niektóre wady:

  • Niektóre społeczne książki kucharskie w supermarkecie szefa kuchni są nieaktualne, zepsute i nie są utrzymywane.
  • szef kuchni solo nie jest w stanie samodzielnie rozwiązać zależności.

„Przepisy” w „książce kucharskiej” szefa kuchni oparte są na ruby ​​DSL, która opisuje „zasoby”, które mają znajdować się w określonym stanie w węźle. Przejdźmy do przewodnika, aby zapoznać się z kilkoma koncepcjami szefa kuchni, które mają również zastosowanie do szefa kuchni solo. Naszym celem jest skonfigurowanie węzła Ubuntu z uruchomioną aplikacją internetową Python / Django przy użyciu Gunicorn i NGINX.

Uwaga: niekoniecznie wymagamy, aby ChefDK był zainstalowany na naszej „stacji roboczej szefa kuchni” (naszej maszynie), chociaż za jego pomocą możemy użyć poleceń „generowania szefa kuchni”, aby rozpocząć od struktury katalogów do tworzenia książek kucharskich, przepisów kulinarnych i innych. W tym artykule założymy, że ChefDK jest zainstalowany na naszej stacji roboczej. Polecenia były uruchamiane przy użyciu wersji 4.7.26-1 programu ChefDK.


(Wszystko od tego momentu, o ile nie zaznaczono inaczej, ma być uruchamiane na naszym komputerze, zwanym także „stanowiskiem szefa kuchni”)

Tworzenie książki kucharskiej

Książki kucharskie w kuchni są jednostkami wielokrotnego użytku, które zawierają wszystko, co jest potrzebne do wsparcia scenariusza konfiguracji. Książki kucharskie mogą zawierać wiele „przepisów”, a „przepisy” składają się głównie z wzorców zasobów. default.rbto domyślny przepis, który zostanie uruchomiony, gdy książka kucharska zostanie wymieniona na liście run-run . Różne przepisy pozwalają rozdzielić obawy. W tym samouczku dodamy jednak wszystkie deklaracje zasobów do jednego głównego pliku receptury, którym jest default.rb.

Utwórz folder o nazwie „my-chef-project” i utwórz w nim folder o nazwie „książki kucharskie”. Od ./my-chef-project/cookbooks/, uruchom:

$ chef generate cookbook my-cookbook

Nasza struktura katalogów będzie teraz wyglądać następująco:

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

Dodawanie pakietów

Pierwszym krokiem do skonfigurowania naszego węzła jest określenie, jakie pakiety są wymagane przez naszą aplikację. Nasz węzeł został wybrany jako Ubuntu, więc możemy polegać na menedżerze pakietów APT w celu zebrania zależności. Instalowanie pakietów dostarczanych przez dystrybucję systemu operacyjnego jest więc dziecinnie proste:

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'

Są to dość oczywiste. Pierwszy wiersz zaktualizuje repozytorium apt, a kolejne wiersze zainstalują te pakiety.

Uwaga: Pakiety następujące po 'nginx' są potrzebne do kompilacji niektórych zależności Pythona przez pip. Mogą się one różnić w zależności od zależności projektu w Pythonie / django określonych w requirements.txt. Możesz użyć metody prób i błędów, aby określić te pakiety, które musisz uwzględnić w książce kucharskiej. Aby to zrobić, wykonaj instrukcję sudo pip install -r requirements.txt(Uwaga: Instaluje pakiety w całym systemie!) Na świeżo utworzonej maszynie Ubuntu, aby sprawdzić, czy działa poprawnie. Jeśli nie, stderr powinien dać ci wskazówki, jakich paczek brakuje.

Tworzenie użytkowników Linuksa

Po zakończeniu dodawania wymaganych pakietów musimy utworzyć nieuprzywilejowanego użytkownika systemu Linux, który będzie właścicielem kodu źródłowego aplikacji.

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

Pamiętaj, że hasło to format skrótu w tle używany w systemie Linux. Można go uzyskać za pomocą OpenSSL:

$ openssl passwd -1 -salt alilbitof mypassword

W tym źródło aplikacji

Teraz dołączmy kod źródłowy aplikacji Django do naszej książki kucharskiej. Umieść kod źródłowy w środku ./my-chef-project/cookbooks/my-cookbook/files/default/myapp/ Utwórz ./my-chef-project/cookbooks/my-cookbook/files/defaultkatalog, jeśli nie istnieje.

Instrukcja kopiowania tych plików do zdalnej lokalizacji w naszym węźle została opisana przy użyciu zasobu katalog_zdalny :

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

Wciąganie zależności Pythona

Aby zainstalować pakiety Pythona requirements.txt, możemy użyć zasobu wykonawczego do uruchomienia dowolnego polecenia. W takim przypadku musimy wykonać nad nim polecenie pip install:

execute 'install python dependencies' do
  command 'pip3 install -r requirements.txt'
  cwd '/home/bob/myapp'
end

Uwaga: pamiętaj, że zostanie to wykonane jako użytkownik root, a biblioteki Pythona zostaną zainstalowane w całym systemie. Jeśli nasz węzeł jest przeznaczony wyłącznie do uruchamiania tej jednej aplikacji w Pythonie, nie stanowi to większego problemu. Mimo to lepszym sposobem na utrzymanie porządku i rozsądku jest znalezienie i korzystanie ze społecznościowej książki kucharskiej zarządzającej instalacjami w języku Python lub „virtualenvs”. (lub przynajmniej napisz serię bloków wykonawczych, aby to powielić). Korzystanie z virtualenvs w Pythonie gwarantuje, że nie wpłynie to na żadne narzędzia systemowe oparte na Pythonie ani inne projekty Pythona

Konfiguracja Gunicorn i NGINX

Teraz nadszedł czas na przygotowanie serwera HTTP Gunicorn WSGI z NGINX jako naszym odwrotnym proxy. Nginx służy również do obsługi wszystkich zasobów statycznych z Django.

Aby połączyć Gunicorn jako usługę na Ubuntu, można użyć Systemd. Systemd_unit zasób znajduje się w szefa kuchni od wersji 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

Teraz musimy dołączyć standardową konfigurację proxy NGINX do tego serwera Gunicorn, jak pokazano poniżej. Do tego fragmentu można się dostać ./my-cookbook/templates/nginx.conf.erb. Utwórz katalog szablonów, jeśli nie istnieje.

Uwaga: Szablony szefa kuchni obsługują osadzone pliki ruby, które mogą zawierać zmienne, wyrażenia i instrukcje ruby. Chociaż ten plik ma rozszerzenie „erb”, nie użyliśmy żadnych instrukcji lub wyrażeń ruby. Ponadto, dla uproszczenia, mamy tutaj tylko konfigurację nginx inną niż HTTPS (delikatne przypomnienie; nie rób tego podczas produkcji!)

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/;
  }
}

Uwaga: Istnieje również alternatywna i lepsza konfiguracja, w której na przykład serwer Gunicorn jest powiązany z gniazdem domeny unix zamiast połączenia zwrotnego TCP. Warto to zbadać ze względu na wydajność.

Aby skopiować tę konfigurację do folderu obsługującego witryny w węźle, użyj zasobu szablonu od szefa kuchni.

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

Aktywacja konfiguracji na nginx zwykle odbywa się poprzez utworzenie dowiązania symbolicznego wskazującego na config sites-availablew sites-enabledfolderze nginx . Łącza symboliczne można zadeklarować w książkach kucharskich za pomocą zasobu łącza, jak pokazano poniżej:

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

i aby usunąć domyślne łącze symboliczne konfiguracji:

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

Uruchamianie NGINX

I wreszcie, aby uruchomić usługę Nginx:

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

Listy Run

Listy uruchomień w szefie kuchni to uporządkowana lista ról lub przepisów w książce kucharskiej, które będą wykonywane sekwencyjnie w węźle. Mamy jedną książkę kucharską „moja książka kucharska” i „domyślny” przepis, który musimy wykonać na polu Ubuntu, więc runlist.json w naszym katalogu projektu ( ./my-chef-project/runlist.json) powinien wyglądać następująco:

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

Ostatnie kroki

Nasza książka kucharska dla szefa kuchni solo jest gotowa do podania. Czas udostępnić maszynę Ubuntu 18.04 i zainstalować na niej 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'

Wracając do naszej stacji roboczej szefa kuchni , wystarczy umieścić folder książek kucharskich w pliku tarball, przenieść ten plik tarball wraz ze runlist.jsonzdalnym węzłem, który udostępniliśmy powyżej, i uruchomić polecenie szefa kuchni solo:

(Poniższe polecenie należy uruchomić w węźle lub „kliencie szefa kuchni”, a nie w stacji roboczej szefa kuchni)

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

Lub tutaj jest jeden linijka (do uruchomienia z ./my-chef-project/CWD na stacji roboczej szefa kuchni):

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'

Otóż ​​to! Zobacz, jak standardowe dane wyjściowe wypełniają się aktywnością Szefa kuchni, starając się połączyć węzeł z tym, co określiłeś w książkach kucharskich. Chef-solo zainstaluje wszystkie klejnoty wymagane dla wszystkich książek kucharskich. Jeśli polecenie szefa kuchni-solo się powiedzie, będziemy mieć działającą aplikację Django działającą za nginx na polu Ubuntu. Przejdź do domeny / adresu IP, aby go przetestować.

Uwaga: Pamiętaj, że w django może być konieczne ustawienie tej domeny / ip na ALLOWED_HOSTSliście w settings.py.

Reagowanie na zmiany

Ilekroć wprowadzamy zmiany w treści naszego katalogu projektu (przepisy, szablony lub kod źródłowy aplikacji itp.), Po prostu uruchom powyższą linijkę z katalogu projektu.

Wskazówka: Jeśli książka kucharska jest kontrolowana w wersji za pomocą git (tak jak powinna), dobrym pomysłem jest ustawienie haków git, aby uruchamiały tę linijkę.

Hostowanie tarballa (opcjonalnie)

Jeśli przyjrzysz się uważnie ostatniemu poleceniu szefa kuchni solo, zwróć uwagę, że --recipe-urljest to adres URL. Oznacza to, że możesz mieć przepływ pracy, w którym CI zbuduje tarballa szefa kuchni-solo, załaduje go gdzieś i skonfiguruje węzeł, aby okresowo z niego pobierał.

Wskazówka: Użyj curl, aby okresowo wyciągać zmienione archiwum jako cronjob. curl -z $filehonoruje If-Modified-Sincenagłówki i pobiera tar tar, jeśli plik zdalny został zmieniony od czasu znacznika czasu na istniejącym pliku lokalnym $file.



Leave a Comment

Rozpoczęcie pracy z SaltStack na Ubuntu 17.04

Rozpoczęcie pracy z SaltStack na Ubuntu 17.04

SaltStack to oparty na Pythonie program do zarządzania konfiguracją, który jest zoptymalizowany do automatyzacji plików konfiguracyjnych, wdrożeń i wszystkiego innego

Jak zainstalować Jenkins na CentOS 7

Jak zainstalować Jenkins na CentOS 7

Jenkins to popularne narzędzie CI (Continuous Integration) o otwartym kodzie źródłowym, które jest szeroko stosowane do opracowywania, wdrażania i automatyzacji projektów. Ten artykuł wil

Jak zainstalować i skonfigurować Concourse CI na Ubuntu 16.04

Jak zainstalować i skonfigurować Concourse CI na Ubuntu 16.04

Używasz innego systemu? Wprowadzenie Continuous Integration to praktyka programistyczna DevOps, która pozwala programistom często łączyć

Jak zainstalować Foreman na Ubuntu 16.04 LTS

Jak zainstalować Foreman na Ubuntu 16.04 LTS

Używasz innego systemu? Foreman to bezpłatne narzędzie typu open source, które pomaga w konfiguracji i zarządzaniu serwerami fizycznymi i wirtualnymi. Forema

Vultr Load Balancers

Vultr Load Balancers

Co to jest moduł równoważenia obciążenia Moduł równoważenia obciążenia znajduje się przed aplikacją i rozdziela ruch przychodzący na wiele instancji aplikacji. Fo

Jak zainstalować SaltStack na CentOS 7

Jak zainstalować SaltStack na CentOS 7

SaltStack, lub Salt, jest popularnym rozwiązaniem do zarządzania konfiguracją typu open source, które można wykorzystać do wdrożenia zdalnego wykonywania, zarządzania konfiguracją, kodu

Jak zainstalować i skonfigurować Ansible na CentOS 7 do użytku z systemem Windows Server

Jak zainstalować i skonfigurować Ansible na CentOS 7 do użytku z systemem Windows Server

Używasz innego systemu? Ansible to narzędzie typu open source do automatyzacji zadań. Zarządza konfiguracją serwerów Linux i Windows. Działa

Jak zainstalować Drone CI na Ubuntu 18.04

Jak zainstalować Drone CI na Ubuntu 18.04

Wprowadzenie Drone to zautomatyzowana, ciągła platforma testowa i dostarczająca, która działa na twojej infrastrukturze. Dron obsługuje dowolny język, usługa o

Jak zainstalować i skonfigurować Ansible na Debian 9 do użytku z Windows Server

Jak zainstalować i skonfigurować Ansible na Debian 9 do użytku z Windows Server

Używasz innego systemu? Ansible to narzędzie typu open source do automatyzacji zadań. Zarządza konfiguracją serwerów Linux i Windows. Działa

Używanie SaltStack z filarami na Ubuntu 17.04

Używanie SaltStack z filarami na Ubuntu 17.04

Podczas gdy SaltStack jest doskonałym narzędziem do uruchamiania operacji na wielu serwerach jednocześnie, obsługuje również predefiniowane ustawienia konfiguracyjne dla poszczególnych hostów przechowywane w

Tworzenie migawek za pomocą Packera

Tworzenie migawek za pomocą Packera

Co to jest Packer? Packer to narzędzie do tworzenia obrazów serwerów opracowane przez HashiCorp. Obrazowanie serwera; lub alternatywnie niezmienna infrastruktura; jest popularną alternatywą

Jak zainstalować i skonfigurować Concourse CI na CentOS 7

Jak zainstalować i skonfigurować Concourse CI na CentOS 7

Używasz innego systemu? Wprowadzenie Continuous Integration to praktyka programistyczna DevOps, która pozwala programistom często łączyć

Korzystanie z Menedżera pakietów Chocolatey w systemie Windows

Korzystanie z Menedżera pakietów Chocolatey w systemie Windows

Wprowadzenie Chocolatey wprowadza do systemu Windows zarządzanie pakietami, które ułatwia administrowanie oprogramowaniem i zależnościami w systemie Linux. Możesz szybko i łatwo

Jak zainstalować Foreman na CentOS 7

Jak zainstalować Foreman na CentOS 7

Używasz innego systemu? Foreman to bezpłatne narzędzie typu open source, które pomaga w konfiguracji i zarządzaniu serwerami fizycznymi i wirtualnymi. Forema

Jak zainstalować dysk CD Strider na Ubuntu 18.04

Jak zainstalować dysk CD Strider na Ubuntu 18.04

Wprowadzenie Strider CD to platforma ciągłego wdrażania typu open source. Aplikacja jest napisana w Node.js i używa MongoDB jako zaplecza pamięci. Krok

Jak zainstalować i skonfigurować GoCD na CentOS 7

Jak zainstalować i skonfigurować GoCD na CentOS 7

Używasz innego systemu? GoCD to otwarty system ciągłego dostarczania i automatyzacji. Pozwala modelować złożone przepływy pracy za pomocą równoległego

Funkcjonalności warstw architektury referencyjnej Big Data

Funkcjonalności warstw architektury referencyjnej Big Data

Przeczytaj blog, aby w najprostszy sposób poznać różne warstwy w architekturze Big Data i ich funkcjonalności.

Rewolucyjne wynalazki Google, które ułatwią Twoje życie.

Rewolucyjne wynalazki Google, które ułatwią Twoje życie.

Chcesz zobaczyć rewolucyjne wynalazki Google i jak te wynalazki zmieniły życie każdego człowieka dzisiaj? Następnie czytaj na blogu, aby zobaczyć wynalazki Google.

13 komercyjnych narzędzi do ekstrakcji danych z Big Data

13 komercyjnych narzędzi do ekstrakcji danych z Big Data

13 komercyjnych narzędzi do ekstrakcji danych z Big Data

Pozostań w kontakcie dzięki aplikacji WhatsApp na komputer 24*7

Pozostań w kontakcie dzięki aplikacji WhatsApp na komputer 24*7

Whatsapp w końcu uruchomił aplikację Desktop dla użytkowników komputerów Mac i Windows. Teraz możesz łatwo uzyskać dostęp do Whatsapp z systemu Windows lub Mac. Dostępne dla Windows 8+ i Mac OS 10.9+

5 przykładów, które dowodzą, że energetyka jądrowa nie zawsze jest zła

5 przykładów, które dowodzą, że energetyka jądrowa nie zawsze jest zła

Energia jądrowa jest zawsze pogardzana, nigdy jej nie szanujemy z powodu przeszłych wydarzeń, ale nie zawsze jest zła. Przeczytaj post, aby dowiedzieć się więcej na ten temat.

Friday Essential: Co się stało z samochodami sterowanymi przez sztuczną inteligencję?

Friday Essential: Co się stało z samochodami sterowanymi przez sztuczną inteligencję?

Koncepcja autonomicznych samochodów, które wyjadą na drogi za pomocą sztucznej inteligencji, to marzenie, które mamy już od jakiegoś czasu. Ale pomimo kilku obietnic nigdzie ich nie widać. Przeczytaj ten blog, aby dowiedzieć się więcej…

Czy AI może walczyć z rosnącą liczbą ataków ransomware?

Czy AI może walczyć z rosnącą liczbą ataków ransomware?

Wzrasta liczba ataków ransomware, ale czy sztuczna inteligencja może pomóc w radzeniu sobie z najnowszym wirusem komputerowym? Czy AI jest odpowiedzią? Przeczytaj tutaj, wiedz, że sztuczna inteligencja jest zmorą lub zgubą

5 przydatnych narzędzi sztucznej inteligencji, które uproszczą Twoje życie

5 przydatnych narzędzi sztucznej inteligencji, które uproszczą Twoje życie

Sztuczna inteligencja nie jest dla ludzi nową nazwą. Ponieważ sztuczna inteligencja jest włączona do każdego strumienia, jednym z nich jest opracowywanie narzędzi zwiększających ludzką wydajność i dokładność. Skorzystaj z tych niesamowitych narzędzi uczenia maszynowego i uprość swoje codzienne zadania.

Wgląd w 26 technik analizy Big Data: część 2

Wgląd w 26 technik analizy Big Data: część 2

Zawsze potrzebujemy Big Data Analytics do efektywnego zarządzania danymi. W tym artykule omówiliśmy kilka technik analizy Big Data. Sprawdź ten artykuł.

Ataki DDOS: krótki przegląd

Ataki DDOS: krótki przegląd

Czy jesteś również ofiarą ataków DDOS i nie masz pewności co do metod zapobiegania? Przeczytaj ten artykuł, aby rozwiązać swoje pytania.