ديف أوبس

إعداد لارافيل على دوكر كومبوز

تثبيت وإعداد لارافيل على دوكر كومبوز Docker Compose

في عالم تطوير البرمجيات، أصبح من الضروري العمل على بيئات معزولة ومحددة بدقة لضمان استقرار النظام وتكرار بيئة العمل عبر الأنظمة المختلفة. من بين الأدوات التي تسهل هذا الأمر، تبرز أدوات مثل Docker و Docker Compose التي تساعد المطورين في إدارة وتوزيع التطبيقات بسهولة عبر الحاويات (Containers). في هذا المقال، سنتناول خطوة بخطوة كيفية تثبيت وإعداد تطبيق لارافيل (Laravel) على بيئة دوكر باستخدام Docker Compose.

ما هو Docker و Docker Compose؟

Docker هو أداة مفتوحة المصدر تمكّن المطورين من إنشاء وتشغيل تطبيقات معزولة داخل حاويات، وهذه الحاويات تحتوي على كافة الموارد اللازمة لتشغيل التطبيقات مثل المكتبات والإعدادات والبيئة التشغيلية.

أما Docker Compose فهو أداة تساعد في إدارة وتشغيل تطبيقات متعددة الحاويات. باستخدام Docker Compose، يمكن للمطورين تعريف بيئة التطبيقات بكل تفاصيلها في ملف واحد ثم تشغيل كافة الحاويات بنقرة واحدة فقط.

متطلبات النظام

قبل البدء في عملية التثبيت، هناك بعض الأدوات الأساسية التي يجب التأكد من وجودها على النظام:

  1. Docker: يمكنك تنزيل Docker من موقعه الرسمي وتثبيته بناءً على نظام التشغيل الذي تستخدمه.

  2. Docker Compose: يعتبر Docker Compose جزءًا من Docker ولكنه قد يتطلب تثبيتًا منفصلًا في بعض الحالات.

  3. Git: لتثبيت المشروع من مستودع Git أو إذا كنت ترغب في استخدام مستودعاتك الخاصة.

خطوات تثبيت وإعداد لارافيل على دوكر باستخدام Docker Compose

1. تثبيت Docker و Docker Compose

أولاً، تأكد من أنك قد قمت بتثبيت Docker و Docker Compose على جهازك. للحصول على النسخة الأحدث من Docker و Docker Compose، يمكنك زيارة الموقع الرسمي لـ Docker لتحميل النسخ المناسبة لنظام التشغيل الخاص بك.

للتأكد من أن Docker و Docker Compose تم تثبيتهما بشكل صحيح، يمكنك استخدام الأوامر التالية:

bash
docker --version docker-compose --version

إذا كانت الإجابة صحيحة وعرضت الإصدار، فهذا يعني أن التثبيت قد تم بنجاح.

2. إعداد مشروع لارافيل

الخطوة التالية هي إعداد مشروع لارافيل الذي سنقوم بتشغيله على دوكر. يمكنك البدء بمشروع جديد أو استخدام مشروع موجود بالفعل.

إذا كنت تقوم بإنشاء مشروع جديد، استخدم Composer لإنشاء تطبيق لارافيل جديد:

bash
composer create-project --prefer-dist laravel/laravel laravel-docker

هذه الخطوة ستقوم بإنشاء مشروع لارافيل جديد باسم laravel-docker.

3. إنشاء ملف docker-compose.yml

الملف الأساسي الذي سيتعامل مع تشغيل الحاويات في Docker Compose هو docker-compose.yml. ستحتاج إلى إنشاء هذا الملف في جذر مشروعك. هذا الملف يحدد كافة الخدمات التي تحتاج إليها، مثل خدمة ويب (خادم HTTP) وخدمة قاعدة البيانات.

هنا هو ملف docker-compose.yml الذي يحتوي على إعدادات أساسية:

yaml
version: '3.8' services: app: image: laravelphp/php-fpm container_name: laravel-app volumes: - ./:/var/www/html networks: - laravel_network web: image: nginx:alpine container_name: laravel-web ports: - "8080:80" volumes: - ./nginx/default.conf:/etc/nginx/conf.d/default.conf - ./:/var/www/html networks: - laravel_network depends_on: - app db: image: mysql:5.7 container_name: laravel-db environment: MYSQL_ROOT_PASSWORD: rootpassword MYSQL_DATABASE: laravel MYSQL_USER: user MYSQL_PASSWORD: userpassword volumes: - db_data:/var/lib/mysql networks: - laravel_network volumes: db_data: networks: laravel_network: driver: bridge

