परिचय: स्थानीय बिल्ड से C++ एप्लिकेशन के production-रिलीज़ तक
\nC++ एप्लिकेशन विकसित करना केवल आधा काम है। दूसरा, उतना ही महत्वपूर्ण हिस्सा, इसका एक रिमोट सर्वर (VPS) पर विश्वसनीय और सुरक्षित डिप्लॉयमेंट है। इस लेख में, हम C++ एप्लिकेशन को तैनात करने के उन्नत दृष्टिकोण पर चर्चा करेंगे, जो केवल बाइनरी को कॉपी करने से परे है। आप सीखेंगे कि कैसे स्वचालित बिल्ड सेट अप करें, एप्लिकेशन को सिस्टम सर्विस के रूप में चलाएं, Nginx के माध्यम से reverse proxy व्यवस्थित करें और बुनियादी मॉनिटरिंग लागू करें।
\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)\nCMakeLists.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. यूनिट-फ़ाइल बनाना
\nफ़ाइल बनाएं /etc/systemd/system/myapp.service:
[Unit]\nDescription=My C++ Production Application\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. Nginx के माध्यम से Reverse proxy और HTTPS सेटअप
\nएप्लिकेशन पोर्ट तक सीधी पहुंच असुरक्षित और असुविधाजनक है। स्टैटिक फ़ाइलों को संभालने, SSL-टर्मिनेशन और लोड बैलेंसिंग के लिए Nginx को reverse proxy के रूप में उपयोग करें।
\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