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
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.
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)
Ş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
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.txt
baş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.
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
Ş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 paketlerini kurmak için rasgele bir komut çalıştırmak requirements.txt
iç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
Ş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-available
nginx'in sites-enabled
klasö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
Ve son olarak, nginx hizmetini başlatmak için:
service 'nginx' do
action :enable
action :start
end
Ş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]"
]
}
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.json
yukarı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_HOSTS
listeden bu etki alanını / ip'i ayarlamanız gerekebileceğini unutmayınsettings.py
.
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.
Son şef-solo komutuna yakından bakarsanız, bunun --recipe-url
bir 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 $file
onurlandıracakIf-Modified-Since
ve tar topunu yalnızca mevcut dosyadaki zaman damgasından bu yana uzak dosya değiştirilmişse indirecektir$file
.
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
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
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
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
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
Giriş Drone, kendi altyapınızda çalışan otomatik, sürekli bir test ve dağıtım platformudur. Drone herhangi bir dili, hizmeti destekler
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.
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
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
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
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
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 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
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
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
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
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.
Teknoloji devlerinin sözlerini yerine getirmesini mi bekliyorsunuz? teslim edilmeyenleri kontrol edin.
Büyük Veri Mimarisindeki farklı katmanları ve işlevlerini en basit şekilde öğrenmek için blogu okuyun.
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, son birkaç yılda kullanıcıların çözmesi oldukça zorlaştı. Gelecekte spam ve bot tespitinde etkili kalabilecek 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, 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!
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.
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