تغییرات اخیر

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

آموزش نصب و تنظیم Ansible بر روی دبیان 12 به همراه نکات ضروری


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

سیستم‌های مدیریت پیکربندی برای ساده‌سازی فرآیندهای کنترل سرورها طراحی و ساخته شده‌اند و تیم‌های مدیریتی و عملیاتی را یاری می‌کند تا بتوانند سرورها را به‌صورت متمرکز و خودکار مدیریت کنند. در میان بسیاری از ابزارهای محبوب مدیریت پیکربندی برای سیستم‌های لینوکس، ابزارهایی مانند Chef و Puppet بسیار شناخته‌ شده هستند، اما این ابزارها در بسیاری از مواقع بسیار پیچیده‌تر از نیازهای کاربران معمولی می‌باشند.

Ansible گزینه‌ی ساده‌تر و کارآمدتری نسبت به این ابزارها است، چرا که برای اجرا نیازی به نصب نرم‌افزارِ مخصوصی بر روی گره‌ها (Nodes) نخواهید داشت و از طریق SSH وظایفِ خودکارسازی را اجرا کرده. همچنین برای تعریف جزئیاتِ آماده‌سازی از فایل‌های YAML استفاده خواهیم کرد.

در این مطلب از لیارا، قصد خواهیم داشت تا نحوه نصب Ansible را بر روی یک سرور دبیان (Debian) 12 بررسی کنیم و تعدادی از اصول‌های اصلی و پایه‌ای را در استفاده از این ابزار توضیح خواهیم داد.

سرور مجازی دبیان بدون پیچیدگی، در چند ثانیه آماده استفاده است. همین الان با سادگی تمام، شروع به کار با آن کنید!
✅ عملکرد پایدار ✅ ترافیک نامحدود ✅ هزینه به‌صرفه
خرید سرور مجازی دبیان

آنچه در ادامه خواهید خواند:

  • الزامات اولیه
  • نحوه نصب Ansible در دبیان (Debian) 12
  • پیکربندی فایل اینونتوری (Inventory) در Ansible
  • تست اتصال در Ansible روی Debian 12
  • اجرای دستورات Ad-Hoc در Ansible
  • سوالات متداول
  • جمع بندی
آموزش نصب وب سرور آپاچی در دبیان
نصب وب سرور آپاچی در دبیان
تنظیم Ansible بر روی دبیان 12

الزامات اولیه

برای اینکه بتوانید این آموزش را بهتر پشت سر بگذارید و روند را برای خودتان آسوده تر کنید. به پیش نیاز‌های زیر احتیاج خواهید داشت.

یک نود کنترل Ansible

نود کنترل Ansible سیستمی است که از آن برای اتصال به میزبان‌های Ansible و کنترل آن‌ها از طریق SSH استفاده می‌شود. این نود می‌تواند از رایانه شما مانند یک سرور اختصاصی برای اجرای Ansible استفاده کند. در این آموزش از لیارا نود کنترل‌مان یک سیستم دبیان (Debian) 12 خواهد بود. به یاد داشته باشید که در ابتدا نود کنترل شما موارد زیر را در اختیار داشته باشد.

یک یا چند میزبان Ansible

میزبان Ansible سیستمی است که نود کنترل برای انجام وظایف خودکار به آن متصل می‌شود. در این آموزش میزبان‌های Ansible شما سرور‌های Debian 12 هستند، پس مطمئن شوید که هر میزبان موارد زیر را در اختیار داشت باشد.

  • کلید عمومی SSH مربوط به نود کنترل در فایل authorized_keys یک کاربر سیستم اضافه شده باشد. این کاربر می‌تواند ریشه یا کاربری عادی با دسترسی sudo باشد.
Repository در لینوکس یعنی چی؟ (آشنایی با مفهوم مخزن)
Repository در لینوکس

نحوه نصب Ansible در دبیان (Debian) 12

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

sudo apt-add-repository ppa:ansible/ansible

