آنچه در این مقاله میخوانید
راهنمای کامل نصب پکیجهای سیستمی در Ansible Playbooks
۲۵ اردیبهشت ۱۴۰۴
وقتی در دنیای DevOps با ابزارهایی مانند Ansible کار میکنیم، یکی از رایجترین وظایف پرتکرار و البته حیاتی، نصب خودکار پکیجهای سیستمی مورد نیاز برای اجرای سرویسها است. زیرا قبل از اجرای نهایی هر سرویسی، باید زیرساخت نرمافزاری آن، یعنی پکیجها و وابستگیها بهدرستی آمادهسازی شده باشند.
در محیطهایی که از توزیعهای مبتنیبر Ubuntu و Debian استفاده میشود، مانند سرور مجازی اوبونتو، مدیریت پکیجهای سیستمی با Ansible و از طریق دستور apt انجام میشود. این دستور پکیجهای مورد نیاز را نصب، بهروزرسانی یا حذف میکند. در این مطلب آموزشی از بلاگ لیارا قصد داریم با یکی از کاربردیترین قابلیتهای Ansible، نصب و مدیریت پکیجها از طریق پلیبوک آشنا شویم. از شما دعوت میکنیم تا پایان این مطلب همراه ما باشید:)

پیشنیازها
قبل از اینکه وارد اجرای playbook و نصب پکیجها شویم، لازم است موارد زیر را برای درک بهتر این آموزش در نظر داشته باشید:
- نصب Ansible روی سرور مجازی اوبونتو، اگر هنوز سرور اوبونتو نسخه ۲۴.۰۴ را راهاندازی نکردهاید، میتوانید از راهنمای نحوه راهاندازی اولیه سرور مجازی با اوبونتو Ubuntu استفاده کنید.
- دسترسی SSH به سرور مقصد، برای اینکه Ansible بتواند تنظیمات را روی سرورهای مقصد اعمال کند، باید به آنها دسترسی SSH داشته باشد.
- آشنایی مقدماتی با YAML و ساختار Playbook، انسیبل از فایلهای YAML برای تعریف وظایف استفاده میکند.
برای آشنایی کامل با نحوه راهاندازی Docker Compose از طریق Ansible در اوبونتو، مقاله زیر را از دست ندهید.
راهاندازی Docker Compose از طریق Ansible
ایجاد فایل playbook
برای ایجاد یک فایل جدید بهنام playbook-09.yml
در مسیر ansible-practice
، ابتدا با دستور زیر وارد دایرکتوری پروژهی Ansible شوید:
cd ~/ansible-practice
اگر این دایرکتوری وجود نداشت، با دستور زیر آنرا ایجاد کنید:
mkdir -p ~/ansible-practice
cd ~/ansible-practice
سپس فایل جدید را با دستور زیر بسازید و باز کنید:
nano ~/ansible-practice/playbook-09.yml
اکنون، کدهای زیر (Palybook) را به فایل اضافه کنید:
---
- hosts: all
become: yes
tasks:
- name: Update apt cache and make sure Vim is installed
apt:
name: vim
update_cache: yes
فایل را ذخیره کرده و خارج شوید.
در ابتدای playbook دقت کنید از دایرکتیو become
استفاده کردیم، این دستور به Ansible اعلام میکند که برای اجرای تسکها، باید از سطح امنیتی کاربر root استفاده شود. از آنجایی که نصب و حذف پکیجهای سیستمی نیازمند دسترسی مدیریتی هستند، نوشتن این دستور در palybook الزامی است.
فرآیند حذف یک پکیج با استفاده از ماژول apt
مشابه فرآیند نصب آن است؛ تنها تفاوت در مقدار پارامتر state
است. برای حذف یک پکیج، باید مقدار state
را برابر با absent
قرار دهید. بهطور پیشفرض، مقدار state
روی present
است، یعنی Ansible مطمئن میشود آن پکیج روی سرور نصب است.
حالا اگر بخواهید مطمئن شوید جدیدترین نسخه آن پکیج روی سرور نصب است یا نه، بهجای present
میتوانید از latest
استفاده کنید. با اینکار Ansible از طریق apt پکیج را چک و در صورت نیاز آنرا آپدیت میکند.
فراموش نکنید که موقع اجرای این playbook، مانند دستور زیر از سوئیچ -K
استفاده کنید:
ansible-playbook -i inventory playbook-09.yml -u sammy -K
خروجی نمونه:
BECOME password:
PLAY [all] **********************************************************************************************
TASK [Gathering Facts] **********************************************************************************
ok: [203.0.113.10]
TASK [Update apt cache and make sure Vim is installed] **************************************************
ok: [203.0.113.10]
PLAY RECAP **********************************************************************************************
203.0.113.10 : ok=2 changed=0 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
زمانی که بخواهید چند پکیج را باهم نصب کنید، راحتترین روش این است که از یک loop استفاده کنید و نام پکیجها را بهصورت یک آرایه به Ansible بدهید.
برای ساختن فایل playbook-10.yml
در دایرکتوری ansible-practice
روی کنترلنود، دستورات زیر را وارد کنید:
nano ~/ansible-practice/playbook-10.yml
کدهای زیر را به فایل جدید playbook اضافه کنید:
---
- hosts: all
become: yes
tasks:
- name: Update apt cache and make sure Vim, Curl and Unzip are installed
apt:
name: "{{ item }}"
update_cache: yes
loop:
- vim
- curl
- unzip
فایل را ذخیره کرده و از آن خارج شوید.
حال که فایل playbook-10.yml را ایجاد کردید، باید آنرا اجرا کنید. برای اینکار مانند نمونههای قبلی، از دستور ansible-playbook
استفاده کنید. فراموش نکنید که این palybook نیاز به دسترسی ادمین دارد و باید از سوئیچ -K
استفاده کنید تا رمز sudo را از شما بپرسد.
ansible-playbook -i inventory playbook-09.yml -u sammy -K
بعد از اجرای playbook، خروجیای که در ترمینال مشاهده میکنید، نشان میدهد تسک نصب پکیج، سه بار پشت سرهم اجرا شده است؛ هر بار یکی از مقادیر لیست: vim
، curl
و unzip
.
خروجی:
BECOME password:
PLAY [all] ***************************************************************************************************************************************
TASK [Gathering Facts] ***************************************************************************************************************************
ok: [203.0.113.10]
TASK [Update apt cache and make sure Vim, Curl and Unzip are installed] **************************************************************************
ok: [203.0.113.10] => (item=vim)
ok: [203.0.113.10] => (item=curl)
changed: [203.0.113.10] => (item=unzip)
PLAY RECAP ***************************************************************************************************************************************
203.0.113.10 : ok=2 changed=1 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
اگر میخواهید با مدیریت پکیجها در Ansible و ماژول apt کار کنید، مثلا حذف پکیجها، مشخص کردن نسخههای خاص، یا استفاده از تنظیمات پیشرفته مانند force
, install_recommends
یا حتی debconf، به شما توصیه میکنیم، مستندات رسمی Ansible را مطالعه کنید.
برای آشنایی کامل با انسیبل و ویژگیهای آن، مقاله زیر را مطالعه کنید.
Ansible چیست؟
جمعبندی
در این مقاله یاد گرفتید، چطور با استفاده از ماژول apt در Ansible، پکیجها را روی سرورهای اوبونتو نصب و مدیریت کنید. نکتهی مهمی که باید مدنظرتان باشد، وقتی بحث نصب یا حذف پکیج به میان میآید باید دسترسی sudo داشته باشید، بههمین علت، در اجرای palybookها باید از سوئیچ -K
استفاده کنید.
در نهایت، استفاده از Ansible برای مدیریت پکیجها باعث میشود کارهای تکراری، مستندسازی و خودکار شود. این کار یک گام اساسی به سمت DevOps میباشد. اگر در پروژه خود چندین سرور دارید که بایستی کانفیگهای یکسانی داشته باشند، بهتر است بهسراغ Ansible بروید.
با سرور مجازی ابری لیارا، سرور خود را با بالاترین عملکرد و امنیت، بهراحتی مدیریت کنید!
✅ مقیاسپذیری بالا ✅ منابع اختصاصی و قابل تنظیم ✅ پشتیبانی 24/7 ✅ هزینه بهصرفه ✅ استقرار سریع
خرید سرور مجازی ابری لیارا
سوالات متداول
آیا میتوانم با Ansible نسخه خاصی از یک پکیج را نصب کنم؟
بله با دستور :
name: nginx=1.18.0-0ubuntu1
state: present
فقط کافی است نام پکیج را به همراه نسخه موردنظر وارد کنید.
اگر پکیج از قبل نصب شده باشد، مجددا هم نصب خواهد شد؟
خیر، Ansible به صورت idempotent طراحی شده است.
تفاوت بین present
و latest
در نصب پکیج چیست؟
present
فقط مطمئن میشود که پکیج نصب است.
latest
کاری میکند که پکیج به آخرین نسخه موجود در ریپازیتوریها ارتقا پیدا کند.
چطور چند تا پکیج را همزمان نصب کنم بدون اینکه چند تسک بنویسم؟
از loop
استفاده کنید، مانند:
loop:
- vim
- curl
- unzip
با اینکار فقط یک تسک مینویسید و Ansible خودش سه بار آنرا اجرا میکند.
چرا باید از سویئچ -K
هنگام اجرای playbook استفاده کنم؟
زیرا زمانی که در Playbook از become: true
استفاده میکنید، باید پسورد sudo را وارد کنید. -K
باعث میشود Ansible پسورد را از شما سوال کند.