ایجاد سرورهای تستی برای کار با Ansible  به کمک Docker

ایجاد سرورهای تستی برای کار با Ansible به کمک Dockerزمانی که شروع به یادگیری انسیبل میکنیم نیاز به محیطی داریم که بتونیم کد هامون رو درش اجرا کنیم و انواع تست ها رو تو حالت های مختلف پیاده سازی کنیم.برای همین من اومدم با کمک داکر محیطی رو ایجاد کردم که بشه به راحتی اینکار رو درونش انجام داد .ما برای شروع باید یک Docker Image بسازیم تا بتونیم container هایی رو ازش ایجاد کنیم که نقش سرور تستی رو برای ما بازی کنن.برای اینکار اول باید یک DockerFile بسازیم و تکه کد زیر رو در این فایل قرار بدیم: FROM ubuntu:latest RUN apt update && apt install openssh-server sudo -y RUN service ssh start RUN apt install sudo && apt install nano RUN useradd -m ansadmin -s /bin/bash RUN echo 'ansadmin:12345678' | chpasswd RUN chown -R ansadmin /home/ansadmin RUN echo 'ansadmin ALL=(ALL) NOPASSWD: ALL' >> /etc/sudoers RUN apt install software-properties-common -y RUN add-apt-repository --yes --update ppa:ansible/ansible RUN apt install ansible -y EXPOSE 22 CMD [&quot/usr/sbin/sshd&quot,&quot-D&quot]توضیح DockerFile خط به خط:1: برای ایجاد ایمیج یک سرور لینوکسی نیاز به Ubuntu image داریم که ما اینجا از آخرین نسخه یعنی ubuntu:latest استفاده میکنیم.2,3: در ansible به دو نوع سرور نیاز داریم.سروری که نقش کنترل کننده بقیه سرور ها رو داره که بهش master میگیم و سرورهایی که توسط master کنترل میشن و بهشون Node یا Slave میگیم.برای اینکه بتونیم از سرور master به node ها وصل بشیم باید از ssh استفاده کنیم. با دستور apt install openssh-server sudo –y پکیج openssh رو نصب و بعد با دستور service ssh start اون رو فعال میکنیم.4 : بصورت پیشفرض image Ubuntu پکیج های مورد نیاز ما که nano و sudo هستن رو نداره و ما در این مرحله اونا رو جداگونه نصب میکنیم.5,6,7 : حالا نیاز داریم یوزری رو با دسترسی sudo داشته باشیم که ansible با اون یوزر متصل بشه و کاراش رو انجام بده برای اینکار یوزر رو ایجاد و در خط بعد برای اون رمز عبور 12345678 رو ست میکنیم و در اخر در خط بعدی دسترسی Sudo رو به این یوزر میدیم.8,9,10 : بعد انجام این مراحل میرسیم به مرحله نصب ansible که در 3 خط بعدی پیش نیازهای این پکیج و خود پکیچ ansible رو نصب میکنیم .11: و در مرحله بعد برای اینکه بتونیم به سرور ssh بزنیم port 22 را توسط داکر Expose میکنیم.10: در آخر برای دسترسی به ssh cmd رو برابر ["/usr/sbin/sshd","-D"] قرار میدیم. با اینکار رو ssh daemon استارت میکنیم.نکته : daemon SSH ،sshd، دسترسی ایمن و رمزگذاری شده به سرورهای لینوکس را فراهم می کند.خب حالا میرسیم به مرحله ایجاد image و استفاده از اون.برای اینکار اگر روی ویندوز بودیم این دستور :docker build --no-cache -t ansible-server .و اکر روی لینوکس بودیم دستور زیر رو اجرا میکنیم:docker build --no-cache -t ansible-server ایجاد کانتینرهای تستی :در انسیبل میتونیم node هامون رو به گروه های مختلف جهت اجرای دستورات تقسیم کنیم و برای اینکه بتونیم واقعا این فضا رو داشته باشیم میتونیم container های مختلف با اسم های مختلف ایجاد کنیم.من اینجا دو نوع سرور در نظر گرفتم که یکی DB-server و اونیکی web-server هست و از هرکدوم دو مورد ایجاد کردم.docker create --name DB-server1 ansible-server docker create --name DB-server2 ansible-server docker create --name web-server1 ansible-server docker create --name web-server2 ansible-server . .با اجرای دستور بالا اگر بصورت صحیح انجام بشه نتیجه بشکل زیر خواهد بود :گرفتن ip از node ها:برای اتصال به node های ایجاد شده نیاز داریم به ip اونها دسترسی داشته باشیم.برای اینکار از دستور زیر استفاده میکنیم:docker inspect -f '{{range.NetworkSettings.Networks}}{{.IPAddress}}{{end}}'container_nameنکته: ip ها معمولا به ترتیب ایجاد container از 172.17.0.2 شروع میشه.نتیجه اجرای این دستور:ایجاد و اجرای master:همونطور که گفته شد ما برای اینکه یک کنترل کننده متمرکز داشته باشیم باید یک سرور master ایجاد کنیم و به همین جهت یک container جدید با نام master میسازیم:docker run -d --name master ansible-serverدسترسی به کامند master:برای اجرای دستورات در سطح master باید وارد container master بشیم.برای اینکار دستور زیر رو اجرا میکنیم:docker exec -it master /bin/bashاگر کد به صورت درست اجرا شده باشه خروجی به این شکل خواهد بود:بجای DB-server1 از master استفاده کنیدبعد از ورود به سطح master اولین کاری که میکنیم باید دستور su – ansadmin رو اجرا کنیم تا یوزرمون به ansadmin تغییر پیدا کنه.در قدم بعدی باید دستور ssh-keygen رو جهت ایجاد ssh-key اجرا کنیم.(برای تمام سوالات تو این قسمت yes بزنید.)بعد از این مراحل به مرحله اتصال و دسترسی به سرورهای node میرسیم .کد زیر رو اجرا کنید:ssh-copy-id container_ipنتیجه اجرای دستور:همونطور که در تصویر مشخص هست ، دوبار سوال میپرسه که هردو را باید yes بزنیم.مرحله بعد از ما رمز عبور مربوط به یوزر ansadmin رو میپرسه که 12345678 را وارد میکنیم.(داخل داکر فایل نوشتیم).نکته:با انجام این کارها ssh-copy-id ، کلید ایجاد شده رو بعنوان یک کلید مجازی روی سرور مقصد نصب می کنه. هدف از اتصال توسط ssh به سرور مقصد فراهم کردن دسترسی بدون نیاز به رمز عبور برای هر بار ورود هست . این امر ورود خودکار و بدون رمز عبور و ورود به سیستم را با استفاده از پروتکل SSH تسهیل می کنه.بعد از اتمام این کارها sudo nano /etc/ansible/hosts رو میزنیم و وارد فایل host میشیم و به شکل زیر تغییرش میدیم.[web-servers] #web-server1 172.17.0.5 #web-server2 172.17.0.6 [db-servers] #db-server1 172.17.0.2 #db-server2 172.17.0.4حالا سرورهامون به دو دسته db-server و web-server تقسیم شدن و میتونیم هر تعداد سرور و گروه که میخوایم ایجاد و استفاده کنیم.برای اینکه تست کنیم و مطمئن بشیم انسیبل درست عمل میکنه دستور زیر رو اجرا میکنیم.ansible all -m pingوباید خروجی به این شکل داشته باشیم:امیدوارم این آموزش به کارتون بیاد و بتونید برای یادگیری انسیبل استفاده کنید.