ديف أوبس

إعداد Laravel مع Nginx و MySQL باستخدام Docker

إعداد Laravel مع خادم Nginx وقاعدة بيانات MySQL باستخدام Docker Compose

تعتبر منصة Laravel من أشهر أطر العمل المفتوحة المصدر في لغة PHP، والتي توفر بيئة تطوير حديثة وسهلة الاستخدام لبناء تطبيقات الويب. يستخدم المطورون Laravel بشكل واسع بسبب مرونتها، سهولة تعلمها، والميزات العديدة التي تقدمها مثل نظام التوجيه (Routing)، قاعدة بيانات مدمجة، دعم للأوامر عبر CLI، وغيرها. من ناحية أخرى، يعد Docker من الأدوات الحديثة التي تمكّن المطورين من إعداد بيئات العمل بسهولة مع ضمان التوافق بين الأنظمة المختلفة. في هذا المقال، سنتناول كيفية إعداد مشروع Laravel باستخدام Docker Compose مع خادم Nginx وقاعدة بيانات MySQL.

المتطلبات الأساسية

قبل البدء في إعداد المشروع، يجب أن يكون لديك بعض المتطلبات الأساسية على جهازك:

  1. تثبيت Docker: يجب عليك تثبيت Docker على جهازك لتتمكن من استخدام الحاويات (Containers). يمكنك تنزيله من الموقع الرسمي docker.com.

  2. تثبيت Docker Compose: Docker Compose هو أداة تتيح لك تعريف وتشغيل تطبيقات متعددة الحاويات بسهولة. يمكنك تثبيته من موقع Docker Compose.

  3. أساسيات Laravel: على الرغم من أننا سنستخدم Docker لتشغيل Laravel، إلا أنك بحاجة إلى معرفة أساسية حول كيفية إنشاء تطبيق Laravel وإعداده. تأكد من أنك قد قمت بإنشاء مشروع Laravel جديد أو لديك مشروع موجود بالفعل.

الخطوة 1: إنشاء مشروع Laravel

أولاً، قم بإنشاء مشروع Laravel جديد إذا لم يكن لديك مشروع حالي. يمكنك القيام بذلك باستخدام Composer. افتح الطرفية (Terminal) في مجلد العمل الخاص بك وقم بتشغيل الأمر التالي:

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

سوف يقوم هذا الأمر بإنشاء مشروع Laravel جديد باسم laravel-docker.

الخطوة 2: إعداد Dockerfile و Docker Compose

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

1. إعداد Dockerfile

الـ Dockerfile هو الملف الذي يحتوي على التعليمات التي يخبر فيها Docker كيفية بناء الحاوية الخاصة بالتطبيق. في مجلد المشروع، قم بإنشاء ملف باسم Dockerfile واكتب فيه ما يلي:

dockerfile
# استخدام صورة PHP مع Nginx و Composer FROM php:8.1-fpm # تثبيت أدوات وتوسعات PHP المطلوبة RUN apt-get update && apt-get install -y libpng-dev libjpeg-dev libfreetype6-dev zip git libicu-dev libxml2-dev \ && docker-php-ext-configure gd --with-freetype --with-jpeg \ && docker-php-ext-install gd intl opcache pdo pdo_mysql xml bcmath \ && apt-get clean # تثبيت Composer COPY --from=composer:latest /usr/bin/composer /usr/bin/composer # تعيين مجلد العمل إلى /var/www WORKDIR /var/www # نسخ ملفات المشروع إلى المجلد في الحاوية COPY . . # تثبيت التبعيات الخاصة بـ Laravel RUN composer install # إعطاء صلاحيات الكتابة لمجلدات معينة في التطبيق RUN chown -R www-data:www-data /var/www RUN chmod -R 775 /var/www/storage /var/www/bootstrap/cache

هذا الملف سيقوم بتثبيت PHP مع التوسعات المطلوبة مثل pdo_mysql، gd، وintl. بالإضافة إلى ذلك، سيقوم بتثبيت Composer وهو أداة لإدارة الحزم الخاصة بـ PHP.

2. إعداد ملف Docker Compose

