كيفية استضافة تطبيقات خفيفة الوزن مجانًا

بإذن من لويس ليرينا

عندما تبحث عن خدمات استضافة المواقع ، فهناك العديد من الخيارات المجانية المتاحة. ولكن لا يوجد العديد من الأماكن التي يمكنك فيها استضافة تطبيقات ويب مكدس كاملة تتضمن واجهات برمجة التطبيقات أو CGI أو AJAX لاستعلامات الخلفية - خاصةً إذا كنت تريد استخدام شيء آخر غير PHP.

هذه المقالة عبارة عن دليل "المشي قبل أن تتمكن من تشغيل" بسيط ولكنه مفيد حول كيفية البدء باستضافة البرامج النصية على الخوادم السحابية.

متى تستخدم تطبيق Cloud Platform

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

Heroku هي إحدى هذه الخدمات التي يمكنك استخدامها لاستضافة الكود (بلغات مختلفة) بسهولة نسبية. إنه يقدم نموذج freemium حيث يسمح لك باستخدام حوالي 500 ساعة من الحوسبة مجانًا (سعرها الكامل هنا).

اعتبارًا من مايو 2017 ، لغات البرمجة التي يمكنك استضافتها تحت Heroku

بمجرد كتابة التعليمات البرمجية الخاصة بك على سطح المكتب المحلي ، يمكنك تنفيذ الأوامر التي تنشر الرمز على مساحة عمل في Heroku. ينفذ الكود بناءً على المشغل. يمكن أن تكون المشغلات مهمة مجدولة ، أو خادم ويب يتم تشغيله من خلال طلب صفحة ويب ، أو شيء يعمل باستمرار ومعالجة البيانات - والتي قد تكون مكلفة للغاية.

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

بعض الأمثلة المحددة حيث Heroku يمكن أن تعمل بشكل جيد بالنسبة لك:

  • استضافة موقع الويب الخاص بك حيث تريد كتابة خادم الويب الخاص بك
  • إلغاء البيانات بشكل دوري من موقع ويب ثم تخزينها في قاعدة بيانات للتحليل
  • تقديم خادم API لمهمة محددة. أشياء مثل تقديم بيانات الطقس أو تخزين بيانات مستشعر إنترنت الأشياء أو مكالمة خدمة ويب لطراز تعلم الآلة
  • خدمة قاعدة بيانات (على الرغم من أن خدمة مثل Firebase ربما تكون مناسبة بشكل أفضل)

العمارة البطل

يوفر Heroku آلة افتراضية خفيفة الوزن (VM) لك لنشر التعليمات البرمجية الخاصة بك. لاحظ أنه ضمن الخيار المجاني ، يمكنك نشر ما يصل إلى 5 تطبيقات تُعتبر 5 أجهزة VM خفيفة الوزن. للتطبيق الفعلي ، يتم تزويدك بنطاق فرعي لعنوان URL منفصل ضمن Heroku. لذلك يجب أن تكون أسماء مشروعك فريدة من نوعها.

تحتوي مساحات العمل هذه على مساحة خاصة بها لمكونات مثل: ملفات التعليمات البرمجية وموارد (وليس ملفات البيانات الديناميكية) وقاعدة البيانات (Postgres) وملفات السجل.

على سطح المكتب المحلي ، يستخدم Heroku اسم الدليل الخاص بك لتحديد المشروع الخاص بك ، وكذلك Heroku لفهم السياق الخاص بك. بحيث يمكنك الحصول على مشاريع متعددة في دلائل مختلفة وعند تشغيل أوامر Heroku - فقط تأكد من القيام بذلك في المجلد الصحيح.

الشيء الوحيد الذي يجب أن تكون على دراية به (الذي اكتشفته بالطريقة الصعبة خلال ساعات من تصحيح الأخطاء - أتمنى أن أولي المزيد من الاهتمام للمستندات) هو أن كل شيء يتم تشغيله من الذاكرة. لا يوجد تخزين مستمر. سأقولها مرة أخرى - لا يمكنك تخزين أي ملفات على خادم الملفات! للمثابرة ، تقدم Heroku قاعدة بيانات SQL بعد انتهاء الصلاحية حيث يمكنك إضافة السجلات كما هو مطلوب.

مثال بسيط - كشف موقع التغيير

