تبسيط عملية التطوير: إعداد Laravel مع Nginx و MySQL باستخدام Docker Compose
في عالم تطوير البرمجيات، يعتبر Laravel واحدًا من أكثر الأطُر إثارة للاهتمام، حيث يقدم إطار عمل PHP القوي والمستقر لبناء تطبيقات ويب متقدمة. إن إعداد بيئة تطوير محلية تكون معقدة أحيانًا، ولكن باستخدام Docker Compose، يمكنك تبسيط هذه العملية وتوفير بيئة موحدة وقابلة للتكرار.
أولاً وقبل كل شيء، يجب عليك إنشاء ملف docker-compose.yml
لتعريف الخدمات التي تحتاجها تطبيقك. لبداية سلسة، دعنا نتخذ خطوات لإعداد خدمات Laravel مع Nginx كخادم و MySQL كقاعدة بيانات.
yamlversion: '3'
services:
# خدمة MySQL
mysql:
image: mysql:latest
environment:
MYSQL_DATABASE: laravel_db
MYSQL_ROOT_PASSWORD: secret
MYSQL_USER: laravel_user
MYSQL_PASSWORD: laravel_password
# خدمة Laravel
laravel:
build:
context: .
dockerfile: Dockerfile
image: laravel-app
volumes:
- ./laravel:/var/www/html
depends_on:
- mysql
environment:
DB_CONNECTION: mysql
DB_HOST: mysql
DB_PORT: 3306
DB_DATABASE: laravel_db
DB_USERNAME: laravel_user
DB_PASSWORD: laravel_password
# خدمة Nginx
nginx:
image: nginx:latest
ports:
- "8080:80"
volumes:
- ./laravel:/var/www/html
- ./nginx/default.conf:/etc/nginx/conf.d/default.conf
depends_on:
- laravel
في هذا الملف، قمنا بتعريف ثلاث خدمات: MySQL، Laravel، و Nginx. MySQL تحتاج إلى متغيرات بيئية لتكوين قاعدة البيانات، ولكن Laravel تحتاج إلى بعض التكوين للاتصال ب MySQL.
لإعداد Laravel، سنستخدم Dockerfile:
DockerfileFROM composer:latest AS build WORKDIR /app COPY . . RUN composer install --ignore-platform-reqs FROM php:8.0-fpm WORKDIR /var/www/html COPY --from=build /app . RUN chown -R www-data:www-data /var/www/html
هذا الملف يُنشئ مرحلتين. المرحلة الأولى تقوم بتثبيت تبعيات Laravel باستخدام Composer، والمرحلة الثانية تقوم ببناء صورة PHP-FPM ونسخ الملفات.
بالإضافة إلى ذلك، يجب إنشاء ملف تكوين Nginx default.conf
:
nginxserver { listen 80; index index.php index.html; server_name localhost; error_log /var/log/nginx/error.log; access_log /var/log/nginx/access.log; root /var/www/html/public; location / { try_files $uri $uri/ /index.php?$query_string; } location ~ \.php$ { fastcgi_split_path_info ^(.+\.php)(/.+)$; fastcgi_pass laravel:9000; fastcgi_index index.php; include fastcgi_params; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; fastcgi_param PATH_INFO $fastcgi_path_info; } location ~ /\.ht { deny all; } }
هذا الملف يحدد تكوين Nginx الخاص بتشغيل Laravel.
بعد إنشاء هذه الملفات، يمكنك تشغيل تطبيق Laravel الخاص بك باستخدام الأمر:
bashdocker-compose up -d
بهذا، ستكون قد نشأت بيئة Laravel مع خادم Nginx وقاعدة بيانات MySQL باستخدام Docker Compose. تأكد من أن الملفات والتكوينات تعكس احتياجات تطبيقك الخاص وتعديلها حسب الحاجة.
المزيد من المعلومات
بالطبع، دعنا نعمق أكثر في الخطوات ونقدم مزيدًا من التفصيل حول كل جزء في عملية إعداد Laravel مع Nginx و MySQL باستخدام Docker Compose.
MySQL:
في قسم الخدمة MySQL في ملف docker-compose.yml
، نقوم بتحديد صورة Docker لـ MySQL ونقوم بتكوين بعض المتغيرات البيئية:
MYSQL_DATABASE
: اسم قاعدة البيانات التي سيتم إنشاؤها.MYSQL_ROOT_PASSWORD
: كلمة مرور المستخدم الجذر (يُفضل تحديدها بشكل آمن).MYSQL_USER
وMYSQL_PASSWORD
: معلومات مستخدم قاعدة البيانات.
Laravel:
في قسم الخدمة Laravel، قمنا بتحديد بنية Dockerfile لبناء صورة Laravel. يتم في المرحلة الأولى استخدام Composer لتثبيت التبعيات، والمرحلة الثانية تستخدم صورة PHP-FPM لتشغيل التطبيق. يتم نسخ الملفات من المرحلة الأولى إلى المرحلة الثانية.
Nginx:
في قسم الخدمة Nginx، نستخدم صورة Nginx ونعرف تكوين ملف default.conf
. يحدد هذا الملف كيفية توجيه طلبات HTTP إلى تطبيق Laravel. يتم تحديد موقع الملفات وملف التكوين الرئيسي لـ Nginx.
listen 80
: يعين Nginx على الاستماع على المنفذ 80.server_name
: يحدد اسم الخادم (في هذه الحالة، localhost).root
: يحدد مسار الجذر لتطبيق Laravel.- قسم
location /
: يعين كيفية توجيه الطلبات إلى Laravel. - قسم
location ~ \.php$
: يحدد كيفية معالجة ملفات PHP. - قسم
location ~ /\.ht
: يمنع الوصول إلى ملفات .htaccess.
التشغيل:
عند تشغيل docker-compose up -d
، يبدأ Docker في إنشاء الخدمات المحددة في ملف docker-compose.yml
. يتم إنشاء حاويات Docker لكل خدمة وتكوين البيئة حسب المتغيرات المحددة.
التحقق:
للتحقق من أن النظام قيد التشغيل بشكل صحيح، يمكنك استخدام الأمر:
bashdocker-compose ps
يجب أن تظهر حالة “Up” لجميع الخدمات.
الوصول إلى التطبيق:
يمكنك الوصول إلى تطبيق Laravel عبر المتصفح باستخدام http://localhost:8080
. قد تحتاج إلى تنفيذ الأمر docker-compose exec laravel bash
للوصول إلى حاوية Laravel وتشغيل الأوامر داخلها (مثل تنفيذ الهجرة لقاعدة البيانات).
الاستنتاج:
باستخدام Docker Compose، يصبح إعداد Laravel مع Nginx و MySQL عملية بسيطة وقابلة للتكرار. يمكنك تكامل الخدمات بسهولة وضبط الإعدادات وفقًا لاحتياجات تطبيقك. يُسهم هذا النهج في تبسيط عملية تطوير البرمجيات وتحسين فعالية الفريق التطوير.
الخلاصة
في ختام هذا الاستعراض الشامل لإعداد Laravel مع Nginx و MySQL باستخدام Docker Compose، نجد أن هذه العملية تقدم حلاً فعالاً وموحداً لبناء بيئة تطوير قوية ومستقرة. باستخدام تقنية Docker، يمكن للمطورين تجنب التعقيدات التي قد تنشأ عن تثبيت وتكوين البرمجيات والخدمات الضرورية.
ملف docker-compose.yml
يعمل كملف إعداد مركزي يجمع بين خدمات Laravel و Nginx و MySQL، مما يسمح بتشغيل تلك الخدمات بسهولة وتكاملها بشكل فعال. بفضل قدرة Docker على عزل البيئات وتكوينها بسرعة، يمكن للمطورين إعادة إنشاء بيئات التطوير بسرعة ودون عناء.
إضافةً إلى ذلك، تكنولوجيا Docker تعزز النقلية والتوازن في التطوير، حيث يمكن تشغيل نفس البيئة على أي جهاز يدعم Docker، مما يسهل على الفرق التنقل بين البيئات دون مشاكل.
بهذا، نستنتج أن استخدام Docker Compose لإعداد Laravel مع Nginx و MySQL هو خيار ذكي يوفر سهولة التكامل والتكرار، ويساعد في تحسين عمليات التطوير والاختبار.