قسمت اول: انسیبل چیست ؟ نصب و راه انداری انسیبل (ansible)
قسمت دوم: مدیریت سرورها با دستورات Ad-Hoc Ansible
قسمت سوم: شروع کار با فایل inventory در Ansible
انسیبل یه ابزار فوقالعاده خفن هست که به نظرم بسته به نیاز شما میتونه شما رو از انجام کارهای تکراری نجات بده. ansible به شما این امکان رو میده تا مدیریت و پیکربندی سرورهای راه دور را به راحتی و بدون دردسر انجام بدین حتی اگه نیازه یه سری کارها رو روی سیستم خودتون (localhost) هم انجام بدین میتونین از انسیبل استفاده کنین. فرقی هم نداره میخوای نرمافزار نصب کنی، سرور جدید راهاندازی کنی، یا تنظیمات سرور هات رو مدیریت کنی؛ Ansible این کارها رو ساده و کارآمد میکنه. میدونم مقاله و داکیومنت های زیادی برای این ابزار نوشته شده اما تصمیم گرفتم توی یه سری قسمت به صورت سناریو محور انسیبل رو تا حدود خوبی باهم یاد بگیریم.
فرض کن شما توی یه تیمی هستی که باید روی 100 تا سرور ۵ تا ابزار مختلف رو نصب کنی، تصمیمت چیه؟ چیکار میکنی؟ راه اول اینه دونه به دونه وصل بشی به سرور ها و تک تک ابزار ها رو نصب کنی که میدونی چه زمانی ازت گرفته میشه و راه حل دومی که میتونه تورو نجات بده چیه؟ انسیبل دوست داشتنی :دی.
توی این مقاله قصد داریم کارهای زیر رو باهم انجام بدیم و در ادامه هم قدم به قدم کارهایی که میخوایم بکنیم رو پیشرفتهتر میکنیم.
قبل از شروع، باید حداقل ۲ تا سرور داشته باشیم:
<WORKSTATION SERVER'S IP> workstation
کنترل هاست در واقع سروری هست که از اون دستورات Ansible صادر میشه. توی قدم اول باید انسیبل رو روی کنترل هاست نصب کنیم.
توضیحات کامل نصب انسیبل رو میتونین توی سایت اصلیش بینین و اما من به صورت خلاصه نوشتم اینجا.
نصب از طریق مدیر بستههای سیستمعامل:
در RHEL/CentOS: استفاده از yum
یا dnf
:
sudo yum install ansible
apt
:sudo apt-get install ansible
نصب با استفاده از pip:
sudo pip install ansible
git clone https://github.com/ansible/ansible.git
cd ansible
make install.
با هر روشی دوست داشتین میتونین انسیبل رو نصب کنین. در آخر برای تست میتونین ورژن انسیبل رو بگیریم ببینیم نصب شده یا نه.
پیشنهاد میشه برای امنیت بیشتر و رعایت Best Practice ، یه یوزر اختصاصی برای Ansible روی هر دو کنترل هاست و workstation ایجاد کنیم.
sudo useradd ansible
sudo passwd ansible
برای اینکه کاربر Ansible بتواند از کنترل هاست بدون نیاز به رمز عبور به سرور workstation متصل بشه، باید یک SSH Pre-Shared Key ایجاد کنیم.
به کاربر Ansible سوئیچ میکنیم و یک کلید SSH تولید کنید:
sudo su - ansible
ssh-keygen
تو این مرحله میایم با دستور زیر کلید عمومی هاست کنترل رو ارسال میکنیم به سرور workstation
ssh-copy-id workstation
اگه تمام مراحل رو به درستی انجام داده باشین الان باید بتونید بدون رمز عبور به سرور workstation متصل بشین (ssh بزنین):
ssh workstation
اگر موفق بودید، از سرور workstation خارج بشین بریم مرحله بعد:
logout
توی ادامه مقاله ها بیشتر توضیح میدم اما الان به صورت خلاصه بخوام توضیح بدم، ما یه سری کارهایی قراره روی سرور انجام بدیم که نیاز به دسترسی sudo دارن ، حالا برای اینکه هر سری نخواد از ما رمز رو بپرسه میایم کاربر Ansible روی سرور workstation جوری تنظیم میکنیم که دسترسی sudo بدون نیاز به رمز عبور داشته باشه. در غیر اینصورت باید زمان اجرای دستورات انسیبل باید رمز کاربر رو بزنیم اگه نزنیم با خطا روبرو میشیم.
sudo visudo
باید خط زیر را به انتهای فایل اضافه کنیم:
ansible ALL=(ALL) NOPASSWD: ALL
فایل رو ذخیره میکنیم و خارج میشیم و از سرور workstation خارج میشیم:
logout
انسیبل برای اینکه بدونه دستورات رو باید روی چه سرور هایی اجرا کنه از یک فایل اینونتوری استفاده میکنه. تو این قسمت یه فایل اینونتوری ساده رو نوشتیم،
sudo su - ansible
inventory
ایجاد میکنیم:vim /home/ansible/inventory
workstation
:wq
ذخیره کرده و خارج شوید.این عکس به نظرم برای توضیح دستورات عالیه از مقاله ی یکی از دوستان اینو کپی کردم، ما برای اجرای دستورات انسیبل ۲ تا کار میتونیم انجام بدیم، اگه بخوایم یه کامند رو اجرا کنیم از دستور ansible استفاده میکنیم و اگه بخوایم لسیتی از کارها رو انجام بدیم از دستور ansible-playbook استفاده می کنیم. (در ادامه توضیح میدم که playbook چی هست)
خب رسیدیم به جایی که ببینیم میتونیم به سرور workstation از طریق انسیبل متصل بشیم و دستورات رو اجرا کنیم یا نه. که همیشه با دستور ping بررسی میکنیم آیا متصل شدیم یا نه. این دستور میاد تمام سرور هایی که توی فایل inventory هست رو ping میگیره ببینه آیا دسترسی داریم بهشون یا نه.
پلی بوک ها توی Ansible فایلهای YAML هستند که شامل یک یا چند تا play هستن که هرکدوم از play ها شامل چند تا task هستن. مثال بزنم براتون کانفیگ کردن یه سرور رو میتونیم یه playbook در نظر بگیریم. نصب داکر و نصب nginx رو میتونیم ۲ تا play در نظر بگیریم و هر کدوم از این ها شامل یه سری تسک هستن به عنوان مثال برای داکر تسک هایی که داریم: نصب dependency ها و نصب داکر و راه اندازی سرویس داکر رو میتونیم task در نظر بگیریم. در واقع کارهایی که میخوایم انجام بدیم رو لیست میکنیم تا همه رو برای ما انجام بده.
تو این قسمت ما یه playbook داریم که شامل یه play هست و اونم فقط یه تسک داره که نصب ابزار گیت روی سرور workstation هست.
یک playbook از چندین play تشکیل شده و هر play یک گروه از هاستها را هدف قرار میده که در اینونتوری تعریف شدهاند. هر play شامل وظایفی است و هر وظیفه یک ماژول Ansible را برای انجام یک اقدام خاص فراخوانی میکند.
vim /home/ansible/git-setup.yml
--- - hosts: workstation become: yes tasks: - name: install git yum: name: git state: latest
:wq
ذخیره کرده و خارج شوید.این playbook به Ansible میگه که آخرین نسخه Git را روی سرور workstation نصب کنه.
با نوشته شدن playbook، حالا میتوانید آن را اجرا کنید:
ansible-playbook -i /home/ansible/inventory /home/ansible.git-setup.yml
با این کامند انسیبل به سرور worksation متصل میشه و Git را مطابق با playbook نصب میکنه.
برای اطمینان از اینکه Git به درستی نصب شده ، وارد سرور worksation میشیم و نسخه Git رو بررسی میکنیم:
ssh workstation
which git
اگر دستور مسیر به باینری Git را برگرداند، نصب موفقیتآمیز بوده است
امیدوارم این مقاله مفید بوده باشه و در ادامه به سراغ کارهای چالشی تر با انسیبل میریم تا درک خوبی از انسیبل پیدا کنین.
و در آخر این آدرس لینکدین و توئیتر من هست خوشحال میشم در ارتباط باشیم.
🪩 Follow Linkedin Hossein Jafari🪩
🕊 Twitter 🕊