استقرار سریع سایت HTML استاتیک با Ansible و Nginx روی اوبونتو 20.04

مقدمه

اگر تا به حال با تمام بخش‌های این سری همراه بوده‌اید، اکنون باید با نصب بسته‌های سیستمی، اعمال قالب‌ها و استفاده از هندلرها در پلی‌بوک‌های 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 Demo Site Deployed by Ansible

نتیجه‌گیری

تبریک می‌گوییم! شما با موفقیت استقرار یک وب‌سایت استاتیک HTML روی سرور Nginx راه دور را با استفاده از Ansible خودکار کردید.

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

با تشکر از همراهی شما با پارمین کلود.

Click to rate this post!
[Total: 0 Average: 0]

نظرات کاربران

دیدگاهی بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *