مقدمة: لماذا نشر تطبيق Go على VPS بسيط وفعال
تشتهر لغة Go (Golang) بأدائها العالي وبساطتها. واحدة من المزايا الرئيسية للغة هي التجميع في ملف ثنائي ثابت واحد لا يتطلب تثبيت بيئات تشغيل إضافية على الخادم. وهذا يجعل نشر تطبيق Go على VPS سريعًا وموثوقًا بشكل لا يصدق. في هذه المقالة، سنشرح دورة النشر الكاملة: من إعداد الخادم إلى تكوين الـ reverse proxy و HTTPS. ستحصل على قائمة مهام جاهزة يمكن استخدامها لأي مشروع Go.
1. إعداد VPS وتثبيت البرامج الضرورية
قبل تحميل الكود، تحتاج إلى تجهيز الخادم. من المفترض أن لديك VPS مع Ubuntu 22.04 أو 24.04. اتصل عبر SSH وقم بتحديث النظام.
sudo apt update && sudo apt upgrade -yتثبيت Go على الخادم
على الرغم من أن Go يتم تجميعه في ملف ثنائي، إلا أن الخادم قد يحتاج إلى مترجم للبناء. سنقوم بتثبيت أحدث إصدار:
wget https://go.dev/dl/go1.22.5.linux-amd64.tar.gzsudo tar -C /usr/local -xzf go1.22.5.linux-amd64.tar.gzexport PATH=$PATH:/usr/local/go/binecho 'export PATH=$PATH:/usr/local/go/bin' >> ~/.profileتحقق من التثبيت: go version.
تثبيت Git و Nginx
ستحتاج إلى Git لاستنساخ المستودع، و Nginx للـ reverse proxy والملفات الثابتة.
sudo apt install git nginx -y2. بناء وتشغيل تطبيق Go
سنشرح العملية باستخدام مثال خادم HTTP بسيط. قم بإنشاء ملف main.go:
package main
import (\t"fmt"\t"net/http")
func handler(w http.ResponseWriter, r *http.Request) {\tfmt.Fprintf(w, "Hello from Go on VPS!")}
func main() {\thttp.HandleFunc("/", handler)\tfmt.Println("Server started on :8080")\thttp.ListenAndServe(":8080", nil)}قم ببناء الملف الثنائي لنظام Linux (حتى لو كنت تعمل على Windows/Mac):
GOOS=linux GOARCH=amd64 go build -o myapp main.goالآن قم بتحميل الملف الثنائي إلى الخادم. استخدم SCP أو Rsync:
scp myapp user@your-server-ip:~/على الخادم، اجعل الملف قابلاً للتنفيذ وقم بتشغيله:
chmod +x ~/myapp./myapp &تحقق من العمل: curl http://localhost:8080. إذا رأيت "Hello from Go on VPS!" — فكل شيء يعمل.
3. إعداد systemd للتشغيل التلقائي
التشغيل اليدوي ليس ممارسة جيدة. استخدم systemd لضمان تشغيل التطبيق عند بدء تشغيل النظام وإعادة تشغيله في حالة حدوث أعطال.
قم بإنشاء ملف الخدمة:
sudo nano /etc/systemd/system/myapp.serviceأضف التكوين:
[Unit]Description=Go Application ServiceAfter=network.target
[Service]Type=simpleUser=www-dataWorkingDirectory=/home/userExecStart=/home/user/myappRestart=alwaysRestartSec=5
[Install]WantedBy=multi-user.targetاستبدل /home/user بمسارك. قم بتفعيل الخدمة وتشغيلها:
sudo systemctl daemon-reloadsudo systemctl enable myappsudo systemctl start myappsudo systemctl status myappالآن سيعمل تطبيق Go الخاص بك كخدمة خلفية (daemon).
4. إعداد Nginx كـ reverse proxy و HTTPS
لجعل التطبيق متاحًا عبر النطاق ومن خلال المنفذ 443، سنقوم بإعداد Nginx.
تكوين reverse proxy
قم بإزالة التكوين الافتراضي وأنشئ التكوين الخاص بك:
sudo rm /etc/nginx/sites-enabled/defaultsudo nano /etc/nginx/sites-available/myappأضف:
server { listen 80; server_name yourdomain.com www.yourdomain.com;
location / { proxy_pass http://127.0.0.1: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_h