Ubuntuda Django Uygulamasını Yapılandırmak için Chef-solo Kullanma

Bir kutuyu kurma ve yapılandırma işlemini otomatikleştirmenin birçok yolu vardır. Her ne sebeple olursa olsun, bu noktada tüm sistemimiz tek bir kutudan oluşuyorsa, tam bir SCM (Yazılım Yapılandırma Yönetimi) altyapısı oluşturmak aşırı bir iştir. Kabuk komut dosyaları bir seçenektir, ancak SCM'nin soyulmuş bir sürümünü de kullanabiliriz. Chef popüler seçeneklerden biridir ve "chef-solo" Chef'in bağımsız yapılandırma modudur ve burada "şef-sunucu" olarak hareket etmek için fazladan bir düğüme ihtiyaç duymazız. Tek gereken, bir URL veya şef yemek kitapları içeren bir tarball paketinin yoludur. Kabuk betikleri ile karşılaştırıldığında, bu tür bir yaklaşım kutudan daha açıklayıcı ve etkilidir ve ayrıca SCM'ler veya IaC (Kod Olarak Altyapı) süreçlerine başlamak için iyi bir giriş niteliğindedir.

Chef-solo kullanmanın diğer birkaç faydası:

  • Çıkarılabilirlik: Şef süpermarketi veya diğer yerlerden gelen topluluk yemek kitaplarını kullanın.
  • Özgür ve açık kaynak; izin verilen Apache 2.0 Lisansı kapsamında lisanslanmıştır.
  • Şef ekosisteminin geri kalanına erişim (InSpec, ChefSpec, Cookstyle, Foodcritic, şef kabuğu vb.)
  • Yemek kitapları ve tarifler daha sonra bir istemci / sunucu moduna uyarlanabilir.

Ve bazı dezavantajları:

  • Şef süpermarketteki bazı topluluk yemek kitapları eskimiş, kırık ve bakımsız.
  • chef-solo bağımlılıkları kendi başına çözemez.

Bir şef 'yemek kitabının' içindeki 'tarifler', bir düğümde belirli bir durumda olacak şekilde 'kaynakları' tanımlayan yakut tabanlı bir DSL'ye sahiptir. Şef-solo için de geçerli olan birkaç Şef kavramını tanımak için bir yol izleyelim. Hedefimiz Gunicorn ve NGINX kullanarak bir Python / Django web uygulaması çalıştıran bir Ubuntu düğümü kurmaktır.

Not: ChefDK'nin "Chef iş istasyonumuza" (makinemize) kurulması zorunlu değildir, bununla birlikte, yemek kitapları, yemek tarifleri ve daha fazlasını oluşturmak için bir dizin yapısıyla başlamak için 'şef oluşturma' komutlarını kullanabiliriz. Bu yazıda, ChefDK'nin iş istasyonumuza kurulu olduğunu varsayacağız. Komutlar ChefDK'nin 4.7.26-1 sürümü kullanılarak çalıştırıldı.


(Aksi belirtilmedikçe, bu noktadan sonraki her şey, 'Şef İş İstasyonu' olarak da adlandırılan makinemizde çalıştırılacaktır)

Yemek kitabı oluşturma

Şefteki yemek kitapları, bir yapılandırma senaryosunu desteklemek için gereken her şeyi içeren yeniden kullanılabilir birimlerdir. Yemek kitapları birden fazla 'tarif' içerebilir ve 'tarifler' çoğunlukla kaynak kalıplarından oluşur. default.rbçalışma kitabına bir çalışma listesinde referans verildiğinde çalıştırılacak varsayılan reçetedir . Farklı tarifler endişelerin ayrılmasına izin verir. Bununla birlikte, bu öğretici için tüm kaynak bildirimlerini bir ana tarif dosyasına ekleyeceğiz, yani default.rb.

"Chef-project" adında bir klasör oluşturun ve içinde "cookbooks" adında bir klasör oluşturun. Gönderen ./my-chef-project/cookbooks/, çalıştırın:

$ chef generate cookbook my-cookbook

Dizin yapımız şimdi şöyle görünecek:

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

Paket ekleme

Düğümümüzü kurmanın ilk adımı, uygulamamız tarafından hangi paketlerin gerekli olduğunu belirlemektir. Düğümümüz Ubuntu olarak seçildi, böylece bağımlılıkları toplamak için APT paket yöneticisine güvenebiliriz. OS dağıtımı tarafından sağlanan paketlerin kurulması o zaman çok kolay:

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'