4. إعداد ملف Nginx

في ملف docker-compose.yml، ذكرنا خدمة nginx التي تحتاج إلى ملف إعدادات خاص بها. يجب عليك إنشاء مجلد nginx داخل جذر المشروع وإنشاء ملف default.conf داخله يحتوي على إعدادات خادم Nginx.

bash
mkdir nginx

ثم أنشئ الملف default.conf داخل مجلد nginx:

nginx
server { listen 80; server_name localhost; root /var/www/html/public; index index.php index.html index.htm; location / { try_files $uri $uri/ /index.php?$query_string; } location ~ \.php$ { try_files $uri =404; fastcgi_pass app:9000; fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; include fastcgi_params; } }

5. تشغيل الحاويات باستخدام Docker Compose

الآن بعد أن قمنا بإعداد جميع الملفات المطلوبة، حان الوقت لتشغيل الحاويات. باستخدام Docker Compose، يمكنك تشغيل جميع الخدمات (التطبيق، خادم الويب، قاعدة البيانات) بأمر واحد:

bash
docker-compose up -d

سوف يقوم Docker Compose بتحميل الصور اللازمة، وإنشاء الحاويات، وتشغيلها في الخلفية.

6. الوصول إلى التطبيق

بمجرد أن يتم تشغيل الحاويات بنجاح، يمكنك الوصول إلى تطبيق لارافيل عبر المتصفح عن طريق الانتقال إلى العنوان التالي:

arduino
http://localhost:8080

7. التفاعل مع الحاويات

إذا كنت بحاجة إلى الدخول إلى الحاوية الخاصة بتطبيق لارافيل للتفاعل مع سطر الأوامر داخلها (مثل تشغيل artisan أو composer)، يمكنك استخدام الأمر التالي:

bash
docker exec -it laravel-app bash

هذا سيمكنك من التفاعل مع الحاوية بشكل مباشر.

8. إدارة قاعدة البيانات

في ملف docker-compose.yml، قمنا بتحديد إعدادات MySQL لقاعدة البيانات. يمكنك التفاعل مع قاعدة البيانات عبر سطر الأوامر داخل الحاوية باستخدام MySQL CLI:

bash
docker exec -it laravel-db mysql -u user -p

بعد إدخال كلمة المرور (userpassword في هذا المثال)، ستتمكن من التفاعل مع قاعدة البيانات.

9. إعداد بيئة لارافيل

بمجرد أن يتم تشغيل الحاويات بنجاح، ستحتاج إلى إعداد البيئة الخاصة بتطبيق لارافيل. للقيام بذلك، قم بتعديل ملف .env في جذر المشروع ليحتوي على الإعدادات الصحيحة لقاعدة البيانات. يجب أن تتأكد من أن إعدادات الاتصال بقاعدة البيانات تطابق الإعدادات في ملف docker-compose.yml:

ini
DB_CONNECTION=mysql DB_HOST=db DB_PORT=3306 DB_DATABASE=laravel DB_USERNAME=user DB_PASSWORD=userpassword

10. تشغيل الأوامر اللازمة

بعد إعداد البيئة، قد تحتاج إلى تشغيل بعض الأوامر مثل تشغيل المهاجرات (migrations) أو تثبيت الحزم عبر Composer:

bash
docker exec -it laravel-app composer install docker exec -it laravel-app php artisan migrate

11. التوقف عن العمل وإزالة الحاويات

إذا كنت ترغب في إيقاف الحاويات مؤقتًا، يمكنك استخدام الأمر التالي:

bash
docker-compose down

إذا كنت ترغب في إزالة الحاويات تمامًا مع حذف البيانات المرتبطة بها (مثل قاعدة البيانات)، استخدم:

bash
docker-compose down -v

الخلاصة

من خلال هذه الخطوات، يمكنك بسهولة تثبيت وإعداد تطبيق لارافيل على بيئة دوكر باستخدام Docker Compose. هذه الطريقة تضمن لك بيئة تطوير مستقرة ومعزولة، مما يسهل العمل الجماعي ويساعد في ضمان أن التطبيق سيعمل بنفس الطريقة على جميع الأنظمة. تعتبر دوكر و Docker Compose من الأدوات الضرورية للمطورين الذين يسعون لتبسيط عملية التطوير والنقل والتشغيل، وهي تساهم في جعل سير العمل أكثر سلاسة وكفاءة.