كيفية نشر تطبيق على Heroku؟

غطاء نشر تطبيق Back4app Heroku Back4app Heroku

يغطي هذا البرنامج التعليمي عملية نشر تطبيق يستند إلى Python إلى Heroku. عند قراءة هذه المقالة، يمكنك فهم وظائف Heroku الأساسية، وعملية نشر تطبيق Heroku، وكيفية نشر تطبيق على Heroku.

وعلاوة على ذلك، فإنه يوفر تعليمات حول نشر التطبيق نفسه على حاويات Back4app – وهو بديل مجاني رائع لـ Heroku.

الأهداف

بحلول نهاية هذا البرنامج التعليمي، ستكون قادراً على:

  • فهم Heroku ووظائفه
  • نشر تطبيقاتك على Heroku
  • تعرّف على حاويات Back4app وميزاتها
  • انشر تطبيقاتك على حاويات Back4app Containers
  • تحديد الخدمة التي ستستخدمها لتطبيقك

ما هو Heroku؟

تعد Heroku، التي تأسست في عام 2007، واحدة من أكثر المنصات الموثوقة كمنصة كخدمة (PaaS). تتيح لك المنصة السحابية إنشاء التطبيقات وإدارتها ونشرها وتوسيع نطاقها بسهولة.

يدعم بشكل أصلي لغات Ruby وPython وJava وClojure وNode وScala وGo وPHP. مع ذلك، يتيح لك نشر لغات برمجة وأطر عمل أخرى عبر Docker.

تشمل مزايا Heroku الرئيسية سهولة الاستخدام، وقدرات التوسع، وميزات الأمان، والوظائف الإضافية، و Heroku CLI، وكونها تركز على المطورين.

من ناحية أخرى، غالبًا ما يتم انتقاد Heroku لكونها باهظة الثمن، وعدم وجود دعم إقليمي كافٍ، وتأخرها عن أحدث اتجاهات التطوير.

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

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

لمعرفة المزيد عن Heroku، راجع مقالنا الآخر المسمى ما هو Heroku؟

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

لتوضيح كيفية نشر التطبيقات على حاويات Heroku و Back4app Containers، أعددتُ تطبيق ويب بسيطًا لإرشادك إلى كيفية نشر تطبيق Python على Heroku. يستخدم تطبيق الويب إطار عمل FastAPI ويعمل كخدمة تقصير عناوين URL بسيطة. يأتي مع نقطتي نهاية:

  1. /Shorten يعين اسمًا مستعارًا إلى long_url
  2. / <<الاسم المستعار> يعيد توجيه المستخدم إلى الرابط الطويل المقابل

لا تتردد في اختبار فهمك من خلال متابعة مشروعك الخاص.

المتطلبات الأساسية

  • الفهم الأساسي Python وGit
  • تثبيتPython 3.9+ على جهازك المحلي
  • تم تثبيتGit Bash و Docker Desktop وتهيئته
  • حساب GitHub شخصي

استنساخ وتشغيل

يبدأ نشر Heroku عن طريق تفرع هذا المستودع على GitHub ثم استنساخ الشوكة إلى جهازك المحلي:

$ git clone <fork_remote_git_url>
$ cd back4app-heroku-deploy

إذا كنت لا ترغب في التفرع، فيمكنك إنشاء مستودعك ودفع الشيفرة المصدرية إليه.

إنشاء بيئة افتراضية وتفعيلها:

$ python -m venv env && source env/bin/activate

بعد ذلك، قم بتثبيت متطلبات المشروع:

(env)$ pip install -r requirements.txt

وأخيراً، ابدأ تشغيل خادم التطوير:

(env)$ python -m uvicorn main:app --reload 

INFO:     Will watch for changes in these directories: [...]
INFO:     Uvicorn running on http://127.0.0.1:8000 (Press CTRL+C to quit)
INFO:     Started reloader process [1488] using WatchFiles
INFO:     Started server process [2316]
INFO:     Application startup complete.

افتح متصفح الويب المفضل لديك وانتقل إلى http://localhost:8000/docs. استخدم الوثائق التفاعلية لاختبار تطبيق الويب. إذا كنت بحاجة إلى مساعدة في تنسيق الطلبات، راجع ملف test_main.http.

كيفية نشر تطبيق على Heroku؟

في هذا القسم، سننشر تطبيقًا على Heroku.

ستتطلب الخطوات التالية حساب Heroku. إذا لم يكن لديك حساب حتى الآن، فقم بالتسجيل. علاوة على ذلك، تأكد من إضافة معلومات الدفع إلى حساب Heroku الخاص بك.

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

