تغییرات اخیر

در اینجا اطلاعیه‌ها، نسخه‌ها و تغییرات جدید لیارا فهرست می‌شوند.

راهنمای کامل نصب پکیج‌های سیستمی در Ansible Playbooks


۲۵ اردیبهشت ۱۴۰۴

وقتی در دنیای DevOps با ابزارهایی مانند Ansible کار می‌کنیم، یکی از رایج‌ترین وظایف پرتکرار و البته حیاتی، نصب خودکار پکیج‌های سیستمی مورد نیاز برای اجرای سرویس‌ها است. زیرا قبل از اجرای نهایی هر سرویسی، باید زیرساخت نرم‌افزاری آن، یعنی پکیج‌ها و وابستگی‌ها به‌درستی آماده‌سازی شده باشند.

در محیط‌هایی که از توزیع‌های مبتنی‌بر Ubuntu و Debian استفاده می‌شود، مانند سرور مجازی اوبونتو، مدیریت پکیج‌های سیستمی با Ansible و از طریق دستور apt انجام می‌شود. این دستور پکیج‌های مورد نیاز را نصب، به‌روزرسانی یا حذف می‌کند. در این مطلب آموزشی از بلاگ لیارا قصد داریم با یکی از کاربردی‌ترین قابلیت‌های Ansible، نصب و مدیریت پکیج‌ها از طریق پلی‌بوک آشنا شویم. از شما دعوت می‌کنیم تا پایان این مطلب همراه ما باشید:)

نصب پکیج‌های سیستمی در Ansible Playbooks

پیش‌نیازها

قبل از اینکه وارد اجرای 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 پسورد را از شما سوال کند.

به اشتراک بگذارید