نشر تطبيق Go على VPS: دليل خطوة بخطوة للمطورين

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

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

ابدأ الدورة

مقدمة: لماذا نشر تطبيق 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 - deployer


1.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 version


1.3. تثبيت Git و Nginx

ستحتاج إلى Git لاستنساخ المستودع، و Nginx كوكيل عكسي ولـ SSL:

sudo apt install git nginx -y


2. بناء تطبيق 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/myapp


3. إعداد 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

المدونات

توصيات الكتب