كيفية نشر تطبيق ويب بلغة Go باستخدام خادم Nginx على أوبنتو 18.04
إن نشر تطبيق ويب بلغة Go (المعروفة أيضًا بـ Golang) باستخدام خادم Nginx على أوبنتو 18.04 هو عملية متعددة الخطوات تتطلب منك إتمام بعض الإجراءات التقنية. تعد لغة Go واحدة من اللغات الأكثر سرعة في تنفيذ التطبيقات، فهي تشتهر بالأداء العالي والقوة في التعامل مع التطبيقات المتوازية والموزعة، مما يجعلها خيارًا مثاليًا لتطوير تطبيقات ويب ذات أداء عالي. في هذا المقال، سوف نتعرف على كيفية نشر تطبيق Go على خادم ويب باستخدام Nginx باعتباره خادمًا عكسيًا (reverse proxy) على نظام أوبنتو 18.04.
الخطوة 1: تثبيت متطلبات النظام
قبل البدء في نشر تطبيقك باستخدام Go وNginx، يجب أولًا تثبيت جميع المتطلبات الأساسية على الخادم الخاص بك.
1.1 تحديث النظام
ابدأ بتحديث حزم النظام لديك لضمان أنك تستخدم أحدث الإصدارات المتاحة:
bashsudo apt update sudo apt upgrade -y
1.2 تثبيت Go
إذا لم يكن لديك Go مثبتًا بالفعل، يمكنك تثبيته على أوبنتو 18.04 باستخدام الأوامر التالية:
bashsudo apt install golang-go -y
يمكنك التحقق من النسخة المثبتة باستخدام الأمر:
bashgo version
1.3 تثبيت Nginx
من أجل تشغيل تطبيق Go على خادم ويب باستخدام Nginx، ستحتاج إلى تثبيت خادم Nginx. للقيام بذلك، استخدم الأمر التالي:
bashsudo apt install nginx -y
بعد التثبيت، يمكنك التأكد من أن Nginx يعمل عن طريق زيارة العنوان المحلي للخادم (http://localhost) أو من خلال متصفح الويب.
bashsudo systemctl start nginx
sudo systemctl enable nginx
الخطوة 2: إعداد تطبيق Go
الآن بعد أن قمت بتثبيت جميع الأدوات الأساسية على الخادم، حان الوقت لإعداد تطبيق Go الخاص بك.
2.1 إنشاء تطبيق Go
يمكنك كتابة تطبيق Go بسيط للتأكد من أن كل شيء يعمل بشكل صحيح. افترض أن التطبيق الخاص بك عبارة عن خادم HTTP يعرض “Hello, World!” عند زيارة المتصفح.
-
أولًا، أنشئ مجلدًا لتخزين مشروع Go:
bashmkdir ~/go-web-app
cd ~/go-web-app
-
ثم أنشئ ملفًا باسم
main.goداخل المجلد:
gopackage main
import (
"fmt"
"net/http"
)
func handler(w http.ResponseWriter, r *http.Request) {
fmt.Fprintf(w, "Hello, World!")
}
func main() {
http.HandleFunc("/", handler)
http.ListenAndServe(":8080", nil)
}
2.2 بناء وتشغيل التطبيق
لبناء وتشغيل تطبيق Go، يجب أولًا تأكيد أن Go مثبت بشكل صحيح. ثم يمكنك بناء تطبيقك باستخدام الأمر:
bashgo run main.go
سيتم تشغيل الخادم على المنفذ 8080 بشكل افتراضي. الآن يمكنك اختبار التطبيق من خلال زيارة:
bashhttp://localhost:8080
ستظهر رسالة “Hello, World!” في متصفحك إذا كان كل شيء يعمل بشكل صحيح.
الخطوة 3: تكوين Nginx كخادم عكسي
في هذه الخطوة، سنقوم بتكوين Nginx ليكون بمثابة خادم عكسي أمام تطبيق Go. يتيح لك ذلك توجيه الطلبات إلى تطبيق Go عبر المنفذ 8080.
3.1 إنشاء ملف تكوين لـ Nginx
ابدأ بإنشاء ملف تكوين جديد في /etc/nginx/sites-available/ ليكون مخصصًا لموقعك:
bashsudo nano /etc/nginx/sites-available/go-web-app
ثم أضف التكوين التالي:
nginxserver {
listen 80;
server_name your_domain_or_IP; # استبدل هذا بعنوان IP الخاص بك أو اسم النطاق
location / {
proxy_pass http://127.0.0.1:8080; # توجيه الطلبات إلى تطبيق Go على المنفذ 8080
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
}
}
3.2 تفعيل الموقع في Nginx
الآن، يجب ربط ملف التكوين الجديد بمجلد sites-enabled لتفعيل إعدادات Nginx:
bashsudo ln -s /etc/nginx/sites-available/go-web-app /etc/nginx/sites-enabled/
3.3 التحقق من تكوين Nginx
بعد إضافة تكوين الموقع، تحقق من صحة التكوين باستخدام الأمر التالي:
bashsudo nginx -t
إذا تم تأكيد أن التكوين صحيح، يمكنك إعادة تشغيل Nginx لتحميل التغييرات:
bashsudo systemctl restart nginx
الخطوة 4: إعداد تطبيق Go للعمل في الخلفية
لتشغيل تطبيق Go في الخلفية حتى بعد إغلاق الجلسة، يمكنك استخدام أداة screen أو أداة systemd.
4.1 استخدام screen
لتشغيل تطبيق Go في الخلفية باستخدام screen، قم بما يلي:
-
افتح جلسة
screenجديدة:
bashscreen -S go-web-app
-
ثم قم بتشغيل تطبيق Go:
bashgo run main.go
-
للعودة إلى الجلسة السابقة، اضغط
Ctrl + AثمDلفصل الجلسة دون إيقاف التطبيق.
4.2 استخدام systemd لإنشاء خدمة
بدلاً من استخدام screen، يمكننا إعداد systemd لتشغيل تطبيق Go كخدمة تلقائيًا بعد إعادة تشغيل الخادم.
-
أولًا، أنشئ ملف وحدة جديد لـ
systemdفي المجلد/etc/systemd/system/:
bashsudo nano /etc/systemd/system/go-web-app.service
-
ثم أضف التكوين التالي:
ini[Unit]
Description=Go Web App
After=network.target
[Service]
ExecStart=/usr/local/go/bin/go run /home/your_username/go-web-app/main.go
WorkingDirectory=/home/your_username/go-web-app
User=your_username
Group=your_group
Restart=always
[Install]
WantedBy=multi-user.target
-
بعد ذلك، قم بتمكين الخدمة لتبدأ تلقائيًا عند بدء التشغيل:
bashsudo systemctl enable go-web-app.service
-
يمكنك بدء الخدمة الآن باستخدام:
bashsudo systemctl start go-web-app.service
-
للتحقق من حالة الخدمة:
bashsudo systemctl status go-web-app.service
الخطوة 5: تأمين التطبيق باستخدام HTTPS (اختياري)
من الأفضل دائمًا تأمين تطبيقك باستخدام HTTPS، خاصة إذا كان التطبيق سيُستخدم في بيئات إنتاج. لتحقيق ذلك، يمكنك استخدام Let’s Encrypt للحصول على شهادة SSL مجانية.
5.1 تثبيت Certbot
أولًا، قم بتثبيت Certbot على الخادم الخاص بك:
bashsudo apt install certbot python3-certbot-nginx -y
5.2 الحصول على شهادة SSL
بعد تثبيت Certbot، يمكنك استخدامه للحصول على شهادة SSL وتكوين Nginx تلقائيًا لاستخدامها:
bashsudo certbot --nginx
اتبع التعليمات التي يقدمها Certbot لتأكيد ملكية المجال، وبعد الانتهاء من ذلك، سيقوم Certbot بتحديث تكوين Nginx لإعادة توجيه جميع الطلبات إلى HTTPS.
الخطوة 6: التحقق من إعدادات التطبيق
بعد إتمام كل الخطوات السابقة، يمكنك فتح متصفحك وزيارة الموقع الخاص بك باستخدام عنوان IP الخاص بالخادم أو اسم النطاق (إن كان لديك واحد). يجب أن تكون قادرًا على رؤية “Hello, World!” من تطبيق Go عبر Nginx باستخدام HTTPS إذا كانت كل الإعدادات صحيحة.
الختام
بذلك تكون قد قمت بنشر تطبيق ويب بلغة Go باستخدام Nginx على أوبنتو 18.04. لقد غطينا جميع الخطوات الضرورية بدءًا من تثبيت الحزم اللازمة، كتابة التطبيق، تكوين Nginx كخادم عكسي، وحتى استخدام systemd لتشغيل التطبيق في الخلفية. يمكنك الآن تعزيز أداء تطبيقك وتوسيع نطاقه بشكل فعال باستخدام الأدوات التي قمنا بتغطيتها في هذا المقال.

