نشر تطبيقات لارافيل على السحابة: دليل تقني شامل
قد يبدو نشر تطبيق لارافيل على السحابة مهمة شاقة، لكنه يفتح آفاقًا واسعة من قابلية التوسع والموثوقية وفعالية التكلفة. سيرشدك هذا الدليل الشامل عبر نماذج النشر السحابي المختلفة ومقدمي الخدمات السحابية الشائعة والخطوات العملية لتشغيل تطبيق لارافيل الخاص بك بسلاسة في السحابة.
لماذا ننشر لارافيل على السحابة؟ #
قبل الغوص في "كيف"، دعنا نفهم "لماذا":
- قابلية التوسع (Scalability): التعامل بسهولة مع زيادات حركة المرور عن طريق توسيع الموارد أو تقليصها حسب الحاجة.
- الموثوقية والتوافر العالي (Reliability & High Availability): توزيع تطبيقك عبر مناطق توافر متعددة لتقليل وقت التوقف عن العمل.
- فعالية التكلفة (Cost-Efficiency): الدفع فقط مقابل الموارد التي تستهلكها، مما يحسن من إنفاقك على البنية التحتية.
- الوصول العالمي (Global Reach): النشر بالقرب من المستخدمين لتقليل زمن الاستجابة (latency).
- الخدمات المدارة (Managed Services): إسناد مهام إدارة البنية التحتية إلى مزودي الخدمات السحابية، مما يتيح لك التركيز على التطوير.
فهم نماذج النشر السحابي لتطبيقات لارافيل #
عند النشر على السحابة، ستصادف نماذج خدمة مختلفة، لكل منها مقايضاته الخاصة.
1. البنية التحتية كخدمة (Infrastructure as a Service - IaaS) #
توفر IaaS موارد حوسبة افتراضية عبر الإنترنت. أنت تدير نظام التشغيل والتطبيقات والبرمجيات الوسيطة، بينما يدير مزود السحابة الأجهزة الأساسية. يوفر هذا النموذج أكبر قدر من التحكم ولكنه يتطلب إدارة يدوية أكبر للخادم.
- أمثلة: AWS EC2، Google Compute Engine، Azure Virtual Machines، DigitalOcean Droplets، Vultr Instances.
- حالة استخدام لارافيل: تقوم بتوفير جهاز افتراضي، وتثبيت نظام تشغيل (مثل Ubuntu)، وخادم ويب (Nginx/Apache)، وPHP، وقاعدة بيانات (MySQL/PostgreSQL)، ثم تنشر تطبيق لارافيل الخاص بك عليه مباشرة.
2. المنصة كخدمة (Platform as a Service - PaaS) #
توفر PaaS بيئة تطوير ونشر كاملة، وتجرد البنية التحتية الأساسية. تركز أنت على الكود الخاص بك، وتتولى المنصة إدارة الخوادم وأنظمة التشغيل وقواعد البيانات والتوسع.
- أمثلة: Laravel Forge، AWS Elastic Beanstalk، Google App Engine، Azure App Service، Heroku.
- حالة استخدام لارافيل: باستخدام Laravel Forge، تربط مستودع Git الخاص بك، ويقوم Forge بتوفير وتكوين الخوادم (من مزودي IaaS مثل DigitalOcean) لتطبيق لارافيل الخاص بك، ويتعامل مع Nginx وPHP-FPM وإعداد قاعدة البيانات وعمليات النشر تلقائيًا.
3. بلا خادم (Serverless / الوظيفة كخدمة - FaaS) #
تتيح لك البنية بلا خادم تشغيل الكود دون توفير أو إدارة خوادم. يتم تقسيم تطبيقك إلى وظائف تعمل استجابة لأحداث معينة، وتدفع فقط مقابل وقت الحوسبة المستهلك. التوسع تلقائي.
- أمثلة: AWS Lambda، Google Cloud Functions، Azure Functions، Laravel Vapor.
- حالة استخدام لارافيل: يقوم Laravel Vapor بنشر تطبيق لارافيل الخاص بك كمجموعة من وظائف AWS Lambda، وS3 للأصول، وDynamoDB لذاكرات التخزين المؤقت، مما يوفر قابلية توسع لا تصدق ونموذج دفع مقابل الاستخدام.
4. الحاويات (Docker & Kubernetes) #
تقوم الحاويات بتجميع تطبيقك وجميع تبعياته في وحدة واحدة معزولة. ثم يقوم Kubernetes بتنسيق هذه الحاويات عبر مجموعة من الأجهزة، وإدارة النشر والتوسع والشبكات.
- أمثلة: AWS ECS/EKS، Google Kubernetes Engine (GKE)، Azure Kubernetes Service (AKS).
- حالة استخدام لارافيل: تقوم بحوكمة تطبيق لارافيل الخاص بك باستخدام Docker، ثم تنشره وتديره باستخدام Kubernetes للحصول على توسع متقدم وبنية خدمات مصغرة. هذا عادة ما يكون للتطبيقات الأكبر والأكثر تعقيدًا.
مزودو الخدمات السحابية الشائعون لتطبيقات لارافيل #
يلبي العديد من مزودي الخدمات السحابية احتياجات لارافيل، ولكل منهم نقاط قوة فريدة.
- AWS (خدمات الويب من أمازون): المجموعة الأكثر شمولاً من الخدمات. ممتاز لعمليات النشر واسعة النطاق والمعقدة. خدمات مثل EC2 (IaaS)، RDS (قاعدة بيانات مُدارة)، S3 (التخزين)، SQS (قوائم الانتظار)، Elastic Beanstalk (PaaS)، وLambda (بلا خادم عبر Vapor) شائعة الاستخدام.
- Google Cloud Platform (GCP): قوي في تحليلات البيانات والتعلم الآلي. يقدم Compute Engine (IaaS)، Cloud SQL (قاعدة بيانات مُدارة)، Cloud Storage (التخزين)، App Engine (PaaS)، وCloud Run (بلا خادم يعتمد على الحاويات).
- Microsoft Azure: يتكامل بشكل جيد مع نظام Microsoft البيئي. يقدم Azure Virtual Machines (IaaS)، Azure SQL Database (قاعدة بيانات مُدارة)، Blob Storage (التخزين)، App Service (PaaS)، وAzure Functions (بلا خادم).
- DigitalOcean/Vultr: مزودو IaaS أبسط وسهل الاستخدام للمطورين، يقدمون خوادم افتراضية خاصة (Droplets/Instances) بأسعار تنافسية. مثالي لعمليات نشر الأجهزة الافتراضية المباشرة، وغالبًا ما يتم دمجها مع Laravel Forge.
مثال نشر خطوة بخطوة: Laravel Forge على DigitalOcean (هجين PaaS/IaaS) #
يبسط Laravel Forge نشر تطبيقات لارافيل على مختلف مزودي IaaS. يركز هذا المثال على DigitalOcean.
المتطلبات الأساسية: #
- تطبيق لارافيل جاهز للنشر (تحت التحكم في الإصدار، على سبيل المثال على GitHub/GitLab).
- حسابات على Laravel Forge وDigitalOcean.
1. إعداد تطبيق لارافيل الخاص بك للإنتاج #
تأكد من إعداد ملف .env الخاص بك للإنتاج. تشمل الجوانب الحاسمة:
APP_ENV=production
APP_DEBUG=false
APP_URL=https://your-domain.com
DB_CONNECTION=mysql
DB_HOST=127.0.0.1 # أو مضيف قاعدة البيانات المُدارة الخاصة بك
DB_PORT=3306
DB_DATABASE=your_database
DB_USERNAME=your_username
DB_PASSWORD=your_password
# تكوين برامج تشغيل البريد وذاكرة التخزين المؤقت وقائمة الانتظار للإنتاج
MAIL_MAILER=smtp
CACHE_DRIVER=redis # أو memcached
QUEUE_CONNECTION=redis # أو database
SESSION_DRIVER=redis # أو database
BROADCAST_DRIVER=pusher
قم بتشغيل أوامر التحسين محليًا قبل النشر أو تأكد من أن مسار CI/CD الخاص بك يقوم بذلك:
php artisan config:cache
php artisan route:cache
php artisan view:cache
composer install --optimize-autoloader --no-dev
npm install && npm run prod # إذا كان لديك أصول واجهة أمامية
2. توفير خادم باستخدام Laravel Forge #
- ربط Forge بـ DigitalOcean: في Forge، انتقل إلى "Cloud Providers" واربط حساب DigitalOcean الخاص بك. سيتم تفويض Forge بعد ذلك لإنشاء Droplets نيابة عنك.
- إنشاء خادم جديد: في Forge، انقر على "Servers" -> "Create Server".
- حدد "DigitalOcean" كمزود.
- اختر المنطقة والحجم ونظام التشغيل المطلوب (مثل Ubuntu 22.04 LTS).
- سيقوم Forge بتوفير الخادم، وتثبيت Nginx وPHP وComposer وMySQL والضروريات الأخرى.
3. إنشاء موقع على Forge #
بمجرد أن يصبح الخادم جاهزًا (قد يستغرق هذا من 5 إلى 10 دقائق):
- إضافة موقع جديد: في صفحة تفاصيل الخادم في Forge، انقر على "Add Site".
- أدخل نطاقك (على سبيل المثال،
your-domain.com). - حدد مزود مستودع Git الخاص بك (على سبيل المثال، GitHub) والمستودع الذي يحتوي على تطبيق لارافيل الخاص بك.
- اختر الفرع المراد نشره (على سبيل المثال،
mainأوmaster). - سيقوم Forge باستنساخ مستودعك وتثبيت التبعيات وتكوين Nginx.
- أدخل نطاقك (على سبيل المثال،
4. تكوين متغيرات البيئة وقاعدة البيانات #
- متغيرات البيئة (Environment Variables): في Forge، انتقل إلى موقعك، ثم إلى علامة التبويب "Environment". الصق محتوى ملف
.envالخاص بالإنتاج هنا. تأكد من تخزين المفاتيح الحساسة بشكل آمن. - قاعدة البيانات (Database): يقوم Forge تلقائيًا بإعداد قاعدة بيانات MySQL على الخادم الخاص بك. احصل على بيانات الاعتماد من علامة التبويب "Databases" في الخادم. إذا كنت تستخدم قاعدة بيانات مُدارة (على سبيل المثال، DigitalOcean Managed Database)، فقم بتحديث ملف
.envالخاص بك بمضيفها واسم المستخدم وكلمة المرور.- تشغيل الترحيلات: في Forge، انتقل إلى علامة التبويب "App" لموقعك وانقر على "Run Migrations". سيؤدي هذا إلى تنفيذ
php artisan migrate --force.
- تشغيل الترحيلات: في Forge، انتقل إلى علامة التبويب "App" لموقعك وانقر على "Run Migrations". سيؤدي هذا إلى تنفيذ
5. إعداد معالجات قوائم الانتظار (Queue Workers) (اختياري ولكن موصى به) #
للمهام الخلفية (مثل إرسال رسائل البريد الإلكتروني، معالجة الصور)، تعد قوائم انتظار لارافيل ضرورية.
- Supervisor: في Forge، انتقل إلى علامة التبويب "Daemons" في الخادم الخاص بك. انقر على "Add Daemon".
- الأمر (Command):
php /home/forge/your-domain.com/artisan queue:work redis --sleep=3 --tries=3 --max-time=3600(اضبطredisليتناسب معQUEUE_CONNECTIONمن.env). - المستخدم (User):
forge - الدليل (Directory):
/home/forge/your-domain.com - ابدأ المعالج.
- الأمر (Command):
6. تكوين التخزين (يوصى بـ S3) #
بالنسبة للملفات التي يرفعها المستخدمون، يوصى بشدة باستخدام تخزين الكائنات مثل AWS S3 لقابلية التوسع والموثوقية.
- تثبيت حزمة AWS S3:
composer require league/flysystem-aws-s3-v3 - تكوين
config/filesystems.php: قم بتعيينAWS_BUCKET،AWS_ACCESS_KEY_ID،AWS_SECRET_ACCESS_KEY،AWS_DEFAULT_REGIONفي ملف.envالخاص بك. - تحديث
config/filesystems.phpلاستخدامs3كقرص افتراضي أو قرص محدد لعمليات الرفع.
7. التكامل المستمر/النشر المستمر (CI/CD) #
يتكامل Forge مباشرة مع Git لعمليات النشر. ستؤدي أي عملية دفع إلى الفرع المكون إلى تشغيل عملية نشر.
- في إعدادات موقع Forge الخاص بك، ضمن علامة التبويب "Git"، قم بتمكين "Quick Deploy".
- يمكنك أيضًا تخصيص برنامج نصي النشر الخاص بك ليشمل عمليات بناء npm، وترحيلات قاعدة البيانات، وأوامر التخزين المؤقت، وما إلى ذلك.
8. المراقبة والتسجيل (Monitoring and Logging) #
- Forge: يوفر مراقبة أساسية لموارد الخادم. يمكنك دمج أدوات أكثر تقدمًا.
- مزود السحابة: يقدم DigitalOcean وAWS وGCP جميعًا خدمات المراقبة والتسجيل الخاصة بهم (على سبيل المثال، DigitalOcean Monitoring، AWS CloudWatch، Google Cloud Monitoring).
- جهة خارجية: أدوات مثل Sentry لتتبع الأخطاء، DataDog لمراقبة البنية التحتية، أو Logtail للتسجيل المركزي.
Laravel Vapor: نشر بلا خادم على AWS #
يوفر Laravel Vapor تجربة نشر مبسطة وبلا خادم لتطبيقات لارافيل على AWS Lambda. يتعامل مع التوفير والتوسع وإدارة البنية التحتية الأساسية تلقائيًا.
الفوائد الرئيسية لـ Vapor: #
- قابلية توسع لا نهائية (Infinite Scalability): يتوسع تلقائيًا للتعامل مع أي حجم من حركة المرور.
- الدفع مقابل الاستخدام (Pay-per-execution): تدفع فقط عندما يكون تطبيقك قيد التشغيل فعليًا.
- إدارة خادم صفرية (Zero Server Management): لا توجد خوادم لتوفيرها أو تصحيحها أو توسيعها يدويًا.
- دعم من الطرف الأول (First-Party Support): تم بناؤه بواسطة فريق لارافيل، مما يضمن تكاملاً عميقًا.
البدء باستخدام Vapor: #
- تثبيت Vapor CLI:
composer global require laravel/vapor-cli - تكوين AWS: تأكد من إعداد بيانات اعتماد AWS الخاصة بك (
~/.aws/credentials). - تثبيت Vapor Core:
composer require laravel/vapor-coreفي مشروعك. vapor.yml: قم بتكوين مشروعك باستخدام ملفvapor.yml، مع تحديد البيئات والنطاقات وقواعد البيانات والمزيد.id: 12345 # معرف مشروع Vapor الخاص بك name: your-project-name
environments:
production:
memory: 1024
timeout: 60
runtime: php-8.2
database: your-production-database
cache: your-production-cache
storage: your-production-storage
domain: your-domain.com
staging:
memory: 512
timeout: 30
runtime: php-8.2
database: your-staging-database
cache: your-staging-cache
storage: your-staging-storage
domain: staging.your-domain.com
```
5. النشر: vapor deploy production
يتعامل Vapor أيضًا مع الترحيلات ومعالجات قوائم الانتظار ومتغيرات البيئة بسلاسة.
الخلاصة #
يعتمد اختيار استراتيجية النشر السحابي المناسبة لتطبيق لارافيل الخاص بك على احتياجاتك وميزانيتك ومستوى التحكم المطلوب. سواء اخترت التحكم المباشر في IaaS، أو راحة PaaS مثل Forge، أو قابلية التوسع التي لا مثيل لها بلا خادم باستخدام Vapor، فإن فهم هذه الخيارات هو مفتاح بناء تطبيقات لارافيل قوية وعالية الأداء في السحابة. تبنى مبادئ DevOps، وأتمتة عمليات النشر الخاصة بك، وراقب تطبيقاتك عن كثب لضمان تجربة مستخدم سلسة وموثوقة.