قم بالتحويل إلى فرع جديد يسمى heroku:

$ git checkout -b heroku

الأهداف

  1. قم بتثبيت Heroku CLI.
  2. أنشئ تطبيق Heroku.
  3. حدد وقت التشغيل عبر runtime.txt.
  4. تحديد عمليات التطبيق عبر Procfile.
  5. ادفع الكود المصدري إلى Heroku.

Heroku CLI

هناك طرق متعددة للتفاعل مع Heroku. يمكنك استخدام لوحة التحكم أو Heroku CLI أو Heroku API.

أنا أفضل Heroku CLI لأنها أداة قوية تسمح لك بإنجاز العمل بسرعة. سنستخدمها خلال البرنامج التعليمي.

أولاً، قم بتثبيت Heroku CLI باتباع تعليمات التثبيت الرسمية.

بعد ذلك، تأكد من نجاح التثبيت عن طريق التحقق من إصدار CLI:

$ heroku --version
heroku/8.4.2 win32-x64 node-v16.19.0

بعد ذلك، تحقق من تحديثات CLI وقم بالمصادقة باستخدام حساب Heroku الخاص بك:

$ heroku update
$ heroku login

عند تشغيل الأمر الثاني، سيتم فتح نافذة متصفح. للمصادقة على نفسك، انقر على “تسجيل الدخول” وأغلق نافذة المتصفح.

إنشاء تطبيق Heroku

للنشر على Heroku، تحتاج أولاً إلى إنشاء تطبيق Heroku.

افتح المحطة الطرفية مرة أخرى، وانتقل إلى مشروعك المحلي (على سبيل المثال، مجلد back4app-heroku-deploy ) وقم بتشغيل الأمر التالي:

$ heroku create -a <app_name>

Creating ⬢ <app_name>... !
https://<app_name>-31a6fd70e769.herokuapp.com/ | 
https://git.heroku.com/<app_name>.git

تأكد من استبدال <app_name> باسم التطبيق المطلوب.

بعد ذلك، تحقق مما إذا كان التطبيق قد تم إنشاؤه بنجاح من خلال إدراج التطبيقات:

$ heroku apps

=== <email_address> Apps
<app_name>

ثم تحقق من تفاصيل التطبيق:

$ heroku apps:info <app_name>

=== <app_name>
Auto Cert Mgmt: false
Dynos:
Git URL:        https://git.heroku.com/<app_name>.git
Owner:          <email_address>
Region:         us
Repo Size:      0 B
Slug Size:      0 B
Stack:          heroku-22
Web URL:        https://<app_name>-21de155883d3.herokuapp.com/

كما تعلم، فإن Heroku مدمج بإحكام مع Git. عندما تنشئ تطبيق Heroku، يتم إنشاء مستودع Git عن بُعد يمكنك أن تدفع إليه شيفرة المصدر لنشره. في حالتنا، عنوان URL الخاص ب Git البعيد هو:

https://git.heroku.com/<app_name>.git

يقوم Heroku CLI تلقائيًا بتسجيل جهاز Git عن بُعد عند إنشاء تطبيق. حاول تسجيل أجهزة التحكم عن بعد:

$ git remote -v

heroku  https://git.heroku.com/back4app-url-shortener.git (fetch)
heroku  https://git.heroku.com/back4app-url-shortener.git (push)
origin  [email protected]:duplxey/back4app-heroku-deploy.git (fetch)
origin  [email protected]:duplxey/back4app-heroku-deploy.git (push)

سنستخدم جهاز التحكم عن بُعد الخاص بـ heroku في القسم القادم لنشر شفرتنا المصدرية.

runtime.txt

يتيح لك ملف runtime.txt تحديد إصدار Python الدقيق الذي تريد أن يستخدمه Heroku. هذا مهم إذا كان مشروعك يتطلب إصدارًا محددًا من Python للعمل. في وقت كتابة هذا التقرير، يتم تعيينه افتراضيًا إلى python-3.11.5.

لتحديد وقت التشغيل، قم بإنشاء ملف runtime.txt يحتوي على إصدار وقت التشغيل. مثال:

python-3.11.5

للاطّلاع على قائمة بأوقات تشغيل Python المدعومة، راجع دعم Heroku Python.

ملف Procfile

يتيح لك ملف Procfile تحديد الأوامر التي يجب تنفيذها لبدء عمليات التطبيق. سنستخدم ملف Procfile لبدء تشغيل خادم الويب Uvicorn.

