نطاق غير محدود واستضافة ويب مجانية مع صفحات GitHub و Cloudflare

نشرت: 2022-03-11

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

السر: أنا أجعل موقعهم على الإنترنت ثابتًا. بعد ذلك ، أقوم بتخزينه واستضافته مع GitHub ، واستخدم Cloudflare لتقديمه عبر HTTPS ، وجعله سريعًا. لم يدفع زبائني سوى مقابل اسم المجال الخاص بهم ، ومع ذلك فهم يحصلون على أكثر بكثير مما كانوا يساومون عليه في أي وقت مضى.

لماذا المحتوى الثابت؟

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

بناء واجهة مستخدم معقدة؟

مع ظهور أطر عمل الواجهة الأمامية ، مثل React وأقاربها ، يمكنك إنشاء تجارب سحرية باستخدام HTML / CSS و JavaScript. سيتعين عليك فصل منطقك الخلفي عن واجهتك الأمامية ، ولكن حتى Ruby on Rails يأتي مع وضع API الآن.

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

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

مواقع الكتيبات

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

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

المكافأة: تحب الشركات الصغيرة عدم دفع رسوم الاستضافة الشهرية المتكررة. منحت ، الاستضافة ليست تكلفة ضخمة ، ولكن العملاء ليسوا مضطرين إلى دفع أي شيء آخر غير المجال ، وهو أمر رائع.

تطبيقات صفحة واحدة

هل تستعرض تطبيقًا جديدًا رائعًا ورائعًا يعتمد على أطر أمامية حديثة؟

تطبيقك ثابت في الغالب بالفعل. اتخذ بضع خطوات إضافية لعزل أي منطق من جانب الخادم في تطبيق منفصل ، واحصل على الفائدة الكاملة من تقديم تطبيقك بالكامل من ذاكرة التخزين المؤقت لـ Cloudflare.

سيكون تطبيقك متاحًا في جميع الأوقات.

المدونات

هذا بيع صعب من الصعب إقناع الناس بإمكانية توظيف المواقع الثابتة في المدونات ، لكن اقرأ لي - لم أذهب بعيدًا عن العمق.

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

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

يعتبر سير العمل هذا مفيدًا بشكل خاص لأن صفحات GitHub تدعم تصميمات Jekyll. فجأة ، يمكن المساهمة في منشورات المدونة بطلبات السحب ، ويتم تخزين كل المحتوى الخاص بك ضمن التحكم في الإصدار. لا يزال بإمكان غير المطورين المساهمة في منشورات Markdown عن طريق نشر منشوراتهم عبر Stackedit.

في الواقع ، أنا أستخدم Stackedit لتأليف هذا المنشور الآن!

أيضًا ، إذا كنت تريد تعليقات على منشورات مدونتك ، يمنحك Disqus نظام تعليق قويًا عن طريق إدراج مقتطف من JavaScript.

هذه الصفحة التي تقرأها تستخدم Disqus أيضًا.

صفحات جيثب

GitHub Pages هي إجابة GitHub لصفحات المشروع ، وهي تتيح لك خدمة أي موقع ويب ثابت مباشرة من مستودعك. نظرًا لأن صفحات GitHub تدعم المجالات المخصصة ، يمكنك استضافة موقع ويب ثابت على صفحات GitHub مجانًا ، مع عمليات النشر مباشرة من Git.

النشر في صفحات GitHub.

كفى كلامًا ، دعنا نراه في العمل!

لقد تقدمت وأنشأت تطبيق React من صفحة واحدة يجلب ويعرض سعر الصرف الحالي للروبية الباكستانية من واجهة برمجة تطبيقات عامة. دعنا ننشر هذا في صفحات جيثب.

أولاً ، لنقم بإنشاء مستودع GitHub جديد.

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

يتم تقديم صفحات GitHub من فرع يسمى gh-pages لذلك دعونا ننشئ واحدة لمشروعي.

 $ git checkout -b gh-pages Switched to a new branch 'gh-pages'

ودعنا نرفع الموقع:

 $ git remote add origin [email protected]:amingilani/price-check.git $ git push -u origin gh-pages Counting objects: 27, done. Delta compression using up to 8 threads. Compressing objects: 100% (25/25), done. Writing objects: 100% (27/27), 28.67 KiB | 0 bytes/s, done. Total 27 (delta 3), reused 0 (delta 0) remote: Resolving deltas: 100% (3/3), done. To github.com:amingilani/price-check.git * [new branch] gh-pages -> gh-pages