Bunlar oldukça açıklayıcıdır. İlk satır apt deposunu güncelleyecek ve aşağıdaki satırlar bu paketleri kuracaktır.

Not: Python bağımlılıklarının bir kısmını pip yoluyla derlemek için 'nginx'i izleyen paketler gereklidir. Bunlar, içinde belirtilen python / django proje bağımlılıklarınıza bağlı olarak değişebilir requirements.txt. Yemek kitabınıza eklemeniz gereken bu paketleri belirlemek için bir deneme yanılma yöntemi kullanabilirsiniz. Bunu yapmak için, sudo pip install -r requirements.txtbaşarılı bir şekilde çalışıp çalışmadığını görmek için yeni başlatılmış bir ubuntu makinesinde bir el kitabı (Not: Bu, paketleri sisteme yükler!) Gerçekleştirin . Değilse, stderr size hangi paketlerin eksik olduğuna dair ipuçları vermelidir.

Linux kullanıcıları oluşturma

Gerekli paketleri eklemeyi tamamladıktan sonra, uygulama kaynak koduna sahip olacak ayrıcalıksız bir Linux kullanıcısı oluşturmamız gerekir.

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

Parolanın Linux'ta kullanılan bir gölge karma biçimi olduğunu unutmayın. OpenSSL kullanılarak türetilebilir:

$ openssl passwd -1 -salt alilbitof mypassword

Uygulama kaynağı dahil

Şimdi Django uygulama kaynak kodunu yemek kitabımıza ekleyelim. Varsa , kaynak kodunu Dizin ./my-chef-project/cookbooks/my-cookbook/files/default/myapp/ oluşturun'un içine yerleştirin ./my-chef-project/cookbooks/my-cookbook/files/default.

Bu dosyaları düğümümüzdeki uzak bir konuma kopyalama talimatı, remote_directory kaynağı kullanılarak açıklanır :

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 bağımlılıklarını çekme

Python paketlerini kurmak için rasgele bir komut çalıştırmak requirements.txtiçin execute kaynağını kullanabiliriz. Bu durumda, üzerinde pip install komutunu çalıştırmamız gerekir:

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

Not: Bunun kök kullanıcı olarak yürütüleceğini ve python kitaplıklarının sistem genelinde yükleneceğini unutmayın. Düğümümüz sadece bu tek bir python uygulamasını çalıştıracak şekilde tasarlanmışsa, o zaman sorun olmaz. Buna rağmen, işleri temiz ve aklı başında tutmak için daha iyi bir seçenek, python kurulumlarını veya 'virtualenvs'i yöneten bir topluluk yemek kitabı bulmak ve kullanmaktır. (veya en azından bunu çoğaltmak için bir dizi yürütme bloğu yazın). Python'da virtualenvs kullanmak, python tabanlı sistem araçlarının veya diğer python projelerinin etkilenmemesini sağlar

Gunicorn & NGINX kurulumu

Şimdi ters proxy olarak Gunicorn WSGI HTTP Sunucusunu NGINX ile hazırlama zamanı. Nginx, Django'daki tüm statik varlıkları işlemek için de kullanılır.

Gunicorn'u Ubuntu'da bir hizmet olarak bağlamak için Systemd kullanılabilir. Systemd_unit kaynak sürümü 12.11 beri şef dahildir.

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

Şimdi bu Gunicorn sunucusuna aşağıda gösterildiği gibi standart bir NGINX proxy yapılandırması eklememiz gerekiyor. Bu pasaj girebilir ./my-cookbook/templates/nginx.conf.erb. Yoksa, dizini oluşturun.

Not: Chef'in şablonları, değişkenler, yakut ifadeleri ve ifadeler içerebilen gömülü yakut dosyalarını destekler. Bu dosya 'erb' uzantısına sahip olmasına rağmen, ruby ​​deyimlerini veya ifadelerini kullanmadık. Ayrıca, basitlik açısından, burada sadece HTTPS olmayan bir nginx yapılandırması var (nazik hatırlatma; lütfen bunu üretimde yapmayın!)

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

Not: Ayrıca, Gunicorn sunucusunun TCP geri döngü bağlantısı yerine unix etki alanı soketine bağlı olduğu bir alternatif ve daha iyi bir yapılandırma da vardır. Bunu performans nedenleriyle araştırmaya değer.

Bu yapılandırmayı düğümdeki siteler etkin klasöre kopyalamak için Chef'deki şablon kaynağını kullanın .

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

