حسین جعفری
حسین جعفری
خواندن ۸ دقیقه·۴ ماه پیش

قسمت اول: انسیبل چیست ؟ نصب و راه انداری انسیبل (ansible)

قسمت اول: انسیبل چیست ؟ نصب و راه انداری انسیبل (ansible)

قسمت دوم:‌ مدیریت سرورها با دستورات Ad-Hoc Ansible

قسمت سوم: شروع کار با فایل inventory در Ansible

مقدمه

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

سوال اصلی:‌ چرا باید از Ansible استفاده کنیم؟

فرض کن شما توی یه تیمی هستی که باید روی 100 تا سرور ۵ تا ابزار مختلف رو نصب کنی، تصمیمت چیه؟ چیکار میکنی؟ راه اول اینه دونه به دونه وصل بشی به سرور ها و تک تک ابزار ها رو نصب کنی که میدونی چه زمانی ازت گرفته میشه و راه حل دومی که میتونه تورو نجات بده چیه؟ انسیبل دوست داشتنی :دی.

یه نمای کلی از کارهایی که قرار انجام بدیم

نمای کلی سناریو
نمای کلی سناریو

کارهایی که قرار انجام بدیم

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

  • نصب و راه اندازی Ansible را روی هاست کنترل (جایی که دستورات رو مینویسم که روی سرور هامون اجرا بشه)
  • یک یوزر به اسم «ansible» روی هاست کنترل و سروری که قراره ابزار ها رو روش نصب کنیم میسازیم و یه رمز عبور بهش میدیم و یادمون هم میمونه چون بعدا کارش داریم. (توی ادامه مقاله بهش میگیم worksation)
  • یه کلید ssh برای یوزر ansible روی هاست کنترل میسازیم و کلید عمومی رو کپی میکنیم روی سرور workstation تا بتونیم بدون رمز به سرور workstation وصل بشیم.
  • یوزر Ansible رو روی سرور workstation کانفیگ میکنیم تا یوزر Ansible بدون رمز عبور sudo کند.
  • یک فایل inventory توی این مسیر «home/ansible/inventory» میسازیم.‍‍ فایلی هست که لیست سرور هامون رو لیست میکنیم اینجا.
  • در آخرم یه playbook انسیبل توی مسیر «home/ansible/git-setup.yml» مینویسیم تا ابزار گیت رو توی لیست سرور هایی که توی فایل inventory نوشتیم نصب کنه (تو این سناریو فقط یه سرور داریم)

پیش نیاز ها:

قبل از شروع، باید حداقل ۲ تا سرور داشته باشیم:

  • اولی Control Host:‌ جایی هست که Ansible نصب می شه و از اونجا سرورهای دیگه را مدیریت میکنیم. (سیستم خودمون هم میشه نیاز نیست حتما یه سرور دیگه باشه)
  • دومی Workstation Host: سرور راه دوری که میخوایم از طریق انسیبل ابزار های مختلفی روش نصب کنیم (تو این سناریو قصد داریم ابزار git رو فقط نصب کنیم).
  • باید از طریق سرور control host به سرور Workstation بتونیم ssh بزنیم. برای راحتی کار توی فایل etc/hosts/ سرور control host خط زیر رو اضافه کردیم که وقتی مینویسیم workstation به آدرس سرور workstation ریزالو بشه
<WORKSTATION SERVER'S IP> workstation

1. نصب Ansible روی کنترل هاست

نصب انسیبل
نصب انسیبل

کنترل هاست در واقع سروری هست که از اون دستورات Ansible صادر میشه. توی قدم اول باید انسیبل رو روی کنترل هاست نصب کنیم.

توضیحات کامل نصب انسیبل رو میتونین توی سایت اصلیش بینین و اما من به صورت خلاصه نوشتم اینجا.

نصب از طریق مدیر بسته‌های سیستم‌عامل:

در RHEL/CentOS: استفاده از yum یا dnf:

sudo yum install ansible
  • در Debian/Ubuntu: استفاده از apt:
sudo apt-get install ansible

نصب با استفاده از pip:

sudo pip install ansible
  • نصب از سورس (مناسب برای توسعه‌دهندگان):
