
اگر چند سالی با لاراول کار کرده باشید، احتمالا بارها با این سناریو روبهرو شدهاید:
یک پروژه روی لپتاپ شما بدون مشکل اجرا میشود اما روی سرور با خطا مواجه میشود.
برای راهاندازی یک سرور جدید باید دهها دستور را به صورت دستی اجرا کنید.
هنگام استقرار نسخه جدید پروژه، فراموش میکنید یکی از مراحل مهم را انجام دهید.
چند سرور دارید و اعمال یک تغییر ساده روی همه آنها زمان زیادی میگیرد.
مهاجرت به سرور جدید به یک کابوس تبدیل میشود.
در ابتدای مسیر برنامهنویسی، این مشکلات طبیعی هستند. اما هرچه تعداد پروژهها، سرورها و مشتریان بیشتر شود، مدیریت زیرساخت به یکی از چالشهای اصلی تبدیل خواهد شد.
اینجاست که ابزارهای Infrastructure as Code یا «زیرساخت به عنوان کد» وارد میدان میشوند و یکی از محبوبترین آنها Ansible است.
انسیبل ابزاری است که به شما اجازه میدهد سرورها، سرویسها و تنظیمات زیرساخت را مانند کد مدیریت کنید. به جای اجرای دستی صدها دستور، تنها کافی است چند فایل متنی بنویسید تا تمام فرآیندها به صورت خودکار انجام شوند.
در این مقاله بررسی میکنیم که انسیبل چیست، چگونه کار میکند، چه مزایایی دارد و چرا هر توسعهدهنده لاراول باید حداقل با مفاهیم آن آشنا باشد.
انسیبل یک ابزار متنباز برای اتوماسیون زیرساخت، مدیریت پیکربندی سرورها، استقرار نرمافزار و هماهنگی سرویسها است.
این ابزار توسط Michael DeHaan در سال ۲۰۱۲ توسعه داده شد و بعدها توسط شرکت IBM و Red Hat به یکی از مهمترین ابزارهای دوآپس تبدیل شد.
به زبان ساده، انسیبل به شما اجازه میدهد:
سرور جدید راهاندازی کنید.
نرمافزارها را نصب کنید.
تنظیمات سیستم را اعمال کنید.
پروژهها را دپلوی کنید.
سرویسها را مدیریت کنید.
عملیات تکراری را خودکار کنید.
همه این موارد تنها با چند فایل YAML انجام میشود.
بسیاری از ابزارهای قدیمی مدیریت سرور پیچیدگی زیادی داشتند.
برای مثال:
Puppet
Chef
SaltStack
این ابزارها نیاز به Agent داشتند و راهاندازی آنها نسبتا دشوار بود.
اما انسیبل چند ویژگی مهم داشت:
نیازی نیست روی سرور مقصد نرمافزار خاصی نصب کنید.
تنها چیزی که لازم است SSH و Python است.
به همین دلیل راهاندازی آن بسیار سادهتر است.
پیکربندیهای انسیبل با YAML نوشته میشوند.
نمونه:
- name: Install Nginx apt: name: nginx state: present
حتی اگر قبلا با انسیبل کار نکرده باشید تقریبا متوجه میشوید چه اتفاقی در حال رخ دادن است.
کاملا رایگان است و جامعه بزرگی از توسعهدهندگان از آن استفاده میکنند.
هزاران ماژول آماده برای:
Ubuntu
Debian
CentOS
Docker
Kubernetes
AWS
DigitalOcean
Cloudflare
Git
وجود دارد.
قبل از ادامه باید با مفهوم Infrastructure as Code یا IaC آشنا شویم.
فرض کنید یک سرور لاراول دارید.
برای آمادهسازی آن باید:
apt update apt install nginx apt install php apt install mysql apt install redis apt install supervisor
را اجرا کنید.
سپس فایلهای تنظیمات مختلف را ویرایش کنید.
اگر فردا سرور جدیدی بخواهید چه میشود؟
باید دوباره تمام مراحل را انجام دهید.
اما در IaC شما همه چیز را به صورت کد تعریف میکنید.
مثلاً:
- install nginx - install php - install mysql - install redis
و هر زمان لازم بود همان کد را اجرا میکنید.
نتیجه:
سرعت بیشتر
خطای کمتر
قابلیت تکرار
مستندسازی بهتر
معماری انسیبل بسیار ساده است.
یک ماشین کنترلکننده داریم:
Control Node
که معمولا لپتاپ یا سرور CI/CD شماست.
این ماشین از طریق SSH به سرورهای مقصد متصل میشود.
Ansible | +--> Server 1 +--> Server 2 +--> Server 3
سپس دستورات مورد نظر را روی همه سرورها اجرا میکند.
اینونتوری لیست سرورهایی است که میخواهید مدیریت کنید.
مثال:
[web] 192.168.1.10 192.168.1.11 [db] 192.168.1.20
مهمترین بخش انسیبل پلی بوک است.
پلی بوک مجموعهای از تسکها است.
مثال:
- hosts: web tasks: - name: Install Nginx apt: name: nginx state: present
هر عملیات مستقل یک تسک است.
مثلا:
نصب Nginx
ساخت پوشه
کپی فایل
ریستارت سرویس
وقتی پروژه بزرگ میشود Playbookها به Role تقسیم میشوند.
مثلا:
roles/ nginx/ php/ mysql/ redis/
این ساختار پروژه را تمیزتر میکند.
روی اوبونتو:
sudo apt update sudo apt install ansible
بررسی نسخه:
ansible --version
فرض کنید یک سرور دارید.
ansible all -m ping
اگر پاسخ زیر را دریافت کنید:
pong
اتصال موفق بوده است.
اکنون به بخش مهم مقاله میرسیم.
چرا یک توسعه دهنده لاراول باید انسیبل یاد بگیرد؟
تقریبا تمام پروژههای لاراول نیاز دارند:
Nginx
PHP
Composer
Redis
MySQL
Supervisor
نصب شوند.
به جای انجام دستی:
- install php - install composer - install nginx
همه چیز را خودکار میکنید.
به جای:
git pull composer install php artisan migrate php artisan optimize php artisan queue:restart
میتوانید همه مراحل را داخل پلی بوک قرار دهید.
نمونه:
- name: Pull latest code git: repo: repo_url dest: /var/www/project - name: Run migrations command: php artisan migrate --force
فرض کنید:
Production
Staging
Testing
دارید.
انسیبل میتواند همزمان روی همه آنها عملیات انجام دهد.
در لاراول معمولا از Supervisor استفاده میشود.
اگر بخواهید Queue Workerها را روی چند سرور مدیریت کنید، انسیبل بسیار مفید است.
نمونه:
- name: Install Redis apt: name: redis-server state: present
به راحتی میتوانید فایلهای کانفیگ را روی چندین سرور کپی کنید.
اگر بخواهید محیط آزمایشی مشابه Production داشته باشید، انسیبل یکی از بهترین گزینههاست.
- hosts: web become: yes tasks: - name: Install Nginx apt: name: nginx state: present - name: Install PHP apt: name: php8.5-fpm state: present - name: Install Composer apt: name: composer state: present
این پلی بوک تنها با یک دستور اجرا میشود:
ansible-playbook deploy.yml
بسیاری تصور میکنند اگر داکر یاد بگیرند دیگر نیازی به انسیبل ندارند.
این تصور اشتباه است.
داکر و انسیبل رقیب نیستند.
داکر وظیفه دارد:
محیط اجرای برنامه را مدیریت کند.
اما انسیبل وظیفه دارد:
سرور را آماده کند.
داکر را نصب کند.
کانتینرها را مدیریت کند.
فایلهای تنظیمات را ایجاد کند.
در بسیاری از شرکتها این دو ابزار در کنار هم استفاده میشوند.
بسیاری از توسعهدهندگان لاراول مخصوصا در خارج از ایران از Forge استفاده میکنند.
Laravel Forge کار راهاندازی سرور را بسیار ساده میکند.
اما باید بدانید Forge در پشت صحنه بسیاری از کارهای خود را با اسکریپتهای اتوماسیون انجام میدهد.
اگر انسیبل را بلد باشید:
کنترل بیشتری دارید.
وابسته به سرویس خاصی نیستید.
میتوانید زیرساختهای پیچیدهتر ایجاد کنید.
یکی از کاربردهای مهم انسیبل اتصال به سیستمهای CI/CD است.
برای مثال:
GitHub Actions
GitLab CI
Jenkins
پس از Push شدن کد:
Build ↓ Test ↓ Deploy ↓ Restart Services
تمام مراحل میتوانند توسط انسیبل اجرا شوند.
بزرگترین مزیت انسیبل حذف عملیات دستی است.
پلی بوکها به نوعی مستندات زیرساخت هستند.
راهاندازی سرور از چند ساعت به چند دقیقه کاهش پیدا میکند.
هر بار نتیجه یکسانی دریافت میکنید.
فرقی ندارد:
۱ سرور
۱۰ سرور
۱۰۰ سرور
داشته باشید.
هیچ ابزاری کامل نیست.
برخی محدودیتهای انسیبل:
اگر تاکنون تنها روی کدنویسی تمرکز کرده باشید، باید با مفاهیم جدیدی آشنا شوید.
در پروژههای بسیار بزرگ ساختاردهی اهمیت زیادی پیدا میکند.
در مقیاسهای بسیار بزرگ، ابزارهایی مانند SaltStack ممکن است سریعتر باشند.
اگر توسعهدهنده لاراول هستید مسیر زیر منطقی است:
مرحله اول:
لینوگس
SSH
Bash
مرحله دوم:
YAML
مفاهیم پایه انسیبل
مرحله سوم:
پلی بوک
Variables
Templates
مرحله چهارم:
Roles
Collections
مرحله پنجم:
داکر
CI/CD
کوبرنتیز
پاسخ کوتاه:
بله.
امروزه بسیاری از شرکتها به دنبال توسعهدهندگانی هستند که علاوه بر برنامهنویسی، درک مناسبی از زیرساخت داشته باشند.
وقتی در رزومه خود بنویسید:
لاراول
داکر
انسیبل
لینوکس
نسبت به بسیاری از توسعهدهندگان مزیت رقابتی خواهید داشت.
خصوصا برای موقعیتهای:
لاراول دولوپر
سنیور بک اند دولوپر
دوآپس انجینیر
پلتفرم انجینیر
انسیبل یکی از مهمترین ابزارهای دنیای دوآپس است که امکان مدیریت زیرساخت به صورت کد را فراهم میکند. این ابزار با استفاده از فایلهای ساده YAML به شما اجازه میدهد نصب نرمافزارها، پیکربندی سرورها، استقرار پروژهها و مدیریت سرویسها را به شکل خودکار انجام دهید.
برای یک توسعهدهنده لاراول، یادگیری انسیبل تنها به معنای یادگیری یک ابزار جدید نیست، بلکه قدمی مهم در جهت تبدیل شدن به یک مهندس نرمافزار حرفهایتر است. زمانی که بتوانید علاوه بر نوشتن کد، زیرساخت اجرای آن را نیز مدیریت کنید، وابستگی شما به افراد دیگر کمتر میشود و درک عمیقتری از چرخه کامل توسعه و استقرار نرمافزار به دست میآورید.
اگر امروز با لاراول کار میکنید و قصد دارید در آینده به سطح سنیور برسید، انسیبل یکی از ارزشمندترین مهارتهایی است که میتوانید به جعبه ابزار فنی خود اضافه کنید.