Puppet, merkezi bir konfigürasyon yönetimi ve otomasyon aracıdır. DevOps, sunucuları ve uygulamaları dağıtmak için yapılandırma yönetimi oluşturur ve otomasyona yönelik tüm yapılandırma, merkezi “Puppet Sunucusu”nda depolanır. Bundan sonra “Agent” düğümleri “Puppet Server”dan yeni bir konfigürasyon çekecek ve durumu tanımlandığı gibi uygulayacaktır.

“Puppet Sunucu” ve “Aracı” düğümleri arasındaki tüm bağlantılar, varsayılan olarak SSL/TLS sertifikası kullanılarak şifrelenir. Puppet, sistem yapılandırmasını tanımlamak için Etki Alanına Özgü Dil (DSL) kullanır ve Ruby sözdizimine benzer.
Bu kılavuzda, Debian 11 Bullseye üzerinde Puppet sunucusunu ve aracısını kuracak ve yapılandıracaksınız. Puppet sunucusunu ana bilgisayar adı ‘puppet-server’a ve Puppet aracısını sunucuya ‘aracı’ ana bilgisayar adına kuracaksınız. Sonunda, temel LEMP yığınını ‘aracı’ düğümüne kurmak için ilk Puppet manifestolarını oluşturacaksınız.
Önkoşul
- İki farklı Debian 11 sunucusuna ihtiyacınız olacak.
- IP adresi ‘192.168.5.100’ olan ‘Puppet sunucusu’ ve fqdn ‘Puppet-sunucusu.localdomainl.lan’.
- IP adresi ‘192.168.5.150’ ve fqdn ‘agent.localdomain.lan’ ile ‘aracı’ düğümü.
- Ayrıca, root/sudo ayrıcalıklarına sahip root kullanıcısına veya kullanıcısına ihtiyacınız olacak.
FQDN’yi Ayarlama
İlk olarak, Tam Nitelikli Etki Alanı Adını (FQDN) ve '/etc/hosts'
dosyasını hem 'puppet sunucu'
hem de 'aracı'
üzerinde kuracaksınız. Bu, her iki sunucunun da yerel alan adıyla iletişim kurmasını sağlayacaktır.
FQDN’yi kurmak için aşağıdaki 'hostnamectl'
komutunu çalıştırın.
'puppet sunucusunda' fqdn 'puppet-server.localdomain.lan'
kurulumunu yapmak için aşağıdaki komutu çalıştırın.
hostnamectl set-hostname puppet-server.localdomain.lan
'Agent'
düğümünde fqdn 'agent.localdomain.lan'
kurulumunu yapmak için aşağıdaki komutu çalıştırın.
hostnamectl set-hostname agent.localdomain.lan
Ardından, '/etc/hosts'
dosyasını aşağıdaki gibi vim düzenleyiciyi kullanarak düzenleyin.
sudo vim /etc/hosts
Aşağıdaki yapılandırmayı kopyalayıp yapıştırın.
192.168.5.100 puppet-server.localdomain.lan
192.168.5.150 agent.localdomain.lan
Dosyayı kaydet ve çık.
Son olarak, 'puppet sunucu'
ve 'aracı'
arasındaki bağlantıyı doğrulamak için aşağıdaki 'ping'
komutunu çalıştırın.
ping puppet-server.localdomain.lan -c3
ping agent.localdomain.lan -c3
Yapılandırmanız doğruysa, aşağıdaki çıktıyı göreceksiniz. 'Puppet-server.localdomain.lan', '192.168.5.100'
sunucusuna çözümlenir ve 'agent.localdomain.lan', '192.168.5.150'
aracı düğümüne çözümlenir.


Puppet Deposu Ekleme
Varsayılan olarak, Puppelabs, en son Debian 11 Bullseye dahil olmak üzere farklı Linux dağıtımları için depo paketleri sağlar. Bu adımda, Puppet deposunu hem 'puppet sunucusuna'
hem de 'aracı'ya
ekleyecek ve kuracaksınız. Bu yazının yazıldığı sırada, Puppet’ın en son sürümü v7.x’tir.
Aşağıdaki 'wget'
komutunu kullanarak depo paketini indirin.
wget https://apt.puppet.com/puppet7-release-bullseye.deb
Ardından, aşağıdaki 'dpkg'
komutunu kullanarak 'puppet7-release-bullseye.deb'
deb dosyasını kurun.
sudo dpkg -i puppet7-release-bullseye.deb
Kurulum tamamlandıktan sonra, Debian paket dizinini güncellemek ve yenilemek için aşağıdaki 'apt
‘ komutunu çalıştırın.
sudo apt update
Artık Puppet paketlerini kurmaya hazırsınız.

