دليل النشر

نشر تطبيق Go (Gin) على خادم VPS

انشر على VPS Cloud →

التطوير7 دقيقة قراءة

نشر تطبيق Go (Gin) على خادم VPS

تُصرّف لغة Go إلى ملفّ ثنائي ساكن واحد دون تبعيات: إنّها اللغة المثالية للاستضافة الذاتية. تتّسع واجهة Gin في بضعة ميجابايت من الذاكرة وتبدأ فورًا. إليك كيفية نقلها إلى بيئة الإنتاج على خادم VPS، من الملفّ الثنائي إلى شهادة SSL.

لماذا الاستضافة الذاتية لواجهة Go على خادم VPS

على خلاف Java أو Node، يُصرَّف تطبيق Go (مع إطار العمل Gin) إلى ملفّ ثنائي ساكن واحد لا يحتاج إلى مفسّر ولا إلى بيئة تشغيل ولا إلى مكتبة مشتركة. يمكنك حرفيًا وضع الملفّ الثنائي على خادم VPS وتشغيله. تغيّر هذه الخفّة كلّ شيء بالنسبة للاستضافة الذاتية: تعمل واجهة Gin في 15 إلى 30 ميجابايت من الذاكرة، وتتحمّل آلاف الطلبات في الثانية على نواة واحدة، وتبدأ في بضع مللي ثوانٍ. على خادم VPS، تستغلّ هذه الكفاءة إلى أقصى حدّ: يكفي خادم من الفئة الأساسية لخدمة حمل تتطلّبه اللغات المفسَّرة على آلة أكبر بكثير. كما تتجنّب تعقيد صور Docker الضخمة: تكفي صورة scratch بحجم 10 ميجابايت.

الفوائد الملموسة

  • ملفّ ثنائي ساكن واحد: لا بيئة تشغيل لتثبيتها، والنشر بمجرّد نسخ ملفّ
  • بصمة ذاكرية ضئيلة (15-30 ميجابايت) تتيح إغراق خادم VPS صغير بالطلبات
  • صورة Docker باسم scratch أو distroless بحجم 10-15 ميجابايت: عمليات بناء وسحب شبه فورية
  • بدء التشغيل في مللي ثوانٍ: عمليات إعادة نشر وإعادة تشغيل دون انقطاع ملحوظ
  • تزامن أصلي عبر goroutines: معالج افتراضي واحد يدير آلاف الاتصالات المتزامنة
  • سطح هجوم مُقلّص: لا مفسّر ولا حزم نظام لترقيعها

المتطلّبات العتادية والبرمجية

هنا تتألّق Go: تتّسع واجهة Gin دون قاعدة بيانات على خادم VPS بمعالج افتراضي واحد (1 vCPU) و1 جيجابايت من الذاكرة، وتبقى مرتاحة. ومع PostgreSQL في الموقع نفسه، استهدف 2 جيجابايت للراحة. لست بحاجة حتى إلى Go على الخادم إذا صرّفت في CI أو بالتصريف المتقاطع محليًا (GOOS=linux GOARCH=amd64 go build). ثبّت Docker إذا حوسبت في حاوية، أو لا شيء على الإطلاق إذا شغّلت الملفّ الثنائي مباشرةً تحت systemd. وجّه نطاق api.mydomain.com نحو عنوان IP الخاص بخادم VPS عبر سجلّ A. تكفي 5 جيجابايت من القرص بسهولة.

النشر خطوة بخطوة

01

التصريف المتقاطع للملفّ الثنائي من أجل Linux

من جهازك، شغّل CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build -o app .. تضمن الراية CGO_ENABLED=0 ملفًّا ثنائيًا ساكنًا بنسبة 100%، وهو أمر لا غنى عنه لصورة scratch. تحصل على ملفّ تنفيذي باسم app جاهز للعمل على أيّ نظام Linux.

02

بناء صورة Docker مصغّرة

اكتب ملفّ Dockerfile متعدّد المراحل: مرحلة golang:1.22-alpine للتصريف، ثمّ FROM scratch التي تنسخ الملفّ الثنائي وشهادات CA فقط (COPY --from=builder /etc/ssl/certs ...). يبلغ وزن الصورة النهائية نحو عشرة ميجابايت. اكشف المنفذ 8080.

03

إعداد Gin لبيئة الإنتاج

حوّل Gin إلى وضع الإصدار (release) باستخدام gin.SetMode(gin.ReleaseMode) أو المتغيّر GIN_MODE=release لتعطيل سجلّات التنقيح المطوّلة. اقرأ المنفذ والأسرار من البيئة (os.Getenv)، ولا تُضمّنها أبدًا في الشيفرة مباشرةً.

04

تشغيل الحاوية

ابدأ بـ docker run -d --restart unless-stopped -p 127.0.0.1:8080:8080 -e GIN_MODE=release monapp:latest. بالربط على 127.0.0.1، تكشف Gin للوكيل العكسي المحلّي فقط، وليس للإنترنت مباشرةً.

05

وضع Nginx أو Caddy في المقدّمة

اضبط وكيلًا عكسيًا نحو http://127.0.0.1:8080. يُعدّ Caddy مناسبًا بشكل خاص هنا: بتوجيه بسيط reverse_proxy localhost:8080، يوفّر شهادة HTTPS تلقائيًا دون Certbot.

06

التأمين باستخدام TLS

مع Caddy، يكون HTTPS تلقائيًا بمجرّد توجيه النطاق نحو خادم VPS. ومع Nginx، شغّل certbot --nginx -d api.mydomain.com. ثمّ تحقّق من سلسلة TLS باستخدام curl -I https://api.mydomain.com.

فعّل تنميط (profiling) pprof الخاص بـ Go خلف نقطة نهاية محمية: import _ "net/http/pprof" مكشوفة على منفذ داخلي لا يمكن الوصول إليه إلّا عبر نفق SSH. تحصل على مخطّطات لهب (flame graphs) للمعالج والذاكرة في بيئة الإنتاج الحقيقية دون حمل زائد يُذكر. فكّر أيضًا في التصريف باستخدام -ldflags="-s -w" لتقليص حجم الملفّ الثنائي بنسبة 30% عبر إزالة جداول التنقيح.

شغّل واجهة Go الخاصة بك على خادم VPS فعّال

يوفّر خادم VPS Cloud من ServOrbit أنوية مخصّصة وشبكة عالية الأداء: بالضبط ما يلزم للاستفادة من خفّة ملفّ Go الثنائي وخدمة حركة مرور كثيفة على موارد متواضعة.

بحاجة إلى مساعدة؟

تصفّح مركز المساعدة والأسئلة الشائعة، أو راسل فريقنا — الدعم بـ العربية والفرنسية والإنجليزية.