مقدمة: لماذا نشر تطبيق Go على VPS بسيط وموثوق
Go (Golang) هي واحدة من أكثر اللغات فعالية لبناء تطبيقات الخادم. ميزتها الرئيسية هي الترجمة إلى ملف ثنائي ثابت واحد لا يتطلب تثبيت مترجم أو آلة افتراضية على الخادم. هذا يجعل نشر تطبيق Go على VPS (خادم خاص افتراضي) بسيطًا وسريعًا بشكل لا يصدق مقارنة بـ Python أو Node.js أو Java.
في هذه المقالة، سنقوم بنشر تطبيق Go على VPS خطوة بخطوة: من الإعداد الأولي للخادم إلى التشغيل عبر systemd والنشر عبر Nginx مع HTTPS. ستتعلم كيفية تقليل المخاطر وضمان تشغيل خدمتك بشكل مستقر 24/7.
1. إعداد VPS وتثبيت البرامج اللازمة
قبل البدء في النشر، تأكد من أن لديك إمكانية الوصول إلى VPS (مثل Ubuntu 22.04 LTS) عبر SSH. سنستخدم مجموعة أساسية من الأدوات.
1.1. الإعداد الأولي للخادم
اتصل بالخادم وقم بتحديث الحزم:
ssh root@your-server-ipapt update && apt upgrade -yأنشئ مستخدمًا منفصلاً للتطبيق (لا تعمل كـ root):
adduser deployerusermod -aG sudo deployersu - deployer1.2. تثبيت Go (إذا كنت بحاجة للترجمة على الخادم)
على الرغم من أن الملف الثنائي يُجمّع عادةً محليًا، إلا أنه في بعض الأحيان يكون من المناسب الترجمة مباشرة على VPS. قم بتثبيت أحدث إصدار من Go:
wget https://go.dev/dl/go1.22.2.linux-amd64.tar.gzsudo tar -C /usr/local -xzf go1.22.2.linux-amd64.tar.gzecho 'export PATH=$PATH:/usr/local/go/bin' >> ~/.bashrcsource ~/.bashrcgo version1.3. تثبيت Git و Nginx
ستحتاج إلى Git لاستنساخ المستودع، و Nginx كوكيل عكسي ولـ SSL:
sudo apt install git nginx -y2. بناء تطبيق Go والتحضير للنشر
2.1. مثال على تطبيق Go بسيط
لنقم بإنشاء خادم HTTP بسيط بلغة Go. يمكنك استخدام مشروعك الخاص، ولكن للتوضيح، هذا الكود (main.go) مناسب:
package main
import ( "fmt" "net/http" "os")
func main() { port := os.Getenv("PORT") if port == "" { port = "8080" }
http.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) { fmt.Fprintf(w, "Hello from Go! Server time: %s", time.Now().Format(time.RFC1123)) })
fmt.Printf("Server starting on port %s", port) http.ListenAndServe(":"+port, nil)}2.2. ترجمة الملف الثنائي لنظام Linux
على جهازك المحلي (أو على الخادم)، قم ببناء الملف الثنائي لمعمارية VPS الهدف (عادةً amd64):
GOOS=linux GOARCH=amd64 go build -o myapp main.goتحقق من أن الملف الثنائي ثابت ولا يتطلب مكتبات:
ldd myapp # يجب أن يطبع "not a dynamic executable"2.3. الرفع إلى الخادم
انسخ الملف الثنائي إلى VPS عبر SCP:
scp myapp deployer@your-server-ip:/home/deployer/على الخادم، انقله إلى دليل مناسب وامنحه صلاحيات التنفيذ:
sudo mkdir -p /opt/myappsudo mv /home/deployer/myapp /opt/myapp/sudo chmod +x /opt/myapp/myapp3. إعداد systemd للتشغيل التلقائي والمراقبة
systemd هو مدير الخدمات القياسي في Linux. سيسمح لتطبيقك بالبدء عند تشغيل النظام وإعادة التشغيل تلقائيًا عند حدوث أعطال.
3.1. إنشاء ملف الوحدة
أنشئ ملفًا /etc/systemd/system/myapp.service:
sudo nano /etc/systemd/system/myapp.serviceألصق التكوين التالي:
[Unit]Description=My Go ApplicationAfter=network.target
[Service]Type=simpleUser=deployerGroup=deployerWorkingDirectory=/opt/myappExecStart=/opt/myapp/myappRestart=alwaysRestartSec=5Environment=PORT=80