مقدمة: من البناء المحلي إلى إصدار الإنتاج لتطبيق C++
\nتطوير تطبيق C++ هو نصف المهمة فقط. النصف الثاني، الذي لا يقل أهمية، هو النشر الموثوق والآمن على خادم بعيد (VPS). في هذه المقالة، سنتناول نهجًا متقدمًا لنشر تطبيقات C++ يتجاوز مجرد نسخ الملف الثنائي. ستتعلم كيفية إعداد البناء التلقائي، تشغيل التطبيق كخدمة نظام، تنظيم reverse proxy عبر Nginx، وتطبيق المراقبة الأساسية.
\nالمقالة موجهة للمطورين الذين هم على دراية بالفعل بـ C++ وأساسيات العمل مع Linux. سنستخدم أدوات حديثة: CMake، systemd، Nginx و Git.
\n\n1. أتمتة البناء وإعداد البيئة على VPS
\n1.1. تثبيت التبعيات والمترجم
\nقبل النشر، تأكد من تثبيت مترجم حديث (g++ أو clang) والمكتبات الضرورية على الخادم. لخادم الإنتاج، يُوصى باستخدام الربط الثابت أو الحاويات، لكن في إطار هذه المقالة سنتناول النهج التقليدي.
\n# تحديث الحزم\nsudo apt update && sudo apt upgrade -y\n\n# تثبيت المترجم وأدوات البناء\nsudo apt install build-essential cmake git -y\n\n# تثبيت المكتبات الإضافية (مثال لـ Boost)\nsudo apt install libboost-all-dev -y\n\n1.2. إنشاء سكريبت بناء باستخدام CMake
\nاستخدم CMake لإدارة عملية البناء. سيضمن ذلك قابلية النقل ويبسط التكامل مع CI/CD. مثال لملف CMakeLists.txt:
cmake_minimum_required(VERSION 3.16)\nproject(MyCppApp VERSION 1.0.0 LANGUAGES CXX)\n\nset(CMAKE_CXX_STANDARD 17)\nset(CMAKE_CXX_STANDARD_REQUIRED ON)\n\n# تحسين لبناء الإنتاج\nset(CMAKE_BUILD_TYPE Release)\n\n# البحث عن المكتبات الخارجية\nfind_package(Boost REQUIRED COMPONENTS system filesystem)\n\n# بناء الملف التنفيذي\nadd_executable(${PROJECT_NAME} src/main.cpp src/server.cpp)\ntarget_link_libraries(${PROJECT_NAME} PRIVATE Boost::system Boost::filesystem pthread)\n\n# تثبيت الملف الثنائي في النظام\ninstall(TARGETS ${PROJECT_NAME} DESTINATION /usr/local/bin)\nبعد إنشاء CMakeLists.txt، قم بتنفيذ البناء على الخادم:
\ncd /opt/myapp\nmkdir build && cd build\ncmake .. -DCMAKE_BUILD_TYPE=Release\nmake -j$(nproc)\nsudo make install\n\n2. إعداد systemd لإدارة العملية
\nتشغيل التطبيق في الخلفية وإعادة تشغيله تلقائيًا عند التعطل هي مهمة بالغة الأهمية. استخدم systemd لإنشاء خدمة مستقرة.
\n\n2.1. إنشاء ملف الوحدة (unit-file)
\nأنشئ ملف /etc/systemd/system/myapp.service:
[Unit]\nDescription=تطبيق C++ للإنتاج\nAfter=network.target\n\n[Service]\nType=simple\nUser=www-data\nGroup=www-data\nWorkingDirectory=/opt/myapp\nExecStart=/usr/local/bin/MyCppApp --config /etc/myapp/config.json\nRestart=always\nRestartSec=5\nStandardOutput=journal\nStandardError=journal\n\n# الأمان\nNoNewPrivileges=true\nProtectSystem=full\nProtectHome=true\n\n[Install]\nWantedBy=multi-user.target\n\n2.2. تشغيل الخدمة والتحقق منها
\nsudo systemctl daemon-reload\nsudo systemctl enable myapp.service\nsudo systemctl start myapp.service\nsudo systemctl status myapp.service\nالآن سيتم تشغيل تطبيق C++ الخاص بك تلقائيًا عند بدء تشغيل النظام وإعادة تشغيله في حالة حدوث عطل.
\n\n3. Reverse proxy عبر Nginx وإعداد HTTPS
\nالوصول المباشر إلى منفذ التطبيق غير آمن وغير مريح. استخدم Nginx كـ reverse proxy لمعالجة الملفات الثابتة، إنهاء SSL، والموازنة.
\n\n3.1. تثبيت وإعداد Nginx
\nsudo apt install nginx certbot python3-certbot-nginx -y\nأنشئ التكوين /etc/nginx/sites-available/myapp:
server {\n listen 80;\n server_name myapp.example.com;\n\n location / {\n pr