العودة إلى المدونة

نشر تطبيق ويب Go باستخدام Nginx على Ubuntu 22.04

نشر تطبيق ويب Go باستخدام Nginx على Ubuntu 22.04

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

في هذا الدليل، سنقوم بـإرشادك عبر خطوات نشر تطبيق ويب بسيط بلغة Go على Ubuntu 22.04 LTS. سنقوم أيضًا بتنفيذ وكيل عكسي Nginx للتعامل مع حمل حركة المرور.

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

لتنفيذ الخطوات الموضحة في هذا الدليل، ستحتاج إلى تكوين المكونات التالية مسبقًا:

إذا كان من المفترض أن تكون الخدمة سهلة الوصول عبر اسم مجال، فيجب أن يكون لديك FQDN يشير إلى الخادم. في هذه الحالة، يوصى بتأمين Nginx باستخدام SSL. يمكنك معرفة المزيد حول تأمين Nginx باستخدام Let’s Encrypt على Ubuntu من برنامجنا التعليمي.

الخطوة 1 – إنشاء تطبيق ويب بلغة Go

سنقوم ببناء تطبيق ويب بسيط بلغة Go يطبع “Hello World” على الشاشة عند الوصول إلى المجال. علاوة على ذلك، سيرحب التطبيق بالمستخدم عند الوصول إلى <domain>/greet/<username>.

ابدأ بإنشاء مشروع جديد تحت $GOPATH. أنشئ دليل المشروع:

Go Web Application Make Dir

تغيير الدليل الحالي:

Go Web Application Change Dir

ثم، ابدأ مشروعًا:

Go Web Application Init Project

بعد ذلك، قم بإنشاء main.go الذي سيكون بمثابة جذر تطبيق Go الخاص بنا. سيستضيف الكود المصدري لتطبيق الويب الخاص بنا:

افتح المشروع في VS Code:

الصق الكود التالي في الملف main.go:

Go Web Application Main Go

دعنا نلقي نظرة سريعة على برنامج Go الذي أنشأناه للتو:

  • المصطلح package main بمثابة نقطة الدخول إلى تطبيقنا. كما أنه يوجه مترجم Go لترجمة الملف كملف قابل للتنفيذ بدلاً من مكتبة مشتركة.
  • عبارة import تستورد جميع الوحدات الإضافية المطلوبة ليعمل البرنامج. هنا، قمنا باستيراد حزمتي fmt (لطباعة النصوص) و net/http (لتطبيقات خادم الويب).
  • باستخدام الدالة http.HandleFunc، قمنا بإنشاء مسارين:
    • المسار الأول / بمثابة المسار الرئيسي داخل func main.
    • المسار الثاني /greet/ يقبل معلمة URL (سلسلة نصية، في هذه الحالة). ثم يتم عرض السلسلة النصية مصحوبة برسالة الترحيب.
      • URL مسار يُستخدم لتخزين القيمة بعد /greet/. ثم يتم تمرير القيمة كـ name لمعلمة URL.
    • تقوم http.ListenAndServe ببدء تشغيل خادم الويب. هنا، يستمع إلى المنفذ 9990.

الآن بعد أن أصبح برنامجنا جاهزًا، قم بتجميع الملف إلى ملف قابل للتنفيذ:

سيقوم مترجم Go بإنشاء ملف قابل للتنفيذ بنفس اسم الملف. تحقق من المخرجات:

Go Web Application ls -lh

الخطوة 2 – تكوين ملف وحدة systemd للتشغيل في الخلفية

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

قم بإنشاء ملف systemd مخصص goweb.service تحت /lib/systemd/system:

أضف المقتطف التالي في ملف الوحدة:

go web service

