نشر تطبيق Go على VPS: دليل خطوة بخطوة من الألف إلى الياء

مدرب بايثون أونلاين للمبتدئين

تعلم Python بسهولة دون إرهاق نظري. حل مهام عملية مع التحقق التلقائي واكتب الكود مباشرة في المتصفح.

ابدأ الدورة

مقدمة: لماذا Go و VPS هما الثنائي المثالي لمشروعك

\n\n

Go (Golang) هي لغة مترجمة، صُممت للأداء والبساطة. ميزتها الرئيسية عند النشر هي الترجمة الثابتة. لا تحتاج إلى تثبيت مترجم أو آلة افتراضية على الخادم. كل ما عليك فعله هو تحميل ملف ثنائي واحد وتشغيله. وهذا يجعل نشر تطبيق Go على VPS سريعًا وموثوقًا بشكل لا يصدق.

\n\n

في هذا الدليل، سنمر بالمسار الكامل: من كتابة خادم HTTP بسيط بلغة Go إلى تشغيله على خادم VPS حقيقي يعمل بنظام Ubuntu 22.04. سنقوم بإعداد systemd للتشغيل التلقائي، و Nginx كوكيل عكسي، و Let's Encrypt لـ HTTPS. جميع أمثلة الأكواد جاهزة للاستخدام.

\n\n

1. إعداد VPS وكتابة تطبيق Go

\n\n

1.1. الإعداد الأولي للخادم

\n\n

بعد شراء VPS (مثل DigitalOcean أو Timeweb أو Hetzner)، اتصل عبر SSH:

\n\n
ssh root@عنوان_IP_الخاص_بك
\n\n

قم بإعداد الأمان الأساسي:

\n\n
apt 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\n
ufw allow 22\nufw allow 80\nufw allow 443\nufw enable
\n\n

1.2. تطبيق Go بسيط للنشر

\n\n

أنشئ ملفًا باسم main.go على جهازك المحلي:

\n\n
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\n
go run main.go
\n\n

افتح المتصفح على العنوان http://localhost:8080. إذا رأيت رسالة الترحيب، فكل شيء يعمل.

\n\n

2. بناء الملف الثنائي وتحميله إلى الخادم

\n\n

2.1. الترجمة المتقاطعة لنظام Linux

\n\n

على جهازك المحلي (حتى لو كان يعمل بنظام Windows أو macOS)، نفذ الأمر التالي:

\n\n
GOOS=linux GOARCH=amd64 go build -o myapp main.go
\n\n

العلامة -o myapp تحدد اسم الملف الناتج. متغيرات البيئة GOOS و GOARCH تحدد البنية المستهدفة (Linux 64 بت).

\n\n

بعد البناء، سيكون لديك ملف ثنائي باسم myapp بحجم يتراوح بين 10 و 15 ميجابايت.

\n\n

2.2. التحميل إلى VPS

\n\n

استخدم scp لنسخ الملف:

\n\n
scp myapp deployer@عنوان_IP_الخاص_بك:/home/deployer/myapp
\n\n

أو إذا كنت تستخدم rsync:

\n\n
rsync -avz myapp deployer@عنوان_IP_الخاص_بك:/home/deployer/myapp
\n\n

على الخادم، انقل الملف الثنائي إلى دليل النظام واجعله قابلاً للتنفيذ:

\n\n
sudo mv /home/deployer/myapp /usr/local/bin/myapp\nsudo chmod +x /usr/local/bin/myapp
\n\n

3. إعداد systemd والتشغيل التلقائي

\n\n

3.1. إنشاء ملف الخدمة

\n\n

سيدير systemd تطبيقنا: تشغيله عند بدء تشغيل النظام، وإعادة تشغيله عند تعطله، وجمع السجلات.

\n\n

أنشئ ملفًا باسم /etc/systemd/system/myapp.service:

\n\n
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                

المدونات

توصيات الكتب