وانتهينا! في هذه المرحلة ، سيكون موقع الويب متاحًا على https://amingilani.github.io/price-check مع SSL مجاني:

صفحة "مرحبًا بك في التحقق من السعر" للموقع المستضاف على صفحات GitHub ، مع تسمية آمنة بجوار حقل عنوان URL للمستعرض.

أشياء مهمة يجب ملاحظتها:

  • تعرض صفحات GitHub ملف index.html في فرع gh-pages في مشروعك
  • يتم تقديم الموقع على USERNAME.github.io/REPOSITORY-NAME

تخصيص اسم المجال.

خدمة الموقع خارج GitHub جيدة ، لكن أي موقع ويب لائق يحتاج إلى اسم مجال مخصص. لحسن الحظ ، يتيح لك GitHub إحضار المجال الخاص بك إلى الحفلة!

أولاً ، لنقم بإنشاء ملف CNAME خاص ووضع اسم المجال الخاص بنا هناك. سيسمح هذا لـ GitHub بمعرفة اسم المجال الذي سيتم توجيهه إلى المستودع.

 $ echo 'pricecheck.gilani.me' > CNAME $ git add . $ git commit -m 'Add a custom domain' ... $ git push ...

ثانيًا ، دعنا نشير CNAME الفرعي إلى DNS الخاص بـ GitHub على USERNAME.github.io :

لقطة شاشة تعرض قائمة منسدلة مع تحديد CNAME ، واسم "pricecheck" مكتوبًا في الحقل الأوسط ، والمجال "amingilani.github.io" مكتوبًا في الحقل الأيمن.

تحذير: لا تستخدم هذا لمجال رئيسي! ستؤدي إضافة سجل CNAME إلى الجذر إلى تعطيل سجلات MX و TXT . استخدم هذا فقط للمجال الفرعي الخاص بك. نوقشت المجالات Apex فيما بعد.

في هذه المرحلة ، يجب أن يعمل موقعنا على مجالنا المخصص على HTTP:

نفس صفحة التحقق من السعر في المتصفح ، ولكن يمكن الوصول إليها الآن عبر pricecheck.gilani.me. هذه المرة التسمية الآمنة غائبة.

أشياء مهمة يجب ملاحظتها:

  • يتم تقديم المجال الافتراضي *.github.io من خلال HTTPS.
  • يتم تقديم اسم المجال المخصص الخاص بنا من خلال بروتوكول HTTP غير الآمن.
  • لا تستخدم سجل CNAME على نطاقك الرئيسي إلا إذا كنت تريد قتل رسائل البريد الإلكتروني الخاصة بك.

حدود صفحات GitHub:

  • يجب أن يكون حجم ملفات إعادة الشراء أقل من 1 جيجابايت.
  • يجب أن يكون حجم ملفات مواقع الويب أقل من 1 غيغابايت.
  • حد النطاق الترددي الشهري 100 جيجا بايت. سنتجاوز هذا لاحقًا.

استخدام مجال رئيسي كمجال مخصص لك

أسهل طريقة للتغلب على هذا القيد هي استخدام www كنطاق فرعي ، وإعادة توجيه كل حركة مرور HTTP من القمة إلى www . في المثال الخاص بي ، سأعيد توجيه gilani.me إلى www.gilani.me ، مما يشير إلى موقعي الثابت ، لكنني لا أحب القيام بالأشياء بالطريقة السهلة.

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

لا ANAME ؟ الخيار الأخير هو التغيير إلى مزود DNS يدعم ذلك: أدخل Cloudflare. يوفر Cloudflare تسوية CNAME على المجالات الرئيسية ، وهو ما يعادل سجل ANAME . من الأفضل إجراء التبديل الآن لأننا سنغطي Cloudflare في القسم التالي.

TLDR : قم بالتبديل إلى DNS المجاني الخاص بـ Cloudflare وقم بتعيين CNAME على المجال الرئيسي الخاص بك. يفعلون شيئًا مميزًا باستخدام CNAME الخاص بهم مما يجعله يعمل.

SSL و Cloudflare

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

بصفتك مسؤول ويب حديثًا ، يُتوقع منك توفير طبقة المقابس الآمنة على الأقل على موقع الويب الخاص بك ، مع عدم وجود محتوى مختلط .

