Memulai Dengan SaltStack di Ubuntu 17.04
SaltStack adalah program manajemen konfigurasi berbasis python yang dioptimalkan untuk otomatisasi file konfigurasi, penyebaran, dan hal lain yang perlu
Ada banyak cara untuk mengotomatiskan proses pengaturan dan konfigurasi kotak. Untuk alasan apa pun, jika seluruh sistem kami pada saat ini terdiri dari hanya satu kotak, pengaturan infrastruktur SCM (Software Configuration Management) penuh adalah berlebihan. Skrip Shell adalah salah satu opsi, tetapi kita juga bisa menggunakan versi SCM yang tersedia dalam beberapa alat di luar sana. Chef adalah salah satu opsi yang populer dan "chef-solo" adalah mode konfigurasi mandiri Chef di mana kami tidak memerlukan simpul tambahan untuk bertindak sebagai "chef-server". Yang dibutuhkan hanyalah URL atau jalur ke paket tarball yang berisi buku masak koki. Dibandingkan dengan skrip shell, tipe pendekatan ini lebih deklaratif dan efisien, dan juga merupakan pengantar yang baik untuk memulai proses SCM atau IaC (Infrastructure as Code).
'Resep' di dalam 'buku masak' koki memiliki DSL berbasis ruby yang menggambarkan 'sumber daya' untuk berada dalam keadaan tertentu pada sebuah simpul. Mari kita lanjutkan dengan langkah-langkah untuk berkenalan dengan beberapa konsep Chef yang juga berlaku untuk chef-solo. Tujuan kami adalah mengatur simpul Ubuntu yang menjalankan aplikasi web Python / Django menggunakan Gunicorn dan NGINX.
Catatan: Kami tidak perlu memasang ChefDK di "workstation Chef" kami (mesin kami), meskipun dengan itu, kami dapat menggunakan perintah 'chef generate' untuk memulai dengan struktur direktori untuk membuat buku resep, resep, dan banyak lagi. Pada artikel ini, kami akan menganggap ChefDK diinstal di workstation kami. Perintah dijalankan menggunakan versi 4.7.26-1 dari ChefDK.
(Segala sesuatu dari titik ini dan seterusnya, kecuali ditentukan lain, akan dijalankan pada mesin kami, juga disebut sebagai 'Chef Workstation')
Cookbook di chef adalah unit yang dapat digunakan kembali yang berisi semua yang diperlukan untuk mendukung skenario konfigurasi. Cookbook dapat berisi beberapa 'resep' dan 'resep' yang sebagian besar terdiri dari pola sumber daya. default.rb
adalah resep default yang akan dijalankan ketika buku resep direferensikan dalam daftar-lari . Resep berbeda memungkinkan untuk memisahkan masalah. Namun untuk tutorial ini, kami akan menambahkan semua deklarasi sumber daya dalam satu file resep utama, yaitu default.rb
.
Buat folder bernama "my-chef-project" dan buat folder di dalamnya yang disebut "buku masak". Dari ./my-chef-project/cookbooks/
, jalankan:
$ chef generate cookbook my-cookbook
Struktur direktori kami sekarang akan terlihat seperti ini:
.
└── 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
Langkah pertama untuk menyiapkan simpul kami adalah mengidentifikasi paket apa yang diperlukan oleh aplikasi kami. Node kami dipilih sebagai Ubuntu, sehingga kami dapat mengandalkan manajer paket APT untuk mengumpulkan dependensi. Menginstal paket yang disediakan oleh distribusi OS kemudian sepotong kue:
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'
Ini cukup jelas. Baris pertama akan memperbarui repositori apt dan baris berikut akan menginstal paket-paket itu.
Catatan: Paket-paket berikut 'nginx' diperlukan untuk mengkompilasi beberapa dependensi python melalui pip. Ini mungkin berbeda berdasarkan pada dependensi proyek python / Django Anda yang ditentukan dalam
requirements.txt
. Anda dapat menggunakan metode coba-coba untuk menentukan paket-paket ini yang perlu Anda sertakan dalam buku masak Anda. Untuk melakukan itu, lakukan manualsudo pip install -r requirements.txt
(Catatan: Ini menginstal sistem paket lebar!) Pada mesin ubuntu yang baru dibuat untuk melihat apakah itu berjalan dengan sukses. Jika tidak, stderr harus memberi Anda petunjuk tentang paket apa yang hilang.
Setelah selesai menambahkan paket yang diperlukan, kita perlu membuat pengguna Linux yang tidak memiliki hak istimewa yang akan memiliki kode sumber aplikasi.
user 'bob' do
uid 1212
gid 'users'
home '/home/bob'
shell '/bin/bash'
password '$1$alilbito$C83FsODuq0A1pUMeFPeR10'
end
Perhatikan bahwa kata sandi adalah format hash bayangan yang digunakan di Linux. Itu dapat diturunkan menggunakan OpenSSL:
$ openssl passwd -1 -salt alilbitof mypassword
Sekarang mari kita sertakan kode sumber aplikasi Django ke buku masak kami. Tempatkan kode sumber di dalam ./my-chef-project/cookbooks/my-cookbook/files/default/myapp/
Buat ./my-chef-project/cookbooks/my-cookbook/files/default
direktori jika tidak ada.
Instruksi untuk menyalin file-file ini ke lokasi yang jauh pada node kami dijelaskan menggunakan sumber daya 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
Untuk menginstal paket python requirements.txt
, kita dapat menggunakan sumber daya eksekusi untuk menjalankan perintah arbitrer. Dalam hal ini, kita perlu menjalankan perintah pip install di atasnya:
execute 'install python dependencies' do
command 'pip3 install -r requirements.txt'
cwd '/home/bob/myapp'
end
Catatan: Ingatlah bahwa ini akan dijalankan sebagai pengguna root dan pustaka python akan diinstal di seluruh sistem. Jika simpul kami dirancang khusus untuk menjalankan aplikasi python tunggal ini, maka itu tidak terlalu menjadi masalah. Meskipun demikian, pilihan yang lebih baik untuk menjaga hal-hal bersih dan waras adalah menemukan dan menggunakan buku resep komunitas yang mengelola instalasi python atau 'virtualenvs'. (atau paling tidak, tulis serangkaian blok eksekusi untuk mereplikasi ini). Menggunakan virtualenvs di python memastikan bahwa alat sistem berbasis python atau proyek python lainnya tidak akan terpengaruh
Sekarang saatnya mempersiapkan Server HTTP Gunicorn WSGI dengan NGINX sebagai proksi terbalik kami. Nginx juga digunakan untuk menangani semua aset statis dari Django.
Untuk menggunakan Gunicorn sebagai layanan di Ubuntu, Systemd dapat digunakan. The systemd_unit sumber daya termasuk dalam Chef sejak versi 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
Sekarang kita harus memasukkan konfigurasi proxy NGINX standar ke server Gunicorn ini seperti yang ditunjukkan di bawah ini. Cuplikan ini bisa masuk ./my-cookbook/templates/nginx.conf.erb
. Buat direktori templates jika tidak ada.
Catatan: Template Chef mendukung file ruby tertanam yang dapat berisi variabel, ekspresi dan pernyataan ruby. Meskipun file ini memiliki ekstensi 'erb', kami tidak menggunakan pernyataan atau ekspresi ruby apa pun. Juga, demi kesederhanaan, kami hanya memiliki konfigurasi nginx non HTTPS di sini (pengingat lembut; tolong jangan lakukan ini dalam produksi!)
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/;
}
}
Catatan: Ada juga alternatif dan konfigurasi yang lebih baik, di mana, misalnya server Gunicorn terikat ke soket domain unix alih-alih koneksi TCP loopback. Perlu ditelusuri karena alasan kinerja.
Untuk menyalin konfigurasi ini ke folder situs-diaktifkan pada node, gunakan sumber daya template dari Chef.
template '/etc/nginx/sites-available/example.com.conf' do
source 'nginx.conf.erb'
owner 'root'
group 'root'
mode '0744'
end
Mengaktifkan konfigurasi pada nginx biasanya dilakukan dengan membuat symlink yang menunjuk ke konfigurasi di sites-available
dalam sites-enabled
folder nginx . Symlinks dapat dideklarasikan di buku masak koki dengan sumber tautan seperti yang ditunjukkan di bawah ini:
link '/etc/nginx/sites-enabled/example.com.conf' do
to '/etc/nginx/sites-available/example.com.conf'
end
dan untuk menghapus symlink konfigurasi default:
link '/etc/nginx/sites-enabled/default' do
action :delete
end
Dan akhirnya, untuk menjalankan layanan nginx:
service 'nginx' do
action :enable
action :start
end
Run-list di chef adalah daftar urutan peran atau resep dalam buku masak yang akan dieksekusi secara berurutan pada node. Kami memiliki satu buku resep "my-cookbook" dan resep "default" di dalamnya yang perlu kami jalankan di kotak Ubuntu, sehingga runlist.json di direktori proyek kami ( ./my-chef-project/runlist.json
) akan terlihat seperti ini:
{
"run_list": [
"recipe[my-cookbook::default]"
]
}
Buku masak kami untuk Chef solo siap disajikan. Saatnya menyediakan mesin Ubuntu 18.04 dan menginstal ChefDK di atasnya:
$ 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'
Kembali ke workstation Chef kami , yang perlu kita lakukan adalah meletakkan folder buku masak di dalam tarball, mentransfer tarball itu bersama dengan runlist.json
ke simpul jarak jauh yang kami sediakan di atas dan menjalankan perintah chef-solo:
(Perintah di bawah ini harus dijalankan di dalam node atau 'klien chef' dan bukan Workstation Chef)
$ chef-solo --recipe-url $(pwd)/chef-solo.tar.gz -j $(pwd)/runlist.json --chef-license=accept
Atau ini adalah one-liner (Untuk dijalankan dari ./my-chef-project/
CWD di 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'
Itu dia! Tonton output standar yang terisi oleh aktivitas Chef yang mencoba menyatukan simpul Anda dengan apa yang Anda tentukan di buku masak. Chef-solo akan memasang semua permata yang diperlukan untuk semua buku masak. Jika perintah chef-solo berhasil, kita akan memiliki aplikasi Django yang berjalan di belakang nginx pada kotak Ubuntu. Arahkan ke domain / IP untuk mengujinya.
Catatan: Ingatlah bahwa dalam Django Anda mungkin perlu mengatur domain / ip ini dalam
ALLOWED_HOSTS
daftar disettings.py
.
Setiap kali kami membuat perubahan dalam isi direktori proyek kami (resep, templat atau kode sumber aplikasi dll), cukup jalankan satu-baris di atas dari direktori proyek.
Kiat: Jika buku resep dikontrol dengan versi git (sebagaimana mestinya), satu rekomendasi yang bagus adalah mengatur kait git untuk menjalankan one-liner ini.
Jika Anda melihat dengan seksama pada perintah chef-solo terakhir, perhatikan bahwa --recipe-url
itu dimaksudkan untuk mengambil URL. Ini berarti Anda dapat memiliki alur kerja di mana CI akan membuat tarball chef-solo Anda, mengunggahnya ke suatu tempat dan mengkonfigurasi simpul Anda untuk menariknya secara berkala.
Kiat: Gunakan ikal untuk menarik tarball yang diubah secara berkala sebagai cronjob.
curl -z $file
akan menghormatiIf-Modified-Since
header dan hanya akan mengunduh bola tar jika file jarak jauh telah diubah sejak stempel waktu pada lokal yang ada$file
.
SaltStack adalah program manajemen konfigurasi berbasis python yang dioptimalkan untuk otomatisasi file konfigurasi, penyebaran, dan hal lain yang perlu
Jenkins adalah alat open source CI (Continuous Integration) yang populer yang banyak digunakan untuk pengembangan, penyebaran, dan otomatisasi proyek. Artikel ini wil
Pendahuluan Drone adalah platform pengujian dan pengiriman otomatis dan berkesinambungan yang berjalan pada infrastruktur Anda sendiri. Drone mendukung bahasa apa pun, layanan o
Apa itu Load Balancer Load Balancers duduk di depan aplikasi Anda dan mendistribusikan lalu lintas masuk di beberapa instance aplikasi Anda. Fo
Sementara SaltStack adalah alat yang hebat untuk menjalankan operasi pada banyak server secara bersamaan, SaltStack juga mendukung pengaturan konfigurasi yang ditentukan per-host yang disimpan dalam
SaltStack, atau Salt, adalah solusi manajemen konfigurasi open source yang populer yang dapat digunakan untuk mengimplementasikan eksekusi jarak jauh, manajemen konfigurasi, cod
Menggunakan Sistem yang Berbeda? Ansible adalah alat sumber terbuka untuk mengotomatisasi tugas. Ia mengelola konfigurasi server Linux dan Windows Anda. Ini bekerja
Menggunakan Sistem yang Berbeda? Pengantar Continuous Integration adalah praktik pengembangan perangkat lunak DevOps yang memungkinkan pengembang untuk sering menggabungkannya
Menggunakan Sistem yang Berbeda? Pengantar Continuous Integration adalah praktik pengembangan perangkat lunak DevOps yang memungkinkan pengembang untuk sering menggabungkannya
Pendahuluan Strider CD adalah platform penyebaran berkelanjutan sumber terbuka. Aplikasi ini ditulis dalam Node.js dan menggunakan MongoDB sebagai cadangan penyimpanan. Melangkah
Menggunakan Sistem yang Berbeda? Ansible adalah alat sumber terbuka untuk mengotomatisasi tugas. Ia mengelola konfigurasi server Linux dan Windows Anda. Ini bekerja
Apa itu Packer? Packer adalah alat pencitraan server yang dikembangkan oleh HashiCorp. Pencitraan server; atau sebagai alternatif, infrastruktur yang tidak dapat diubah; adalah alternatif populer
Menggunakan Sistem yang Berbeda? GoCD adalah sistem pengantaran dan otomatisasi sumber terbuka yang berkelanjutan. Ini memungkinkan Anda untuk memodelkan alur kerja yang kompleks menggunakan paralelnya
Pendahuluan Chocolatey membawa manajemen paket yang memudahkan administrasi perangkat lunak dan dependensi di Linux, ke Windows. Anda dapat dengan cepat dan mudah
Menggunakan Sistem yang Berbeda? Foreman adalah alat sumber terbuka dan gratis yang membantu Anda dengan konfigurasi dan pengelolaan server fisik dan virtual. Forema
Menggunakan Sistem yang Berbeda? Foreman adalah alat sumber terbuka dan gratis yang membantu Anda dengan konfigurasi dan pengelolaan server fisik dan virtual. Forema
Wawasan tentang 26 Teknik Analisis Data Besar: Bagian 1
Banyak dari Anda tahu Switch keluar pada Maret 2017 dan fitur-fitur barunya. Bagi yang belum tahu, kami sudah menyiapkan daftar fitur yang membuat 'Switch' menjadi 'gadget yang wajib dimiliki'.
Apakah Anda menunggu raksasa teknologi untuk memenuhi janji mereka? periksa apa yang belum terkirim.
Baca blog untuk mengetahui berbagai lapisan dalam Arsitektur Big Data dan fungsinya dengan cara yang paling sederhana.
Baca ini untuk mengetahui bagaimana Kecerdasan Buatan menjadi populer di antara perusahaan skala kecil dan bagaimana hal itu meningkatkan kemungkinan untuk membuat mereka tumbuh dan memberi keunggulan pada pesaing mereka.
CAPTCHA telah berkembang cukup sulit bagi pengguna untuk dipecahkan dalam beberapa tahun terakhir. Apakah itu akan tetap efektif dalam deteksi spam dan bot di masa mendatang?
Saat Sains Berkembang dengan kecepatan tinggi, mengambil alih banyak upaya kita, risiko menundukkan diri kita pada Singularitas yang tidak dapat dijelaskan juga meningkat. Baca, apa arti singularitas bagi kita.
Apa itu telemedicine, perawatan kesehatan jarak jauh dan dampaknya terhadap generasi mendatang? Apakah itu tempat yang bagus atau tidak dalam situasi pandemi? Baca blog untuk menemukan tampilan!
Anda mungkin pernah mendengar bahwa peretas menghasilkan banyak uang, tetapi pernahkah Anda bertanya-tanya bagaimana cara mereka mendapatkan uang sebanyak itu? mari berdiskusi.
Baru-baru ini Apple merilis macOS Catalina 10.15.4 pembaruan suplemen untuk memperbaiki masalah tetapi tampaknya pembaruan menyebabkan lebih banyak masalah yang mengarah ke bricking mesin mac. Baca artikel ini untuk mempelajari lebih lanjut