git clone https://github.com/ansible/ansible.git
cd ansible
make install.

با هر روشی دوست داشتین میتونین انسیبل رو نصب کنین. در آخر برای تست میتونین ورژن انسیبل رو بگیریم ببینیم نصب شده یا نه.

 نصب انسییل به صورت موفقیت آمیز
نصب انسییل به صورت موفقیت آمیز

2. ایجاد کاربر Ansible

ساخت یوزر ansible
ساخت یوزر ansible

پیشنهاد میشه برای امنیت بیشتر و رعایت Best Practice ، یه یوزر اختصاصی برای Ansible روی هر دو کنترل هاست و workstation ایجاد کنیم.

  • برای این کار روی جفت سروری که داریم( Control Host و Workstation Host) با دستور زیر یه یوزر ansible میسازیم و تنها نکته ای که هست رمز عبوری که به سرور workstation میدیم رو باید یادمون باشه چون بعدا نیازش داریم.
sudo useradd ansible
sudo passwd ansible

3. پیکربندی کلید SSH اشتراکی

پیکربندی کلید SSH اشتراکی
پیکربندی کلید SSH اشتراکی

برای این‌که کاربر Ansible بتواند از کنترل هاست بدون نیاز به رمز عبور به سرور workstation متصل بشه، باید یک SSH Pre-Shared Key ایجاد کنیم.

تولید SSH Pre-Shared Key برای کاربر Ansible

به کاربر Ansible سوئیچ میکنیم و یک کلید SSH تولید کنید:

sudo su - ansible
ssh-keygen
SSH Pre-Shared Key ساخت
SSH Pre-Shared Key ساخت

4. کپی کردن کلید SSH به سرور workstation

تو این مرحله میایم با دستور زیر کلید عمومی هاست کنترل رو ارسال میکنیم به سرور workstation

ssh-copy-id workstation
انتقال کلید عمومی سرور هاست به سرور workstation
انتقال کلید عمومی سرور هاست به سرور workstation

اگه تمام مراحل رو به درستی انجام داده باشین الان باید بتونید بدون رمز عبور به سرور workstation متصل بشین (ssh بزنین):

ssh workstation

اگر موفق بودید، از سرور workstation خارج بشین بریم مرحله بعد:

logout

5. پیکربندی کاربر Ansible روی سرور workstation

توی ادامه مقاله ها بیشتر توضیح میدم اما الان به صورت خلاصه بخوام توضیح بدم، ما یه سری کارهایی قراره روی سرور انجام بدیم که نیاز به دسترسی sudo دارن ، حالا برای اینکه هر سری نخواد از ما رمز رو بپرسه میایم کاربر Ansible روی سرور workstation جوری تنظیم میکنیم که دسترسی sudo بدون نیاز به رمز عبور داشته باشه. در غیر اینصورت باید زمان اجرای دستورات انسیبل باید رمز کاربر رو بزنیم اگه نزنیم با خطا روبرو میشیم.

  1. وارد سرور workstation میشیم و فایل sudoers را ویرایش میکنیم:

sudo visudo

باید خط زیر را به انتهای فایل اضافه کنیم:

ansible ALL=(ALL) NOPASSWD: ALL

فایل رو ذخیره میکنیم و خارج میشیم و از سرور workstation خارج میشیم:

logout

6. ایجاد یک فایل اینونتوری ساده

ایجاد یک فایل اینونتوری ساده
ایجاد یک فایل اینونتوری ساده

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

  • روی کنترل هاست به کاربر Ansible سوئیچ میکنیم:
sudo su - ansible
  • یه فایل inventory ایجاد میکنیم:

vim /home/ansible/inventory

  • متن زیر رو بهش اضافه میکنیم. (از اونجایی که آدرس این سرور توی فایل etc/hosts/ نوشتیم و چون یوزر مبدا و مقصد یکی هست،‌ جفتشون ansible هست. اینجا میتونیم به این سرور متصل بشیم)

workstation

  1. فایل را با :wq ذخیره کرده و خارج شوید.

7. نحوه اجرای دستورات انسیبل