لقد وصلنا إلى النقطة التي يحدد فيها Google Chrome مواقع HTTPS العادية على أنها غير آمنة ويبدأ بحث Google في تفضيل مواقع HTTPS بشكل أفضل في تصنيفاتها. سنناقش المزيد من الاستراتيجيات لجعل الواجهة الأمامية الخاصة بك آمنة في وقت لاحق ، ولكن في الوقت الحالي ، سنغطي SSL فقط.

لحسن الحظ ، لدينا الآن Let's Encrypt.

إنها سلطة مصدق (CA) غير ربحية ومؤتمتة بالكامل تتيح لك إصدار شهادات SSL قصيرة الأجل لمدة 90 يومًا بشكل برمجي لأي نطاقات تتحكم فيها. إنه سهل الاستخدام ؛ مفتوح المصدر والمشروع مدعوم من قبل عدد كبير من الشركات ، بما في ذلك Mozilla و Electronic Frontier Foundation.

استخدام Cloudflare جيدًا

Cloudflare هي خدمة حماية DNS و CDN و DDoS.

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

علاوة على ذلك ، تقدم Cloudflare خدمة تسمى Universal SSL حيث تصدر لك شهادة SSL مجانية من شركائها في CA ، لذلك تحصل على HTTPS مجانًا ... إلى الأبد.

لماذا Cloudflare؟

أعرف ما تفكر فيه: جيلاني ، لقد أخبرتني للتو كم هو رائع Let's Encrypt. لماذا تتحدث عن Cloudflare؟ حسنًا ، كل هذا يعود إلى البساطة.

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

ينتج عن هذا تقديم موقع الويب الخاص بك عبر SSL حتى إذا لم يكن الخادم الأصلي لديه شهادة SSL ، على الرغم من أن Cloudflare يمنحك شهادات موقعة ذاتيًا خاصة يمكنك وضعها على خادمك الأصلي لتأمين الاتصال بخوادم Cloudflare. هذا ما تقدمه لك Cloudflare مع خطة مجانية ، ولا يتعين عليك تجديد شهادتك كل 90 يومًا.

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

إعداد Cloudflare SSL

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

لقطة شاشة لتهيئة Cloudflare ، تعرض أربع نسخ من زوج من صفوف CNAME بحيث يمكن رؤية تلميحات الأدوات فوق رمز التكوين لكل صف ، جنبًا إلى جنب مع التكوين النهائي المطلوب. يحتوي الزوج على "أمين" أعلى "فحص الأسعار" وكلا الصفين يقولان "اسم مستعار لأمينجيلان ..." و "تلقائي" في المنتصف. في البداية ، يظهر في الصف العلوي رمز "DNS و HTTP proxy" ، ولكن الصف السفلي به رمز "DNS فقط". بالنقر فوق الرمز ، يتم تبديل الصف السفلي ليكون هو نفسه الصف العلوي ، مما يتسبب في تحول الصف السفلي إلى اللون الأخضر ، واختفاء رمز "i" الصغير بجوار "CNAME".

بعد ذلك ، ضمن Crypto ، اضبط مستوى SSL على "كامل".

لقطة شاشة لقسم SSL ، مع تعيين قائمة منسدلة على Off. الخيارات الأخرى مرنة وكاملة و "كاملة (صارمة)." عند اختيار ممتلئ ، تظهر علامة "شهادة نشطة" خضراء أسفل القائمة المنسدلة.

فرض "إعادة كتابة HTTPS التلقائية" لإيقاف تحذيرات المحتوى المختلط.

لقطة شاشة لقسم إعادة كتابة HTTPS التلقائية ، والتي تُظهر التبديل الانتقال من إيقاف إلى تشغيل.

في هذه المرحلة ، سيعمل موقعنا على كل من HTTP و HTTPS. دعنا نفرض HTTPS لكل شيء في مجالنا.

لقطة شاشة لمربع حوار "إنشاء قاعدة الصفحة لـ gilani.me". تم ملء الحقل "إذا كان عنوان URL يطابق" "http: //*gilani.me/*". تم تعيين حقل القائمة المنسدلة الخاص به على "استخدام HTTPS دائمًا."

كله تمام. يجب أن يتم تحميل موقعنا الإلكتروني دائمًا عبر HTTPS بتصنيف أخضر "آمن" في Chrome.

