اكتشف إطار PHP Laravel


الدرس: نشر التطبيق


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

البيئة


إنشاء بيئات
أحدث الإصدار 5 من Laravel ثورة في عادات البيئة إلى حد ما مقارنة بالإصدار 4. ويستخدم الآن حزمة من جهات خارجية : DotEnv . لقد كسبنا من ناحية الوضوح ولكن ليس بالضرورة في بيئة العمل. دعونا نرى كيف يبدو. عندما تقوم بتثبيت Laravel with Composer ، ستجد الملف .env  مع هذا المحتوى في الجذر :

APP_ENV=local
APP_DEBUG=true
APP_KEY=oJiCzJoPu9FvTjmTz1jpsNHVSBL7i1nl
APP_URL=http://localhost

DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_DATABASE=homestead
DB_USERNAME=homestead
DB_PASSWORD=secret

CACHE_DRIVER=file
SESSION_DRIVER=file
QUEUE_DRIVER=sync

REDIS_HOST=127.0.0.1
REDIS_PASSWORD=null
REDIS_PORT=6379

MAIL_DRIVER=smtp
MAIL_HOST=mailtrap.io
MAIL_PORT=2525
MAIL_USERNAME=null
MAIL_PASSWORD=null
MAIL_ENCRYPTION=null
ويأتي في شكل مفتاح / قيمة. على سبيل المثال ، لقد رأينا هذا مطبقًا بالفعل في config/app.php :

<?php
'debug' => env('APP_DEBUG', false),
يتيح لك المساعد Env قراءة القيمة APP_DEBUG من الملف .env وتعيين قيمة مفتاح debug في اعدادات التطبيق.
يوجد أيضًا على سبيل المثال إعداد MySql :

<?php
'host'      => env('DB_HOST', 'localhost'),
'database'  => env('DB_DATABASE', 'forge'),
'username'  => env('DB_USERNAME', 'forge'),
'password'  => env('DB_PASSWORD', ''),
لاحظ أن المساعد يقبل قيمة افتراضية كمُدخل ثان. ماذا يفعل هذا المساعد؟ بكل بساطة يقوم بتخزين القيم في البيئة العامة السوبر (super global) $_ENV للخادم.
الأخلاق: أن يكون لديك العديد من البيئات ، يجب عليك إنشاء عدة ملفات .env . ستكون الحالة الأكثر كلاسيكية هي وجود بيئة تطوير محلية وبيئة نشر أخرى. تحتاج فقط إلى عدم الخلط ، لا سيما إزالة الملف .gitignore من الجذر الذي يخطط لعدم إرسال الملف .env الذي يمكن أن يحتوي على بيانات حساسة (إذا كنت تستخدم git ) .
الغرض من المتغير APP_ENV في الملف .env هو معرفة البيئة الحالية:

APP_ENV=local
عندما أقوم بإنشاء تطبيق ، أقوم بإنشاء نسخة من ملف البيئة لضبط متغيراتي في حالة الإنتاج. لتجنب الالتباس ، أسميها بوضوح:
framework Laravel MVC
ملف بيئة "الإنتاج"(production)
في هذا الملف ، أقوم بإصلاح جميع القيم الضرورية:

APP_ENV=production
APP_DEBUG=false
APP_KEY=5avz0M3IGPu4GFxBBLPhQs00MNJREzoL
...
ثم أحتاج فقط لإرسال هذا الملف إلى الخادم وإعادة تسميته.
بناءً على المكان الذي تستضيف فيه تطبيقك ، قد تتمكن من تعيين متغيرات البيئة دون الحاجة إلى استخدام الملف .env . هذه هي الحالة إذا كنت تستخدم Forge على سبيل المثال .

النشر


سننظر في عدة مواقف للنشر اعتمادًا على الاستضافة.
احتياجات LARAVEL
Laravel لا يحتاج إلى الكثير ولكن مع ذلك:
  • PHP> = 5.5.9
  • PHP PDO التمديد
  • OpenSSL PHP التمديد
  • PHP Mbstring التمديد
  • PHP Tokenizer التمديد
من ناحية أخرى ، storage يجب أن يكون لدينا حقوق الكتابة على الملف على الخادم.
اعتمادًا على طريقة التثبيت التي ستستخدمها ، تحقق من وجود مفتاح تشفير في بيئتك.
الحل الملكي
لنبدأ بالموقف المثالي: لديك SSH ولديك ملف متاح مع إمكانية وجود ملفات لا يمكن الوصول إليها.
إذا كان لديك git على الخادم ، فيمكنك استخدامه بوضوح ولن تشعر بالقلق.
إذا كان لديك Composer مثبتًا على الخادم ، فهذا أيضًا مثالي. يمكنك بعد ذلك تثبيت مثبت Laravel :