در زمانی که از شما خواسته شد که آن را تایید کنید، کلید ENTER را فشار دهید تا مخزن به آن اضافه شود. برای اینکه بتوانید به‌روز‌رسانی فهرست پکیج‌های سیستم و دریافت اطلاعات مخزن جدید را انجام دهید. از دستور زیر استفاده کنید.

sudo apt update

بعد از آن که به‌روز‌رسانی‌ها انجام شد، برای نصب نرم‌افزار Ansible دستور زیر را وارد کنید.

sudo apt install ansible

در این مرحله، نود کنترل‌های شما به تمام نرم‌افزارهای لازم برای مدیریت میزبان‌ها احتیاج خواهد داشت. در ادامه، نحوه افزودن میزبان‌ها به فایل inventory نود کنترل برای مدیریت آن‌ها را بررسی خواهیم کرد.

نحوه امن کردن SSH به وسیله Fail2Ban در دبیان 12
امن کردن SSH به وسیله Fail2Ban در دبیان

پیکربندی فایل اینونتوری (Inventory) در Ansible

در Ansible، فایل اینونتوری (Inventory) فایلی است که اطلاعات مربوط به میزبان‌هایی را نشان می‌دهد که قصد دارید آن‌ها را مدیریت کنید. این فایل می‌تواند شامل یک یا چند سرور باشد و محدودیتی در تعداد آن‌ها نیز وجود نخواهد داشت. همچنین می‌توانید میزبان‌ها را در قالب گروه‌ها و زیر گروه‌ها دسته‌بندی کنید. این فایل‌ها اغلب برای تنظیم متغییر‌هایی به کار می‌روند که میزبان‌ها یا گروه‌های خاص معتبری هستند و در playbook ها و template ها قابل استفاده‌اند. حتی در مواقعی تعدادی از متغیرها می‌توانند بر نحوه اجرای playbook تأثیر بگذارند؛ مانند متغیر ansible_python_interpreter که در ادامه مشاهده خواهید کرد.

برای ویرایش محتوای فایل پیش‌فرض اینونتوری Ansible، فایل /etc/ansible/hosts را روی نود کنترل Ansible خود با استفاده از ویرایشگر دلخواه باز کنید.

sudo nano /etc/ansible/hosts

نکته: با اینکه به صورت پیش فرض فایل های اینونتوری (Inventory) در مسیر /etc/ansible/hosts ساخته می‌شوند، شما می‌توانید فایل های اینونتوری دلخواه خود را در مسیر های دیگر بسازید. در این صورت در زمان اجرای دستور ها playbook های Ansible باید مسیر فایل اینونتوری را با استفاده از گزینه -i مشخص کنید. اگر از فایل اینونتوری مجزا برای هر پروژه، استفاده کرده اید روش مناسبی را پیش گرفتید و احتمال اجرای اشتباه playbook بر روی گروه نادرستی از سرورها کاهش پیدا می‌کند.

فایل پیش‌فرض اینونتوری که همراه با نصب Ansible ارائه می‌شود، نمونه‌های را برای راهنمایی تنظیم این فایل در اختیار دارد. در مثال زیر، گروهی با نام [servers] تعریف شده که شامل سه سرور با شناسه‌های دلخواه server1 , server2 و server3 است. لطفاً آدرس‌های IP را با IP های واقعی سرورهای خود جایگزین کنید.

/etc/ansible/hosts

[servers]
server1 ansible_host=203.0.113.111
server2 ansible_host=203.0.113.112
server3 ansible_host=203.0.113.113

[all:vars]
ansible_python_interpreter=/usr/bin/python3

زیر گروه [all:vars] مقدار متغیر ansible_python_interpreter را برای تمام میزبان‌های موجود در این فایل تنظیم و بررسی می‌کند. این متغیر به شما این تضمیمن را می‌دهد که سرورهای ریموت (remote) از نسخه Python 3 واقع در مسیر /usr/bin/python3 استفاده کنند، چرا که نسخه Python 2.7 معمولاً در نسخه‌های جدید Debian از جمله Debian 12 دیگر وجود ندارد. بعد از آنکه تمامی تغییرات را اعمال کردید، فایل را ذخیره و آن را ببنید (برای این کار کلید های CTRL+X، سپس Y و در نهایت ENTER را فشار دهید.)

