مرحبًا بكم في اليوم 4 من 12 يومًا من DigitalOcean! بالأمس، أضفنا إشعارات SMS من Twilio إلى خدمة تذكير أعياد الميلاد الخاصة بنا، مما يجعلها قادرة على إرسال رسائل نصية لأعياد الميلاد اليوم. 🎂
اليوم، سنأخذ الأمور إلى المستوى التالي من خلال نشر برنامجنا على وظائف DigitalOcean. وهذا يسمح لخدمتنا بالعمل في السحابة دون الحاجة إلى خادم مخصص، مما يجعل تطبيقنا خفيف الوزن وقابلًا للتوسع وجاهزًا للتشغيل الآلي.
مع هذا الإعداد، ستتلقى تذكيرات أعياد الميلاد حتى عندما يكون جهاز الكمبيوتر الخاص بك مغلقًا أو غير متصل بالإنترنت—ليس هناك حاجة لتشغيل البرنامج يدويًا على جهازك بعد الآن. 🎉
✨ لماذا وظائف DigitalOcean؟
أحيانًا، كل ما تحتاجه هو نص بسيط يعمل من حين لآخر. إدارة البنية التحتية لشيء كهذا قد تكون مبالغة. هنا يأتي دور Functions. إنها منصة بدون خادم، مما يعني أنه يمكنك نشر كود يعمل فقط عند الحاجة، وتدفع فقط مقابل ما تستخدمه. مثالي لحالة الاستخدام لدينا – التحقق من أعياد الميلاد وإرسال التذكيرات يوميًا.
🚀 ما ستتعلمه
بنهاية اليوم، ستعرف كيفية:
- إعداد أداة
doctl
CLI من DigitalOcean. - إنشاء والاتصال بـ namespace بدون خادم (طريقة DigitalOcean لتنظيم الوظائف).
- تغليف ونشر خدمة تذكير أعياد الميلاد الخاصة بك إلى DigitalOcean Functions.
- اختبار الوظيفة التي تم نشرها في السحابة.
🛠 ما ستحتاجه
قبل البدء، تأكد من أن لديك:
- حساب في DigitalOcean.
- ملف
.env
يحتوي على بيانات اعتماد قاعدة بيانات PostgreSQL وبيانات اعتماد Twilio
🧑🍳 وصفة لليوم الرابع: النشر على وظائف DigitalOcean
الخطوة 1: إعداد واجهة سطر الأوامر doctl
إذا كنت قد قمت بإعداد doctl بالفعل على جهازك، يمكنك تخطي هذه الخطوة. بالنسبة لأولئك الذين يحتاجون إلى إعداده، اتبع هذه التعليمات:
قبل أن نبدأ، دعنا نتحدث بسرعة عن doctl
. إنه الأداة الرسمية لواجهة الأوامر الخاصة بـ DigitalOcean التي تتيح لك إدارة موارد السحابة الخاصة بك مباشرة من الطرفية. سنستخدمه لإنشاء مساحة اسم (مجلد لوظائفنا بدون خادم)، نشر نص بايثون الخاص بنا، واختبار الوظيفة.
إعدادها سهل:
-
تثبيت
doctl
: اتبع دليل التثبيت لنظام التشغيل الخاص بك. -
المصادقة على
doctl
: قم بتوصيله بحسابك في DigitalOcean عن طريق تشغيل: -
تحقق من التثبيت: تأكد من أن كل شيء يعمل عن طريق تشغيل:
إذا نجح الأمر، ستظهر تفاصيل عن حسابك في DigitalOcean، مثل بريدك الإلكتروني ورقم تعريف الحساب.
الخطوة 2: تثبيت برنامج السيرفرلس
تتطلب وظائف DigitalOcean برنامج دعم السيرفرلس، الذي ستحتاج إلى تثبيته. هذه عملية إعداد لمرة واحدة، لذا بمجرد تثبيته، لن تحتاج إلى القيام بذلك مرة أخرى للمشاريع المستقبلية.
قم بتشغيل الأمر التالي:
يمكنك التحقق من حالة التثبيت باستخدام:
إذا رأيت خطأ مثل:
لا تقلق—فهذا يعني فقط أننا لم نقم بإنشاء أو الاتصال بمساحة اسم بعد. سنتعامل مع ذلك في الخطوة التالية.
الخطوة 3: إنشاء والاتصال بمساحة اسم
أسماء النطاقات تشبه المجلدات لـ تنظيم الوظائف الخالية من الخادم. دعنا ننشئ واحدة لخدمة تذكير عيد الميلاد الخاصة بنا:
-
إنشاء مساحة أسماء جديدة:
-
الاتصال بمساحة الأسماء:
-
تحقق من الاتصال:
يجب أن ترى الآن تأكيدًا أنك متصل بمساحة الأسماء.
نصيحة احترافية: لرؤية قائمة بجميع المساحات المتاحة، استخدم الأمر التالي:
يمكن أن يكون هذا مفيدًا إذا كنت تدير مشاريع متعددة أو تريد التحقق من مساحة الاسم التي أنشأتها للتو.
الخطوة 4: تهيئة وإعداد هيكل المشروع
تتوقع وظائف DigitalOcean هيكل مشروع محدد للنشر بدون خادم. يمكنك بدء هذا الهيكل باستخدام doctl serverless init
، أو إنشاؤه يدويًا، أو حتى استنساخ مستودع بدء التشغيل. للحفاظ على الأمور بسيطة، سنقوم بإعداده باستخدام doctl serverless init
:
-
قم بتشغيل الأمر التالي لتهيئة المشروع:
هذا ينشئ دليل مشروع محلي باسم
my-birthday-reminder-service
مع الهيكل الافتراضي التالي: -
انتقل إلى دليل المشروع:
-
إعادة تسمية المجلدات لتناسب حالة الاستخدام الخاصة بنا:
-
إنشاء الملفات الضرورية:
- قم بإنشاء ملف .env فارغ في جذر المشروع:
سيحتوي هذا الملف على بيانات اعتماد قاعدة البيانات وTwilio. سيكون الملف موجودًا في جذر مجلد
my-birthday-reminder-service
.- قم بإنشاء ملف
requirements.txt
في مجلدbirthdays
:
سيقوم هذا الملف بسرد التبعيات الخاصة بلغة بايثون المطلوبة لوظيفتك. سيكون موجودًا تحت
packages/reminders/birthdays
.- قم بإنشاء ملف build.sh في مجلد birthdays:
يعتبر سكربت
build.sh
ضروريًا لنشر الوظائف التي تحتوي على تبعيات خارجية. يضمن أمرchmod
أن يكون السكربت قابلًا للتنفيذ على أنظمة Mac/Linux.
هيكل محدث: بعد إكمال هذه الخطوات، يجب أن يبدو هيكل مشروعك كما يلي:
نصيحة احترافية: إذا قمت عن طريق الخطأ بتسمية مجلد بشكل خاطئ، يمكنك تشغيل الأمر مرة أخرى أو إعادة تسميته يدويًا في مستكشف الملفات الخاص بك.
الخطوة 5: تحديث الملفات
الآن بعد أن أصبح الهيكل موجودًا، دعنا نملأه بالملفات اللازمة. افتح دليل my-birthday-reminder-service في محرر الشيفرة المفضل لديك
1. تحديث project.yml
ملف project.yml
هو ملف تكوين يحدد هيكل مشروعك الخالي من الخادم، ومتغيرات البيئة، والوظائف. استبدل محتوياته بـ:
يقوم هذا الملف بإعداد حزمة التذكيرات ويربط متغيرات البيئة بوظائف DigitalOcean. كل متغير يتوافق مع بيانات الاعتماد المطلوبة لقاعدة البيانات الخاصة بك ودمج Twilio.
2. تحديث ملف .env الخاص بك
راجع اليوم الأول: إعداد قاعدة بيانات PostgreSQL لتذكيرات أعياد الميلاد للحصول على بيانات اعتماد قاعدة البيانات واليوم الثالث: التحقق من أعياد الميلاد وإرسال إشعارات SMS للحصول على بيانات اعتماد Twilio لملء القيم التالية:
ملاحظة: يتم استخدام ملف .env
لتخزين بيانات الاعتماد الحساسة بشكل آمن. سيتم قراءة هذه القيم بواسطة ملف project.yml
ورسمها على البيئة الخالية من الخادم أثناء النشر، مما يجعلها متاحة لوظيفتك في السحابة.
3. إضافة التبعيات
قم بتحديث ملف requirements.txt
بالتبعيات التالية:
pg8000
: مكتبة عميل PostgreSQL مكتوبة بلغة بايثون بالكامل.
python-dotenv
: تستخدم لتحميل متغيرات البيئة من ملف .env
.
twilio
: مكتبة Twilio بلغة بايثون لإرسال رسائل SMS.
4. تحديث build.sh
أضف البرنامج النصي التالي إلى ملف build.sh
:
هذا النص البرمجي يضمن أن جميع التبعات مُعبأة بشكل صحيح مع الدالة الخاصة بك. أمر chmod +x
من الخطوة 4 يضمن أنه قابل للتنفيذ.
5. تحديث __main__.py
هذا هو النص البرمجي الرئيسي لخدمة تذكير عيد الميلاد الخاصة بك. نحن نستخدم بشكل أساسي النص البرمجي الذي أنشأناه في اليوم الثالث لإرسال إشعارات عيد الميلاد. ومع ذلك، لجعلها متوافقة مع وظائف DigitalOcean، نحتاج إلى إجراء بعض التعديلات الصغيرة.
قم بتحديث ملف __main__.py
بالمحتوى التالي:
إليك ما قمنا بتغييره:
-
تمت إضافة دالة
main(params)
: تتوقع وظائف DigitalOcean نقطة دخول دالة باسمmain
، والتي تأخذ وسيطparams
. هنا تبدأ الدالة في التنفيذ. -
تم نقل منطق البرنامج النصي داخل دالة
main
:
لقد تم لف الكود من اليوم الثالث داخل دالةmain
لتلبية هذا المتطلب. -
كل شيء آخر يبقى كما هو:
منطق اتصال قاعدة البيانات، والتحقق من أعياد الميلاد، ومنطق إشعارات الرسائل القصيرة لم يتغير.
الخطوة 5: تعبئة ونشر
مع وجود كل شيء في مكانه، قم بنشر مشروعك إلى وظائف DigitalOcean:
- نشر المشروع:
للتحقق من أن وظيفتك قد تم نشرها بنجاح إلى النطاق:
- قم بزيارة لوحة التحكم في DigitalOcean، وانتقل إلى وظائف في الشريط الجانبي الأيسر.
- حدد نطاقك (على سبيل المثال، my-birthday-reminder-namespace).
- تحقق من أن وظيفتك تظهر تحت النطاق، والتي تُدرج عادةً كـ
reminders/birthdays
. - انقر على اسم الوظيفة لعرض التفاصيل، بما في ذلك السجلات، والتكوين، وتاريخ الاستدعاء.
الخطوة 6: اختبار وظيفتك المنشورة
بمجرد نشر وظيفتك، حان الوقت لاختبارها. يمكنك استدعاء الوظيفة يدويًا للتأكد من أنها تعمل كما هو متوقع. هناك طريقتان للقيام بذلك:
الخيار 1: استخدام واجهة سطر الأوامر DigitalOcean
إذا تم إعداد كل شيء بشكل صحيح، ستعمل دالتك في السحابة، تتحقق من أعياد الميلاد اليوم وترسل إشعارات عبر الرسائل القصيرة.
الخيار 2: استخدام لوحة تحكم DigitalOcean
- اذهب إلى لوحة تحكم DigitalOcean.
- انتقل إلى الدوال وابحث عن دالتك الخاصة بالتذكيرات/أعياد الميلاد.
- اضغط على تشغيل لتشغيلها يدويًا.
- عرض المخرجات والسجلات مباشرة في وحدة التحكم.
تعتبر هذه الطريقة مفيدة بشكل خاص إذا كنت تفضل واجهة مرئية أو تريد التحقق من السجلات في تنسيق نظيف وسهل القراءة.
نصائح للاختبار
عندما تستدعي الدالة، ستقوم بالتحقق من أعياد الميلاد التي تتطابق مع تاريخ اليوم. إذا كان هناك تطابق، ستتلقى رسالة نصية بالتفاصيل. لاختبار الدالة بشكل فعال:
- أضف عيد ميلاد واحد أو أكثر في قاعدة بياناتك تتطابق مع التاريخ الحالي.
- تحقق من وحدة التحكم أو سجلات سطر الأوامر للتأكد من أن الدالة نفذت بنجاح.
🎁 ملخص
إليك ما حققناه اليوم:
✅ إعداد doctl
وإنشاء مساحة اسم لمشروعنا.
✅ إعادة هيكلة سكربت بايثون للنشر.
✅ تعبئة ونشر خدمة تذكير أعياد الميلاد إلى خدمات DigitalOcean.
✅ اختبار الدالة في السحابة باستخدام كل من سطر الأوامر ولوحة تحكم DigitalOcean.
التالي: بينما تعتبر هذه خطوة كبيرة إلى الأمام، لا نزال نشغل الدالة يدويًا. في المنشور التالي، سنقوم بأتمتة هذه العملية بحيث تعمل خدمة تذكير أعياد الميلاد تلقائيًا كل يوم في وقت محدد. تخيل الاستيقاظ على تذكير نصي دون رفع إصبع—دعنا نجعل ذلك يحدث غدًا! 🚀