إتقان Laravel Sail: دليلك لتطوير محلي سلس #
Laravel Sail هو واجهة سطر أوامر خفيفة الوزن للتفاعل مع بيئة تطوير Docker الافتراضية الخاصة بـ Laravel. يوفر طريقة بسيطة لإنشاء إعداد تطوير محلي قوي لتطبيقات Laravel الخاصة بك دون الحاجة إلى خبرة مسبقة في Docker. من خلال الاستفادة من Docker، يضمن Sail أن بيئة التطوير الخاصة بك تحاكي بيئة الإنتاج الخاصة بك عن كثب، مما يقلل من مشكلات "يعمل على جهازي" ويُبسّط التعاون بين أعضاء الفريق.
لماذا تختار Laravel Sail؟ #
- الاتساق: تضمن حاويات Docker أن تطبيقك يعمل في نفس البيئة عبر جميع الأجهزة، من التطوير إلى الإنتاج.
- العزل: يمكن لكل مشروع أن يكون له بيئته المعزولة الخاصة به بإصدارات PHP محددة، أنواع قواعد البيانات، والخدمات.
- البساطة: يقوم Sail بتجريد معظم تعقيدات Docker، مما يسمح لك بالتركيز على كتابة الكود.
- ميزات كاملة: يتضمن خدمات شائعة مثل MySQL، PostgreSQL، Redis، Mailpit، Memcached، MeiliSearch، و Selenium.
المتطلبات الأساسية #
قبل الغوص في Laravel Sail، تأكد من توفر ما يلي:
- Docker Desktop: لنظامي macOS و Windows (يوصى بـ WSL2 لـ Windows).
- Docker Engine & Docker Compose: لنظام Linux.
- فهم أساسي لـ Laravel.
- مشروع Laravel جديد أو موجود.
البدء مع Laravel Sail #
1. تثبيت Laravel Sail
لمشاريع Laravel الجديدة: أسهل طريقة للبدء مع Sail هي إنشاء مشروع Laravel جديد وتضمين Sail منذ البداية. سيقوم هذا تلقائيًا بتثبيت Sail وجميع ملفات Docker Compose الضرورية.
composer create-project laravel/laravel example-app --prefer-dist
cd example-app
php artisan sail:install
بدلاً من ذلك، يمكنك إنشاء مشروع جديد مباشرة باستخدام Sail وتحديد الخدمات التي تحتاجها:
curl -s "https://laravel.build/example-app?with=mysql,redis,meilisearch,mailpit,selenium" | bash
cd example-app
./vendor/bin/sail up
يقوم هذا الأمر بتنزيل مُثبّت Laravel، وإنشاء مشروعك، وتثبيت Sail، ورفع حاويات Docker.
لمشاريع Laravel الموجودة: إذا كان لديك تطبيق Laravel موجود، يمكنك إضافة Sail إليه باستخدام Composer:
cd your-laravel-project
composer require laravel/sail --dev
php artisan sail:install
سيقوم أمر sail:install بنشر ملف docker-compose.yml إلى جذر مشروعك وتكوين ملف .env الخاص بك لاستخدام خدمات Sail.
2. تشغيل وإيقاف Sail
بمجرد تثبيت Sail، يمكنك بدء بيئة التطوير الخاصة بك باستخدام أمر up:
./vendor/bin/sail up
سيقوم هذا الأمر ببناء صور Docker (إذا لم تكن مبنية بالفعل) وبدء الحاويات المحددة في ملف docker-compose.yml الخاص بك. سيكون تطبيقك متاحًا عادةً على http://localhost.
لتشغيل الحاويات في الخلفية (daemonized)، استخدم العلامة -d:
./vendor/bin/sail up -d
لعرض حالة الحاويات قيد التشغيل:
./vendor/bin/sail ps
لإيقاف جميع حاويات Sail قيد التشغيل:
./vendor/bin/sail stop
لإيقاف وإزالة جميع الحاويات، الشبكات، والوحدات التخزينية (volumes):
./vendor/bin/sail down
هذا مفيد للبدء من جديد، ولكن كن حذرًا لأنه يزيل بيانات قاعدة البيانات إذا لم يتم حفظها خارج الحاوية.
3. تشغيل أوامر Artisan و Composer و NPM
يوفر Sail طريقة ملائمة لتنفيذ الأوامر داخل حاويات Docker الخاصة بك، مما يضمن تشغيلها في البيئة الصحيحة. فقط قم بإضافة ./vendor/bin/sail قبل أوامرك المعتادة.
أوامر Artisan:
./vendor/bin/sail artisan migrate
./vendor/bin/sail artisan tinker
./vendor/bin/sail artisan make:controller HomeController
أوامر Composer:
./vendor/bin/sail composer require laravel/horizon
./vendor/bin/sail composer install
أوامر NPM (Node.js/Yarn):
./vendor/bin/sail npm install
./vendor/bin/sail npm run dev
./vendor/bin/sail yarn add react
أوامر PHP:
./vendor/bin/sail php --version
./vendor/bin/sail php artisan --version
./vendor/bin/sail test
4. الاتصال بقاعدة البيانات والخدمات الأخرى
يقوم Sail بتكوين ملف .env الخاص بك بالبيانات الضرورية للاتصال بخدماته.
MySQL/PostgreSQL:
DB_HOST=mysql(أوDB_HOST=pgsqlلـ PostgreSQL)DB_PORT=3306(أو5432لـ PostgreSQL)DB_DATABASE=laravelDB_USERNAME=sailDB_PASSWORD=password
Redis:
REDIS_HOST=redisREDIS_PORT=6379REDIS_PASSWORD=null
تذكر أن mysql و redis هي أسماء الخدمات المحددة في ملف docker-compose.yml الخاص بك، والتي يحلها Docker إلى عناوين IP الصحيحة داخل شبكة Docker.
5. تخصيص بيئة Sail الخاصة بك
بينما يعمل Sail بشكل رائع خارج الصندوق، قد تحتاج إلى تخصيص بيئته.
نشر ملفات Dockerfile الخاصة بـ Sail: للحصول على تحكم كامل في صور Docker، يمكنك نشر ملفات Dockerfile الخاصة بـ Sail إلى جذر مشروعك باستخدام:
./vendor/bin/sail artisan sail:publish
سيضع هذا الأمر ملفات Dockerfile (مثل docker/8.2/Dockerfile) وملفات التكوين الأخرى في دليل docker في جذر مشروعك. يمكنك بعد ذلك تعديل هذه الملفات لتثبيت امتدادات PHP إضافية أو تبعيات النظام أو تغيير الصور الأساسية. بعد التعديل، ستحتاج إلى إعادة بناء صورك:
./vendor/bin/sail build --no-cache
./vendor/bin/sail up -d
تعديل docker-compose.yml:
يمكنك تعديل ملف docker-compose.yml مباشرة لإجراء ما يلي:
- إضافة خدمات جديدة (مثل قاعدة بيانات أخرى، عامل قائمة انتظار متخصص).
- تغيير تعيينات المنافذ (port mappings).
- ضبط حدود الموارد.
- تركيب وحدات تخزين إضافية (mount additional volumes).
مثال: إضافة خدمة جديدة (مثل خادم Nginx وكيل مخصص):
# docker-compose.yml
version: '3.8'
services:
# ... existing services ...
my-nginx-proxy:
image: nginx:alpine
ports:
- '8080:80'
volumes:
- ./nginx/nginx.conf:/etc/nginx/nginx.conf:ro
- ./src:/var/www/html # Assuming your Laravel app is in src
networks:
- sail
بعد تعديل docker-compose.yml، قم بتشغيل sail up -d لرفع الخدمة الجديدة.
نصائح وحيل لسير عمل أكثر سلاسة #
-
إنشاء اسم مستعار (Bash Alias): قد يكون كتابة
./vendor/bin/sailأمرًا مملاً. أضف اسمًا مستعارًا إلى ملف تكوين الشيل الخاص بك (.bashrc،.zshrc، إلخ):alias sail='[ -f sail ] && bash sail || bash vendor/bin/sail'بعد ذلك، يمكنك ببساطة تشغيل
sail up،sail artisan migrate، إلخ. -
الأداء على Windows: للحصول على أفضل أداء على Windows، تأكد من استخدام WSL2 (Windows Subsystem for Linux 2) مع Docker Desktop. قم بتكوين Docker Desktop لاستخدام الواجهة الخلفية لـ WSL2.
-
البيانات المستمرة (Persistent Data): بالنسبة لقواعد البيانات، يتضمن ملف
docker-compose.ymlعادةً وحدات تخزين مسماة (مثلsail-mysql). تحافظ هذه الوحدات التخزينية على البيانات حتى إذا تمت إزالة الحاويات. إذا استخدمتsail down -v، فستتم إزالة هذه الوحدات التخزينية أيضًا، مما يؤدي إلى حذف بياناتك. كن على دراية بهذا عند التنظيف. -
الوصول إلى shell الحاوية: يمكنك الاتصال بحاوية تطبيقك (التي تشغل PHP) باستخدام:
./vendor/bin/sail shellهذا مفيد لتصحيح الأخطاء أو تنفيذ الأوامر مباشرة داخل الحاوية.
الخاتمة #
يعمل Laravel Sail على تبسيط إعداد وإدارة بيئة تطوير محلية لتطبيقات Laravel بشكل كبير. من خلال تسخير قوة Docker، فإنه يوفر بيئة متسقة ومعزولة وقابلة للتخصيص بدرجة عالية تساعد في تبسيط سير عمل التطوير والتعاون. احتضن Laravel Sail لجعل تجربة التطوير المحلي الخاصة بك سلسة حقًا.