برای اینکه بتوانید محتواهای فایل اینونتوری را بررسی کنید از دستور زیر استفاه کنید.

ansible-inventory --list -y

بعد از وارد کردن دستور بالا خروجی مشابه به خروجی زیر را مشاهده خواهید کرد، که شامل اطلاعات زیر ساخت سرورهای شما طبق فایل انونتوری است.

all:
  children:
    servers:
      hosts:
        server1:
          ansible_host: 203.0.113.111
          ansible_python_interpreter: /usr/bin/python3
        server2:
          ansible_host: 203.0.113.112
          ansible_python_interpreter: /usr/bin/python3
        server3:
          ansible_host: 203.0.113.113
          ansible_python_interpreter: /usr/bin/python3
    ungrouped: {}
مبانی SSH: کار با سرور‌ها، کلاینت‌ها و کلیدهای SSH
مبانی SSH

تست اتصال در Ansible روی Debian 12

بعد از آنکه فایل اینونتوری و افزدون سرورها را به درستی اعمال کردید، نوبت به آن می‌رسد بررسی کنید که آیا Ansible شما قادر است از طریق SSH به این سرور ها متصل شود و دستورات را اجرا کند. در این مقاله و آموزش ما از کاربر روت (root) در دبیان استفاده کرده‌ایم، چرا که سرورهای تازه راه‌ اندازی شده معمولا فقط همین یک حساب را به صورت فعال شده در اختیار دارند.

البته اگر سرورهای مورد نظر از پیش یک کاربر روت را با دسترسی های sudo دارند به آن ها توصیه خواهیم کرد که به جای استفاده از آن از دسترسی root استفاده کند. برای اینکه بتوانید مشخص کنید که کاربر ریموت می‌تواند دسترسی های لازم را داشته باشد از گزینه -u استفاده کنید. اگر این گزینه تعریف نشده باشد، اگر این گزینه تعریف نشود، Ansible تلاش می‌کند که با نام کاربری فعلی سیستم کنترل (Control Node) به سرور متصل شود.

برای تست اتصال بر روی دستگاه محلی یا نود کنترل، دستور زیر را اجرا کنید.

ansible all -m ping -u root

این دستور از ماژول داخلی ping در Ansible استفاده می‌کند تا تمامی ارتباط با تمام نودها را در فایل اینونتوری بررسی کند. ماژول ping موارد زیر را تست می‌کند:

  • در دسترس بودن میزبان‌ها
  • اعتبار اطلاعات ورود از طریق SSH
  • امکان اجرای ماژول‌های Ansible با استفاده از Python روی سرور

خروجی دستور شما باید به صورت زیر باشد.

server1 | SUCCESS => {
    "changed": false,
    "ping": "pong"
}
server2 | SUCCESS => {
    "changed": false,
    "ping": "pong"
}
server3 | SUCCESS => {
    "changed": false,
    "ping": "pong"
}

اگر برای تجربه ای در این زمینه نداشتید و اولین بار است کعه از طریق SSH، به این سرور ها متصل می‌شوید، پیامی را برای تایید صحت میزبان ها را نمایش دهید. در این صورت، کافی است که yes را تایپ کنید و بعد از آن ENTER را فشار دهید. دریافت پاسخ pong به معنای آمادگی سرور برای اجرای دستورات و playbook های Ansible است.

همین الان، بدون کمترین پیچیدگی، سرور مجازی خودتون رو در کمتر از ۳۰ ثانیه، راه‌اندازی کنید.
✅ عملکرد پایدار ✅ ترافیک نامحدود ✅ هزینه به‌صرفه
خرید سرور مجازی ابری
آموزش ساخت برنامه Ruby on Rails روی اوبونتو 22.04
برنامه Ruby on Rails روی اوبونتو