Puppet Sunucusunu Kurma
Bu adımda, 'puppet sunucu'
üzerine Puppet sunucu paketini kuracaksınız. Bu yazının yazıldığı sırada, Puppet’ın en son sürümü v7’dir.
Puppet Server’ı kurmak için aşağıdaki apt komutunu çalıştırın. Bu komut ayrıca Java OpenJDK gibi diğer paketleri de otomatik olarak kurar.
sudo apt install puppetserver
Kurulumu onaylamak için ‘Y’ yazın.

Kurulum tamamlandıktan sonra Puppet Server için bash ortamını yüklemeniz gerekecektir.
Varsayılan olarak, Puppet ikili dosyasını '/opt/puppetlabs/bin'
dizininde depolar. Puppet Server için yeni '$PATH'
ortam değişkenini uygulamak için aşağıdaki komutu çalıştırın.
source /etc/profile.d/puppet-agent.sh
echo $PATH
İsteğe bağlı olarak, aşağıdaki komutu çalıştırarak '$PATH'
ortam değişkenini de uygulayabilirsiniz.
echo "export PATH=$PATH:/opt/puppetlabs/bin/" | tee -a ~/.bashrc
source ~/.bashrc
Şimdi aşağıdaki komutu kullanarak '$PATH'
ortam değişkenini doğrulayın. '/opt/puppetlabs/bin' dizininin '$PATH'
ortam değişkeni listesinde olduğundan emin olun.
echo $PATH
Bundan sonra, 'puppet sunucusu'
komutunu normal şekilde çalıştırabilirsiniz. Aşağıda Puppet versiyonunu inceleyebilirsiniz.
puppetserver -v
Aşağıdaki ekran görüntüsüne benzer bir çıktı almalısınız.

Ardından, vim düzenleyiciyi kullanarak puppet sunucu yapılandırmasını '/etc/default/puppetserver'
düzenleyin.
sudo vim /etc/default/puppetserver
Puppet Sunucusu için maksimum bellek tahsisini değiştirin. Sistem belleğinize bağlıdır. Bu rehberde 2GB hafızamız var ve Puppet server için 1GB ayıracağız. Ve aşağıdaki konfigürasyonu kullanacağız.
JAVA_ARGS="-Xms1g -Xmx1g"
Yapılandırma dosyasını kaydedin ve çıkın.

Ardından, yeni puppet hizmet dosyasını uygulamak için systemd yöneticisini yeniden yükleyin.
sudo systemctl daemon-reload
Ardından, aşağıdaki komutu kullanarak 'puppet sunucusu'
hizmetini başlatın ve etkinleştirin.
sudo systemctl start enable --now puppetserver

'puppet sunucusu'
hizmeti çalışır durumda olmalıdır. 'puppet sunucusunu'
doğrulamak için aşağıdaki komutu çalıştırın.
sudo systemctl status puppetserver
Aşağıdaki ekran görüntüsüne benzer bir çıktı görmelisiniz.

Ek olarak, sisteminizde bir UFW güvenlik duvarı kullanıyorsanız, Puppet Sunucusu tarafından kullanılacak olan ‘8140’ bağlantı noktasını açtığınızdan emin olun.
Yerel '192.168.5.0/24'
alt ağından '8140'
bağlantı noktasındaki Puppet Sunucusuna gelen tüm bağlantıları birleştirmek için aşağıdaki komutu çalıştırın.
sudo ufw allow from 192.168.5.0/24 to any proto tcp port 8140
sudo ufw status
Aşağıda, görmeniz gereken mevcut UFW güvenlik duvarı kuralları yer almaktadır.

Puppet Sunucuyu Yapılandırma
Bu adımda, Puppet Sunucusu yapılandırmasını düzenleyeceksiniz. Ve bu, Puppet yapılandırmasını doğrudan düzenleyerek veya 'puppet'
komut satırını kullanarak yapılandırmayı oluşturarak yapılabilir.
Puppet Sunucusunu kurmak için aşağıdaki 'puppet'
komutlarını çalıştırın. Bu, varsayılan Puppet Sunucusu etki alanı adını ve ‘ana’ bölümünde çalıştırma aralığını ve 'sunucu'
bölümünde ortam ve dns_alt_names’i ayarlayacaktır.
puppet config set server puppet-server.localdomain.lan --section main
puppet config set runinterval 1h --section main
puppet config set environment production --section server
puppet config set dns_alt_names puppet-server,puppet-server.localdomain.lan --section server
Şimdi aşağıdaki 'cat'
komutunu kullanarak Puppet Sunucusu yapılandırmasını '/etc/puppetlabs/puppet/puppet.conf'
kontrol edin.
cat /etc/puppetlabs/puppet/puppet.conf
Puppet Server konfigürasyonunu aşağıdaki gibi görmelisiniz.