Nginx üzerinde yapılandırmaların etkinleştirilmesi normalde sites-availablenginx'in sites-enabledklasöründeki yapılandırmaya işaret eden bir sembolik bağlantı oluşturularak yapılır . Symlinks aşağıdaki gibi bağlantı kaynağı ile şef yemek kitaplarında ilan edilebilir :

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

ve varsayılan yapılandırma sistem sembolünü silmek için:

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

NGINX'i Başlatma

Ve son olarak, nginx hizmetini başlatmak için:

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

Runlists

Şef içindeki çalışma listeleri, bir yemek kitabındaki düğümde sırayla yürütülecek sıralı bir rol veya tarif listesidir. Ubuntu kutusunda yürütmemiz gereken bir "yemek kitabım" ve "varsayılan" tarifimiz var, bu yüzden proje dizinimizdeki ( ./my-chef-project/runlist.json) runlist.json şöyle görünmelidir:

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

Son adımlar

Chef solo için yemek kitabımız servis edilmeye hazır. Bir Ubuntu 18.04 makinesi tedarik etme ve ChefDK'yı kurma zamanı:

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

Devam eden şef iş istasyonuna geri , yapmamız gereken tek şey bir tarball, transfer içine klasör yemek kitapları koymak olduğunu birlikte arşivini runlist.jsonyukarıda hazırlanmayan ve şef solo komutunu çalıştırın uzaktan düğüme:

(Aşağıdaki komut, Şef İş İstasyonunda değil , düğüm içinde veya 'şef istemci' içinde çalıştırılmalıdır )

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

Veya işte bir astar ( ./my-chef-project/CWD'den Chef Workstation'da çalıştırılacak ):

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'

Bu kadar! Düğümünüzü yemek kitaplarında belirttiğiniz şeye dönüştürmeye çalışan Şef etkinliğiyle doldurulan standart çıktıyı izleyin. Chef-solo, tüm yemek kitapları için gerekli olan tüm taşları kuracaktır. Chef-solo komutu başarılı olursa, Ubuntu kutusundaki nginx'in arkasında çalışan bir Django uygulamamız olacaktır. Test etmek için etki alanına / IP'ye gidin.

Not: Django'da ALLOWED_HOSTSlisteden bu etki alanını / ip'i ayarlamanız gerekebileceğini unutmayın settings.py.

Değişikliklere yanıt verme

Proje dizinimizin içeriğinde her değişiklik yaptığımızda (tarifler, şablonlar veya uygulama kaynak kodu vb.), Yukarıdaki tek astarı proje dizininden çalıştırın.

İpucu: Yemek kitabı git ile kontrol edilirse (olması gerektiği gibi), iyi bir öneri git kancaları bu tek astarı çalıştıracak şekilde ayarlamaktır.

Tarball'a ev sahipliği yapmak (isteğe bağlı)

Son şef-solo komutuna yakından bakarsanız, bunun --recipe-urlbir URL alması gerektiğini unutmayın. Bu, bir CI'nin şef-solo tarball'ınızı inşa edeceği, bir yere yükleyeceği ve düğümünüzü periyodik olarak çekecek şekilde yapılandıracağı bir iş akışına sahip olabileceğiniz anlamına gelir.

İpucu: Değiştirilen tarball'ı periyodik olarak bir cronjob olarak çekmek için kıvırmayı kullanın. başlıkları curl -z $fileonurlandıracak If-Modified-Sinceve tar topunu yalnızca mevcut dosyadaki zaman damgasından bu yana uzak dosya değiştirilmişse indirecektir $file.



Leave a Comment

Ubuntuda SaltStacka Başlarken 17.04

Ubuntuda SaltStacka Başlarken 17.04

SaltStack, yapılandırma dosyalarının, dağıtımların ve diğer herhangi bir şeyin otomasyonu için optimize edilmiş python tabanlı bir yapılandırma yönetim programıdır

CentOS 7 Üzerinde Jenkins Kurulumu

CentOS 7 Üzerinde Jenkins Kurulumu

Jenkins, proje geliştirme, devreye alma ve otomasyon için yaygın olarak kullanılan popüler bir açık kaynaklı CI (Sürekli Entegrasyon) aracıdır. Bu makale

CentOS 7 Üzerinde SaltStack Kurulumu

CentOS 7 Üzerinde SaltStack Kurulumu

SaltStack veya Salt, uzaktan yürütme, yapılandırma yönetimi, kodek uygulamak için kullanılabilen popüler bir açık kaynak yapılandırma yönetimi çözümüdür