اجرای دستورات Ad-Hoc در Ansible

بعد از ان که مطمئن شدید که ارتباط بین نود های کنترل و سرورها بر قرار شده است، می‌توانید دستورات اضافه کنید. هر دستوری که معمولا از طریق SSH بر روی سرور اجرا می‌شود، می‌تواند با استفاده از Ansible بر روی تمام سرورهای فایل اینونتوری اجرا شود. به عنوان مثال، برای بررسی فضای دیسک تمامی سرورها از دستور زیر استفاده می‌شود.

ansible all -a "df -h" -u root

خروجی برای هر سرور به صورت زیر خواهد بود.

server1 | CHANGED | rc=0 >>
Filesystem      Size  Used Avail Use% Mounted on
udev            3.9G     0  3.9G   0% /dev
tmpfs           798M  624K  798M   1% /run
/dev/vda1       155G  2.3G  153G   2% /
...

دستور df -h را می‌توانید با هر دستور دلخواه دیگری جایگزین کنید. همچنین می‌توانید از ماژول‌های Ansible استفاده کنید. به عنوان مثال برای نصب آخرین نسخه از Vim بر روی تمامی سرورها از دستور زیر باید استفاده کرد.

ansible all -m apt -a "name=vim state=latest" -u root

شاید برای شما این سوال پیش آمده باشد که هدف اصلی اجرای دستورات به سرورهای خاص یا گروه ها را چگونه باید محدود کرد. به عنوان مثال برای بررسی uptime تمام سرورها در گروه servers از دستور زیر استفاده می‌شود.

ansible servers -a "uptime" -u root

و برای اجرای دستور بر روی چند خط خاص سرور از دستور زیر استفاده می‌شود.

ansible server1:server2 -m ping -u root
آموزش نصب و پیکربندی Nginx با Let’s Encrypt در Debian 12 برای امنیت وب‌سایت
نصب و پیکربندی Nginx با Let’s Encrypt در Debian 12

سوالات متداول

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

چگونه فایل اینونتوری (Inventory) را در Ansible تنظیم کنیم؟

برای تنظیم فایل اینونتوری پیش‌فرض در Ansible، فایل /etc/ansible/hosts را با ویرایشگر متن باز کرده و اطلاعات سرورهای خود را به آن اضافه کنید. می‌توانید سرورها را در قالب گروه‌هایی مانند [servers] تعریف کرده و آدرس IP و سایر پارامترها مانند ansible_host و ansible_python_interpreter را برای هر سرور مشخص کنید. استفاده از فایل اینونتوری اختصاصی برای هر پروژه با استفاده از گزینه -i نیز امکان‌پذیر است.

چطور می‌توان با استفاده از Ansible به سرورهای Debian 12 متصل شد؟

اتصال به سرورهای Debian 12 از طریق Ansible با استفاده از پروتکل SSH انجام می‌شود. باید اطمینان حاصل کنید که کلید SSH نود کنترل روی سرورها کپی شده باشد و کاربر مورد نظر (مانند root یا کاربر با دسترسی sudo) دسترسی مناسب داشته باشد. سپس با استفاده از دستور ansible all -m ping -u USERNAME می‌توانید اتصال را تست کنید.

ماژول ping در Ansible چه کاربردی دارد و چگونه استفاده می‌شود؟

ماژول ping یکی از ماژول‌های داخلی Ansible است که برای بررسی اتصال موفق از طریق SSH و توانایی اجرای ماژول‌ها با Python در سرور هدف استفاده می‌شود. اجرای این ماژول با دستور زیر انجام می‌شود:

ansible all -m ping -u root

پاسخ pong به معنای برقراری اتصال و آمادگی سرور برای اجرای دستورات است.

آیا برای اجرای دستورات Ansible حتماً باید با کاربر root متصل شد؟

