إن كنت تخطّط لتطوير مشروع على Laravel فإطار العمل - ولغة البرمجة PHP - لن يكونا كلّ ما تحتاجه للبدء في العمل؛ بل ستكون بحاجة إلى برنامج لإدارة قاعدة البيانات (مثلا MySQL أو PostgreSQL)، خادوم وِب (Nginx أو Apache) وربما تقنيات أخرى حسب الحاجة. قد يمثّل إعداد بيئة عمل بكلّ هذه التقنيات الكثير من العمل المرهق بالنسبة لك؛ خصوصا إن كنت ممّن يفضّل كتابة الشفرة البرمجية بدلا من التعامل مع مشاكل الإعدادات.
مثّل ظهور الآلات الافتراضية Virtual machines, VM وانتشارها في السنوات الأخيرة فرصة للتغلب على الكثير من مشاكل الإعدادات. الآلات (الأجهزة) الافتراضية هي مجموعة برمجيات تعمل على نظام تشغيل لمحاكاة عمل جهاز فعلي. يمكن بهذه الطريقة مثلا، تشغيل أوبونتو لينكس داخل وندوز أو العكس. كما تمكن تجربة نظام مخصّص للخواديم داخل حاسوب شخصي؛ زيادة على أمور أخرى كثيرة. تتيح الآلات الافتراضية إعداد نظام تشغيل مخصّص، تثبيت برامج عليه، إعدادها؛ ثم توزيع النظام بعد ذلك للمهتمين للبدء في استعماله كما هو. استفاد مطورو Laravel من تقنية الآلات الافتراضية وأنشؤوا نظاما مخصّصا معدّا بجميع ما تحتاجه للبدء في التطوير على Laravel؛ أعطى فريق Laravel لهذه الآلات الافتراضية اسم Homestead. تستخدم Homestead برنامج إدارة الإعدادات Vagrant لتشغيلها.
تأتي آلة Homestead معدّة بنظام تشغيل أوبونتو 14.04، لغة البرمجة PHP 7، خادوم وِب Nginx، نظامي إدارة قواعد بيانات MySQL وPostgreSQL وأدوات متفرقة أخرى. لا يتطلّب إعداد Vagrant لتشغيل Homestead الكثير من الوقت، كما أنه يعمل على OSX، لينكس ووندوز.
تثبيت Homestead
الخطوة الأولى لتثبيت Homestead هي تثبيت VirtualBox وVagrant على التوالي. يمكن من موقعي البرنامجيْن الحصولُ على مثبّتات Installers سهلة لأنظمة التشغيل المختلفة. افتح بعد تثبيت VirtualBox وVagrant سطر الأوامر ونفّذ الأمر التالي (قد يستغرق تنزيل الآلة الافتراضية وقتا، حسب سرعة اتصالك بالإنترنت):
$ vagrant box add laravel/homestead ==> box: Loading metadata for box 'laravel/homestead' box: URL: https://atlas.hashicorp.com/laravel/homestead This box can work with multiple providers! The providers that it can work with are listed below. Please review the list and choose the provider you will be working with. 1) virtualbox 2) vmware_desktop Enter your choice: 1 ==> box: Adding box 'laravel/homestead' (v0.4.4) for provider: virtualbox box: Downloading: https://vagrantcloud.com/laravel/boxes/homestead/versions/0.4.4/providers/virtualbox.box ==> box: Successfully added box 'laravel/homestead' (v0.4.4) for 'virtualbox'!
يثبت الأمر أعلاه صندوق Homestead. يُستخدَم المصطلح صندوق Box للإشارة إلى حزمة في Vagrant. يعدّ مجتمع Vagrant آلات افتراضية بأنظمة تشغيل ثُبتت عليها برامج مختلفة - حسب الغرض - لتكون الآلة جاهزة للعمل فورا. يمكنك الحصول على لائحة بالآلات الافتراضية الشائعة الاستخدام التي يشرف مجتمع Vagrant على صيانتها عبرهذا الرابط.
ثم ننتقل لتثبيت Homestead باستنساخ مستودع Github في المجلّد الشخصي للمستخدم كالتالي:
cd ~ git clone https://github.com/laravel/homestead.git Homestead
ثم ننفذ، بعد نسخ المستودع، الأمر التالي الذي ينشئ ملفّ الإعداد Homestead.yaml
ضمن مجلّد مخفي باسم homestead.
:
bash init.sh
ملحوظة: يجب تنفيذ الأمر من داخل المجلد Homestead
.
إعداد Homestead
تحدّد التعليمة provider
في ملفّ الإعداد homestead/Homestead.yaml.
المزوّد الذي سيستخدمه Vagrant؛ إما virtualbox
أو vmware_desktop
. في حالتنا اخترنا virtualbox
.
الخطوة التالية هي إعداد مجلّد المشروع الذي ستتشاركه مع الآلة الافتراضية. تتطلّب مشاركةُ مجلد المشروع تحديد مكان مفتاح SSH العمومي الخاص بك. تُستخدَم التعمية Encryption المعتمدة على المفاتيح العموميّة والخصوصيّة لتأمين تشارك المجلّد مع الآلة الافتراضية.
افتح ملفّ Homestead.yaml
الموجود في مجلّد homestead.
وحدّد مكان السّطر التالي:
authorize: ~/.ssh/id_rsa.pub
إن كنت تعمل على لينكس أو OS X فلن تحتاج - على الأرجح - للتعديل على هذا السطر، نظرا لكون الملفات الخاصة بمفاتيح SSH تُخزَّن عادة في مجلّد باسم ssh.
ضمن مجلّد المستخدم. إن استخدمتَ مجلدا مخصّصا لمفاتيح SSH فسيتوجّب عليك تحديث المسار بمقتضى ذلك. أما إذا كنت تستخدم وندوز فستحتاج إلى تحديث السطر ليوافق صيغة المسارات في وندوز، مثلا كالتالي:
authorize: c:/Users/wjgilmore/.ssh/id_rsa.pub
ملحوظة: استخدم برنامج PuTTY على وندوز لتوليد مفاتيح التعميّة.
نحتاج الآن لتعديل قائمة المجلدات في ملفّ إعداد Homestead لتعيين مسار التطبيق. توجد فقرتان في ملفّ الإعدادات تتوليان التعامل مع مجلدات التطبيق وهما folders
وsites
. تبدو الفقرتان مبدئيا على النحو التالي:
folders: - map: ~/Code to: /home/vagrant/Code sites: - map: homestead.app to: /home/vagrant/Code/Laravel/public
تعرفّ الخاصيّة map
في الفقرة folders
المسار الذي توجد عليه ملفات مشروع Laravel الذي تعمل عليه. القيمة المبدئية لهذه الخاصيّة هي Code/~
؛ بمعني أن Homestead يتوقّع وجود ملفات مشروعك ضمن مجلّد باسم Code
متفرّع من المجلّد الشخصي للمستخدم. يمكنك تغيير قيمة هذه الخاصيّة حسب رغبتك؛ لكن تذكر أن المسار يجب أن يحيل إلى المجلد الجذر لمشروع Laravel. بالنسبة للخاصية to
في الفقرة folders
فتعرّف مسار المجلّد الذي ستُزامن معه محتويات المجلّد المعرَّف في الخاصيّة map
السابقة. يمكن للآلة الافتراضية قراءة محتويات المجلد المعرَّف على المسار to
عكس محتويات المجلّد المعرَّف في map
. نتيجة لهذا الإعداد يُزامن محتوى المجلد الأخير (المعرَّف في to
) تلقائيا مع محتوي المجلّد الأول (المعرَّف في map
)؛ لتتمكن الآلة الافتراضية من قراءته.
ملحوظة: من الأفضل ألا تحتوي أسماء المجلدات على مسافات.
توجد في الفقرة sites
خاصيتان تحملان نفس الاسميْن السابقيْن، map
وto
. تعرّف الخاصيّة map
في الفقرة sites
اسم النطاق الذي ستستخدمه للوصول إلى التطبيق؛ في المثال أعلاه تصل إلى التطبيق بكتابة homestead.app
في شريط عنوان المتصفح. أما الخاصيّة to
فتعرّف مجلّد الوِب الجذر في مشروع Laravel، وهو مبدئيا المجلّد public
الموجود في المجلّد الجذر للمشروع.
ملحوظة: المسارات المحدّدة في خاصيّة to
في كلتا الحالتين هي بالنسبة لمجلدات موجودة داخل الآلة الافتراضية.
سننشئ مجلّدا باسم app.homestead
نخصّصه للمشروع الذي سنعمل عليه؛ نضيف مسار هذا المجلّد إلى الخاصية map
في الفقرة folders
التي تصبح كالتالي:
folders: - map: /home/zeine77/Documents/projects/app.homestead to: /home/vagrant/Code
ثم ننشئ داخل المجلد app.homestead
مجلدا باسم Laravel
وداخل هذا الأخير مجلدا باسم public
حتى نوافق مسار المجلد home/vagrant/Code/Laravel/public/
الذي يشير إليه اسم النطاق (الخاصيّة to
في الفقرة sites
).
ملحوظة: تذكّر أن المجلّد home/vagrant/Code/
هو نسخة طبق الأصل من المجلّد home/zeine77/Documents/projects/app.homestead/
، ولكنه موجود داخل الآلة الافتراضية. يعني هذا أن المجلّد /Laravel/public
المستخدَم في الخاصيّة to
من الفقرة sites
(القيمة /home/vagrant/Code/Laravel/public/
) يجب أن يكون موجودا في الأصل (أي في المجلّد home/zeine77/Documents/projects/app.homestead/
). هذا هو السبب الذي جعلنا ننشئ المجلد Laravel/public
بالطريقة المذكورة أعلاه.
سننشئ الآن داخل المجلّد public
ملفا باسم index.php
ونضع فيه الشفرة التالية:
<?php echo "Hello from Homestead!"; ?>
احفظ الملفّ ثم أغلقه. يعني هذا أننا عند تشغيل الآلة الافتراضية والدخول إلى العنوان homestead.app
ستظهر لدينا العبارة !Hello from Homestead
.
الخطوة الأخيرة قبل الانتقال لتشغيل الآلة الافتراضية هي تعديل ملف المضيفات ليتعرّف النظام على العنوان homestead.app
. يوجد ملف المضيفات على المسار etc/hosts/
بالنسبة للينكس و C:\Windows\System32\drivers\etc\hosts
بالنسبة لوندوز. أضف السّطر التالي إلى الملفّ:
192.168.10.10 homestead.app
ملحوظة: تأكّد من موافقة العنوان (192.168.10.10
في السطر أعلاه) لعنوان IP الموجود في بداية الملفّ Homestead.yaml
.
حان الوقت - بعد إكمال الخطوات المشروحة أعلاه - لتشغيل الآلة الافتراضية وتجربة عمل الإعدادات. ننتقل إلى المجلد Homestead
(حيثُ نسخنا المشروع من Github) ثم ننفّذ الأم التالي:
$ vagrant up
يستغرق تشغيل الآلة الافتراضية بعض الوقت وتظهر مخرجات الأمر:
Bringing machine 'default' up with 'virtualbox' provider... ==> default: Importing base box 'laravel/homestead'... ==> default: Matching MAC address for NAT networking... ==> default: Checking if box 'laravel/homestead' is up to date... (...) ==> default: Preparing network interfaces based on configuration... default: Adapter 1: nat default: Adapter 2: hostonly ==> default: Forwarding ports... default: 80 (guest) => 8000 (host) (adapter 1) default: 443 (guest) => 44300 (host) (adapter 1) default: 3306 (guest) => 33060 (host) (adapter 1) default: 5432 (guest) => 54320 (host) (adapter 1) default: 22 (guest) => 2222 (host) (adapter 1) (...) ==> default: nginx stop/waiting ==> default: nginx start/running, process 1940 ==> default: php7.0-fpm stop/waiting ==> default: php7.0-fpm start/running, process 1959 (...) ==> default: Running provisioner: shell... default: Running: /tmp/vagrant-shell20160628-13381-s5ikfi.sh
يمكنك الآن فتح المتصفّح وتجربة عمل الإعدادت بزيارة الرابط http:homestead.app
. إن جرت الأمور على ما يُرام فستظهر العبارة التالية في المتصفّح:
Hello from Homestead !
إن تعذّر تشغيل الآلة الافتراضية (خطأ في مخرجات الأمر vagrant up
) فتأكد من ملف الإعداد Homestead.yaml
. إن اشتغلت الآلة ولم تستطع إظهار محتوى الصفحة فتأكد من إعدادات المضيف، وخصوصا عنوان IP وموافقته للعنوان الموجود في ملفّ الإعداد Homestead.yaml
؛ ينبغي التأكد كذلك من المسارات ومن حالة كتابة الأحرف (كبيرة أو صغيرة).
أنشأنا المجلّد Laravel/public
وأضفنا إليه الملفّ index.php
للتأكد من أن Homestead يعمل من دون مشاكل؛ لكن هدفنا هو استخدام Homestead لعرض مشاريع بـLaravel؛ وهو ما سنعدّه بعد قليل. يمكننا الآن توقيف عمل الآلة الافتراضية بتنفيذ الأمر (من داخل المجلد Homestead
):
$ vagrant destroy --force ==> default: Forcing shutdown of VM... ==> default: Destroying VM and associated drives...
ثم حذف المجلّد Laravel
(وبالتالي المجلد public
المتفرع منه).
الولوج إلى الآلة الافتراضية عن طريق SSH
نظرا لكون Homestead مبني على توزيعة أوبونتو فيمكن الولوج إليه عن طريق SSH، تماما كما هي الحال بالنسبة لأي خادوم آخر. قد تودّ الدخول إلى الآلة الافتراضية لأسباب منها على سبيل المثال تغيير إعدادات قاعدة البيانات أو خادوم الوِب، إضافة برامج جديدة أو لإجراء تعديلات أخرى. استخدم الأمر التالي، بعد تشغيل الآلة الافتراضية ، للدخول عن طريق SSH:
$ vagrant ssh
تظهر بعد تنفيذ الأمر رسالة ترحيبية ومحثّ Prompt أوامر:
Welcome to Ubuntu 14.04.4 LTS (GNU/Linux 3.19.0-25-generic x86_64) * Documentation: https://help.ubuntu.com/ vagrant@homestead:~$
سيُسجَّل دخولك باسم المستخدم vagrant
؛ يمكنك بعدها تنفيذ أوامر لينكس حسب الحاجة. ستجد أنه يوجد مجلّد باسم Code
داخل المجلّد الشخصي للمستخدم vagrant
.
نفّذ الأمر exit
إن أردت الخروج من الآلة الافتراضية.
إنشاء تطبيق Laravel
تأكدنا في الخطوات السابقة من إعداد Homestead وأنه جاهز للعمل. يمكننا الآن إنشاء مشروع Laravel على Homestead. لذا سنستخدم composer
لإنشاء مشروع Laravel جديد داخل المجلّد app.homestead
. اختر اسما مناسبا للمشروع؛ مثلا demo
:
$ composer create-project laravel/laravel demo
لدينا الآن مشروع Laravel على المسار home/zeine77/Documents/projects/app.homestead/demo/
؛ ينبغي أن نعدّل ملفّ الإعداد Homestead.yaml
ليشير إلى هذا المجلد. نفتح الملفّ لتحريره؛ ونغيّر قيمة الخاصيّة to
ضمن الفقرة sites
. القيمة القديمة هي التالية (أعددناها في خطوة سابقة):
sites: - map: homestead.app to: /home/vagrant/Code/Laravel/public
لتصبح كالتالي:
sites: - map: homestead.app to: /home/vagrant/Code/demo/public
احفظ الملفّ ثم أغلقه. نعود لمجلّد Homestead
وننفذ الأمر التالي لاعتماد التعديلات (إن كانت الآلة الافتراضية تعمل):
$ vagrant provision
أما إن لم تكن الآلة الافتراضية تعمل فيجب تشغيلها:
$ vagrant up
انتظر اعتماد التعديلات أو تشغيل الآلة الافتراضية؛ ثم توجّه إلى المتصفّح وأدخل العنوان http://homestead.app
، وستظهر الصفحة المبدئية لمشروع Laravel.
خاتمة
لست ملزما بمشروع Laravel واحد على آلة Homestead؛ بل يمكنك إنشاء العدد الذي تريد. كل ما يجب عليك فعله هو تحديث قيم map
وto
في فقرتي folders
وsites
من ملف الإعداد Homestead.yaml
بالمسارات المناسبة.
يمكن مثلا اتخاذ مجلد لمشاريع Laravel تستخدمه لإنشاء المشاريع الجديدة داخله ثم تعدّ الخاصيّة map
في folders
للإشارة إلى المجلد المشترك؛ وعند إضافة مشروع جديد تضيف نطاقا جديدا له في sites
؛ مع تحديث قيمة to
لتشير إلى المجلد الموافق له في المجلد المشترك كما في المثال التالي:
folders: - map: /home/zeine77/Documents/projects/app.homestead to: /home/vagrant/Code sites: - map: homestead.app to: /home/vagrant/Code/demo/public - map: anotherhomestead.app to: /home/vagrant/Code/anotherdemo/public
لا تنس تحديث ملف المضيفات (hosts
) بإضافة اسم النطاق الجديد (anotherhomestead.app
) في المثال أعلاه:
192.168.10.10 anotherhomestead.app
ترجمة - بتصرّف - لمقال Installing and Configuring Homestead 2.0 for Laravel 5. حقوق المقال محفوظة لصاحبه W. Jason Gilmore.
أفضل التعليقات
انضم إلى النقاش
يمكنك أن تنشر الآن وتسجل لاحقًا. إذا كان لديك حساب، فسجل الدخول الآن لتنشر باسم حسابك.