نفس صفحة التحقق من السعر في المتصفح كما في السابق ، يمكن الوصول إليها مرة أخرى عبر pricecheck.gilani.me ، ولكن هذه المرة التسمية الآمنة موجودة مرة أخرى.

الكلمات النهائية والاعتبارات الأمنية

هناك بعض الأشياء التي لم تناقشها أعلاه ، وأود أن أتوقف لحظة لتوضيح بعض النقاط.

سيشير الأذكياء بينكم إلى أن هناك عددًا قليلاً من مشكلات الأمان الصارخة في هذا الإعداد ، وهي عدم وجود رؤوس HTTP آمنة مثل:

  • Content-Security-Policy : تحميل البرامج النصية والأصول من القائمة البيضاء للمضيفين ، ويمكن أن تمنع js المضمنة.
  • X-Frame-Options : تعطيل تحميل موقع الويب الخاص بك في إطار iframe.

وأنت على حق. لا تسمح لك صفحات GitHub وحتى Cloudflare بتخصيص رؤوس HTTP الخاصة بك . ومع ذلك ، يمكنك تعيين CSP باستخدام علامة HTML meta .

ما عليك سوى إدخال هذا في صفحة الويب الخاصة بك:

 <meta http-equiv="Content-Security-Policy" content="default-src https:">

ومع ذلك ، في الوقت الحالي ، لا توجد طريقة عملية لتعيين رأس X-Frame-Options على صفحات GitHub ، مما يعني أنه يمكن للمهاجم تحميل صفحة الويب الخاصة بك في إطار iframe مصمم خصيصًا وتنفيذ هجوم XSS. إذا كنت مخلصًا ، فيمكنك حل هذه المشكلة عن طريق مطالبة المستخدمين بتأكيد كلمة المرور الخاصة بهم أو رمز 2FA عند كل إجراء حساس ، أو عن طريق تمرير رمز CSRF عند كل طلب مصادق عليه.

مصدر قلق كبير للبعض هو أنه باستخدام المستودعات العامة المجانية في GitHub ، يكون موقع الويب الخاص بك وكود المصدر متاحين لأي شخص يريد تفرعها أو تنزيلها. لذلك أعتقد أن القلق هنا في غير محله.

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

تحجيم ، تحجيم غير محدود

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

يمكنك إنشاء طبقة أمامية استنادًا إلى إطار عمل JavaScript حديث ، وربطها بخلفية واسعة النطاق قائمة على السحابة كخدمة (BaaS) ، مثل Firebase ، وإنشاء تطبيقات معقدة دون القلق بشأن الخوادم ، ووقت التشغيل ، و أو أي مشكلة أخرى متعلقة بالبنية التحتية.

صنع لعبة جديدة مثيرة على شبكة الإنترنت ؟! تحقق من GameSparks ، وأنت على ما يرام.

لا يُنصح باستخدام صفحات Github كخدمة استضافة "قياسية" ، والتي من المتوقع أن تتعامل مع مواقع الويب ذات النطاق الترددي العالي ، ولا ينبغي القيام بها. تؤدي إضافة Cloudflare CDN أعلى صفحات GitHub إلى جعل هذا الحل يعمل. تعد Cloudflare أكثر من مجرد خدمة SSL مجانية. إنها شركة لديها شبكة CDN عالمية تحمي موقع الويب الخاص بك من الزيادات وتحافظ على الحمل على صفحات GitHub إلى أدنى حد.

الملخص والاعتراف والروابط

في هذه المقالة ، جعلت الأمر يبدو كما لو أنني قمت بنشر تطبيق React يدويًا gh-pages . لم أفعل شيئا كهذا. لقد عملت على المستوى master وعندما حان وقت النشر ، قمت بتشغيل npm run deploy الذي أطلق برنامج نصي ودفع الإنشاء إلى gh-pages . يرجى الاطلاع على الفرع master من المستودع الخاص بي لمعرفة كيفية عمله.

الوجبات الجاهزة

الايجابيات:

  • النشر الفوري
  • تعاون سهل
  • بيئة استضافة آمنة

تحفظات:

  • لا يمكن الوصول إلى رؤوس HTTP
  • سهولة تنزيل نسخة من الموقع
  • مطلوب معرفة GitHub
  • يعتمد على بائعي التكنولوجيا

الروابط:

  • ستجد الكود المصدري لتطبيقي في amingilani / price-check
  • هذا التطبيق متاح في pricecheck.gilani.me ويجب أن يكون متاحًا إلى أجل غير مسمى.