هناك نظامان أساسيان شائعان اليوم لاستضافة مواقع الويب الثابتة: Netlify و Google App Engine (GAE) اكتسب Netlify الكثير من الشعبية مؤخرًا لأنه يوفر خبرة متكاملة في بناء ونشر مواقع الويب الثابتة à  ¢ à  à  كلها في نفس النظام الأساسي GAE أكثر مرونة من حيث أنها تدعم مواقع الويب غير الثابتة أيضًا ولكنها تفتقر بالتأكيد إلى مستوى التكامل الذي توفره Netlify. فلماذا ما زلت أستخدم GAE في كثير من الحالات؟ الجواب بسيط. في الوقت نفسه ، يسمح بالحصول على جميع ميزات Netlify والمزيد باستخدام بعض الأدوات البسيطة (إجراءات GitHub و Reliza Hub) التي سأشرحها في هذه المقالة التسعير اسمح لي أولاً بتغطية سيناريوهات التسعير عندما يكون التحرير والسرد GAE + GitHub أكثر منطقية. النقطة الأساسية هي بناء الدقائق. تمنح الطبقة المجانية لـ Netlify فقط 300 دقيقة بناء شهريًا ، وهذا ليس كثيرًا بواسطة أي حساب. إذا كنت تستخدم شيئًا مثل تطبيق node.js أصبح ثابتًا واستغرق إنشاءاتك 2-3 دقائق في المتوسط ​​، فستحصل فقط على أكثر من 100 إصدار شهريًا على Netlify ، وهو ما قد لا يكون كافيًا بسهولة. خاصة إذا كان لديك أكثر من موقع إذا كنت بحاجة إلى المزيد من دقائق الإنشاء على Netlify à  ¢ à  à إما دفع 7 دولارات لكل 500 دقيقة إضافية ، أو الانتقال إلى المستوى التالي الذي يتضمن 1000 دقيقة ، ولكن يكلف 45 دولارًا في الشهر. من ناحية أخرى ، في GitHub Actions ، تحصل على 2000 دقيقة بناء مجانية للمستودعات الخاصة ودقائق إنشاء غير محدودة للمستودعات العامة. لنفترض أنك تبني موقعًا للتوثيق وقررت جعله عامًا على GitHub à  ¢ à  à تحصل على دقائق إنشاء غير محدودة على إجراءات GitHub à  ¢ à  à  وهذا يجعل فرق كبير الاعتبار التالي هو تكاليف المرور. يوفر Netlify خروجًا من عرض النطاق الترددي 100 جيجابايت شهريًا متضمنًا في مستواه المجاني ، وهو سخي. تقدم Google خروجًا مجانيًا بسعة 1 غيغابايت يوميًا ، مما يجعله حوالي 30 غيغابايت في الشهر. لذلك إذا كان خروجك بين 30 و 100 غيغابايت ، فقد تحصل على صفقة أفضل على Netlify. ومع ذلك ، بمجرد أن تصل إلى 100 جيجابايت ، فإن Netlify يفرض عليك 20 دولارًا مقابل 100 جيجابايت التالية في ذلك الشهر على الفور. تطبق Google سياسة تسعير لكل غيغابايت خروج والتي تكلف 0.12 دولار. بمعنى أنك تدفع 12 دولارًا / 100 غيغابايت à  ¢ à  à  مقابل 20 دولارًا / 100 غيغابايت على Netlify بناءً على حركة المرور ، قد تكون أفضل سواء على Netlify أو على GAE من احتمال الخروج. ولكن في كثير من الحالات ، توفر GAE قيمة أفضل هنا أيضًا الكلمة الأخيرة بشأن التسعير à  ¢ à  à  إذا كنت تستخدم شيئًا مثل GitHub Actions أو CircleCI للبنيات الخاصة بك ، فلا يزال بإمكانك النشر على Netlify à  ¢ à  à  مما يجعل إجراءات GitHub نظام أكثر مرونة تكوين مشروع Google App Engine نبدأ بالذهاب إلى httpsconsole.cloud.google.com/appengine وإنشاء مشروع جديد. إذا كان لديك واحد بالفعل à  ¢ à  à  ، انقر أولاً على اسم مشروعك في الأعلى ثم انقر فوق **مشروع جديد** أدخل اسم المشروع ، لاحظ هنا معرف المشروع الذي تحصل عليه (ستحتاجه لاحقًا) à  ¢ à  à  في حالتي هو كذلك * à  ¢ à  à  à  * à  ¢ وانقر على ** إنشاء ثم انتقل إلى هذا المشروع من محدد المشروع أعلى الصفحة انقر فوق ** أنشئ التطبيق ** واختر المنطقة التي تريدها. ثم بالنسبة للتطبيق الثابت ، حدد بيئة Python و Standard (تنطبق الطبقة المجانية فقط على البيئة القياسية). في هذه المرحلة ، يكون طلبك جاهزًا للخطوات التالية لتوجيه اسم المجال الخاص بك إلى هذا التطبيق ، انتقل إلى httpsconsole.cloud.google.com/appengine/settings/domains وانقر ** أضف مجالًا مخصصًا اتبع الإرشادات ووجه DNS من نطاقك إلى سجلات Google   ¢ à  à Ã. عند القيام بذلك ، ستوجه Google نطاقك تلقائيًا إلى هذا التطبيق وتدير أيضًا شهادة SSL أخيرًا ، نحتاج إلى إعداد حساب الخدمة الذي سيكون مسؤولاً عن عمليات النشر التلقائية. انتقل إلى httpsconsole.cloud.google.com/iam-admin/serviceaccounts؟project=your_project_id (استبدل * your_project_id * في هذا الرابط مع معرف المشروع الفعلي الخاص بك ، في حالتي سيكون هذا البرنامج التعليمي evie-Landing- ستنتقل إلى صفحة القائمة التالية: انقر على أيقونة ثلاثية النقاط في عمود الإجراءات بالقرب من حساب خدمة App Engine الافتراضي. وحدد ** خيار إنشاء مفتاح ** من القائمة المنسدلة اختر JSON كنوع المفتاح الخاص بك وانقر فوق ** CREATE سيؤدي هذا إلى تنزيل ملف .json على جهازك. آخر شيء يتعين علينا القيام به هنا هو تشفير هذا الملف بتنسيق base64 à  ¢ à  à  سنحتاج إلى ذلك لاحقًا عند الانتقال إلى إجراءات GitHub يمكن القيام بذلك باستخدام سطر الأوامر على النحو التالي: base64 your_json_file.json>key.base64 ثم سيحتوي ملف key.base64 على المفتاح المشفر base64 ** ملاحظة الأمان هنا تسمح ملفات مفتاح json و base64 هذه بالتحكم في مشروع GAE الخاص بك ، لذلك بعد إضافتها إلى إجراءات GitHub (كما هو موضح أدناه) ، يوصى بتمزيقها احذف هذه الملفات. يمكن القيام بذلك من cli على النحو التالي: أجاد key_file_name&& rm key_file_name بمجرد الحصول على المفتاح ، نحتاج إلى تمكين Google App Engine APIs à  ¢ à  à  للقيام بذلك ، قم بزيارة الصفحة httpsconsole.developers.google.com/apis/api/appengine .googleapis.com / نظرة عامة وانقر **يُمكَِن** إعداد مستودع جيثب وإجراءات جيثب أخيرًا ، حان الوقت لإعداد مستودع GitHub الخاص بنا. يغطي هذا البرنامج التعليمي إعداد موضوع Evie بواسطة Undraw. (هذا هو الموضوع الذي أستخدمه حاليًا للصفحة المقصودة لـ Reliza Hub!) يتم استضافة سمة Evie الأصلية هنا ، لكنني سأستخدم شوكة Relizaà  ¢ à  à  في هذا المستودع كما ذكرت بالفعل في مقالات أخرى ، فإن فلسفتي في البناء هذه الأيام تتمثل في إرساء كل شيء واستخدامه بناء عامل ميناء كبيئة بناء CI موحدة عبر منصات متعددة. لذلك ، أضفت Dockerfile ، وتكوين nginx ، وكذلك إصدارات npm المحدّثة المتعلقة بسمة Evie الأصلية للحصول على بنية عاملة مُرسَمة الآن إذا فعلنا ذلك أمر docker build في محتويات مستودع Evie الخاص بـ Relizaà  ¢ à  à ، سيقوم ببناء صورة مستندة إلى nginx تخدم سمة Evie بدون توثيق على المنفذ 80 حان الوقت الآن لإعداد النص البرمجي لـ GitHub Actions. سنستخدم action-hub / gcloud @ master مما يجعل العملية برمتها بسيطة نبدأ بتعيين 2 من أسرار إجراءات GitHub التي يحتاجها الإجراء. انتقل إلى الإعدادات ->الأسرار داخل مستودع GitHub الخاص بك وانقر فوق ** سر جديد ** لضبط الأسرار التالية: - GCLOUD_PROJECT_ID à  ¢ à  à اضبطه على معرّف المشروع الذي تم تدوينه عند إنشاء مشروعك: برنامج تعليمي evie-Landing في حالتي - GOOGLE_APPLICATION_CREDENTIALS à  ¢ à  à اضبطه على محتويات ملف json-key بترميز base64 الذي تم الحصول عليه لحساب خدمة Google أعلاه الآن في المستودع ، أقوم بإنشاء دليل .github ثم دليل سير العمل بداخله. وداخلها أقوم بإنشاء gae_build.yml. نحتاج أيضًا إلى إضافة ملف app.yaml يحتوي على تكوين GAE وسيكون بسيطًا جدًا لحالة استخدام التطبيق الثابت التي أملكها بعد دفع هذا الرمز ، سيؤدي إلى تشغيل GitHub Actions build ، والذي سيؤدي إلى نشر تطبيق GAE الخاص بك à  ¢ à  à  وستبدأ خدماتك مباشرة! ستؤدي كل دفعة لاحقة إلى GitHub تلقائيًا إلى تشغيل بناء إجراءات GitHub جديد وتحديث التطبيق تلقائيًا على GAE الآن لديك خط أنابيب CICD أساسي لموقع الويب الثابت الخاص بك جاهزًا! يمكنك التوقف هنا أو يمكنك متابعة قراءة كيف يمكنك إضافة وظيفة رؤية الموافقة والنشر باستخدام Reliza Hub المكافأة: إضافة الموافقات والرؤية باستخدام Reliza Hub لنفترض أننا لا نريد أن ينتقل كل تصميم جديد إلى الإنتاج تلقائيًا. بدلاً من ذلك ، نريد أن يتم نشرهم أولاً في مكان غير إنتاج ، وبعد ذلك إذا أحببناهم à  ¢ à  à يجب عليك أنت أو الشخص الموافق عليه (على سبيل المثال ، مدير التسويق الخاص بك) النقر فوق زر و الترويج للإنتاج إليك كيفية تحقيق ذلك باستخدام Reliza Hub أعلى التكوين الذي وصفته حتى الآن 1 à  ¢ à  à دفق البيانات الوصفية للإصدار إلى Reliza Hub أولاً ، انتقل إلى httpsapp.relizahub.com ، وقم بالمصادقة مع GitHub وأنشئ مؤسستك ، وفي حالتي سأستخدم * à  ¢ à  à  دروس إيفي لاندينج  ¢ à  à  * كاسم منظمة. انقر فوق عنصر القائمة ** VCS ** ثم على أيقونة دائرة زائد لإضافة مستودع VCS الصق عنوان URI لمستودع GitHub في الإدخال وسيقوم Reliza Hub بتحليله تلقائيًا انقر ** أرسل وسيؤدي ذلك إلى إنشاء مستودعك. تابع إلى قائمة المشاريع وانقر على أيقونة دائرة زائد لإنشاء مشروع. أدخل اسم مشروعك (سأستخدم مخطط إصدار مجموعة Evie Landing Set إلى مكون فردي (رئيسي) à  ¢ à  à  وذلك لأن GAE تستخدم إصدارها الخاص الذي يتكون من مكون واحد à  ¢ à  à  الذي سنستخدمه داخل Reliza Hub كما هو. اختر مستودع VCS ليكون هو المستودع الذي أنشأته للتو في الخطوة السابقة وانقر فوق ** إرسال سيؤدي هذا إلى إنشاء مشروع جديد. ثم انقر فوق اسم المشروع الذي تم إنشاؤه حديثًا وانقر فوق رمز القفل لإنشاء مفتاح واجهة برمجة تطبيقات المشروع عندما ترى معرف API ومفتاح واجهة برمجة التطبيقات تم إنشاؤهما لمشروعك ، أنشئ سريرين جديدين في إجراءات GitHub à  ¢ à  à  RELIZA_API_PROJECT_ID و RELIZA_API_PROJECT_KEY مع القيم المقابلة حان الوقت الآن لتحديث البرنامج النصي gae_build.yml لدفق تفاصيل الإنشاء إلى Reliza وكذلك التبديل إلى وضع عدم الترويج. هذا يعني أنه في كل دفع git ، سيتم إنشاء نشر على GAE ، ولكن لن تقوم Google بتحويل حركة المرور إلى هذا النشر الجديد حتى يتم اتخاذ خطوة يدوية لاحقًا يتضمن البرنامج النصي المحدث الإبلاغ عن تتبع وقت الإنشاء إلى Reliza Hub وسيحتوي أيضًا على URI لكل عملية نشر غير مروج لها على GAE. يمكنك العثور على وصف لمختلف العلامات التي نستخدمها في مستودع GitHub الخاص بـ Reliza Go Client بعد تشغيل GitHub Actions عند اكتمال الدفع ، يمكنك بعد ذلك الانتقال إلى صفحة إصدارك في Reliza Hub ومشاهدة الصورة التالية: لاحظ أن النقر فوق ملف ** سينقلك رابط ** نقطة نهاية الاختبار ** إلى إصدار النشر الفعلي على GAE المطابق لإدخال رمز المصدر هذا à  ¢ à  à  ولكن لم تتم ترقيته بعد لخدمة حركة المرور يمكنك أيضًا إضافة تكامل Slack باتباع الدليل هنا لتلقي إشعارات بكل إصدار جديد على Reliza Hub 2 à  ¢ à  à إضافة الموافقات انتقل إلى صفحة الإعدادات في Reliza Hub وفي الجزء السفلي منها ، قم بتكوين مصفوفة الموافقة الخاصة بك لبيئة الإنتاج. في حالتي ، سأطلب فقط موافقة من MARKETING لإصدار ليتم ترقيته إلى الإنتاج. كالتالي: انقر فوق ** حفظ ماتريكس ** بعد ذلك ، أقوم بتثبيت تطبيق Reliza GitHub à  ¢ à  à  httpsgithub.com/apps/reliza-hub à  ¢ à  à  واتبع البرنامج التعليمي Ià  ¢ à  لقد كتبت في وقت سابق لتسجيلها في المشروع أخيرًا ، سير عمل إجراءات GitHub الجديد الذي سيتم تشغيله بناءً على الموافقات من Reliza Hub à  ¢ à  à يمكنك رؤيته هنا. بشكل أساسي ، يستعلم سير العمل هذا عن Reliza Hub عن أحدث إصدار معتمد من الإنتاج ، ثم يطلب من Google App Engine تحويل حركة المرور إلى هذا الإصدار الشيء الوحيد الذي يتطلب التكوين في هذا البرنامج النصي هو متغير البيئة RELIZA_PROJECT_ID à  ¢ à  à  الذي يجب تعيينه على UUID الخاص بالمشروع الذي تم الحصول عليه من صفحة المشروع في Reliza Hub: الآن ، سيتم ترقية أحدث إصدار للمشروع بموافقة من MARKETING تلقائيًا على جانب Google App Engineلمزيد من التفاصيل ، كيف يمكنك إضافة المعتمدين إلى المؤسسة ، شاهد الفيديو التعليمي الخاص بي حول الموافقات3 à  ¢ à  إضافة رؤية لما يتم نشره عندأخيرًا نريد إضافة رؤية على Reliza Hub فيما يتعلق بالإصدار الذي تم نشره بالفعل وعندماللقيام بذلك ، انتقل أولاً إلى مثيلات في Reliza Hub وانقر فوق رمز دائرة زائد لإنشاء جديد المثالثم أدخل URI للمثيل الخاص بي وحدد البيئة لتكون PRODUCTION à  ¢ à  à  لأن لدي بيئة إنتاج فقط على موقع الويب الثابت هذا.النقر فوق** إرسال ** ينشئ مثيل جديد الخاص بيبعد ذلك ، حدد هذا المثيل الذي تم إنشاؤه حديثًا وانقر على رمز القفل لإنشاء مفتاح API الخاص بهعند إنشاء معرف API ومفتاح واجهة برمجة التطبيقات ، أنشئ سريرين جديدين في إجراءات GitHub à  ¢ à  à  RELIZA_API_INSTANCE_ID و RELIZA_API_INSTANCE_KEY مع القيم المقابلةبهذا أقوم أولاً بتحديث البرنامج النصي للنشر عند الموافقة لإضافة قسم للتحقق من النشر على GAE ودفقه إلى Reliza Hub.وأضيف أيضًا سير عمل cron GitHub Actions للتحقق من حالة تطبيق GAE الخاص بيبعد تشغيل أي من مهام سير العمل هذه ، سنحصل على لقطة نشر لتطبيق GAE في Reliza Hub في عرض المثيل الخاص بنا على النحو التالي:Summaryهذا هو ، الآن لدينا خط أنابيب CI CD كامل بضغطة زر مع نشر إجراءات GitHub في GAE والموافقات والرؤية يديرها Reliza Hub.يمكننا أيضًا الحصول على إشعارات Slack ويقوم مدير التسويق لدينا بعرض التغييرات والضغط على الأزرار لترقيتها إلى الإنتاج دون مطالبة الموظفين الفنيين.كم هذا رائع؟ إذا كنت ترغب في التحدث معي ومناقشة هذا أو غيره من سير العمل بشكل أكبر à  ¢ à  à  احجز مكالمة تجريبية من Reliza Hub لمدة 30 دقيقة معي  ¢ à  à  وسأبذل قصارى جهدي للمساعدة.