مقدمة: لماذا Go و VPS هما الثنائي المثالي لمشروعك
\n\nGo (Golang) هي لغة مترجمة، صُممت للأداء والبساطة. ميزتها الرئيسية عند النشر هي الترجمة الثابتة. لا تحتاج إلى تثبيت مترجم أو آلة افتراضية على الخادم. كل ما عليك فعله هو تحميل ملف ثنائي واحد وتشغيله. وهذا يجعل نشر تطبيق Go على VPS سريعًا وموثوقًا بشكل لا يصدق.
\n\nفي هذا الدليل، سنمر بالمسار الكامل: من كتابة خادم HTTP بسيط بلغة Go إلى تشغيله على خادم VPS حقيقي يعمل بنظام Ubuntu 22.04. سنقوم بإعداد systemd للتشغيل التلقائي، و Nginx كوكيل عكسي، و Let's Encrypt لـ HTTPS. جميع أمثلة الأكواد جاهزة للاستخدام.
\n\n1. إعداد VPS وكتابة تطبيق Go
\n\n1.1. الإعداد الأولي للخادم
\n\nبعد شراء VPS (مثل DigitalOcean أو Timeweb أو Hetzner)، اتصل عبر SSH:
\n\nssh root@عنوان_IP_الخاص_بك\n\nقم بإعداد الأمان الأساسي:
\n\napt update && apt upgrade -y\nadduser deployer\nusermod -aG sudo deployer\n# قم بتعطيل تسجيل الدخول كجذر في /etc/ssh/sshd_config\n# PermitRootLogin no\nsystemctl restart sshd\n\nتأكد من أن المنفذين 80 و 443 مفتوحان في جدار الحماية (UFW):
\n\nufw allow 22\nufw allow 80\nufw allow 443\nufw enable\n\n1.2. تطبيق Go بسيط للنشر
\n\nأنشئ ملفًا باسم main.go على جهازك المحلي:
package main\n\nimport (\n\t"fmt"\n\t"log"\n\t"net/http"\n\t"os"\n)\n\nfunc main() {\n\tport := os.Getenv("PORT")\n\tif port == "" {\n\t\tport = "8080"\n\t}\n\n\thttp.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) {\n\t\tfmt.Fprintf(w, "مرحبًا من Go! الخادم يعمل على المنفذ %s", port)\n\t})\n\n\thttp.HandleFunc("/health", func(w http.ResponseWriter, r *http.Request) {\n\t\tw.WriteHeader(http.StatusOK)\n\t\tw.Write([]byte("OK"))\n\t})\n\n\tlog.Printf("بدء تشغيل الخادم على :%s", port)\n\tlog.Fatal(http.ListenAndServe(":"+port, nil))\n}\n\nاختبره محليًا:
\n\ngo run main.go\n\nافتح المتصفح على العنوان http://localhost:8080. إذا رأيت رسالة الترحيب، فكل شيء يعمل.
2. بناء الملف الثنائي وتحميله إلى الخادم
\n\n2.1. الترجمة المتقاطعة لنظام Linux
\n\nعلى جهازك المحلي (حتى لو كان يعمل بنظام Windows أو macOS)، نفذ الأمر التالي:
\n\nGOOS=linux GOARCH=amd64 go build -o myapp main.go\n\nالعلامة -o myapp تحدد اسم الملف الناتج. متغيرات البيئة GOOS و GOARCH تحدد البنية المستهدفة (Linux 64 بت).
بعد البناء، سيكون لديك ملف ثنائي باسم myapp بحجم يتراوح بين 10 و 15 ميجابايت.
2.2. التحميل إلى VPS
\n\nاستخدم scp لنسخ الملف:
scp myapp deployer@عنوان_IP_الخاص_بك:/home/deployer/myapp\n\nأو إذا كنت تستخدم rsync:
\n\nrsync -avz myapp deployer@عنوان_IP_الخاص_بك:/home/deployer/myapp\n\nعلى الخادم، انقل الملف الثنائي إلى دليل النظام واجعله قابلاً للتنفيذ:
\n\nsudo mv /home/deployer/myapp /usr/local/bin/myapp\nsudo chmod +x /usr/local/bin/myapp\n\n3. إعداد systemd والتشغيل التلقائي
\n\n3.1. إنشاء ملف الخدمة
\n\nسيدير systemd تطبيقنا: تشغيله عند بدء تشغيل النظام، وإعادة تشغيله عند تعطله، وجمع السجلات.
\n\nأنشئ ملفًا باسم /etc/systemd/system/myapp.service:
sudo nano /etc/systemd/system/myapp.service\n\nألصق التكوين التالي:
\n\n[Unit]\nDescription=خادم تطبيق Go\nAfter=network.target\n\n[Service]\nType=simple\nUser=deployer\nGroup=deployer\nWorkingDirectory=/usr/local/bin\nExecStart=/usr/local/bin/myapp\nRestart=always\nRestartSec=5\nEnvironment=PORT=8080\nEnvironment=GIN_MO