تصور کنید یک مدیر سیستم با چندین سرور کار میکند. اگر یکی از سرورها دچار مشکل شود، او میتواند به راحتی آن را تعمیر کند. اما مشکل زمانی پیش میآید که چندین سرور همزمان دچار مشکل شوند. این جاست که یک ابزار مانند نرم افزار پاپت میتواند در مدیریت چنین شرایطی کمک کند. با استفاده از نرم افزار پاپت، میتوانید کدهای سادهای بنویسید و آنها را به سرورهایی که مشکل دارند، ارسال کنید. پس از اجرای کد، تمامی سرورها به حالت کاری قبلی خود باز میگردند یا به وضعیت جدید و دلخواه تنظیم میشوند، و این کار در عرض چند ثانیه انجام میشود. پاپت همچنین میتواند برای نصب نرمافزار و اضافه کردن امنیت استفاده شود، همه اینها تنها با کدهای ساده.
نرم افزار پاپت چیست؟

نرمافزار Puppet یک ابزار متنباز برای مدیریت پیکربندی و اتوماسیون زیرساخت است که بهویژه در محیطهای DevOps و سازمانهای بزرگ کاربرد دارد. این ابزار به مدیران سیستم این امکان را میدهد که وضعیت مطلوب سیستمها را به صورت اعلامی تعریف کرده و Puppet مسئولیت اطمینان از انطباق سیستمها با این وضعیت را بر عهده گیرد.
در Puppet، از کدی خاص به نام “manifests” برای نوشتن فایلهای پیکربندی استفاده میشود که در آنها مشخص میکنیم زیرساخت ما چگونه باید پیکربندی شود. بهعنوان مثال، کد زیر اطمینان میدهد که Nginx بر روی سرور نصب شده باشد:
package { 'nginx':
ensure => installed,
}
با استفاده از Puppet، میتوانیم زیرساخت خود را بهصورت کد مدیریت کرده و از انطباق آن با وضعیت مطلوب اطمینان حاصل کنیم.
اجزای پاپت
نرمافزار Puppet یک ابزار متنباز برای مدیریت پیکربندی و اتوماسیون زیرساخت است که از معماری سرور-کلاینت (Master-Agent) بهره میبرد. در این معماری، سرور مرکزی (Puppet Master) مسئولیت مدیریت و پردازش کدهای پیکربندی را بر عهده دارد، در حالی که گرههای کلاینت (Puppet Agent) این کدها را دریافت و اجرا میکنند. ارتباط بین سرور و کلاینتها از طریق پروتکل HTTPS و با استفاده از گواهیهای SSL انجام میشود.
اجزای اصلی Puppet عبارتند از:
-
Puppet Master: سرور مرکزی که کدهای پیکربندی را پردازش کرده و کاتالوگهای مورد نیاز گرهها را تولید میکند.
-
Puppet Agent: نرمافزاری که بر روی گرههای مدیریتشده نصب میشود و کاتالوگها را دریافت و اجرا میکند.
-
Manifests: فایلهای متنی با پسوند
.ppکه حاوی کدهای پیکربندی هستند و نحوه تنظیم منابع مختلف سیستم را مشخص میکنند. -
Modules: مجموعهای از Manifests و دادهها که برای مدیریت یک یا چند منبع خاص طراحی شدهاند و میتوانند بهصورت مجزا یا بهاشتراکگذاریشده استفاده شوند.
-
Facter: ابزاری که اطلاعات پایهای (حقایق) درباره گرهها مانند سیستمعامل، آدرس IP و مدتزمان فعالیت را جمعآوری میکند.
-
Catalog: فایلی که توسط Puppet Master برای هر گره تولید میشود و وضعیت مطلوب منابع را بر اساس Manifests و اطلاعات جمعآوریشده توسط Facter مشخص میکند.
-
Reports: گزارشهایی که پس از اجرای کاتالوگ توسط Puppet Agent تولید میشوند و جزئیات تغییرات اعمالشده را ارائه میدهند.
این اجزا با همکاری یکدیگر فرآیند مدیریت و اتوماسیون زیرساختها را در Puppet تسهیل میکنند.
کاربردهای نرم افزار پاپت در مدیریت سرورها
یکی از مهمترین کاربردهای نرمافزار پاپت، مدیریت سرورهای اختصاصی است. سرورهای اختصاصی منابع سختافزاری و نرمافزاری خاصی دارند که نیاز به مدیریت دقیق و بهینه دارند. با استفاده از نرمافزار پاپت، میتوان بهصورت خودکار تنظیمات و پیکربندیهای مربوط به این سرورها را انجام داد. این امر میتواند باعث کاهش زمانهای تأخیر و کاهش احتمال وقوع خطاهای انسانی در هنگام تنظیم و نگهداری این سرورها شود.
نرمافزار پاپت میتواند از ابتدا تا انتهای فرآیند پیکربندی سرورها را انجام دهد. این بهویژه در محیطهای با تعداد زیاد سرور که نیاز به مدیریت بهصورت متمرکز دارند، بسیار مفید است. همچنین، نرمافزار پاپت قادر است بهطور خودکار نرمافزارهای مورد نیاز را نصب کرده و تنظیمات امنیتی مختلف را اعمال کند.
ابزارهای پاپت در فرآیند DevOps
در فرآیند DevOps، هدف اصلی هماهنگی بهتر بین تیمهای توسعهدهنده و تیمهای عملیاتی است تا فرآیندهای استقرار و مدیریت سیستمها بهطور مداوم و بدون هیچگونه وقفهای انجام شود. ابزار پاپت یکی از مهمترین ابزارهای دواپس است که در این فرآیند مورد استفاده قرار میگیرد. این ابزار کمک میکند تا تیمها بتوانند سرورها و سیستمها را با پیکربندیهای یکسان در محیطهای مختلف راهاندازی کنند و از همخوانی کامل در تمامی قسمتها اطمینان حاصل کنند.
یکی از ویژگیهای برجسته ابزارهای پاپت این است که میتوانند تمامی تنظیمات و پیکربندیهای سیستمها را در قالب کد ذخیره کرده و برای استفاده در آینده به اشتراک بگذارند. این ویژگی باعث میشود که در صورتی که بهروزرسانی یا تغییرات جدیدی نیاز باشد، بتوان بهراحتی آنها را اعمال کرد و از آسیبپذیریهای امنیتی جلوگیری نمود.
نحوه کار نرم افزار پاپت
نرم افزار پاپت بر اساس مدل استقرار Pull کار میکند، به این معنی که گرههای عامل هر 1800 ثانیه با گره مستر چک میکنند تا مشخص شود آیا Agent نیاز به بهروزرسانی دارد یا خیر. اگر چیزی نیاز به بهروزرسانی داشته باشد، agent کدهای مربوط به پاپت را از مستر دریافت کرده و وظایف لازم را اجرا میکند. در ادامه یک مثال برای این موضوع آورده شده است:
در این مثال، مستر یک ماشین لینوکسی است که نرمافزار Puppet master روی آن نصب شده است. این دستگاه مسئول نگهداری پیکربندی از طریق کدهای پاپت است. Agentها ماشینهایی هستند که توسط پاپت مدیریت میشوند و نرمافزار puppet agent روی آنها نصب شده است. ارتباط بین مستر و عامل از طریق گواهیهای امن برقرار میشود.
چگونه ارتباط Puppet Master و Agent برقرار میشود:
- پس از برقراری اتصال، Agent پاپت دادههای مربوط به وضعیت خود را به مستر ارسال میکند. این دادهها میتواند شامل مواردی مانند نام میزبان، جزئیات کرنل، آدرس IP، جزئیات نام فایل و غیره باشد و به آنها “Facts” گفته میشود.
- پاپت مستر از این دادهها استفاده کرده و فهرستی از پیکربندیهایی که باید به Agent اعمال شود، ایجاد میکند. این فهرست به عنوان “کاتالوگ” شناخته میشود.
- اگر لازم باشد Agent از فایل کاتالوگ برای اعمال تغییرات استفاده میکند. اگر هیچ تفاوتی بین پیکربندی فعلی و پیکربندی موجود در کاتالوگ وجود نداشته باشد، Agent اجازه میدهد که همه چیز به حالت قبلی ادامه یابد.
- پس از اعمال تغییرات پیکربندی، Agent به مستر تأیید میدهد که مشخصات فایل کاتالوگ انجام شده است.
اجرای پاپت از نودها آغاز میشود، نه از مستر. در این فرآیند، پاپت از خدمات SSL برای انتقال دادهها بین نودها و مستر استفاده میکند. نودها دستور facter را اجرا میکنند تا اطلاعاتی از سیستم جمعآوری کنند. این اطلاعات سپس به مستر ارسال میشود.
پس از دریافت این اطلاعات، مستر یک کاتالوگ آماده میکند که وضعیت هر منبع در نود را توضیح میدهد. مستر نام هر نود را بررسی کرده و آن را با پیکربندی مشخص نود مقایسه میکند. اگر نود با هیچ پیکربندی تطبیق نداشت، از پیکربندی پیشفرض استفاده میکند. پس از تهیه کاتالوگ، مستر آن را به نود ارسال میکند. سپس پاپت این کاتالوگ را روی نود اعمال میکند تا مطمئن شود سیستم به وضعیت دلخواه رسیده است.
بلوکهای نرم افزار پاپت
منابع
نرم افزار پاپت منابع زیادی مانند فایل، کاربر، بسته و سرویس دارد. این منابع به مدیران سیستم کمک میکند تا منابع سیستم را به طور مستقل مدیریت کنند و اطمینان حاصل کنند که سیستم در وضعیت مطلوب قرار دارد. برای مثال، منابع میتوانند شامل بستهها، سرویسها، اطلاعرسانیها، کاربران، دستورات اجرایی و غیره باشند. دستور resource_type در پاپت انواع منابع موجود در یک سیستم پاپت را نمایش میدهد. نحوه استفاده از آن به شکل زیر است:
file { [ '/etc/firewalld', '/etc/firewalld/helpers', '/etc/firewalld/services', '/etc/firewalld/ipsets' ]: ensure => 'directory', owner => 'root', group => 'root', mode => '750', } همچنین، برای تعریف یک سرویس میتوان از نمونه زیر استفاده کرد: service { 'httpd': ensure => 'running', enable => true, }
نوع منابع
منفستهای پاپت (Manifests)
منفستهای پاپت اسناد متنی هستند که به زبان DSL پاپت نوشته شدهاند و وضعیت نهایی سیستم را تعریف میکنند. این فایلها معمولاً با استفاده از ویرایشگرهای متنی ایجاد میشوند و پسوند .pp دارند. به عنوان مثال، فایل noalice.pp زیر حساب کاربری alice را از سیستم حذف میکند:
[root@master ~]# vim alice.pp [root@master ~]# cat noalice.pp user {'alice': ensure => 'absent', }
کلاسهای پاپت (Classes)
کلاسهای پاپت به ما این امکان را میدهند که تعاریف منابع را به شیوهای منعطف و قابل استفاده مجدد بنویسیم. کلاسها معمولاً برای تعریف مجموعهای از منابع که برای پیادهسازی یک سرویس یا اجرای یک برنامه نیاز است، استفاده میشوند. در مثال زیر، نحو یک کلاس به نام test نشان داده شده است:
class test { user { 'master': ensure => 'present', home => '/home/master', shell => '/bin/bash', } file { '/home/master': ensure => 'directory', owner => 'master', group => 'master', mode => '0770', require => User['master'], } package { 'httpd': ensure => 'present', } service { 'httpd': ensure => 'running', enable => true, require => Package['httpd'], } }
در اینجا، دستور include test برای فراخوانی کلاس test در منفست استفاده میشود. این مانند فراخوانی یک تابع از پیش تعریفشده در زبانهای برنامهنویسی است.
ماژولهای پاپت
ماژولهای پاپت روشی برای بستهبندی منفستها و فایلهای مرتبط است. یک ماژول در واقع یک آرشیو tar است که ساختار خاصی دارد. این ماژول یک ساختار دایرکتوری استاندارد برای کد پاپت و فایلهای مرتبط فراهم میکند. برخی از دایرکتوریهای مهم در ساختار ماژول عبارتند از:
- دایرکتوری manifests: شامل تمام منفستهای پاپت تعریفشده در ماژول است.
- دایرکتوری files: شامل فایلهای ایستا است.
- دایرکتوری lib/facter: شامل تعاریف فاکتهای سفارشی است.
- دایرکتوری test: شامل منفستهایی است که برای تست عملکرد ماژول استفاده میشوند.
ماژولها ابزارهای قدرتمندی هستند که عملکردهای مختلفی مانند ارزیابی قالبها، انجام محاسبات ریاضی، تغییر کاتالوگ و مدیریت خطاها را پشتیبانی میکنند.
مزایای نرم افزار پاپت
استفاده از ابزاری مانند پاپت برای مدیریت پیکربندی در DevOps مزایای زیادی به همراه دارد.
مدیریت زیرساخت بهعنوان کد (IAC)
پاپت به تیمها این امکان را میدهد که زیرساختهای خود را به صورت کد مدیریت کنند، که باعث اتوماسیون فرآیندها و کاهش خطاهای انسانی میشود. این ویژگی به طور قابل توجهی سرعت تغییرات و مقیاسپذیری را در محیطهای پیچیده افزایش میدهد.
ارتباط مستر و عامل از طریق کاتالوگ
پاپت از کاتالوگها برای مدیریت پیکربندیها استفاده میکند. این ویژگی به شناسایی و رفع سریع مشکلات و کاهش زمان توقف سیستم کمک میکند. در صورت تغییرات لازم، پاپت به طور خودکار آنها را اعمال کرده و زمان بازیابی سیستم را به حداقل میرساند.
پشتیبانی از جامعه متنباز بزرگ
پاپت دارای یک جامعه متنباز گسترده است که به توسعهدهندگان امکان میدهد به راحتی راهحلهایی برای مسائل مختلف پیدا کنند. این شبکه از متخصصان به تسریع حل مشکلات و بهبود ابزار کمک میکند و منابع زیادی برای آموزش و مستندات فراهم میآورد.
سازگاری با پلتفرمهای مختلف
پاپت از پلتفرمهای مختلفی مانند ویندوز، BSD و دبیان پشتیبانی میکند، بدون اینکه نیاز به تغییر در زبانهای اسکریپتنویسی داشته باشید. این قابلیت به تیمهای DevOps این امکان را میدهد که در محیطهای مختلف بهراحتی از پاپت استفاده کنند و اتوماسیون را در همهجا پیادهسازی کنند.
مقیاسپذیری و انعطافپذیری
پاپت قابلیت مقیاسپذیری بالایی دارد و به راحتی میتواند در محیطهای بزرگ و پیچیده پیادهسازی شود. این ابزار به تیمها اجازه میدهد تا از همان کد برای مدیریت تعداد زیادی از سرورها و دستگاهها استفاده کنند، بدون اینکه نیاز به تنظیمات پیچیده جدید باشد.
شروع به کار با نرم افزار پاپت
برای شروع استفاده از نرمافزار پاپت و بهرهبرداری از قابلیتهای آن در اتوماسیون مدیریت زیرساختها، مراحل زیر را دنبال کنید:
۱. نصب سرور پاپت (Puppet Server)
ابتدا باید سرور پاپت را بر روی یک سرور اختصاصی با سیستم عامل لینوکس نصب کنید. برای این کار، بستههای مورد نیاز را از مخزن رسمی پاپت دریافت کرده و نصب کنید. برای مثال، در سیستمعامل اوبونتو، میتوانید از دستورات زیر استفاده کنید:
wget https://apt.puppet.com/puppet-release-bionic.deb dpkg -i puppet-release-bionic.deb apt update apt install puppetserver
پس از نصب، سرویس پاپت را راهاندازی کرده و آن را برای شروع خودکار در بوت سیستم فعال کنید:
systemctl start puppetserver systemctl enable puppetserver
نصب و پیکربندی ایجنتهای پاپت (Puppet Agents)
برای هر ماشینی که میخواهید توسط پاپت مدیریت شود، باید ایجنت پاپت را نصب کنید. برای این کار، بستههای مورد نیاز را نصب کرده و فایل پیکربندی /etc/puppetlabs/puppet/puppet.conf را بهروزرسانی کنید تا سرور پاپت را مشخص کند:
apt install puppet-agent
در فایل پیکربندی، موارد زیر را اضافه کنید:
[main] server = puppet.example.com
سپس سرویس ایجنت را راهاندازی کرده و آن را برای شروع خودکار در بوت سیستم فعال کنید:
systemctl start puppet systemctl enable puppet
تأیید و امضای گواهینامهها
پس از راهاندازی ایجنت، آن گواهینامهای به سرور پاپت ارسال میکند که باید توسط سرور امضا شود. برای مشاهده گواهینامههای منتظر امضا، از دستور زیر استفاده کنید:
puppetserver ca list
برای امضای گواهینامهها، از دستور زیر استفاده کنید:
puppetserver ca sign --certname puppet-agent.example.com
اجرای ایجنت برای دریافت و اعمال پیکربندیها
پس از امضای گواهینامه، ایجنت میتواند پیکربندیها را از سرور دریافت کرده و اعمال کند. برای این کار، دستور زیر را اجرا کنید:
puppet agent -t
با اجرای این دستور، ایجنت پیکربندیهای جدید را از سرور دریافت کرده و اعمال میکند.
استفاده از ماژولها برای مدیریت منابع
برای مدیریت منابع مختلف مانند بستهها، سرویسها و فایلها، میتوانید از ماژولهای پاپت استفاده کنید. برای نصب یک ماژول، از دستور زیر استفاده کنید:
puppet module install puppetlabs-apache
پس از نصب، میتوانید از ماژولها در فایلهای پیکربندی خود استفاده کنید تا منابع مورد نظر را مدیریت کنید.
جمع بندی
نرمافزار پاپت ابزاری است که میتواند فرآیندهای فناوری اطلاعات را بهطور خودکار انجام دهد، بهویژه در محیطهای DevOps که نیاز به هماهنگی مستمر بین تیمهای توسعه و عملیات دارند. این ابزار کمک میکند تا سرورها و سیستمها بهطور خودکار پیکربندی شوند، بهویژه در سرورهای اختصاصی که نیاز به مدیریت دقیق و مقیاسپذیری دارند. پاپت همچنین با ویژگیهایی مانند “مدیریت زیرساخت بهعنوان کد” (IaC) و قابلیت استفاده از ماژولها، کارایی و سرعت اجرای عملیات را افزایش میدهد.