composer global require "laravel/installer"
ثم عليك فقط استخدام هذا المثبت:

laravel new application
ولكن من المحتمل أنك لم تقم بتثبيت Composer . في هذه الحالة ، تبدأ بإرسال أرشيف phar لتكوينه . يمكنك الوصول إلى ملفك باستخدام SSH :

login as: mon_login
login@login.org's password:*****
ثم تقوم بتشغيل الإنشاء باستخدام Composer :

php composer create-project --prefer-dist laravel/laravel
انتظر بضع دقائق لتثبيت جميع التبعيات.
يجب أن تعمل ولكن مع Laravel مجهول لم يتم تطبيقه بعد:
framework Laravel MVC
Laravel مثبت
سيتعين علينا حينئذٍ إرسال مجلد التطبيق composer.json أو الملف .env أو إنشاء قاعدة بيانات ... أي شيء يحدد التطبيق.
مع SSH توجد تطبيقات تجعل النشر الآليا مثل envoy, capistrano او magallanes
الحل الوسيط
افترض الآن أن لديك SSH لكنك ملزم بإتاحة الوصول إلى التطبيق بالكامل. في هذه الحالة ، يجب عليك حذف المجلد public  وتنفيذ بعض المعالجات حتى يعمل. هنا هو الإجراء:
ابدأ بتثبيت Laravel بشكل طبيعي. يجب أن يكون لديك هذه البنية:
framework Laravel MVC
بنية Laravel
سنبدأ بنقل كل شيء من المجلد public إلى الجذر وحذف هذا المجلد. يجب أن يكون لديك الآن هذi ال وضعية :
framework Laravel MVC
تم حذف المجلد public ونقل المحتوى الخاص به
من الواضح الآن لا شيء يعمل!
افتح الملف index.php وابحث عن هذا السطر:

<?php
require __DIR__.'/../bootstrap/autoload.php';
استبدلها بهذا:

<?php
require __DIR__.'/bootstrap/autoload.php';
في نفس الملف ، ابحث عن هذا السطر:

<?php
$app = require_once __DIR__.'/../bootstrap/app.php';
استبدلها بهذا:

<?php
$app = require_once __DIR__.'/bootstrap/app.php';
هذه التعديلات ضرورية بسبب حركة هذا الملف وتعديل موقعه النسبي.
الآن سيتم عرض الصفحة الرئيسية Laravel بشكل صحيح.
يكمن القلق في أن كل شيء أصبح الآن متاحًا ويجب أن نتخذ الاحتياطات اللازمة ، على سبيل المثال عن طريق توفير المجلدات التي تريد الوصول إليها app) ، bootstrap ... ( .htaccess مع :

Deny from all
الملفات الوحيدة التي يمكن الوصول إليها هي تلك الموجودة في الجذر.
الحل الشاق
إذا لم يكن لديك SSH ، تصبح القضية أكثر صعوبة لأن الحل الوحيد الذي تركته هو FTP . نظرًا لوجود العديد من الملفات ، يمكن أن تكون الحالة طويلة اعتمادًا على سرعة الإرسال.
من ناحية أخرى ، يجب إدارة التحديثات بعناية لأنها ستنتقل بالضرورة عبر بروتوكول نقل الملفات.
وضع الصيانة
عند تحديث التطبيق الخاص بك ، قد تكون هناك أوقات يكون من الأفضل فيها عدم تسجيل الدخول لأحد. يقدم Laravel وضع صيانة يسهل تنفيذه باستخدام Artisan :

php artisan down
وبالطبع هناك أمر عكسي:

php artisan up
بالطبع ، لا تزال بحاجة إلى الوصول إلى Artisan على الخادم الخاص بك ...
في وضع الصيانة ، يكون العرض هو الموجود هنا:

resources/views/errors/503.blade.php

في الخلاصة


  • يجب أن نخلق بيئات للاستجابة لمواقف مختلفة: المحلية والبعيدة ...
  • النشر سهل وسريع إذا كان لديك git أو SSH .
  • يمكنك حذف الملف public  أثناء وجود Laravel يعمل ، ما عليك سوى اتخاذ تدابير لضمان الأمن.
  • من الممكن نشر تطبيق باستخدام FTP ، لكنه شاق بعض الشيء ويجب أن تدار التحديثات بعناية.