يعتبر نشر تطبيق Django على Heroku حلاً فعالاً وقابلاً للتطوير للمطورين. يوفر هذا الدليل الشامل خطوات متكاملة، من إعداد بيئتك المحلية إلى نشر مشروعك وإدارته في بيئة الإنتاج. باتباع هذه الخطوات، ستتمكن من نشر تطبيقك بسلاسة، واتباع أفضل الممارسات، والتزود بالأدوات اللازمة لاستكشاف الأخطاء وإصلاحها.
1. مقدمة
تعد Heroku منصة مفضلة لدى العديد من المطورين نظرًا لسهولة استخدامها وميزاتها القوية. يتيح لك نشر تطبيقات Django على Heroku الاستفادة من بيئة سحابية دون الحاجة إلى القلق بشأن إدارة البنية التحتية. توفر المنصة توسعًا تلقائيًا، ومجموعة متنوعة من الإضافات، ونظام تحكم متكامل في الإصدارات، مما يجعلها خيارًا مثاليًا لاستضافة تطبيقات الويب.
يوفر هذا الدليل إرشادات مفصلة لنشر تطبيق Django على Heroku، ويغطي الإعداد الأولي، تكوين البيئة، إدارة الملفات الثابتة والوسائط، استكشاف الأخطاء الشائعة وحلها، وتوسيع نطاق تطبيقك.
2. المتطلبات الأساسية
قبل البدء في عملية النشر، تأكد من تجهيز بيئة التطوير الخاصة بك:
- Python 3.x: تأكد من تثبيت Python على جهازك المحلي.
- Django 3.x أو الأحدث: يجب أن يكون إطار عمل Django مثبتًا.
- Git: تستخدم Heroku نظام Git للتحكم في الإصدارات والنشر، لذا يجب تثبيت Git وتهيئته في مشروعك.
- حساب على Heroku: يمكنك التسجيل مجانًا على Heroku.
- Heroku CLI: يجب تثبيت واجهة Heroku عبر سطر الأوامر. يمكنك العثور على تعليمات التثبيت هنا.
- مشروع Django جاهز: يلزم وجود مشروع Django جاهز للنشر. إذا لم يكن لديك واحد، سنرشدك خلال خطوات إنشاء مشروع بسيط.
من خلال التأكد من توفر هذه المتطلبات، ستسهل عملية النشر.
3. إعداد مشروع Django الخاص بك
إذا كنت تبدأ من الصفر، سنقوم بإنشاء مشروع Django أساسي مع تطبيق. إذا كان لديك بالفعل مشروع، يمكنك الانتقال إلى القسم التالي.
لإنشاء مشروع Django، اتبع هذه الأوامر:
$ django-admin startproject myproject
$ cd myproject
$ python manage.py startapp myapp
في ملف myproject/settings.py
، أضف تطبيقك الجديد إلى قسم INSTALLED_APPS
:
INSTALLED_APPS = [
# تطبيقات أخرى،
'myapp',
]
بعد ذلك، قم بإنشاء عرض بسيط في myapp/views.py
:
from django.http import HttpResponse
def hello(request):
return HttpResponse("مرحباً، Heroku!")
قم بربط هذا العرض بعنوان URL عن طريق تحديث ملف myproject/urls.py
:
from django.urls import path
from myapp import views
urlpatterns = [
path('', views.hello, name='hello'),
]
الآن، قم بتشغيل الخادم المحلي لاختبار التطبيق:
$ python manage.py runserver
قم بزيارة http://localhost:8000
في متصفحك. إذا كان كل شيء مضبوطًا بشكل صحيح، يجب أن ترى “مرحباً، Heroku!”.
4. التحكم في الإصدار باستخدام Git
نظرًا لأن Heroku يستخدم Git للنشر، ستحتاج إلى تهيئة مستودع Git إذا لم تكن قد قمت بذلك بالفعل:
$ git init
لتجنب إضافة الملفات غير الضرورية إلى المستودع، قم بإنشاء ملف .gitignore
في جذر مشروعك بمحتويات مثل:
*.pyc
db.sqlite3
__pycache__
env
staticfiles
*.log
بمجرد الانتهاء، أضف ملفات مشروعك إلى مستودع Git:
$ git add .
$ git commit -m "التزام أولي"
5. إعداد تطبيقك على Heroku
بعد ذلك، قم بتسجيل الدخول إلى حسابك على Heroku باستخدام واجهة سطر الأوامر:
$ heroku login
بعد تسجيل الدخول، قم بإنشاء تطبيق جديد على Heroku:
$ heroku create myproject-unique-name
تقوم هذه الأوامر بإنشاء تطبيق جديد على Heroku وإضافة مستودع heroku
إلى مستودع Git المحلي الخاص بك. تأكد من استخدام اسم فريد للتطبيق.
6. تكوين Django لـ Heroku
لجعل تطبيق Django الخاص بك جاهزًا للنشر على Heroku، هناك بعض التعديلات اللازمة. ابدأ بتثبيت الحزم الضرورية للإنتاج:
$ pip install gunicorn dj-database-url psycopg2-binary whitenoise
تشمل هذه الحزم:
- Gunicorn: خادم HTTP WSGI Python لتشغيل تطبيق Django الخاص بك.
- dj-database-url: تبسيط تكوين قاعدة البيانات باستخدام المتغيرات البيئية.
- psycopg2-binary: محول PostgreSQL لـ Python.
- Whitenoise: تبسيط إدارة الملفات الثابتة في الإنتاج.
أنشئ ملف requirements.txt
لتعقب التبعيات:
$ pip freeze > requirements.txt
7. تكوين الإعدادات للإنتاج
لدمج مشروع Django الخاص بك مع بيئة Heroku، قم بتحديث ملف settings.py
.
تحديث ALLOWED_HOSTS
يقوم Heroku بتعيين عنوان URL ديناميكي لتطبيقك. قم بتحديث إعداد ALLOWED_HOSTS
لاستيعاب نطاق Heroku:
ALLOWED_HOSTS = ['localhost', '127.0.0.1', '.herokuapp.com']
إضافة Whitenoise للملفات الثابتة
يسمح Whitenoise لتطبيقك بتقديم الملفات الثابتة مباشرة. أضفه إلى إعداد MIDDLEWARE
:
MIDDLEWARE = [
# ميدل وير آخر،
'whitenoise.middleware.WhiteNoiseMiddleware',
]
8. تكوين قاعدة البيانات
يستخدم Heroku قاعدة بيانات PostgreSQL كإعداد افتراضي، لذلك تحتاج إلى تهيئة تطبيق Django الخاص بك وفقًا لذلك. في ملف settings.py
، استبدل تكوين SQLite الافتراضي بالتالي:
import dj_database_url
DATABASES = {
'default': dj_database_url.config(conn_max_age=600, ssl_require=True)
}
يقوم هذا الإعداد بتكوين اتصال قاعدة البيانات تلقائيًا باستخدام متغير البيئة DATABASE_URL
الذي توفره Heroku.
9. إدارة الملفات الثابتة والوسائط
نظام الملفات الخاص بـ Heroku هو نظام مؤقت، مما يعني أنه لا يستمر بعد كل عملية نشر. هذا يجعل إدارة الملفات الثابتة والوسائط تختلف قليلاً عن التطوير المحلي.
الملفات الثابتة
في ملف settings.py
، قم بتكوين إدارة الملفات الثابتة:
STATIC_ROOT = os.path.join(BASE_DIR, 'staticfiles')
STATIC_URL = '/static/'
STATICFILES_DIRS = [
os.path.join(BASE_DIR, 'static'),
]
STATICFILES_STORAGE = 'whitenoise.storage.CompressedManifestStaticFilesStorage'
الملفات الوسائط
بالنسبة للملفات الوسائط، استخدم خدمة خارجية مثل Amazon S3 أو Cloudinary. إذا اخترت Cloudinary، قم بتثبيت الحزمة اللازمة:
$ pip install django-cloudinary-storage
ثم قم بتكوين Cloudinary في ملف settings.py
:
CLOUDINARY_STORAGE = {
'CLOUD_NAME': 'your_cloud_name',
'API_KEY': 'your_api_key',
'API_SECRET': 'your_api_secret'
}
DEFAULT_FILE_STORAGE = 'cloudinary_storage.storage.MediaCloudinaryStorage'
لا تنس إضافة هذه المتغيرات الخاصة بـ Cloudinary إلى متغيرات البيئة في Heroku (سنناقش هذا في القسم التالي).
10. إدارة المتغيرات البيئية
لحماية البيانات الحساسة وعدم تخزينها في الكود المصدري، من الضروري استخدام المتغيرات البيئية.
في ملف settings.py
، استبدل SECRET_KEY
وDEBUG
بالقيم المتغيرة البيئية:
SECRET_KEY = os.environ.get('SECRET_KEY', 'your_default_secret_key')
DEBUG = os.environ.get('DEBUG', 'False') == 'True'
قم بتعيين هذه المتغيرات في Heroku:
$ heroku config:set SECRET_KEY=your_secret_key
$ heroku config:set DEBUG=False
11. إنشاء ملف Procfile وتحديد إصدار Python
يخبر ملف Procfile
Heroku بكيفية تشغيل تطبيقك. قم بإنشاء ملف Procfile
في جذر مشروعك بمحتوى مثل:
web: gunicorn myproject.wsgi
لتحديد إصدار Python، أنشئ ملف runtime.txt
يحتوي على الإصدار المفضل:
python-3.9.7
12. نشر التطبيق على Heroku
مع اكتمال الإعداد، يمكنك الآن نشر تطبيقك. ابدأ بتثبيت التغييرات:
$ git add .
$ git commit -m "Heroku deployment configurations"
قم بنشر التطبيق على Heroku عن طريق دفع التحديثات إلى heroku
:
$ git push heroku main
بعد النشر، قد تحتاج إلى تشغيل الترقيات على قاعدة البيانات:
$ heroku run python manage.py migrate
إذا كنت بحاجة إلى إنشاء مستخدم إداري للوصول إلى لوحة الإدارة:
$ heroku run python manage.py createsuperuser
13. المهام بعد النشر
بعد نشر التطبيق، قد ترغب في مراقبته أو حل المشكلات التي قد تطرأ. إليك بعض الأوامر المفيدة:
- عرض السجلات:
$ heroku logs --tail
- فتح التطبيق في المتصفح:
$ heroku open
- تشغيل أوامر الإدارة:
$ heroku run python manage.py <command>
14. النشر المستمر
يمكنك أتمتة عمليات النشر من خلال ربط تطبيق Heroku بمستودع GitHub. لتكوين ذلك:
- انتقل إلى لوحة تحكم Heroku، ابحث عن تطبيقك واختر Deploy.
- اربط مستودع GitHub الخاص بك.
- فعّل النشر التلقائي من فرع معين.
- اختياريًا، قم بإعداد اختبار تكامل مستمر (CI) لفحص الكود قبل كل نشر.
15. مراقبة وتوسيع نطاق تطبيقك
تقدم Heroku أدوات قوية لمراقبة وتوسيع نطاق تطبيقك.
المراقبة
يمكنك عرض مقاييس مثل أوقات الاستجابة وحمل الطلبات واستخدام الذاكرة من علامة التبويب Metrics في لوحة تحكم Heroku.
لمراقبة السجلات:
$ heroku logs --tail
التوسع
لتوسيع نطاق تطبيقك، يمكنك زيادة عدد الوحدات (dynos) التي تشغل التطبيق:
$ heroku ps:scale web=2
يمكنك أيضًا تقليص التوسع عن طريق تقليل عدد الوحدات عندما يكون هناك حركة مرور أقل.
16. استكشاف مشكلات النشر الشائعة وحلها
على الرغم من الجهود المبذولة، قد تواجه بعض المشكلات أثناء النشر أو بعده. إليك بعض المشكلات الشائعة وحلولها:
- خطأ التطبيق (H10):
- تحقق من السجلات لتشخيص المشكلة.
- تأكد من صحة
Procfile
. - تحقق من وجود جميع الحزم المطلوبة في
requirements.txt
.
- مشكلات اتصال قاعدة البيانات:
- تحقق من إعدادات قاعدة البيانات.
- تأكد من أنك قمت بتشغيل الترقيات على Heroku.
- الملفات الثابتة لا تُعرض:
- تأكد من إعداد
STATIC_ROOT
بشكل صحيح. - قم بتشغيل
python manage.py collectstatic
وادفع الملفات الناتجة.
- تأكد من إعداد
- مهلة أو خطأ في الخادم (H13):
- قد يكون السبب هو وجود طلبات تستغرق وقتًا طويلاً. ضع في اعتبارك استخدام المهام الخلفية للعمليات الكثيفة.
- استهلاك زائد للذاكرة (R14):
- قم بتحسين استخدام الذاكرة في تطبيقك، وفكر في الترقية إلى وحدة أكبر إذا لزم الأمر.
17. أفضل الممارسات لنشر تطبيقات Django على Heroku
عند نشر التطبيقات على Heroku، اتبع هذه الممارسات لضمان الأمان والأداء والصيانة الجيدة لتطبيقك:
- المتغيرات البيئية: استخدم دائمًا المتغيرات البيئية للبيانات الحساسة.
- إعدادات الإنتاج: تأكد من أن إعداد
DEBUG
مضبوط علىFalse
في بيئة الإنتاج. - HTTPS: تدير Heroku شهادات SSL تلقائيًا، لذا استخدم دائمًا HTTPS في الإنتاج.
- نسخ احتياطي لقاعدة البيانات: استخدم
heroku pg:backups:capture
لعمل نسخ احتياطية منتظمة لقاعدة بيانات PostgreSQL. - التحديثات المنتظمة: قم بتحديث التبعيات الخاصة بك بانتظام باستخدام
pip install --upgrade -r requirements.txt
. - التوثيق والتصاريح: نفذ آليات توثيق وتصاريح قوية لتأمين تطبيقك.
- مراقبة الأداء: استخدم الأدوات المدمجة في Heroku لمراقبة أداء التطبيق والسجلات بانتظام.
18. الخلاصة
يتيح نشر تطبيق Django على Heroku بيئة مرنة وسهلة الاستخدام للمطورين. من خلال هذا الدليل، تعلمت كيفية إعداد تطبيقك، إدارة المتغيرات البيئية، التعامل مع الملفات الثابتة والوسائط، استكشاف المشكلات الشائعة وحلها، واتباع أفضل الممارسات لضمان نشر آمن وفعال.
سهولة استخدام Heroku، مع ميزاتها القوية، تجعلها خيارًا ممتازًا لمطوري Django. استمر في استكشاف ميزاتها المتقدمة، والإضافات، وأدوات المراقبة لتحسين أداء تطبيقك.