قم بإنشاء ملف Procfile في جذر المشروع مع عملية الويب:

web: gunicorn -w 1 -k uvicorn.workers.UvicornWorker main:app

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

ادفع التغييرات إلى مستودع GitHub الخاص بك:

$ git add .
$ git commit -m "configured app for heroku"
$ git push origin heroku

نشر تطبيق Heroku

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

عندما تدفع شفرتك إلى Heroku، يكتشف Heroku تلقائيًا لغة البرمجة الخاصة بمشروعك وحزمة البناء المطلوبة لإنشائه. في حالة Python، يتحقق مما إذا كان ملف requirements.txt موجودًا .

لنشر تطبيقك، كل ما عليك فعله هو دفع الكود إلى جهاز التحكم عن بعد الخاص بـ heroku:

$ git push heroku heroku:main

Enumerating objects: 5, done.
Counting objects: 100% (5/5), done.
Delta compression using up to 8 threads
Compressing objects: 100% (3/3), done.
Writing objects: 100% (3/3), 318 bytes | 318.00 KiB/s, done.
Total 3 (delta 2), reused 0 (delta 0), pack-reused 0
remote: Updated five paths from 30a4ffb
remote: Compressing source files... done.
remote: Building source:
remote:
remote: -----> Building on the Heroku-22 stack
remote: -----> Using buildpack: heroku/python
remote: -----> Python app detected
remote: -----> Requirements file has been changed, clearing cached dependencies
remote: -----> Installing python-3.11.5
remote: -----> Installing pip 23.2.1, setuptools 68.0.0 and wheel 0.41.0
remote: -----> Installing SQLite3
remote: -----> Installing requirements with pip
remote: -----> Discovering process types
remote:        Procfile declares types -> web
remote:
remote: -----> Compressing...
remote:        Done: 30.6M
remote: -----> Launching...
remote:        Released v5
remote:        https://<app_name>-31a6fd70e769.herokuapp.com/ deployed to Heroku
remote:
remote: Verifying deploy... done.

قام Heroku تلقائيًا باختيار نص إنشاءات مناسب، وتثبيت المتطلبات، ونشر التطبيق على دينامو.

في حالة فشل النشر، استخدم Heroku CLI لعرض السجلات:

$ heroku logs --tail

بعد ذلك، تحقق من حالة تطبيقك:

$ heroku apps:info <app_name>

=== <app_name>
Auto Cert Mgmt: false
Dynos:          web: 1
Git URL:        https://git.heroku.com/<app_name>.git
Owner:          <your_email>
Region:         us
Repo Size:      9 KB
Slug Size:      31 MB
Stack:          heroku-22
Web URL:        https://<app_name>-31a6fd70e769.herokuapp.com/

حاول زيارة تطبيقك في المتصفح من خلال الانتقال إلى “عنوان URL للويب”.

هذا كل شيء بالنسبة للجزء الخاص بـ Heroku. سينظر القسم التالي في نشر نفس التطبيق على حاويات Back4app.

كيف يمكن نشر تطبيق على حاويات Back4app Containers؟

في هذا القسم، سنقوم بنشر تطبيق على حاويات Back4app.

ما هي حاويات Back4app Containers؟

Back4app Containers هي منصة رائعة للحاويات كخدمة (CaaS). تتيح لك نشر التطبيقات وإدارتها وتوسيع نطاقها على حاويات موزعة عالمياً.

المنصة مدمجة بإحكام مع GitHub وتوفر نظام CI/CD مدمج. وتشمل ميزاتها الأخرى عمليات النشر بدون تعطل، وربط المجال المخصص، والتسجيل، والمراقبة، والمزيد.

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

لمعرفة المزيد عن الحاويات كخدمة، راجع ما هي CaaS – الحاويات كخدمة؟

قم بالتبديل إلى فرع جديد باسم back4app استنادًا إلى الفرع الرئيسي:

$ git checkout master && git checkout -b back4app

الأهداف

  1. إرساء التطبيق.
  2. اربط GitHub بحساب Back4app الخاص بك.
  3. استيراد ريبو GitHub المطلوب.
  4. نشر!

Dockerize

لنشر تطبيق ما في حاويات Back4app، يجب عليك أولاً أن تقوم بإرساء التطبيق على حاويات Back4app.

Dockerizing هي عملية بناء التطبيقات ونشرها وتشغيلها في حاويات Docker. أسهل طريقة لإرساء تطبيق ما هي عبر ملف Dockerfile.

ملف إرساء

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