الآن، نحتاج إلى إعداد docker-compose.yml لتحديد كيفية إنشاء وتشغيل حاويات متعددة مثل Nginx و MySQL بالإضافة إلى تطبيق Laravel.

قم بإنشاء ملف docker-compose.yml في نفس مجلد المشروع واكتب فيه التالي:

yaml
version: '3.8' services: app: build: context: . dockerfile: Dockerfile container_name: laravel-app ports: - "8000:80" volumes: - .:/var/www networks: - app-network depends_on: - db environment: - DB_HOST=db - DB_PORT=3306 - DB_DATABASE=laravel - DB_USERNAME=root - DB_PASSWORD=root nginx: image: nginx:alpine container_name: laravel-nginx ports: - "8080:80" volumes: - .:/var/www - ./nginx.conf:/etc/nginx/nginx.conf networks: - app-network depends_on: - app db: image: mysql:5.7 container_name: laravel-db environment: MYSQL_ROOT_PASSWORD: root MYSQL_DATABASE: laravel volumes: - db_data:/var/lib/mysql networks: - app-network volumes: db_data: networks: app-network: driver: bridge

محتويات الملف:

  • app: يشير إلى الحاوية الخاصة بتطبيق Laravel التي تستخدم صورة PHP التي قمنا بتعريفها في الـ Dockerfile.

  • nginx: خادم الويب Nginx، حيث سيقوم بتوجيه الطلبات إلى الحاوية التي تحتوي على تطبيق Laravel.

  • db: قاعدة البيانات MySQL التي ستخدم التطبيق. يتم إنشاء قاعدة بيانات laravel مع مستخدم root.

  • volumes: يستخدم لتخزين البيانات الخاصة بـ MySQL.

  • networks: حاويات متعددة سيتم ربطها بنفس الشبكة لتتمكن من التواصل فيما بينها.

الخطوة 3: إعداد ملف تكوين Nginx

من أجل تكوين خادم Nginx لعمله مع Laravel داخل الحاوية، نحتاج إلى ملف إعدادات Nginx. قم بإنشاء ملف باسم nginx.conf في مجلد المشروع واكتب فيه التالي:

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

هذا الملف يحدد كيفية التعامل مع الطلبات على خادم Nginx، وتوجيهها إلى الحاوية التي تحتوي على تطبيق Laravel باستخدام PHP-FPM.

الخطوة 4: بناء وتشغيل الحاويات

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

bash
docker-compose up --build

سيقوم Docker Compose بإنشاء الحاويات بناءً على الإعدادات التي تم تحديدها في الملفات السابقة. ستتمكن من الوصول إلى تطبيق Laravel عبر المتصفح من خلال عنوان http://localhost:8080.

الخطوة 5: إعداد قاعدة البيانات

بمجرد أن يتم تشغيل الحاويات بنجاح، يمكنك إعداد قاعدة البيانات الخاصة بتطبيق Laravel باستخدام الأمر التالي:

bash
docker-compose exec app php artisan migrate

سيقوم هذا الأمر بتشغيل عملية الترحيل (migrate) لقاعدة البيانات داخل الحاوية، مما يعني أن Laravel سيقوم بإنشاء الجداول اللازمة في قاعدة بيانات MySQL.

الخطوة 6: الوصول إلى تطبيق Laravel

الآن يمكنك فتح المتصفح والوصول إلى تطبيق Laravel عن طريق الدخول إلى http://localhost:8080. إذا تم كل شيء بشكل صحيح، سترى الصفحة الرئيسية لتطبيق Laravel. كما يمكنك التفاعل مع التطبيق كما تفعل عادة في بيئة تطوير محلية.

الختام

لقد تمكنت الآن من إعداد تطبيق Laravel باستخدام Docker Compose مع Nginx و MySQL بكل سهولة. يمكن لهذه البيئة أن توفر لك العديد من الفوائد مثل سهولة النشر على الخوادم، العزل بين التطبيقات المختلفة، والتكامل السهل مع أدوات أخرى مثل Redis، Elasticsearch، وغيرها من الخدمات.

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