مقدمه
اگر تا به حال با تمام بخشهای این سری همراه بودهاید، اکنون باید با نصب بستههای سیستمی، اعمال قالبها و استفاده از هندلرها در پلیبوکهای Ansible آشنا باشید. در این بخش، از آنچه تاکنون دیدهاید استفاده خواهید کرد تا پلیبوکی ایجاد کنید که نصب یک سرور Nginx از راه دور برای میزبانی یک وبسایت استاتیک HTML را روی اوبونتو ۲۰.۰۴ به صورت خودکار انجام دهد.
ایجاد دایرکتوری پروژه
ابتدا یک دایرکتوری جدید روی کنترل نود Ansible خود ایجاد کنید که در آن فایلهای Ansible و یک وبسایت استاتیک HTML نمونه برای استقرار روی سرور راه دور قرار میگیرد. این پوشه میتواند در هر مکانی دلخواه درون فولدر خانگی شما باشد. در این مثال، ما از ~/ansible-nginx-demo استفاده میکنیم.
کپی فایل انونتوری
بعد، فایل انونتوری موجود خود را به دایرکتوری جدید کپی کنید. در این نمونه، از همان انونتوری که در ابتدای این سری تنظیم کردید استفاده میکنیم:
cp ~/ansible-practice/inventory .
این دستور فایلی به نام inventory را از فولدری به نام ansible-practice در فولدر خانگی شما کپی کرده و در دایرکتوری فعلی قرار میدهد.
دانلود وبسایت نمونه
برای این نمایش، از یک وبسایت استاتیک HTML استفاده میکنیم. فایلهای وبسایت نمونه را با اجرای دستور زیر دانلود کنید:
DOWNLOAD_COMMAND_HERE
برای باز کردن بسته دانلود شده به ابزار unzip نیاز دارید. برای اطمینان از نصب بودن این ابزار، دستور زیر را اجرا کنید:
sudo apt-get install unzip
سپس فایلهای وبسایت نمونه را با این دستور از حالت فشرده خارج کنید:
unzip html_demo_site-main.zip
این کار دایرکتوری جدیدی به نام html_demo_site-main در مسیر کاری فعلی شما ایجاد میکند. برای مشاهده محتویات این دایرکتوری، از دستور ls -la استفاده کنید:
ls -la html_demo_site-main
ایجاد قالب Nginx
اکنون قالب Nginx را که برای پیکربندی وبسرور راه دور لازم است، آماده میکنیم. ابتدا یک فولدر جدید در دایرکتوری ansible-nginx-demo بسازید که فایلهای غیر پلیبوک در آن قرار گیرد:
mkdir templates
سپس یک فایل جدید با نام nginx.conf.j2 ایجاد کنید:
nano templates/nginx.conf.j2
این فایل قالب شامل پیکربندی بلاک سرور Nginx برای یک وبسایت استاتیک HTML است. این قالب از سه متغیر استفاده میکند: document_root، app_root و server_name. ما بعداً این متغیرها را در پلیبوک تعریف خواهیم کرد. محتوای زیر را در فایل قالب کپی کنید:
server {
listen 80;
server_name {{ server_name }};
root {{ document_root }};
index index.html;
location / {
try_files $uri $uri/ =404;
}
}
پس از پایان، فایل را ذخیره و ببندید.
ایجاد پلیبوک Ansible
حالا یک پلیبوک Ansible جدید ایجاد میکنیم و متغیرهای استفاده شده در بخش قبلی را تعریف میکنیم. یک فایل جدید با نام playbook.yml باز کنید:
nano playbook.yml
این پلیبوک با تعریف hosts: all شروع میشود و با دستور become تمام تسکها را به صورت root اجرا میکند (معادل اجرای دستی دستورات با sudo). در بخش متغیرها، سه متغیر تعریف خواهیم کرد: server_name، document_root و app_root. اینها در قالب Nginx برای تنظیم نام دامنه یا آدرس IP ای که وبسرور به آن پاسخ میدهد و مسیر کامل جایی که فایلهای وبسایت روی سرور قرار دارند، استفاده میشوند. در این مثال، ansible_default_ipv4.address که آدرس IP عمومی سرور راه دور را نگه میدارد، به عنوان مقدار server_name استفاده میشود. البته میتوانید این مقدار را با نام دامنهای که به صورت صحیح در DNS تنظیم شده جایگزین کنید.
---
- hosts: all
become: yes
vars:
server_name: "{{ ansible_default_ipv4.address }}"
document_root: /var/www/html
app_root: "{{ document_root }}/html_demo_site-main"
tasks:
- name: Update apt cache and install nginx
apt:
update_cache: yes
name: nginx
state: latest
- name: Copy website files to remote server
copy:
src: html_demo_site-main/
dest: "{{ app_root }}"
owner: www-data
group: www-data
mode: '0755'
remote_src: no
- name: Deploy nginx config from template
template:
src: templates/nginx.conf.j2
dest: /etc/nginx/sites-available/default
notify: Restart Nginx
- name: Enable port 80 in firewall
ufw:
rule: allow
port: 80
proto: tcp
handlers:
- name: Restart Nginx
service:
name: nginx
state: restarted
اجرای پلیبوک
برای اجرای این پلیبوک روی سرور/سرورهایی که در فایل انونتوری تعریف کردهاید، دستور ansible-playbook را با همان گزینه اتصال (connection arguments) که قبلاً برای تست اتصال استفاده کردهاید اجرا کنید. در اینجا از فایل انونتوری به نام inventory و کاربر sammy برای اتصال به سرور استفاده میکنیم. چون پلیبوک نیاز به sudo دارد، گزینه -K را میافزاییم تا هنگام اجرا رمز sudo درخواست شود:
ansible-playbook -i inventory playbook.yml -u sammy -K
خروجی مانند نمونه زیر مشاهده خواهید کرد:
OUTPUT_HERE
پس از اجرای موفق پلیبوک، اگر مرورگر خود را باز کرده و نام دامنه یا آدرس IP سرور را وارد کنید، باید صفحه زیر را مشاهده کنید:

نتیجهگیری
تبریک میگوییم! شما با موفقیت استقرار یک وبسایت استاتیک HTML روی سرور Nginx راه دور را با استفاده از Ansible خودکار کردید.
اگر فایلهای وبسایت نمونه را تغییر دهید، با اجرای دوباره پلیبوک، تسک کپی به طور خودکار تغییرات را روی سرور منعکس میکند. چون Ansible رفتار idempotent دارد، اجرای چندباره پلیبوک تغییری را روی سیستمی که قبلاً آماده شده، ایجاد نخواهد کرد.
با تشکر از همراهی شما با پارمین کلود.
نظرات کاربران