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

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

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

ابدأ الدورة

مقدمة: لماذا C++ على VPS هو خيار عصري وفعال



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



في هذه المقالة، سنستعرض الدورة الكاملة: من شراء VPS وإعداد البيئة إلى تجميع مشروع C++ الخاص بك وتشغيله كخدمة إنتاجية. ستتعلم كيفية تجنب الأخطاء النموذجية وجعل عملية النشر مؤتمتة قدر الإمكان.



الخطوة 1: إعداد VPS وتثبيت الأدوات اللازمة



اختيار الخادم وإعداده الأولي

لتطبيق C++، ستحتاج إلى VPS يعمل بنظام Linux (Ubuntu 22.04 LTS هو الخيار الأمثل). المواصفات الدنيا: 1 vCPU، 1 جيجابايت RAM، و10 جيجابايت SSD. بعد شراء الخادم، اتصل به عبر SSH:

ssh root@ip_خادمك


قم بتحديث الحزم النظامية:

apt update && apt upgrade -y


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

لـ C++ سنحتاج إلى g++ (أو clang) و cmake:

apt install build-essential cmake git -y


تحقق من التثبيت:

g++ --versioncmake --version


إعداد Git وتحضير المستودع

إذا كان مشروعك مخزناً على GitHub/GitLab، قم باستنساخه على الخادم:

cd /optgit clone https://github.com/اسم-المستخدم-خاصتك/اسم-المستودع-خاصتك.gitcd اسم-المستودع-خاصتك


الخطوة 2: تجميع تطبيق C++ للإنتاج



مثال بسيط لخادم C++ (للاختبار)

لننشئ خادم HTTP بسيطاً بلغة C++ باستخدام المقابس (sockets). هذا الكود سيستمع على المنفذ 8080 وسيرد بـ "Hello from C++!".

// server.cpp#include <iostream>#include <sys/socket.h>#include <netinet/in.h>#include <unistd.h>#include <cstring>

int main() { int server_fd, new_socket; struct sockaddr_in address; int opt = 1; int addrlen = sizeof(address); char buffer[1024] = {0}; const char *hello = "HTTP/1.1 200 OKContent-Length: 20

Hello from C++!";

// إنشاء المقبس if ((server_fd = socket(AF_INET, SOCK_STREAM, 0)) == 0) { perror("socket failed"); exit(EXIT_FAILURE); }

// الربط بالمنفذ 8080 if (setsockopt(server_fd, SOL_SOCKET, SO_REUSEADDR | SO_REUSEPORT, &opt, sizeof(opt))) { perror("setsockopt"); exit(EXIT_FAILURE); } address.sin_family = AF_INET; address.sin_addr.s_addr = INADDR_ANY; address.sin_port = htons(8080);

if (bind(server_fd, (struct sockaddr *)&address, sizeof(address)) < 0) { perror("bind failed"); exit(EXIT_FAILURE); }

if (listen(server_fd, 3) < 0) { perror("listen"); exit(EXIT_FAILURE); }

std::cout << "Server listening on port 8080..." << std::endl;

while (true) { if ((new_socket = accept(server_fd, (struct sockaddr *)&address, (socklen_t*)&addrlen)) < 0) { perror("accept"); exit(EXIT_FAILURE); } read(new_socket, buffer, 1024); send(new_socket, hello, strlen(hello), 0); close(new_socket); } return 0;}


التجميع مع تحسينات الأداء

للبناء للإنتاج، استخدم أعلام التحسين:

g++ -O3 -march=native -flto -static -o server server.cpp
  • -O3 — أقصى تحسين للسرعة.
  • -march=native — تحسين لهندسة المعالج الخاص بك.
  • -flto<

المدونات

توصيات الكتب