يحتوي على الصيغة التالية:

COMMAND <arg_1> <arg_2> ... <arg_n>

أنشئ ملف Dockerfile في جذر المشروع بالمحتويات التالية:

FROM python:3.9.6-alpine

# Set the working directory
WORKDIR /app

# Set environment variables
ENV PYTHONDONTWRITEBYTECODE 1
ENV PYTHONUNBUFFERED 1

# Copy over the requirements file and install the dependencies
COPY ./requirements.txt .
RUN pip install --no-cache-dir --upgrade -r ./requirements.txt

# Copy over the source code
COPY . .

# Expose the port
EXPOSE 80

CMD ["uvicorn", "main:app", "--host", "0.0.0.0", "--port", "80"]

يعتمد ملف Dockerfile هذا على صورة python: 3.9.6.6alpine. يقوم أولاً بتعيين دليل العمل ومتغيرات البيئة، ثم يتعامل مع المتطلبات. بعد ذلك، يقوم بنسخ الشيفرة المصدرية، ويعرض المنفذ 80، ويبدأ تشغيل خادم Uvicorn على ذلك المنفذ.

لنشر لغات وأطر عمل البرمجة الأخرى، لا تتردد في الحصول على ملفات Dockerfiles من مستندات حاويات Back4app.

إذا كنت بحاجة إلى توضيح حول كيفية عمل أمر Dockerfile، فارجع إلى مرجع Dockerfile.

.dockerignore

يمكننا استخدام ملف .dockerignore لتقليل حجم صورة Docker. تعمل هذه الملفات بشكل مشابه لملفات .gitignore. يجب عليك تحديد الملفات والدلائل التي تريد استبعادها من الصورة.

في حالتنا، هذه هي البيئة الافتراضية وملفات IDE ومجلد .git.

أنشئ ملف .dockerignore هكذا :

.git/
.idea/
venv/

لا تتردد في تكييف ملف .dockerignore وفقًا لاحتياجات مشروعك .

ادفع التغييرات إلى مستودع GitHub الخاص بك:

$ git add .
$ git commit -m "configured app for back4app"
$ git push origin back4app

الإنشاء والتشغيل والاختبار

قبل دفع التعليمات البرمجية إلى السحابة، من الجيد اختبارها محلياً.

أولاً، قم بإنشاء الصورة ووضع علامة عليها:

$ docker build -t back4app-url-shortener:1.0 .

بعد ذلك، قم بسرد الصور:

$ docker images

REPOSITORY                      TAG            IMAGE ID       CREATED         SIZE
back4app-url-shortener          1.0            1cbe348a04ad   1 minute ago    68.7MB

قم بتشغيل الحاوية باستخدام الصورة المبنية للتو:

$ docker run -p 80:80 --name back4app-url-shortener back4app-url-shortener:1.0

شرح الحجة:

  1. -p 80:80 يربط المنفذ 80 من الجهاز المضيف بالمنفذ 80 من الحاوية
  2. --الاسم-الاسم back4app-url-shortener اسم مثيل الحاوية

يمكنك استخدام -d لتشغيل الحاوية في الوضع المنفصل (دون إشغال المحطة الطرفية).

تحقق مما إذا كانت الحاوية قيد التشغيل أم لا:

$ docker ps

CONTAINER ID   IMAGE                        CREATED    STATUS    PORTS
b3b82313ab65   back4app-url-shortener:1.0   3s ago     1s        0.0.0.0:80->80/tcp

افتح متصفح الويب المفضل لديك وانتقل إلى http://localhost/docs. ستتمكن من رؤية خدمة تقصير عناوين URL.

نشر التطبيق

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

عند تسجيل الدخول إلى حساب Back4app الخاص بك، ستظهر لك قائمة التطبيقات. انقر على “إنشاء تطبيق جديد” لبدء عملية إنشاء التطبيق.

إنشاء تطبيق Back4app Back4app

يوفر تطبيق Back4app حلين:

  1. الواجهة الخلفية كخدمة (BaaS) – حل الواجهة الخلفية الجاهزة
  2. الحاويات كخدمة (CaaS) – منصة نشر الحاويات التي تعمل بنظام Docker المدعوم من Docker

بما أننا ننشر تطبيق Python مخصص، سنستخدم CaaS. حدد “الحاويات كخدمة” على الجانب الأيمن من الشاشة.

حاويات Back4app كخدمة

سيُطلب منك ربط حساب GitHub الخاص بك إذا كانت هذه هي المرة الأولى التي تعمل فيها مع Back4app. علاوة على ذلك، تأكد من استيراد جميع المستودعات التي ترغب في نشرها.