إليك دليل خطوة بخطوة للحصول على مثال عملي عن خدمة بسيطة سترسل لك رسالة بالبريد الإلكتروني إذا كان موقع الويب قد تغير - في الأساس عبارة عن نسخة من www.changedetection.com. سيكون هناك العديد من المكونات الرئيسية لهذا:

  1. قاعدة بيانات تخزن: (أ) عنوان البريد الإلكتروني لإخطار موقع الويب الذي تم تغييره ؛ (ب) موقع الويب للتتبع ؛ (ج) آخر نسخة من الموقع
  2. جزء من الكود الذي سيفحص موقع ويب معين من قاعدة البيانات في رقم 1 (بيثون النصي)
  3. برنامج جدولة الوظائف الذي سيتم تشغيل البرنامج في رقم 2 (أي ما يعادل وظيفة cron)
  4. واجهة مستخدم ويب حيث يمكنك إضافة / حذف مواقع الويب لمراقبة في قاعدة البيانات المذكورة في # 1
  5. آلية لإرسال رسائل البريد الإلكتروني

إن فهم هذه المكونات سيوفر لك المهارات اللازمة للقيام بالكثير من الأشياء بالفعل. لقد تعلمت كل هذه الأشياء من خلال مصادر متعددة ، لذلك هذا بمثابة منشور موحد.

الافتراضات

يقدم الدليل التالي الافتراضات التالية:

  • لديك حساب GitHub - إذا لم يكن لديك ، فيرجى إنشاء حساب هنا. يجب عليك أيضا قراءة هذا الدليل البسيط.
  • لديك بالفعل حساب Heroku - إذا لم يكن لديك الرجاء إنشاء حساب هنا.
  • أنت تقوم بتشغيل جهاز يعمل بنظام Windows - إذا لم يكن كذلك ، فلا بأس ، والإرشادات متشابهة تمامًا في البيئات الأخرى
  • لديك بالفعل تثبيت Python - إذا لم تقم بذلك ، فيرجى الانتقال إلى هنا لتثبيته
  • يمكنك بالفعل البرنامج في Python - إذا لم يكن كذلك ، فأنا أقترح عليك أن تتعلم بعض الأساسيات أولاً. بعض الأدلة هنا.
  • أنت تعرف SQL - إذا كنت لا تعرف ذلك ، فالرجاء الانتقال إلى هنا.

نظرة عامة على الخطوات

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

الخطوة 1: تطوير واجهة مستخدم الويب - قم بتصميم Hello World أولاً

الخطوة 2: الثبات - إنشاء قاعدة بيانات

الخطوة 3: التحقق من المواقع لمعرفة التغييرات

الخطوة 4: إرسال إشعار البريد الإلكتروني على التغييرات

الخطوة 5: سرد الإخراج على صفحة الويب

الخطوة 6: نشر

الخطوة 1: تطوير واجهة مستخدم الويب - قم بتصميم Hello World أولاً

أولاً ، لننشر برنامجًا بسيطًا على Heroku لبدء الأمور. سيكون هذا البرنامج بمثابة مقدمة لواجهة مستخدم الويب (العنصر رقم 4) في قائمة المكونات أعلاه. من أجل تقديم صفحة ، يمكن أن يكون لدينا ببساطة صفحة HTML ، ولكن بعد ذلك سنحتاج إلى خادم ويب لخادم هذا الملف. بمعنى آخر ، عندما تكتب عنوان URL لموقع الويب ، سيحتاج البرنامج إلى تفسير الطلب ، ثم تقديم محتويات ملف HTML. يمكنك إنشاء خادم الويب المصغر الخاص بك باستخدام مكتبة Flask Python ، وهو ما سنفعله.

  • قم بإنشاء مجلد يسمى webchecker وانتقل إلى هذا الدليل (لا يجب أن يكون اسم هذا الدليل هو نفسه اسم تطبيق Heroku)
  • تثبيت مكتبة قارورة. أدخل الأمر: npm Flask
  • قم بإنشاء برنامج Python التالي وقم بتسميته showchecks.py:

قبل النشر إلى Heroku ، اختبر أنه يعمل على الكمبيوتر الشخصي المحلي لديك. يمكنك اختباره بالخطوات التالية:

  • قم بتشغيل البرنامج: python webchecker.com
  • افتح متصفحك على جهاز الكمبيوتر المحلي الخاص بك وافتح الصفحة: http: // localhost: 5000 / hello
سيؤدي تشغيل البرنامج النصي إلى إرجاع صفحة ثابتة بها إخراج

بعد ذلك ، لننشر هذا في Heroku. قبل أن تتمكن من النشر ، يجب أن يكون هناك عدد قليل من الملفات التي يجب تضمينها لمساعدة Heroku على معرفة المزيد عن تطبيقك.

أولاً ، المتطلبات. txt

ثانيًا ، ملف لإخبار Heroku بما يجب تشغيله عند إجراء طلب webrequest:

أخيرًا ، إصدار وقت التشغيل من Python لاستخدامه (الافتراضي هو 2.7 ، لكننا نريد تحديد أحدث إصدار من Python):

وبالتالي ، يجب أن يكون لديك أربعة ملفات:

  1. showchecker.py وهو الرمز
  2. requirements.txt للحصول على قائمة تبعيات المكتبة غير القياسية. كلما كان لديك مكتبات جديدة ليست جزءًا من مكتبة Python القياسية - أي تحتاج إلى تثبيتها باستخدام أداة مثل "pip" - فأضفها هنا. يمكنك العثور على إصدار مكتبة مثبتة مثل Flask عن طريق تشغيل الأمر: pip show Flask في سطر الأوامر
  3. Procfile وهو البرنامج النصي الفعلي لـ Python الذي يتم تشغيله عند استدعاء موقع الويب - تأكد من تحديث هذا إذا قمت بتغيير ملف Python
  4. runtime.txt وهو الإصدار الفعلي من بيثون للاستخدام

يمكنك نشر الخطوات التالية من سطر الأوامر:

  1. heroku إنشاء webchecker01 - buildpack heroku / الثعبان
  2. بوابة إضافة *. * *
  3. حالة بوابة
  4. git ارتكاب -m "جميع الملفات"
  5. بوابة دفع سيد heroku
بمجرد تشغيل

بالنسبة للأمر رقم 1 (heroku create ...) ، فإن الجزء "webechecker01" هو الاسم الفريد الذي ستحتاج إلى تقديمه لاسم التطبيق.

بالنسبة للأمر رقم 3 (حالة git) ، سيخبرك هذا بالملفات الجاهزة للنشر. تأكد من وجود جميع الملفات ، إن لم يكن إضافتها باستخدام git add .

الآن يمكنك التحقق من موقع الويب الخاص بك: <اسم التطبيق> .herokuapp.com / hello

برنامج hello world يعمل على شبكة الإنترنت

دعنا نتأكد أيضًا من إمكانية رؤية السجلات لأن هذه طريقة رائعة لمعرفة ما يجري مع خادم التطبيق. على جهاز الكمبيوتر الخاص بك وفي دليل webchecker ، قم بتشغيل الأمر: سجلات heroku

تُعد

سترى آخر خطوات التنفيذ. إذا كانت الأمور لا تعمل كما هو متوقع ، فهذه هي محطتك الأولى لمعرفة المزيد من التفاصيل.

يمكنك أيضًا الانتقال إلى لوحة معلومات Heroku لمعرفة استهلاكك:

https://dashboard.heroku.com

الخطوة 2: الثبات - إنشاء قاعدة بيانات

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

لنشر خدمة قاعدة بيانات ، قم أولاً بإنشائها باستخدام الأمر التالي:

الإضافات heroku: إنشاء heroku-postgresql: هواية ديف

بعد ذلك ، قم بالوصول إلى قاعدة البيانات من سطر الأوامر وإنشاء الجداول الخاصة بك. يتم إنشاء قاعدة البيانات على خدمة Heroku السحابية وليس محليًا. ومع ذلك ، يمكنك الوصول إليه من خلال سطر الأوامر. لتسجيل الدخول إلى قاعدة البيانات عبر وحدة التحكم ، قم بتشغيل الأمر heroku pg: psql. تذكر أنه عليك القيام بذلك في مجلد مدقق الويب الخاص بك حتى يعرف Heroku أنها قاعدة البيانات لموقع مدقق الويب.

لمشاهدة قائمة الجداول ، اكتب الأمر \ d

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

  • المعرف - معرف يتم إنشاؤه تلقائيًا لكل إدخال (سيكون هذا هو المفتاح الأساسي). يتم ذلك باستخدام النوع "المسلسل"
  • الموقع - الموقع لرصد
  • emailaddress - عنوان البريد الإلكتروني لإرسال الإشعار بحدوث تغيير
  • lasthashcode - لن نقوم بتخزين نسخة من صفحة الويب بأكملها ، وبدلاً من ذلك سنقوم بإنشاء علامة تجزئة استنادًا إلى HTML للصفحة ، ثم نقوم بمقارنتها في كل مرة. هذا أكثر كفاءة في التخزين ، لكنه لن يخبرنا بما حدث بالفعل
  • lastchangedate - التاريخ الذي تغير فيه الويب آخر مرة. وبالتالي سنحصل على قاعدة البيانات الافتراضية لهذا مع التاريخ الحالي