خیر، الزاماً نیازی به استفاده از کاربر root نیست. اگر روی سرورهای مقصد کاربر دیگری با دسترسی sudo ایجاد شده، می‌توانید از همان استفاده کنید. کافی است در دستورهای Ansible از گزینه -u USERNAME برای مشخص کردن کاربر مورد نظر استفاده نمایید.

چگونه می‌توان با Ansible بسته‌ای مثل Vim را روی همه سرورها نصب کرد؟

می‌توانید با استفاده از ماژول apt در Ansible بسته‌هایی مانند Vim را روی تمام سرورها نصب کنید. مثلاً دستور زیر آخرین نسخه Vim را روی سرورها نصب می‌کند:

ansible all -m apt -a "name=vim state=latest" -u root

تفاوت اجرای ad-hoc command و playbook در Ansible چیست؟

دستورات ad-hoc برای انجام سریع یک وظیفه خاص مانند اجرای یک دستور یا نصب یک بسته استفاده می‌شوند و معمولاً موقتی هستند. اما playbookها مجموعه‌ای از وظایف هستند که در قالب فایل YAML نوشته می‌شوند و برای خودکارسازی فرآیندهای پیچیده و چندمرحله‌ای کاربرد دارند.

اگر اتصال SSH در Ansible برقرار نشود، چگونه باید مشکل را رفع کرد؟

ابتدا بررسی کنید که سرور در دسترس است و پورت SSH (معمولاً 22) باز است. سپس اطمینان حاصل کنید که کلید SSH شما روی سرور کپی شده و کاربر مورد استفاده دارای مجوز مناسب است. همچنین بررسی کنید که ansible_python_interpreter به /usr/bin/python3 تنظیم شده باشد، چرا که Python 2 در Debian 12 وجود ندارد.

در Debian 12 چه نسخه‌ای از Python باید برای اجرای Ansible فعال باشد؟

در Debian 12، نسخه پیش‌فرض Python نسخه 3 است. بنابراین، برای جلوگیری از بروز خطا، باید متغیر ansible_python_interpreter را به صورت زیر تنظیم کنید:

[all:vars]
ansible_python_interpreter=/usr/bin/python3

آیا می‌توان از چند فایل اینونتوری در پروژه‌های مختلف Ansible استفاده کرد؟

بله، این امکان وجود دارد و حتی توصیه می‌شود. می‌توانید برای هر پروژه یک فایل اینونتوری مجزا ایجاد کرده و با استفاده از گزینه -i /path/to/inventory هنگام اجرای دستورات و playbookها مسیر آن را مشخص کنید. این کار از اجرای ناخواسته روی سرورهای اشتباه جلوگیری می‌کند.

دستور ansible-inventory –list چه اطلاعاتی به ما می‌دهد و چه زمانی استفاده می‌شود؟

این دستور فایل اینونتوری را به‌صورت ساختاریافته در قالب JSON یا YAML نمایش می‌دهد و اطلاعاتی مانند گروه‌ها، سرورها و متغیرهای تعریف‌شده را مشخص می‌کند. برای اجرا از دستور زیر استفاده می‌شود:

ansible-inventory --list -y

این ابزار برای اطمینان از صحت تنظیمات فایل اینونتوری بسیار کاربردی است.

مفاهیم پایه‌ای OpenSSL: کار با گواهی‌های SSL، کلیدهای خصوصی و درخواست‌های امضای گواهی (CSRs)
OpenSSL

جمع بندی

در Debian 12، پیکربندی Ansible با تنظیم دقیق فایل اینونتوری آغاز می‌شود. پس از تعریف سرورها و متغیرهای لازم، می‌توان اتصال را با استفاده از ماژول ping بررسی کرد. اجرای دستورات ad-hoc نیز امکان مدیریت سریع و دقیق سرورها را فراهم می‌سازد. رعایت این مراحل، پایه‌ای مطمئن برای خودکارسازی وظایف مدیریتی در زیرساخت فراهم می‌کند.

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

برچسب‌ها: