ديف أوبس

نشر تطبيق Laravel باستخدام Ansible

نشر تطبيق PHP باستخدام Ansible: إعداد Laravel وNginx

المقدمة

تُعتبر أتمتة النشر باستخدام أدوات مثل Ansible من الطرق الفعالة والمرنة التي تسهل عمليات نشر التطبيقات، خصوصاً في بيئات الإنتاج. تتيح هذه الأدوات للمطورين وفرق العمليات تقليل الأخطاء البشرية وتحسين الكفاءة من خلال إدارة البنية التحتية بشكل موحد وآلي. في هذا المقال، سنتناول كيفية استخدام Ansible لنشر تطبيق PHP يعتمد على إطار العمل Laravel مع خادم الويب Nginx. سنتعرف على كيفية إعداد بيئة الإنتاج الخاصة بك باستخدام هذه الأدوات من البداية حتى اكتمال عملية النشر.

المتطلبات المبدئية

قبل البدء في تنفيذ التعليمات البرمجية، من المهم التأكد من أن لديك البيئة المناسبة لإعداد وتشغيل تطبيق Laravel. تتضمن هذه البيئة عادةً:

  1. خادم Ubuntu: سيعمل على استضافة التطبيق.

  2. خادم Nginx: سيتم تكوينه كخادم ويب لتوجيه الطلبات إلى تطبيق Laravel.

  3. PHP: يجب أن يتم تثبيت إصدار متوافق من PHP لتشغيل Laravel.

  4. MySQL: قاعدة بيانات لتخزين بيانات التطبيق.

  5. Git: لإدارة الأكواد وتحديثها.

  6. Ansible: سيتم استخدامه لأتمتة النشر.

تثبيت Ansible

أول خطوة هي تثبيت Ansible على جهازك المحلي أو الخادم الذي ستقوم بإدارة النشر منه. يمكن تثبيت Ansible على خوادم Ubuntu باستخدام الأوامر التالية:

bash
sudo apt update sudo apt install ansible

إعداد خوادم الاستضافة

إعداد Nginx

يعد Nginx واحدًا من أشهر خوادم الويب التي يمكن استخدامها مع Laravel. يتميز Nginx بالكفاءة العالية في التعامل مع الضغط الكبير على المواقع، مما يجعله خياراً مثالياً لتشغيل تطبيقات PHP مثل Laravel.

  1. تثبيت Nginx:
    لتثبيت Nginx، يمكن تنفيذ الأمر التالي:

    bash
    sudo apt update sudo apt install nginx
  2. إعداد Nginx لتوجيه الطلبات إلى Laravel:
    بعد تثبيت Nginx، يجب تكوينه لإعادة توجيه الطلبات إلى خادم PHP. يمكن فعل ذلك عن طريق تعديل ملف التكوين default الموجود في /etc/nginx/sites-available/:

    bash
    sudo nano /etc/nginx/sites-available/default

    قم بتعديل أو إضافة الكود التالي في الملف:

    nginx
    server { listen 80; server_name example.com; root /var/www/laravel/public; index index.php index.html index.htm; location / { try_files $uri $uri/ /index.php?$query_string; } location ~ \.php$ { include snippets/fastcgi-php.conf; fastcgi_pass unix:/var/run/php/php7.4-fpm.sock; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; include fastcgi_params; } location ~ /\.ht { deny all; } }
  3. إعادة تشغيل Nginx:
    بعد إجراء التعديلات، تأكد من إعادة تشغيل Nginx لتطبيق التغييرات:

    bash
    sudo systemctl restart nginx

إعداد PHP

Laravel يعتمد بشكل كبير على PHP. يجب عليك تثبيت إصدار حديث من PHP مع كافة الامتدادات الضرورية. يمكن استخدام الأوامر التالية لتثبيت PHP على Ubuntu:

bash
sudo apt update sudo apt install php php-fpm php-mysql php-xml php-cli php-mbstring php-curl php-zip

تأكد من أن PHP-FPM يعمل بشكل صحيح باستخدام الأمر التالي:

bash
sudo systemctl start php7.4-fpm sudo systemctl enable php7.4-fpm

إعداد MySQL

إذا كان تطبيق Laravel يعتمد على MySQL كقاعدة بيانات، يمكنك تثبيت MySQL باستخدام الأمر التالي:

bash
sudo apt install mysql-server

ثم قم بتكوين MySQL عن طريق إعداد المستخدمين والبيانات اللازمة لتطبيقك.

إعداد Laravel

الخطوة التالية هي إعداد تطبيق Laravel. يمكن القيام بذلك عن طريق تحميل التطبيق باستخدام Git:

bash
cd /var/www git clone https://github.com/your-repository/laravel.git cd laravel

ثم قم بتثبيت التبعيات باستخدام Composer:

bash
composer install

تأكد من أن .env يحتوي على إعدادات الاتصال الصحيحة بقاعدة البيانات.

استخدام Ansible لتشغيل الأتمتة

الآن، بعدما تم إعداد بيئة الخادم بشكل يدوي، يمكننا استخدام Ansible لأتمتة نشر تطبيق Laravel.

1. إعداد ملفات Ansible

في البداية، يجب عليك إعداد هيكل مشروع Ansible. أنشئ مجلدًا جديدًا يحتوي على الملفات التالية:

bash
mkdir -p ansible/{inventories,playbooks,roles} cd ansible

1.1. إعداد ملف الجرد (Inventory)

ملف الجرد inventory.ini سيحدد الخوادم المستهدفة التي سيتم نشر التطبيق عليها. يجب أن يحتوي هذا الملف على العناوين IP الخاصة بالخوادم التي سيتم نشر تطبيق Laravel عليها.

ini
[webservers] server1 ansible_host=192.168.1.10

1.2. إعداد Playbook

Playbook هو الملف الذي يحتوي على المهام التي سيتم تنفيذها بواسطة Ansible. هنا نكتب خطوات أتمتة النشر مثل تثبيت Nginx، PHP، والقيام بإعداد Laravel.

إنشاء ملف site.yml داخل مجلد playbooks:

yaml
--- - name: إعداد بيئة Laravel hosts: webservers become: yes roles: - nginx - php - mysql - laravel

1.3. إعداد الأدوار (Roles)

يمكن تقسيم الأدوار إلى مهام صغيرة لتنفيذها على الخوادم المستهدفة، مثل تثبيت Nginx أو PHP أو Laravel.

1.3.1. دور Nginx

في مجلد roles/nginx/tasks/main.yml، يمكنك إضافة المهام الخاصة بتثبيت Nginx وإعداده:

yaml
--- - name: تثبيت Nginx apt: name: nginx state: present - name: نسخ ملف التكوين الخاص بـ Nginx copy: src: nginx/default dest: /etc/nginx/sites-available/default - name: إعادة تشغيل Nginx systemd: name: nginx state: restarted

1.3.2. دور PHP

في مجلد roles/php/tasks/main.yml، أضف المهام الخاصة بتثبيت PHP:

yaml
--- - name: تثبيت PHP وامتداداته apt: name: - php - php-fpm - php-mysql - php-xml - php-cli - php-mbstring - php-curl - php-zip state: present

1.3.3. دور Laravel

في مجلد roles/laravel/tasks/main.yml، أضف المهام الخاصة بتثبيت تطبيق Laravel:

yaml
--- - name: تثبيت Composer apt: name: composer state: present - name: تثبيت التبعيات باستخدام Composer command: composer install args: chdir: /var/www/laravel - name: إعداد ملفات البيئة template: src: laravel/.env.j2 dest: /var/www/laravel/.env

تنفيذ الأتمتة باستخدام Ansible

بعد إعداد ملفات Ansible، يمكنك الآن تشغيل playbook لتطبيق التغييرات على الخوادم المستهدفة:

bash
ansible-playbook -i inventories/inventory.ini playbooks/site.yml

الخاتمة

بفضل Ansible، أصبح نشر تطبيقات Laravel على خوادم Nginx أمرًا بسيطًا وقابلاً للتكرار. أتمتة هذه العمليات لا توفر الوقت فحسب، بل تضمن أيضًا إعداد بيئة متسقة وآمنة، مما يسهل إدارة التطبيقات وتحديثها عبر مختلف البيئات.