بعد ذلك، “حدد” ريبو GitHub الذي ترغب في نشره:

حاويات Back4app Back4app حدد مستودع GitHub

نظرًا لأننا ننشر تطبيقًا بسيطًا، فلن نضطر إلى تهيئة البيئة كثيرًا. كل ما عليك فعله هو تعيين

  1. اسم التطبيق: back4app-url-shortener (يمكنك اختيار اسم مختلف)
  2. الفرع: back4app (فرع GitHub الخاص بك)

ثم انقر فوق “نشر”.

حاويات Back4app Back4app تكوين البيئة

تقدم حاويات Back4app Containers العديد من خيارات التهيئة، بما في ذلك عمليات النشر التلقائي، وإعدادات المنافذ، ومتغيرات البيئة، وفحوصات الصحة.

ستستغرق حاويات Back4app Containers بعض الوقت لبناء ونشر صورة Docker الخاصة بك. بمجرد أن يصبح تطبيقك جاهزًا، ستتغير حالة التطبيق إلى “متاح”. لزيارة تطبيقك، انقر على الرابط أسفل الحالة كما هو موضح في الصورة.

النشر الناجح لحاويات Back4app Containers بنجاح

عمل جيد! لقد قمت بنشر تطبيق ويب بنجاح على حاويات Back4app Containers.

الخاتمة

علّمك هذا البرنامج التعليمي كيفية نشر تطبيق ويب بسيط على حاويات Heroku و Back4app Containers. لكلتا المنصتين إيجابيات وسلبيات يجب أن تأخذها في الاعتبار عند نشر تطبيق ما.

كقاعدة عامة، سأستخدم حاويات Back4app للتطبيقات التي لا تتطلب قاعدة بيانات. ستساعدك حاويات Back4app Containers على توفير المال، ومستواها المجاني أكثر من كافٍ لمشاريعك الأليفة.

قد يكون Heroku أفضل إذا كان تطبيقك يعتمد على قاعدة بيانات أو إضافات فاخرة.

لقد لخصت بعض الاختلافات الرئيسية في المنصة في الجدول أدناه:

HerokuBack4app Containers
نموذج السحابةالمنصة كخدمة (PaaS)الحاويات كخدمة (CaaS)
البناء والنشرحزم البناءدوكر
اللغات المدعومة9 لغات برمجةأي لغة أو إطار عمل
HTTPS/SSL مجاناً✔️✔️
النطاقات المخصصة✔️✔️
الفئة المجانية✔️
مخاطر تثبيت البائعين✔️
قواعد البيانات المدارة✔️
صديق للمبتدئيننعم (يتطلب بعض مهارات DevOps)نعم (يتطلب بعض مهارات Docker)

لا تتردد في الحصول على الكود المصدري النهائي من مستودع GitHub.

الأسئلة الشائعة

ما هو Heroku؟

تأسست Heroku في عام 2007، وهي واحدة من أولى منصات PaaS (المنصة كخدمة). تتيح لك نشر تسع لغات برمجة، بما في ذلك Java وPHP وPython وRuby. بالإضافة إلى ذلك، توفر قواعد بيانات مُدارة، وإضافات، وتسجيل متقدم، ومراقبة، والمزيد.

كيف يتم نشر تطبيق على Heroku؟

1. قم بإنشاء حساب Heroku.
2. ثبّت وقم بإعداد Heroku CLI.
3. أنشئ تطبيق Heroku.
4. حدد بيئة التشغيل من خلال runtime.txt.
5. حدد عمليات التطبيق من خلال Procfile.
6. ادفع الشيفرة المصدرية إلى Heroku.

ما هي Back4app Containers؟

Containers هي منصة CaaS (الحاويات كخدمة) ممتازة. تتيح لك المنصة نشر التطبيقات المعتمدة على Docker بسرعة، وإدارتها، وتوسيع نطاقها على حاويات موزعة عالميًا. تحتوي على نظام CI/CD مدمج، وتدعم النشر بدون توقف، والنطاقات المخصصة، والمزيد!

كيف يتم نشر تطبيق على Back4app Containers؟

1. قم بإنشاء حساب Back4app مجاني.
2. أنشئ صورة Docker لتطبيقك.
3. ادفع الشيفرة المصدرية إلى GitHub.
4. اربط GitHub بحسابك على Back4app.
5. استورد المستودع المطلوب & وانشر!


Leave a reply

Your email address will not be published.