Son olarak, aşağıdaki 'systemctl'
komutunu çalıştırarak yeni bir yapılandırma uygulamak için 'puppet sunucusu'
hizmetini yeniden başlatın.
sudo systemctl restart puppetserver
Bu noktada Puppet Server kurulumunu ve yapılandırmasını tamamladınız.
Puppet Agent’ı Yükleme ve Yapılandırma
Bu adımda, Puppet Agent’ı istemci makine ‘agent’ üzerine kuracak ve yapılandıracaksınız.
Puppet Agent’ı yüklemeden önce FQDN yapılandırmasını tamamladığınızdan ve Puppet deposunu eklediğinizden emin olun.
Şimdi Puppet Agent’ı kurup yapılandıralım.
Aşağıdaki apt
komutunu kullanarak 'puppet-agent'
paketini kurun.
sudo apt install puppet-agent

Kurulum tamamlandıktan sonra, Puppet hizmetini başlatmak ve etkinleştirmek için aşağıdaki komutu çalıştırın.
sudo /opt/puppetlabs/bin/puppet resource service puppet ensure=running enable=true
Aşağıdaki ekran görüntüsüne benzer bir çıktı görmelisiniz.

Ardından, '/opt/puppetlabs/bin/'
puppet ikili yolunu eklemek için '$PATH'
ortam değişkenini ayarlayacaksınız. Bunu yapmak, ikili dosyanın tam yolu olmadan doğrudan 'puppet'
komutunu çalıştırmanıza izin verir.
source /etc/profile.d/puppet-agent.sh
echo $PATH
Bunu yapmanın başka bir yolu, aşağıdaki komutu kullanarak '~/.bashrc'
yapılandırmasına yeni bir '$PATH'
ortam değişkeni eklemektir.
echo "export PATH=$PATH:/opt/puppetlabs/bin/" | tee -a ~/.bashrc
source ~/.bashrc
Şimdi aşağıdaki komutu kullanarak '$PATH'
ortam değişkeni yapılandırmasını doğrulayın.
echo $PATH
'$PATH'
ortam değişkenine '/opt/puppetlabs/bin'
puppet ikili yolunun eklendiğini görmelisiniz.

Puppet Agent’ı Puppet Sunucusuna Kaydetme
Puppet Agent’ı kurduktan sonra, şimdi onu ana Puppet Server’a kaydetmek için Puppet Agent’ı kuracaksınız.
İlk olarak, Puppet Server fqdn’nin 'aracı'
makinesinden erişilebilir olduğundan emin olun. Aşağıdaki 'ping'
komutunu kullanarak test edin.
ping puppet-server.localdomain.lan -c3

Ardından, Puppet Agent’ı yapılandırmak için aşağıdaki komutları çalıştırın. Bu, ‘agent’ bölümünde Puppet Server alan adını ve ca_server’ı tanımlayacaktır.
puppet config set server puppet-server.localdomain.lan --section agent
puppet config set ca_server puppet-server.localdomain.lan --section agent
'/etc/puppetlabs/puppet/puppet.conf'
dosyasında oluşturulan puppet yapılandırmasını doğrulayın.
cat /etc/puppetlabs/puppet/puppet.conf
Aşağıdaki ekran görüntüsüne benzer bir çıktı görmelisiniz.

Şimdi, Puppet hizmetini yeniden başlatmak ve yeni değişiklikleri uygulamak için aşağıdaki komutu çalıştırın. Ardından Puppet hizmetini doğrulayın ve etkin ve çalışır durumda olduğundan emin olun.
sudo systemctl restart puppet
sudo systemctl status puppet
Puppet hizmet durumunun çıktısı aşağıdadır.

Ardından, Puppet aracını Puppet sunucusuna kaydetmek için aşağıdaki komutu çalıştırın. Bu komut, yeni TLS sertifikaları oluşturacak ve Puppet sunucusuna yeni sertifika imzalama istekleri oluşturacaktır.
puppet ssl bootstrap
Şimdi Puppet Server terminaline gidin ve sertifika imzalama isteklerini kontrol etmek için aşağıdaki komutu çalıştırın, ardından Puppet Agent 'agent.localdomain.lan'
için sertifika imzasını doğrulayın.
puppetserver ca list --all
puppetserver ca sign --certname agent.localdomain.lan
‘Başarıyla imzalanmış sertifika isteği ….’ gibi bir mesaj görmeniz lazım.

Ardından, Puppet Server’daki sertifika listesini doğrulamak için aşağıdaki komutu çalıştırın.
puppetserver ca list-all
Puppet Server ve Puppet Agent sertifikası olmak üzere iki farklı sertifika görmelisiniz.

