انسیبل (Ansible) یکی از محبوبترین ابزارهای اتوماسیون در دنیای DevOps است که امکان مدیریت، پیکربندی و استقرار سرویسها را بهصورت خودکار فراهم میکند. در این آموزش قصد داریم وبسرور Nginx را با کمک Ansible روی اوبونتو ۲۲.۰۴ نصب و برای میزبانی یک وبسایت استاتیک پیکربندی کنیم.
Ansible: یک ابزار متنباز برای اتوماسیون که از SSH برای ارتباط با سرورها استفاده میکند.
Nginx: وبسرور سبک و پرقدرتی که برای سرویسدهی به وبسایتهای استاتیک و دینامیک استفاده میشود.
با ترکیب این دو ابزار، میتوانیم فرآیند نصب و پیکربندی Nginx را بدون ورود دستی به سرور، تنها با یک دستور انجام دهیم.
۲. پیشنیازها
برای اجرای این پروژه به موارد زیر نیاز دارید:
- یک سیستم کنترلنود با نصب Ansible (لینوکس، مک یا یونیکس)
- حداقل یک سرور مقصد با سیستمعامل Ubuntu 22.04 LTS
- دسترسی SSH از کنترلنود به سرور مقصد (ترجیحاً با کلید SSH)
ایجاد فایل Inventory برای معرفی سرورها به Ansible
ایجاد کلید SSH و انتقال به سرور:
ssh-keygen -t ed25519 -C “ansible”
ssh-copy-id ubuntu@SERVER_IP
۳. ساختار پوشه پروژه
برای نظم بهتر و امکاندیباگ و عیب یابی بهتر در آینده، ساختار پیشنهادی پروژه به شکل زیر است:
۴. ایجاد فایل Inventory
ابتدا می بایست در فایل hosts در مسیر etc/ansible/hosts سروری که می خواهید آن را مدیریت کنید را ایجاد نمایید. برای این کار می توانید از دستور زیر استفاده کنید:
[webservers]
web1 ansible_host=SERVER_IP ansible_user=ubuntu
این فایل به Ansible میگوید که روی کدام سرورها باید عملیات انجام دهد.
۵. آمادهسازی قالب پیکربندی Nginx
فایل templates/static-site.conf.j2:

این قالب از متغیرهای Jinja2 استفاده میکند تا دامنه و مسیر روت سایت را بهصورت پویا تنظیم کنیم.
این فایل در واقع یک قالب (Template) برای فایل پیکربندی Nginx است. هدف این فایل:
- تعریف Virtual Host یا Server Block در Nginx
- پیکربندی مسیر روت سایت، دامنه، لاگها و نحوهی پاسخدهی سرور
- امکان استفاده از متغیرها (مثل
{{ domain_name }}و{{ web_root }}) که انسیبل در زمان اجرا آنها را جایگزین مقادیر واقعی میکند.
چرا پسوند .j2 دارد؟
.j2یعنی این فایل با Jinja2 Template Engine نوشته شده.- Jinja2 به انسیبل اجازه میدهد تا مقادیر متغیرها را در متن فایل جایگزین کند یا حتی شرطها و حلقهها را اعمال کند.
- مثال: اگر در
nginx-setup.ymlمقدارdomain_name: example.comباشد، در این فایل{{ domain_name }}بهexample.comتبدیل میشود.
۶. نوشتن پلیبوک نصب و پیکربندی
بعد از اماده سازی فایلهای قبلی نوبت ایجاد پلی بوک nginx-setup.yml است، دراین پلی بوک دستورات لازم برای نصب و فعال سازی nginx نوشته می شود.
دستورات لازم جهت نصب و فعال سازی به شرح زیر است:
—
– name: Install & configure Nginx
hosts: webservers
become: yes
vars:
domain_name: “your_domain.com”
web_root: “/var/www/html”
tasks:
– name: Update apt cache
apt:
update_cache: yes
– name: Install Nginx
apt:
name: nginx
state: present
– name: Create web root
file:
path: “{{ web_root }}”
state: directory
– name: Deploy sample index.html
copy:
src: files/index.html
dest: “{{ web_root }}/index.html”
– name: Remove default Nginx site
file:
path: /etc/nginx/sites-enabled/default
state: absent
– name: Upload custom Nginx config
template:
src: templates/static-site.conf.j2
dest: /etc/nginx/sites-available/static-site.conf
– name: Enable custom site
file:
src: /etc/nginx/sites-available/static-site.conf
dest: /etc/nginx/sites-enabled/static-site.conf
state: link
force: yes
– name: Restart Nginx
service:
name: nginx
state: restarted
enabled: yes
۷. اجرای پلیبوک
پس از ایجاد پلی بوک با استفاده از دستورات بالا می توانید برای اجرای پلیبوک از دستور زیر استفاده نمایید:
ansible-playbook -i hosts nginx-setup.yml
پس از اجرا، با وارد کردن IP یا دامنه در مرورگر، صفحهی سایت استاتیک شما نمایش داده میشود.
۸. نکات امنیتی Host Key Checking
Host Key Checking مکانیزمی است که از اتصال به سرورهای جعلی جلوگیری میکند.
در برخی سناریوها (مثل تست و ماشینهای موقت)، ممکن است بخواهید آن را غیرفعال کنید:
export ANSIBLE_HOST_KEY_CHECKING=False
هشدار: غیرفعال کردن این قابلیت، امنیت اتصال را کاهش میدهد.
۹. نتیجهگیری
در این مقاله یاد گرفتیم که چگونه با استفاده از Ansible، فرایند نصب و پیکربندی Nginx را روی Ubuntu 22.04 بهصورت خودکار انجام دهیم.
این روش علاوه بر صرفهجویی در زمان، از بروز خطاهای انسانی نیز جلوگیری میکند. در گامهای بعدی میتوانید SSL را با Let’s Encrypt اضافه کرده و یک سایت امن و بهینه داشته باشید.