هنا،

  • يشير المتغير ExecStart إلى نقطة الدخول للخدمة من خلال الملف القابل للتنفيذ الرئيسي الموجود في دليل مشروعنا ( $GOPATH/go-web). لاحظ أنه بدلاً من ذكر $GOPATH، قمنا بكتابة المسار الكامل للملف القابل للتنفيذ. ذلك لأن المتغير $GOPATH مرئي للمستخدم فقط.
  • يخبر المتغير Restart نظام systemd بما يجب فعله في حال توقف البرنامج عن العمل. القيمة always تخبر systemd بإعادة تشغيل البرنامج في كل مرة يتوقف فيها عن التنفيذ.
  • يخبر المتغير RestartSec نظام systemd بالانتظار لفترة زمنية محددة قبل محاولة إعادة تشغيل البرنامج. هنا، تم تعيين القيمة على 5s (5 ثوانٍ).
  • تحدد العبارة WantedBy=multi-user.target الحالة التي سيقوم فيها systemd بتمكين الخدمة.

احفظ الملف وأغلق المحرر. ابدأ الخدمة:

go web start

تحقق مما إذا كانت الخدمة تعمل بشكل صحيح:

go web status

كما توضح المخرجات، فإن التطبيق يعمل بشكل صحيح. نحن الآن جاهزون لاستخدام Nginx كوكيل عكسي.

الخطوة 3 – تكوين Nginx كوكيل عكسي

الآن، سنقوم بإنشاء كتلة خادم لـ Nginx ليعمل كوكيل عكسي. سيتم عرض تطبيق الويب على الإنترنت من خلال الوكيل العكسي (للحصول على أداء وأمان إضافيين).

قم بتغيير الدليل النشط الحالي إلى sites-available:

cd

الآن، قم بإنشاء ملف باسم النطاق الذي ترغب في عرض تطبيقك من خلاله. للتوضيح، سنستخدم example.com:

 

أدخل الكود التالي في ملف الكتلة:

example.com

هنا، نستخدم proxy_pass لخدمة تطبيق ويب Go على عنوان IP الخاص بالخادم (localhost) على المنفذ 9990.

لتمكين كتلة Nginx، قم بإنشاء رابط رمزي (يُعرف أيضًا باسم الرابط اللين) للملف إلى مجلد sites-enabled:

create sym

أعد تحميل تكوين Nginx لتطبيق التغييرات:

reload nginx

الخطوة 4 – التحقق

إذا سار كل شيء كما هو متوقع، فيجب أن يكون تطبيق الويب الآن متاحًا على localhost:9990 والنطاق الذي قمنا بتكوينه. افتح عنوان URL في متصفح الويب:

Hello World

كما هو متوقع، يقوم التطبيق بطباعة “Hello World” على الشاشة. هذه هي وظيفة المسار الأساسي. بعد ذلك، اختبر المسار الثاني عن طريق زيارة عنوان URL التالي:

Hello Cloud

يقوم التطبيق بإرجاع رسالة الترحيب البسيطة بنجاح مع الاسم من المعلمة المستلمة من عنوان URL.

ها قد انتهينا! لقد قمنا بنشر تطبيق ويب Go بنجاح على خادمنا المحلي!

أفكار أخيرة

في هذا الدليل، قمنا بشرح نشر تطبيق ويب Go بسيط بمساعدة مكتبات Go القياسية. كما قمنا بنشر وكيل عكسي باستخدام Nginx. في حين تم إجراء هذا العرض التوضيحي على خادم محلي، فبالنسبة للخادم العام، يوصى بشدة بـ تطبيق شهادة SSL للوصول الآمن إلى الإنترنت. لمزيد من برمجة Go، يمكنك الاطلاع على برنامجنا التعليمي حول بناء وتثبيت برامج Go.

حوسبة سعيدة!

author

Pranay Kapgate

المؤلف · CloudSigma

Preslav Dobrev هو مصمم إبداعي في CloudSigma، يركز على هوية أعمال متسقة باستخدام قنوات التسويق التقليدية والمبتكرة. هو بارع في دمج الرؤية الفنية مع التسويق الاستراتيجي لخلق سرد قصصي مؤثر للعلامة التجارية.

التعليقات

لا توجد تعليقات بعد. كن أول من يعلق.