Şimdi tekrar Puppet Agent terminaline gidin ve ‘Uyarı: Tamamlandı SSL başlatma’ gibi mesajları görmelisiniz, bu, sertifika imzalama isteklerinin başarıyla tamamlandığı anlamına gelir.

Bu noktada, yeni bir ilk puppet manifestosu oluşturmaya hazırsınız.
İlk Puppet Manifestosunu Oluşturma
Bu adımda, LEMP Yığınını (Nginx, MariaDB ve PHP-FPM) kurmak için yeni bir ilk puppet manifesto oluşturacaksınız. Üretim ortamı için tüm bildirimler, '/etc/puppetlabs/code/environments/production/'
Puppet Sunucusu dizininde saklanmalıdır.
Mevcut çalışma dizininizi '/etc/puppetlabs/code/environments/production/'
olarak değiştirin.
cd /etc/puppetlabs/code/environments/production/
Ardından, ‘modüller’ dizini altında LEMP Yığını için yeni bir bildirim düzeni dizini oluşturun.
mkdir -p modules/lemp/{manifests,files}
'modules/lemp'
dizinine gidin ve vim/nano düzenleyiciyi kullanarak yeni bir Puppet manifest dosyası 'manifests/init.pp'
oluşturun.
cd modules/lemp/
nano manifests/init.pp
LEMP Stack’i yüklemek için aşağıdaki puppet sözdizimi dilini kopyalayıp yapıştırın, her LEMP Stack hizmetinin çalışır durumda olduğundan emin olun ve yeni bir özel index.html dosyası oluşturun.
class lemp {
Package { ensure => 'installed' }
$lemppackages = [ 'nginx', 'mariadb-server', 'php-fpm' ]
package { $lemppackages: }
Service { ensure => 'running', enable => 'true'}
$lempsvc = [ 'nginx', 'mariadb', 'php7.4-fpm' ]
service { $lempsvc: }
file { '/var/www/html/index.html':
ensure => file,
content => "<h1><center>Welcome to Nginx - Managed by Puppet</center></h1>",
mode => '0644',
}
}
Dosyayı kaydet ve çık.
Ardından, Puppet bildirim dosyasını 'init.pp'
doğrulamak için aşağıdaki komutu çalıştırın.
puppet parser validate init.pp
Herhangi bir çıktı mesajı görmediyseniz, yapılandırma doğrudur.
Şimdi vim/nano düzenleyiciyi kullanarak başka bir 'manifests/site.pp'
yapılandırması oluşturun.
cd /etc/puppetlabs/code/environments/production/
vim manifests/sites.pp
Hedef ana bilgisayarı 'agent.localdomain.lan'
olarak tanımlayın ve yeni Puppet manifest ‘lemp’i uygulayın.
node 'agent.localdomain.lan' {
include lemp
}
Dosyayı kaydet ve çık.
Aşağıdaki komutu kullanarak Puppet manifest yapılandırmasını tekrar doğrulayın.
puppet parser validate site.pp
Puppet Manifestlerinin Doğrulanması ve Uygulanması
Artık LEMP Yığını dağıtmak için yeni bir ilk puppet bildirimi oluşturdunuz. Bu noktada, Puppet Agent düğümü, tüm bildirimleri Puppet Sunucusu ile otomatik olarak senkronize edecek ve yeni bir bildirim yapılandırması uygulayacaktır.
Ancak Puppet bildirimini Puppet Agent makinesinden manuel olarak da uygulayabilirsiniz.
Terminal sunucusu ‘aracına’ geri dönün ve puppet bildirimlerini manuel olarak uygulamak için aşağıdaki komutu çalıştırın.
puppet agent -t
Bu, Puppet Agent makinesinde puppet bildirimini çalıştıracak ve LEMP Yığını, puppet bildirimleri ‘lemp’ aracılığıyla yükleyecektir.
Alacağınız çıktı aşağıdadır.

Şimdi her bir Nginx, MariaDB ve PHP-FPM hizmetini doğrulamak için aşağıdaki komutu çalıştırın.
sudo systemctl status nginx
sudo systemctl status mariadb
sudo systemctl status php7.4-fpm
Her hizmetin aktif ve çalışır durumda olduğunu görmelisiniz.



Şimdi web tarayıcınızı açın ve Ajan düğümünüzün IP adresini adres çubuğuna yazın. Ve aşağıda özel index.html dosyasını görmelisiniz.

Artık, Puppet bildirimlerini kullanarak LEMP Yığın dağıtımını Agent makinesine başarıyla uyguladınız.
SONUÇ
Tebrikler! Artık Debian 11 Bullseye’a Puppet Server ve Agent’ı başarıyla yüklediniz. Ayrıca, LEMP Stack’i yüklemek için ilk Puppet bildirimlerini nasıl oluşturacağınızı da öğrendiniz.