این عکس به نظرم برای توضیح دستورات عالیه از مقاله ی یکی از دوستان اینو کپی کردم، ما برای اجرای دستورات انسیبل ۲ تا کار میتونیم انجام بدیم، اگه بخوایم یه کامند رو اجرا کنیم از دستور ansible استفاده میکنیم و اگه بخوایم لسیتی از کارها رو انجام بدیم از دستور ansible-playbook استفاده می کنیم. (در ادامه توضیح میدم که playbook چی هست)

نحوه اجرای دستورات انسیل
نحوه اجرای دستورات انسیل

خب رسیدیم به جایی که ببینیم میتونیم به سرور workstation از طریق انسیبل متصل بشیم و دستورات رو اجرا کنیم یا نه. که همیشه با دستور ping بررسی میکنیم آیا متصل شدیم یا نه. این دستور میاد تمام سرور هایی که توی فایل inventory هست رو ping میگیره ببینه آیا دسترسی داریم بهشون یا نه.

دسترسی موفقیت آمیز به سرور workstation
دسترسی موفقیت آمیز به سرور workstation

نوشتن یک Playbook در Ansible نوشتن یک Playbook در Ansible

پلی بوک ها توی Ansible فایل‌های YAML هستند که شامل یک یا چند تا play هستن که هرکدوم از play ها شامل چند تا task هستن. مثال بزنم براتون کانفیگ کردن یه سرور رو میتونیم یه playbook در نظر بگیریم. نصب داکر و نصب nginx رو میتونیم ۲ تا play در نظر بگیریم و هر کدوم از این ها شامل یه سری تسک هستن به عنوان مثال برای داکر تسک هایی که داریم: نصب dependency ها و نصب داکر و راه اندازی سرویس داکر رو میتونیم task در نظر بگیریم. در واقع کارهایی که میخوایم انجام بدیم رو لیست میکنیم تا همه رو برای ما انجام بده.

ساختار کلی playbook
ساختار کلی playbook

تو این قسمت ما یه playbook داریم که شامل یه play هست و اونم فقط یه تسک داره که نصب ابزار گیت روی سرور workstation هست.

درک ساختار Playbook

یک playbook از چندین play تشکیل شده و هر play یک گروه از هاست‌ها را هدف قرار میده که در اینونتوری تعریف شده‌اند. هر play شامل وظایفی است و هر وظیفه یک ماژول Ansible را برای انجام یک اقدام خاص فراخوانی می‌کند.

نوشتن یک Playbook برای نصب Git

نصب گیت روی سرور workstation
نصب گیت روی سرور workstation
  1. روی کنترل هاست، به عنوان کاربر Ansible، یک playbook جدید ایجاد میکنیم:
vim /home/ansible/git-setup.yml
--- - hosts: workstation become: yes tasks: - name: install git yum: name: git state: latest
  1. فایل را با :wq ذخیره کرده و خارج شوید.

این playbook به Ansible میگه که آخرین نسخه Git را روی سرور workstation نصب کنه.

9. اجرای Playbook در Ansible

با نوشته شدن playbook، حالا می‌توانید آن را اجرا کنید:

ansible-playbook -i /home/ansible/inventory /home/ansible.git-setup.yml

با این کامند انسیبل به سرور worksation متصل می‌شه و Git را مطابق با playbook نصب می‌کنه.

مراحل نصب ابزار گیت روی سرور workstation
مراحل نصب ابزار گیت روی سرور workstation


10. بررسی نصب

برای اطمینان از این‌که Git به درستی نصب شده ، وارد سرور worksation میشیم و نسخه Git رو بررسی میکنیم:

ssh workstation
which git

اگر دستور مسیر به باینری Git را برگرداند، نصب موفقیت‌آمیز بوده است

نصب موفقیت آمیز گیت
نصب موفقیت آمیز گیت



امیدوارم این مقاله مفید بوده باشه و در ادامه به سراغ کارهای چالشی تر با انسیبل میریم تا درک خوبی از انسیبل پیدا کنین.

و در آخر این آدرس لینکدین و توئیتر من هست خوشحال میشم در ارتباط باشیم.


🪩 Follow Linkedin Hossein Jafari🪩

🕊 Twitter 🕊

انسیبلansible
شاید از این پست‌ها خوشتان بیاید