Laravel + Docker: تجربتنا الناجحة

الصورة

ما هو هذا المقال حول


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

ما المهام التي واجهناها؟


يحدث أن يتصل مطور جديد بفريق موجود. حتى يتمكن من البدء في أداء المهام (بمعنى آخر ، كتابة الكود والتحقق من عمله) ، لا يكفي الحصول على الكود المصدري. أنت بحاجة إلى بيئة تتضمن خادم ويب ومترجم php وقاعدة بيانات. هذا هو الحد الأدنى للمجموعة. اعتمادًا على المشروع ، قد تشمل البيئة ما يلي:

  • NoSQL
  • خادم قائمة الانتظار
  • محرك بحث النص الكامل.
  • حل التخزين المؤقت ؛
  • جامعي
  • أدوات المطور مفيدة

كل هذا يجب أن يتم تثبيته محليًا في المطور ، وأن يكون نفس الإصدارات مثل بقية أعضاء الفريق. وهنا توجد صعوبات:

  1. بعد التثبيت ، تحتاج إلى تكوين.
  2. البرنامج مثبت بالفعل ، لكنه إصدار مختلف ؛
  3. إنه وقت طويل ؛

وحقيقة أن المطورين يعملون على منصات مختلفة (windows ، linux ، os x) تجعل الأمور أكثر تعقيدًا.

لحل المشكلة ، تم اختيار Docker. ربما السبب الرئيسي هو أنه يلائم بسهولة البنية التحتية الحالية. إنه يعمل بشكل رائع على نظام Linux ، ومعظم مطورينا على نظام التشغيل هذا.

البديل

توفر Laravel حلها الخاص لتنظيم بيئة محلية تسمى Homestead. هذه هي مجموعة من التكوينات والبرامج النصية لـ Vagrant ، والتي يتم من خلالها نشر البرنامج الضروري في الجهاز الظاهري VirtualBox. لكن وصف Homestead هو خارج نطاق هذا المقال.

مشروع لارادوك


في البداية ، كان هذا المشروع يهدف فقط إلى إطلاق Laravel على Docker ، والذي ينعكس في اسمه. ولكن مع تزايد شعبية مجتمع php ، بدأ Laradock في دعم مشاريع php الأخرى: Symfony و CodeIgniter و WordPress و Drupal. يحظى المشروع بشعبية كبيرة ودعمه وتطويره بنشاط:

الصورة

Laradock عبارة عن مجموعة من صور Docker المستقلة التي تم تكوينها مسبقًا والتي يمكنك تثبيتها بناءً على متطلبات مشروعك. موثقة جيدا وسهلة الاستخدام للغاية. لبدء المكونات ، نقوم ببساطة بسردها:

docker-compose up apache2 php-fpm mysql phpmyadmin 

او

 docker-compose up nginx php-fpm mariadb adminer 

ملاحظة : ليست هناك حاجة لتحديد php-fpm بشكل صريح ، لأنه عند بدء تشغيل خادم الويب php-fpm ، فإن الحاوية تبدأ تلقائيًا.

يحتوي المستودع على أكثر من 48 حاوية ، بما في ذلك:

  • قواعد البيانات : MySQL و MariaDB و Percona و MongoDB و MSSQL و PostgreSQL
  • إدارة قواعد البيانات : PhpMyAdmin ، المسؤول ، PgAdmin
  • خوادم الويب : nginx ، Apache2 ، Caddy
  • مترجمون PHP: PHP FPM ، HHVM
  • متفرقات : السيلينيوم ، جنكينز ، فليكس سيرش ، كيبانا ، جيتلاب ، مايلوغ ، ميلديف ، لارافيل إيكو ، فالكون
  • الأدوات : PHP CLI، الملحن، Git، Linuxbrew، Node، V8JS، Gulp، SQLite، xDebug، Envoy، Deployer، Vim، Yarn، Drush

المتطلبات والشروط الأولية


ستحتاج:

  • بوابة
  • عامل الميناء
وحدة التحكم التي سيتم فيها تنفيذ الأوامر. يحتوي موقع عامل الإرساء على مستندات شاملة حول التثبيت للأنظمة الأساسية المختلفة (توجد الروابط أيضًا في نهاية المقالة). إذا لم تكن قد قمت بالفعل بتثبيت git ، فقم بذلك وفقًا للتعليمات الواردة من الموقع الرسمي.

بوابة مستودع العمارة: المشروع الرئيسي ولارادوك


يمكن استخدام Laradock في نسختين:

  • ارادوك منفصلة لكل مشروع
  • واحد laradock للعديد من المشاريع

في الحالة الأولى ، ستبدو بنية الدليل كما يلي:

الصورة

في الثانية ، مثل هذا:

الصورة

نستخدم دائمًا الخيار الأول: مشروع واحد - لاردوك واحد. هذا هو النهج الذي يوفر المرونة والاستقلال لمشروع واحد من آخر.

السؤال المهم الثاني هو: إنشاء مستودع مشترك واحد أو اثنين منفصلة؟ بمعنى آخر ، هل أحتاج إلى إضافة ملفات laradock إلى المستودع الرئيسي مع المشروع؟ الجواب ضروري ، ولكن في شكل وحدة فرعية لمستودع التخزين الرئيسي. تعد بيئة المرسى جزءًا مساعدًا للمشروع وليس دائمًا مطلوبًا. على سبيل المثال ، على خوادم التدريج والإنتاج ، ليس من الضروري. عند النشر باستخدام git ، لن تصل ملفات البيئة إلى هناك.

اسم دليل البيئة


بشكل افتراضي ، تستخدم أسماء الحاوية اسم الدليل الحالي لاحقة: laradock_nginx_1 ، laradock_mysql_1 ، إلخ. لتجنب الخلط بين البيانات داخل وحدات التخزين ، يلزم تقديم أسماء دليل فريدة لبيئاتك. يكون ذلك سهلاً إذا التزمنا بمخططنا المختار: أضف اسم المشروع إلى اسم الدليل مع البيئة ، على سبيل المثال:

  • laradock-mysite
  • laradock-proj1
  • laradock-mobapp

أي بادئة "laradock" واسم الدليل مع المشروع من خلال واصلة.

إطلاق موقع واحد


من أين نبدأ إطلاق الموقع؟

كما ذكرنا في الفصل الثالث ، نستخدم Laradoc لإنشاء البيئة.
تتكون عملية بدء التشغيل من الخطوات لتكوين البيئة وتطبيق laravel.

إعدادات المشروع


يتضمن Laradoc ملف تكوين بيئة مثال. نخلق نسخة لمشروعنا.

 cp env-example .env 

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

تتم تطبيقات بيئة بدء التشغيل وإيقافه بواسطة أوامر إنشاء عامل ميناء

 docker-compose up 

و

 docker-compose stop 

إذا لزم الأمر ، يمكنك استدعاء تنزيل الخدمات الضرورية في أمر start. على سبيل المثال ، سيتم تحميل ثلاث خدمات إضافية بهذه الطريقة:

 docker-compose up -d nginx percona adminer 

يمكنك إزالة هذا الأمر في برنامج نصي shell منفصل بحيث لا تضطر إلى إدخاله يدويًا في كل مرة.

يمكن تسمية البرنامج النصي لبدء التشغيل باسم "start.sh" ، أو ما تريد:

 #!/usr/bin/env bash docker-compose up -d nginx percona adminer; 

يمكن استدعاء البرنامج النصي لإيقاف الخدمة باسم "stop.sh" أو "down.sh":

 #!/usr/bin/env bash docker-compose stop; 

الصورة

تهيئة المشروع


يتم تنفيذ الانتقال إلى بيئة الحاوية بواسطة الأمر

 docker-compose exec --user=laradock workspace bash 

أخطاء النشر


عند تثبيت Laradoc في بيئة نظام تشغيل Linux ، قد تحدث مشكلة في أذونات الملف.

في هذه الحالة ، قد يكون للملفات مالك خاطئ ، أو حقوق وصول غير كافية.

الأعراض : عند محاولة بدء البيئة باستخدام الأمر "docker-compose up" أو انتقل إلى الحاوية باستخدام الأمر "docker-compose exec ..." ، كما في المثال أعلاه ، أخطاء مشابهة لتلك
/ var / www / vendor غير موجود ولا يمكن إنشاؤه
تعذر فتح الدفق أو الملف "/var/www/storage/logs/laravel.log": فشل في فتح الدفق: تم رفض الإذن
سبب الخطأ هو أنه في توصيف بيئة عامل التشغيل ، يتم تعريف كود المستخدم ومجموعة المستخدم ، بشكل افتراضي 1000 و 1000 على التوالي.

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

خطأ تصحيح الإجراء


تحقق المستخدم والمجموعة في الدلائل:

 ls -la /var/www 

يجب أن يكون مالكو الملفات والدليل (المستخدم ومجموعة المستخدم) laradock laradock.

إذا بدلاً من laradock: تتم الإشارة إلى المالك والمجموعة بالأرقام (1001: 1001 ، 1001: 13002 ومجموعات مشابهة) ، فأنت بحاجة إلى إجراء تغييرات على ملفات الإعدادات.

إذا كان معرف المستخدم الخاص بك ومجموعة المستخدم (/ etc / passwd ، / etc / group) لا يتطابقان مع المحددات ، ثم للتشغيل الصحيح ، ستحتاج إلى إجراء تغييرات على الملفات التالية:

/ laradock / php-fpm / Dockerfile * ، تمشيا

" RUN usermod -u 1000 www-data "

استبدال 1000 بمعرف المستخدم

/laradock/.env في السطور

WORKSPACE_PUID = 1000
WORKSPACE_PGID = 1000

WORKSPACE_PUID - تحديد معرف المستخدم الخاص بك ، WORKSPACE_PGID - معرف مجموعة المستخدم

/ laradock / مساحة العمل / Dockerfile * ، في السطور

ARG PUID = 10315
ARG PGID = 10004

PUID - معرف المستخدم ، PGID - معرف مجموعة المستخدم

بعد إجراء التغييرات ، قم بإعادة إنشاء مساحة العمل و php-fpm مرة أخرى ثم قم بتشغيل الحاوية:

 docker-compose build workspace php-fpm 

إذا واجهت مثل هذه المشكلة ، فأنت بحاجة إلى التحقق من حقوق الوصول إلى أدلة إطار Laravel. تعيين أذونات الدلائل التي تتطلب أذونات الكتابة:

 sudo chgrp -R www-data storage bootstrap/cache; sudo chmod -R ug+rwx storage bootstrap/cache 

شهادات SSL و https


على الأرجح سيعمل موقعك في الإنتاج وفقًا لبروتوكول آمن. من المنطقي إجراء التنمية المحلية على https. هذا ليس صعبًا للغاية ، فأنت بحاجة إلى شهادة SSL وإعدادات صغيرة. تم توضيح هذه المقالة بمزيد من التفاصيل في كيفية إصدار شهادة SSL موقعة ذاتيا .

تشغيل مواقع متعددة


لذلك ، تعمل جميع المشاريع وفقًا لمخطط "One Laradock - مشروع واحد". لكن مشروع واحد ليس بالضرورة موقع واحد. في بعض الأحيان تحتاج إلى تشغيل عدة مواقع في نفس الوقت ، لأنها ستتفاعل مع بعضها البعض.

في هذه الحالة ، لا يمكن بدء تشغيل اثنين من laradock في نفس الوقت ، لأنه في كل منهما يتم تشغيل خادم ويب يستمع إلى المنفذ 80 - نشهد تعارضًا. ولكن لدينا إمكانية الوصول إلى ملفات التكوين nginx ، دعونا تكوينه.

ولكن أولا ، مذكرة عن الهندسة المعمارية ومستودعات بوابة. في حالة وجود عدة مواقع ، نستخدم بنية الدليل من الخيار الثاني:

الصورة

لم يعد مستودع git مع laradock عبارة عن وحدة فرعية لمستودع آخر ، ولكنه أصبح مستقلاً تمامًا.

سيتم عرض تكوين خادم الويب باستخدام nginx كمثال. في دليل laradock ، انتقل إلى nginx / sites. نرى default.conf والعديد من ملفات * .conf.example. بناءً على ملف default.conf أو نموذج ، نقوم بإنشاء تكوينات للمواقع.

إيلاء الاهتمام لجذر الوثيقة. بشكل افتراضي ، يبدو توجيه الجذر كما يلي:

 root /var/www/public; 

ولكن يجب أن يكون مثل هذا:

 root /var/www/site-1/public; root /var/www/site-2/public; 

مهم!
ألق نظرة على محتويات .gitignore في هذا الدليل. يتم تجاهل جميع ملفات * .conf باستثناء default.conf. من الضروري إضافة ملفات تم إنشاؤها إلى استثناءات ، أي لا تتجاهلها.
تكوين crontab بحيث جدولة laravel يمكن أن تعمل بشكل صحيح. للقيام بذلك ، أضف المسارات في ملف مساحة العمل / crontab / laradock:

 * * * * * laradock /usr/bin/php /var/www/site-1/artisan schedule:run >> /dev/null 2>&1 * * * * * laradock /usr/bin/php /var/www/site-2/artisan schedule:run >> /dev/null 2>&1 