لإنشاء هذا الجدول ، أدخل الأمر التالي في وحدة تحكم قاعدة بيانات Heroku Postgres:

CREATE TABLE webcheckerdb (معرف المسلسل ، varchar موقع (250) ، emailaddress varchar (250) ، lasthashcode varchar (32) ، lastchangedate الطابع الزمني DEFAULT current_date) ؛

(تأكد من تضمين الفاصلة المنقوطة في النهاية!)

إنشاء قاعدة البيانات ، ثم استخدام التبديل \ d لرؤية قائمة الجداول ثم

بعد ذلك ، دعنا ندرج سجلًا واحدًا في قاعدة البيانات للتأكد من أن لدينا شيئًا لنعمل معه قبل تشغيل واجهة المستخدم على الويب الخاصة بنا (يمكنك استخدام عنوان بريدك الإلكتروني حتى يعمل في المستقبل):

إدراج في قيم webcheckerdb (DEFAULT ، 'news.google.com' ، 'email@me.com' ، '' ، DEFAULT) ؛

(تأكد من تضمين الفاصلة المنقوطة في النهاية!)

يمكنك حينئذٍ تحديد عبارة (تشمل الفاصلة المنقوطة في النهاية!) لمشاهدة البيانات

يمكنك إنهاء باستخدام \ q.

الخطوة 3: التحقق من المواقع لمعرفة التغييرات

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

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

سيؤدي تشغيل هذا إلى إخراج ما يلي:

إذا كان لديك أي أخطاء في المكتبات المفقودة ، فيمكنك إضافتها عبر: pip install من سطر الأوامر.

بعد ذلك ، دعنا نتصل بقاعدة البيانات بالشفرة التالية:

عند محاولة تشغيل هذا الرمز ، من المحتمل أن تحصل على خطأ في النموذج KeyError: 'DATABASE_URL'. هذا لأن كود Python يحاول تحديد موقع الويب الخاص بقاعدة بيانات Postgres المستضافة على Heroku. يتم تحديث هذا تلقائيًا لمتغير البيئة DATABASE_URL في خادم Heroku. ومع ذلك ، سيكون عليك القيام بذلك يدويًا على جهاز الكمبيوتر المحلي الخاص بك:

  1. التكوين heroku
  2. اضبط DATABASE_URL = <سلسلة قاعدة البيانات المسردة من "heroku config">
إذا حصلت على خطأ DATABASE_URL ، فقم بتعيين متغير البيئة

الخطوة 4: إرسال إشعار البريد الإلكتروني على التغييرات

الخطوة الأخيرة هي إرسال بريد إلكتروني. للقيام بذلك ، ستحتاج إلى تثبيت الملحق الذي لديه القدرة على إرسال رسائل البريد الإلكتروني - يمكنك العثور عليها عبر سوق Heroku: https://elements.heroku.com/addons

يوجد هنا ملحق يسمى SendGrid: https://elements.heroku.com/addons/sendgrid

يمكنك إضافة SendGrid إلى التطبيق الخاص بك في سطر الأوامر عن طريق كتابة:

الإضافات heroku: إنشاء sendgrid: بداية

عندما تذهب إلى لوحة القيادة الخاصة بك ، يمكنك رؤية الملحق الجديد في قسم الموارد:

سيكون SendGrid الملحق الذي يمكن تمكين إرسال رسائل البريد الإلكتروني في الأسفل

قبل استخدامه ، ستحتاج إلى إنشاء مفتاح API. انقر نقرًا مزدوجًا فوق مكون SendGrid أعلاه وانتقل إلى Settings-> API Key-> Create Key (الزر الأزرق في أعلى اليمين).

انقر على زر إنشاء مفتاح في أعلى اليمين

بمجرد إنشاء المفتاح ، انسخه والعودة إلى موجه الأوامر وأدخل:

التكوين heroku: تعيين SENDGRID_API_KEY = <مفتاح API من أعلى>

سيؤدي ذلك إلى تسجيله فقط على الخادم ، وتحتاج إلى إضافته محليًا إلى سطح المكتب الخاص بك باستخدام:

اضبط SENDGRID_API_KEY = <مفتاح API من الأعلى مرة أخرى>

بمجرد الانتهاء من ذلك ، يمكنك اختبار التعليمات البرمجية الخاصة بك في برنامج نصي Python جديد يسمى sendmail.py. تثبيت المكتبة عن طريق pip install sendgrid:

لتأكيد إرسال البريد الإلكتروني وتسليمه ، يمكنك الرجوع إلى لوحة معلومات SendGrid والتحقق من شاشة نظرة عامة على الإحصائيات:

عند التحقق من بريدك الإلكتروني ، تذكر التحقق من بريدك العشوائي.

بمجرد أن تعمل ، هناك سطرين فقط من التعليمات البرمجية تحتاج إلى إضافته إلى البرنامج النصي checkwebsite.py الرئيسي. أنه:

استيراد sendmail # استيراد روتين إرسال البريد الإلكتروني الذي كتبته أعلاه
...
#call روتين فرعي بعد العثور على hashcode قد تغير
sendmail.sendemail (webrecord ['emailaddress'] ، "تم تغيير موقع الويب" ، webrecord ['website'] + "تم التغيير")

الكود الكامل هنا:

الخطوة 5: سرد الإخراج على صفحة ويب وجدولة المهمة

والخطوة التالية هي سرد ​​الإخراج على صفحة الويب.

يتضمن ذلك الاستعلام عن قاعدة البيانات ، ثم التنقل عبر البيانات وعرضها على الشاشة. وبالتالي ، يأخذ رمز "Hello World" أعلاه ، ويجعل التعديل. لقد أنشأت أيضًا مسارًا مختلفًا لهذا ، لذا لاختبار ذلك ، ستحتاج إلى الانتقال إلى عنوان URL: http: // localhost: 5000 / list

وهنا الإخراج:

الخطوة 6: نشر

الخطوة الأخيرة هي نشر كل شيء في Heroku ومن ثم جدولة المهمة بحيث يتحقق البريد الإلكتروني.

يجب أن يكون لديك الملفات التالية:

  1. Procfile - الملف الذي يشير إلى showchecker.py
  2. requirements.txt - الملف الذي يحتوي على تبعيات المكتبة
  3. runtime.txt - إصدار بيثون
  4. showchecker.py - رمز الثعبان الذي يعرض إخراج قاعدة البيانات على الويب عبر <اسم التطبيق> .herokuapp.com / list
  5. checkwebsite.py - رمز بيثون الذي يبحث عن أي تغييرات على المواقع

بالنسبة للمتطلبات.txt ، ستحتاج إلى إجراء تعديلات لإضافة أحدث المكتبات:

نشر هذه الكل على Heroku:

  1. بوابة إضافة *. * *
  2. بوابة الالتزام "نشر"
  3. بوابة دفع سيد heroku

اختبار كل مكون:

  1. انتقل إلى <اسم التطبيق الخاص بك> .herokuapp.com / hello
  2. انتقل إلى <اسم التطبيق الخاص بك> .herokuapp.com / قائمة

إذا كان هناك أي أخطاء ، قم بتشغيل سجلات heroku في سطر الأوامر لمعرفة ما يجري.

بعد ذلك ، قم بتشغيل checkwebsite.py مباشرةً على Heroku للتأكد من عدم وجود مشكلات. للقيام بذلك ، يمكنك كتابة:

تشغيل heroku بيثون checkwebsite.py

هذه طريقة رائعة لضمان تشغيل الكود الخاص بك أيضًا على سحابة البطل المحلي

أخيرًا ، يمكنك الآن جدولة عملك. مرة أخرى ، تحتاج إلى تضمين الملحق للقيام بذلك.

الإضافات heroku: إنشاء جدولة: قياسي

ويجب أن تكون قادرًا على رؤية المجدول في صفحة الموارد الخاصة بك:

تم تضمين الملحق المجدول وكذلك يمكنك النقر نقرا مزدوجا

يمكنك ببساطة استخدام سطر الأوامر لتشغيل البرنامج ، في حالتنا: python checkwebsite.py (هذا هو نفس ما اختبرناه أعلاه باستخدام الأمر heroku run).

يمكنك جدولة هذا مع بعض الخيارات.

ملخص

وهذه هي ... في المرة الأولى التي تكون فيها معقدة بعض الشيء ، ولكن نأمل أن تساعدك الخطوات الإضافية المذكورة أعلاه على فهم ما يجري تحت الغطاء. هناك الكثير من الموارد على Heroku بالإضافة إلى ثروة من المعلومات حول Stack Overflow. يجب أن تكون هذه الموارد أكثر منطقية بعد المرور أعلاه.

حظا سعيدا!

شكرا للقراءة! إذا كنت تحب ما تقرأه ، فاضغط على الزر "أدناه" حتى يتمكن الآخرون من العثور على هذا (يمكنك أيضًا العثور علي على Twitter)