مقدمة: لماذا Go مثالي لـ VPS، وماذا سنفعل
Go (Golang) هي لغة مصممة لتطبيقات الخادم القابلة للتوسع وعالية الأداء. التجميع في ملف ثنائي ثابت واحد يجعلها مرشحًا مثاليًا للنشر على VPS (خادم خاص افتراضي). لا تحتاج إلى تثبيت مترجم أو تبعيات على الخادم - فقط انسخ الملف وقم بتشغيله.
في هذه المقالة، سنمر بالمسار الكامل: من كتابة خادم HTTP بسيط بلغة Go إلى تشغيله في بيئة الإنتاج على VPS باستخدام systemd للتشغيل التلقائي، وNginx كوكيل عكسي، وLet's Encrypt لـ HTTPS.
ستتعلم:
- تجميع تطبيق Go لنظام Linux
- تحميل الملف الثنائي إلى VPS عبر SSH
- إعداد systemd للتشغيل التلقائي
- تثبيت وتهيئة Nginx
- الحصول على شهادة SSL مجانية
الخطوة 1: إعداد تطبيق Go وتجميعه
إنشاء تطبيق ويب بسيط
على سبيل المثال، سنكتب خادم HTTP أدنى يستجيب بـ "Hello, VPS!". قم بإنشاء ملف main.go:
package main
import ( "fmt" "net/http")
func main() { http.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) { fmt.Fprintf(w, "Hello, VPS!") })
fmt.Println("Server started on :8080") http.ListenAndServe(":8080", nil)}التجميع لنظام Linux
إذا كنت تطور على Windows أو macOS، فستحتاج إلى تجميع الملف الثنائي للهندسة المستهدفة لـ VPS (عادةً linux/amd64). افتح الطرفية في مجلد المشروع ونفذ:
set GOOS=linuxset GOARCH=amd64go build -o myappبالنسبة لـ Linux/macOS استخدم export:
export GOOS=linuxexport GOARCH=amd64go build -o myappنتيجة لذلك، سيظهر ملف ثنائي myapp. تحقق من حجمه - سيكون صغيرًا (حوالي 7-10 ميجابايت)، لأن Go يقوم بالتجميع بشكل ثابت.
الخطوة 2: التحميل إلى VPS وإعداد systemd
الاتصال بالخادم وتحميل الملف
اتصل بـ VPS الخاص بك عبر SSH:
ssh root@your-server-ipقم بإنشاء دليل للتطبيق:
mkdir -p /opt/myappcd /opt/myappعلى جهازك المحلي، قم بتحميل الملف الثنائي عبر SCP (نفذ في طرفية منفصلة):
scp myapp root@your-server-ip:/opt/myapp/عد إلى الخادم وامنح أذونات التنفيذ:
chmod +x /opt/myapp/myappإنشاء خدمة systemd
للتأكد من تشغيل التطبيق تلقائيًا عند بدء تشغيل النظام وإعادة تشغيله عند حدوث أعطال، سننشئ وحدة systemd. قم بإنشاء ملف:
nano /etc/systemd/system/myapp.serviceألصق المحتوى التالي:
[Unit]Description=My Go ApplicationAfter=network.target
[Service]Type=simpleUser=www-dataGroup=www-dataWorkingDirectory=/opt/myappExecStart=/opt/myapp/myappRestart=on-failureRestartSec=5
[Install]WantedBy=multi-user.targetشرح المعاملات:
UserوGroup— المستخدم الذي سيتم تشغيل التطبيق من خلاله (يوصى بعدم استخدام root).Restart=on-failure— إعادة التشغيل التلقائي عند التعطل.RestartSec=5— فترة الانتظار قبل إعادة التشغيل.
الآن نقوم بتفعيل الخدمة وتشغيلها:
systemctl daemon-reloadsystemctl enable myappsystemctl start myappsystemctl status myappإذا تم كل شيء بشكل صحيح، سترى الحالة active (running). تحقق من أن التطبيق يستجيب محليًا:
curl http://localhost:8080الخطوة 3: إعداد Nginx كوكيل عكسي
الوصول المباشر إلى التطبيق عبر المنفذ 8