كيفية نشر تطبيقات C++: VPS وDocker وCloud بدون ألم

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

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

ابدأ الدورة

لماذا نشر C++ ليس مخيفًا بل مربحًا؟

\n\n

عندما تسمع "نشر" و"C++" في جملة واحدة، يتخيل الكثيرون جحيمًا من ملفات makefile، والمكتبات المبنية خصيصًا لإصدار معين من Ubuntu، وخادم ينهار مع segfault عند أول طلب. لكن في الواقع، C++ الحديثة هي لغة مثالية لخدمات high-load، ويمكن نشرها بأناقة وسرعة. بدون طقوس غامضة. بدون "لماذا لا يحدث الربط؟". ببساطة، وبشكل موثوق، وباستخدام أفضل ممارسات DevOps.

\n\n

في هذه المقالة، سنستعرض ثلاث طرق رئيسية لنشر تطبيقات C++: VPS الكلاسيكي، الحاويات عبر Docker، وخط أنابيب سحابي كامل. ستتعلم كيفية بناء ملف ثنائي يعمل في أي مكان، وكيف لا تفقد الأداء في الحاوية، وكيفية أتمتة كل هذا عبر CI/CD. هيا بنا!

\n\n

VPS: الصديق القديم أفضل من الجديدين

\n\n

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

\n\n

الخطوة 1: بناء ملف ثنائي ثابت (Static Binary)

\n

المشكلة الرئيسية في نشر C++ هي التبعيات. قد لا يحتوي الخادم على الإصدار المطلوب من libstdc++ أو Boost. الحل هو البناء الثابت. فهو يجعل الملف الثنائي مكتفيًا ذاتيًا (لكن انتبه للحجم!).

\n\n
// مثال CMakeLists.txt للبناء الثابت\ncmake_minimum_required(VERSION 3.16)\nproject(MyAwesomeServer)\n\nset(CMAKE_CXX_STANDARD 20)\nset(CMAKE_EXE_LINKER_FLAGS "-static -static-libgcc -static-libstdc++")\n\nadd_executable(server main.cpp)\ntarget_link_libraries(server pthread)
\n\n

بعد البناء، تحصل على ملف واحد. انقله إلى الخادم عبر scp:

\n\n
scp build/server user@your-vps-ip:/home/user/server
\n\n

الخطوة 2: Systemd – أفضل صديق لك

\n

مجرد تشغيل الملف الثنائي عبر ./server فكرة سيئة. سيتوقف عند إغلاق SSH. استخدم systemd للتحويل إلى خدمة خلفية (daemon):

\n\n
// /etc/systemd/system/myapp.service\n[Unit]\nDescription=My C++ Server\nAfter=network.target\n\n[Service]\nExecStart=/home/user/server\nRestart=always\nUser=ubuntu\nGroup=ubuntu\nWorkingDirectory=/home/user\nLimitNOFILE=65536\n\n[Install]\nWantedBy=multi-user.target
\n\n

الآن سيعاد تشغيل تطبيقك تلقائيًا عند تعطله وسيبدأ مع النظام. هذا موثوق وبسيط.

\n\n

الخطوة 3: المراقبة والسجلات

\n

حتى أكثر كود C++ استقرارًا قد يتعطل. قم بإعداد مراقبة أساسية على الأقل:

\n\n
    \n
  • Prometheus + Node Exporter – لمقاييس النظام.
  • \n
  • journalctl – لعرض سجلات خدمتك: journalctl -u myapp.service -f.
  • \n
  • Grafana – للوحات معلومات جميلة.
  • \n
\n\n

Docker: حاويات C++ بدون ألم

\n\n

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

\n\n

البناء متعدد المراحل (Multi-stage build)

\n

هذا هو الحل. في المرحلة الأولى، نقوم بتثبيت المترجم وجميع التبعيات، وبناء المشروع. في المرحلة الثانية، نأخذ فقط الملف الثنائي النهائي ونضعه في صورة Alpine نظيفة (وزنها ~5 ميجابايت).

\n\n
// Dockerfile\nFROM gcc:13.2 AS builder\nWORKDIR /app\nCOPY . .\nRUN cmake -B build -DCMAKE_BUILD_TYPE=Release && \\\n    cmake --build build --target server\n\nFROM alpine:3.19\nRUN apk add --no-cache libstdc++ ca-certificates\nWORKDIR /app\nCOPY --from=builder /app/build/server .\nEXPOSE 8080\nCMD ["./server"]
\n\n

الصورة النهائية حوالي 20-30 ميجابايت. ليست 2 جيجابايت كما لو كنت أخذت صورة مع GCC. مضغوطة، سريعة، آمنة.

\n\n

التشغيل والتنسيق (Orchestration)

\n

تشغيل الحاوية:

\n\n
docker build -t my-cpp-server .\ndoc                

المدونات

توصيات الكتب