Ubuntu 16.04 Üzerinde Concourse CI Kurulumu ve Konfigürasyonu

Ubuntu 16.04 Üzerinde Concourse CI Kurulumu ve Konfigürasyonu

Farklı Bir Sistem mi Kullanıyorsunuz? Giriş Sürekli Entegrasyon, geliştiricilerin sık sık bir araya gelmelerini sağlayan bir DevOps yazılım geliştirme uygulamasıdır

Vultr Yük Dengeleyiciler

Vultr Yük Dengeleyiciler

Yük Dengeleyici nedir Yük Dengeleyiciler uygulamanızın önünde oturur ve gelen trafiği uygulamanızın birden çok örneğine dağıtır. fo

Ubuntu 18.04 Üzerinde Drone CI Kurulumu

Ubuntu 18.04 Üzerinde Drone CI Kurulumu

Giriş Drone, kendi altyapınızda çalışan otomatik, sürekli bir test ve dağıtım platformudur. Drone herhangi bir dili, hizmeti destekler

Ubuntuda SaltStacki Sütunlarla Kullanma 17.04

Ubuntuda SaltStacki Sütunlarla Kullanma 17.04

SaltStack, birçok sunucuda eşzamanlı olarak işlemleri çalıştırmak için harika bir araç olsa da, bir sunucuda depolanan ana bilgisayar başına tanımlanmış yapılandırma ön ayarlarını da destekler.

Foremanı CentOS 7ye Yükleme

Foremanı CentOS 7ye Yükleme

Farklı Bir Sistem mi Kullanıyorsunuz? Foreman, fiziksel ve sanal sunucuların yapılandırılması ve yönetiminde size yardımcı olan ücretsiz ve açık kaynaklı bir araçtır. FOREMA

Windows Server ile Kullanım için AnsOS Üzerinde Ansible Kurulumu ve Konfigürasyonu

Windows Server ile Kullanım için AnsOS Üzerinde Ansible Kurulumu ve Konfigürasyonu

Farklı Bir Sistem mi Kullanıyorsunuz? Ansible, görevleri otomatikleştirmek için açık kaynaklı bir araçtır. Linux ve Windows sunucularınızın yapılandırmasını yönetir. İşe yarıyor

CentOS 7 üzerinde Concourse CI Kurulumu ve Konfigürasyonu

CentOS 7 üzerinde Concourse CI Kurulumu ve Konfigürasyonu

Farklı Bir Sistem mi Kullanıyorsunuz? Giriş Sürekli Entegrasyon, geliştiricilerin sık sık bir araya gelmelerini sağlayan bir DevOps yazılım geliştirme uygulamasıdır

Ubuntu 18.04 Üzerinde Strider CD Nasıl Kurulur

Ubuntu 18.04 Üzerinde Strider CD Nasıl Kurulur

Giriş Strider CD, açık kaynaklı bir sürekli dağıtım platformudur. Uygulama Node.js ile yazılmış ve depolama arka uç olarak MongoDB kullanır. Stride

Debian 9 Üzerinde Windows Server İle Kullanılmak Üzere Ansibleı Yükleme ve Yapılandırma

Debian 9 Üzerinde Windows Server İle Kullanılmak Üzere Ansibleı Yükleme ve Yapılandırma

Farklı Bir Sistem mi Kullanıyorsunuz? Ansible, görevleri otomatikleştirmek için açık kaynaklı bir araçtır. Linux ve Windows sunucularınızın yapılandırmasını yönetir. İşe yarıyor

Packer ile Anlık Görüntüler Oluşturma

Packer ile Anlık Görüntüler Oluşturma

Packer nedir? Packer, HashiCorp tarafından geliştirilen bir sunucu görüntüleme aracıdır. Sunucu görüntüleme; veya alternatif olarak değişmez altyapı; popüler bir alternatif

Windowsta Chocolatey Package Managerı kullanma

Windowsta Chocolatey Package Managerı kullanma

Giriş Chocolatey, Linux üzerinde yazılım ve bağımlılıkları yönetmeyi kolaylaştıran paket yönetimini Windowsa getiriyor. Hızlı ve kolay bir şekilde yapabilirsiniz

Ubuntu 16.04 LTS Üzerinde Foreman Kurulumu

Ubuntu 16.04 LTS Üzerinde Foreman Kurulumu