للاتصال الناجح للمواقع داخل الحاويات ، أضف الأسماء المستعارة. في ملف docker-compose.yml ، نجد القسم

 ### NGINX Server ### 

وأضف اسمًا مستعارًا لكل مجال:

الصورة

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

ميزات إضافية


في بيئة Docker ، من الممكن تهيئة التطبيقات التي نحتاجها. التكوين الأساسي للارادوك يتضمن بالفعل حزم التطبيقات:

خادم تطبيق الويبأباتشي 2 ، العلبة
تطبيق ويب التخزين المؤقتNginx ، الورنيش
قواعد البيانات وخدمات التخزين المؤقتMongo ، Redis ، Mssql ، Mysql ، Percona ، Mariadb ، Elasticsearch ، Memcached ، Redis ، RethinkDb ، Aerospike
واجهات الويب لقواعد البياناتالمسؤول ، PhpMyAdmin
تحميل موازنهابروكسي
البرمجة ، الأصداف والأطرفب ، بيثون ، سيمفوني ، لارافيل ، العقدة
المرافقفب ، بيثون ، سيمفوني ، لارافيل ، العقدة
مدير الحزمةغزل الملحن
أداة الاختبارجنكينز
أداة تكوين البنية التحتية للتطبيقterraform

النظر لفترة وجيزة في التطبيقات المذكورة.

Rabbitmq

آلية المراسلة بين التطبيقات. يحدد مطور هذه الحزمة الغرض منه كما يلي: "مدير قائمة الانتظار" أو "وسيط الرسائل" أو "قائمة انتظار الرسائل".

قد تحتوي الرسالة على أي مجموعة بيانات.

في سيناريو العمل مع مدير قائمة الانتظار ، يتم حفظ رسالة من أحد التطبيقات - المرسل - حتى يقوم تطبيق آخر (مستلم) بالاتصال والتقاط (استقبال) الرسالة من قائمة الانتظار.

Redis

إنشاء ذاكرة التخزين المؤقت للبيانات في ذاكرة الوصول العشوائي. يمكن استخدامه أيضًا كمستودع بيانات مع خادم قاعدة بيانات أو استبداله.

Redis يدعم سلاسل ، قوائم ، مجموعات ، مجموعات مرتبة ، وجداول التجزئة.
العيب الرئيسي للفجل هو فقدان البيانات في حالة تنظيف ذاكرة الوصول العشوائي ، أو عند إعادة تشغيل نظام التشغيل ، أو عند إيقاف تشغيل الجهاز. تصور مطورو الفجل سيناريو مشابهًا: في وضع AOF (ملف إلحاق فقط) ، تتم إضافة البيانات إلى ملف القرص كل ثانية.

الميزة الرئيسية للفجل هي أسرع الوصول إلى البيانات مع سرعة الوصول إلى ذاكرة الوصول العشوائي.

روابط المواد


لارافيل

عامل الميناء

لارادوك

Laravel العزبة

"كيفية إصدار شهادة SSL موقعة ذاتياً وجعل متصفحك يثق بها"

عامل الميناء + Laravel =

الخاتمة


باختيار Laravel + Docker لتطوير الويب ، فزنا بجائزة الأكثر قيمة: الوقت.

بعد سيناريو التطوير في WAMP أو LAMP ، كان علينا قضاء بعض الوقت
عديمة الفائدة وليس في أي مكان.

يتطلب كل من WAMP و LAMP من مطور php أن يكون لديه مستوى معين من المهارة في المجالات التي لا ترتبط ارتباطًا مباشرًا بتطوير الويب: تكوين خادم ويب ، تكوين معلمات php ، إلخ.

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

في الختام ، نلاحظ فوائد استخدام Laradoc:

  • بنية تحتية موحدة في كل مكان: خادم الويب ، خادم sql ، مجموعة من الأطر والمكتبات ؛
  • الاستخدام الرشيد لوقت العمل ؛
  • دخول سريع لمطور جديد في المشروع.

اكتب في التعليقات كيف يعمل فريقك مع البيئة ، والأدوات والأساليب التي تستخدمها.

Source: https://habr.com/ru/post/ar439346/


All Articles