Farklı Bir Sistem mi Kullanıyorsunuz? Foreman, fiziksel ve sanal sunucuların yapılandırılması ve yönetiminde size yardımcı olan ücretsiz ve açık kaynaklı bir araçtır. FOREMA

CentOS 7 Üzerinde GoCD Kurulumu ve Konfigürasyonu

CentOS 7 Üzerinde GoCD Kurulumu ve Konfigürasyonu

Farklı Bir Sistem mi Kullanıyorsunuz? GoCD açık kaynaklı bir sürekli dağıtım ve otomasyon sistemidir. Karmaşık iş akışlarını, paralel bir

26 Büyük Veri Analitik Tekniğine Bir Bakış: 1. Bölüm

26 Büyük Veri Analitik Tekniğine Bir Bakış: 1. Bölüm

26 Büyük Veri Analitik Tekniğine Bir Bakış: 1. Bölüm

Nintendo Switch Hakkında Son Derece Çılgın 6 Şey

Nintendo Switch Hakkında Son Derece Çılgın 6 Şey

Birçoğunuz Switch'in Mart 2017'de çıkacağını ve yeni özelliklerini biliyorsunuz. Bilmeyenler için, 'Switch'i 'olmazsa olmaz bir gadget' yapan özelliklerin bir listesini hazırladık.

Hala Teslim Edilmeyen Teknoloji Sözleri

Hala Teslim Edilmeyen Teknoloji Sözleri

Teknoloji devlerinin sözlerini yerine getirmesini mi bekliyorsunuz? teslim edilmeyenleri kontrol edin.

Büyük Veri Referans Mimarisi Katmanlarının İşlevleri

Büyük Veri Referans Mimarisi Katmanlarının İşlevleri

Büyük Veri Mimarisindeki farklı katmanları ve işlevlerini en basit şekilde öğrenmek için blogu okuyun.

Yapay Zeka Süreç Otomasyonunu Nasıl Bir Sonraki Seviyeye Taşıyabilir?

Yapay Zeka Süreç Otomasyonunu Nasıl Bir Sonraki Seviyeye Taşıyabilir?

Yapay Zekanın küçük ölçekli şirketler arasında nasıl popüler hale geldiğini ve onları büyütme ve rakiplerine üstünlük sağlama olasılıklarını nasıl artırdığını öğrenmek için bunu okuyun.

CAPTCHA: İnsan-AI Ayrımı İçin Ne Kadar Geçerli Bir Teknik Kalabilir?

CAPTCHA: İnsan-AI Ayrımı İçin Ne Kadar Geçerli Bir Teknik Kalabilir?

CAPTCHA, son birkaç yılda kullanıcıların çözmesi oldukça zorlaştı. Gelecekte spam ve bot tespitinde etkili kalabilecek mi?

Teknolojik Tekillik: İnsan Uygarlığının Uzak Bir Geleceği mi?

Teknolojik Tekillik: İnsan Uygarlığının Uzak Bir Geleceği mi?

Bilim hızla gelişip birçok çabamızı üstlendikçe, kendimizi açıklanamaz bir Tekilliğe maruz bırakmanın riskleri de artıyor. Okuyun, tekillik bizim için ne anlama gelebilir.

Teletıp ve Uzaktan Sağlık Hizmeti: Gelecek Burada

Teletıp ve Uzaktan Sağlık Hizmeti: Gelecek Burada

Teletıp, uzaktan sağlık hizmetleri ve gelecek nesiller üzerindeki etkisi nedir? Pandemi durumunda iyi bir yer mi değil mi? Bir görünüm bulmak için blogu okuyun!

Hackerların Nasıl Para Kazandığını Hiç Merak Ettiniz mi?

Hackerların Nasıl Para Kazandığını Hiç Merak Ettiniz mi?

Bilgisayar korsanlarının çok para kazandığını duymuş olabilirsiniz, ancak bu kadar parayı nasıl kazandıklarını hiç merak ettiniz mi? Hadi tartışalım.

macOS Catalina 10.15.4 Ek Güncellemesi Çözmekten Daha Fazla Soruna Neden Oluyor

macOS Catalina 10.15.4 Ek Güncellemesi Çözmekten Daha Fazla Soruna Neden Oluyor

Son zamanlarda Apple, sorunları gidermek için macOS Catalina 10.15.4'ü ek bir güncelleme yayınladı, ancak güncelleme, mac makinelerinde tuğla oluşmasına neden olan daha fazla soruna neden oluyor gibi görünüyor. Daha fazla bilgi edinmek için bu makaleyi okuyun