PHP और Serverless: एक अप्रत्याशित गठबंधन
\n\nजब हम "Serverless" (या "बेसर्वर कंप्यूटिंग") सुनते हैं, तो पहला जुड़ाव JavaScript, Python या Go से होता है। इस संदर्भ में PHP एक "डायनासोर" लगता है, जो साझा होस्टिंग और मोनोलिथिक WordPress के युग में अटका हुआ है। लेकिन आइए सच्चाई का सामना करें: PHP जीवित है, स्वस्थ है और आपकी कल्पना से कहीं अधिक लचीला है।
\n\nआज हम जानेंगे कि AWS Lambda और इसके विकल्पों पर PHP कोड कैसे चलाया जाए। आप जानेंगे कि serverless PHP कोई जादू नहीं, बल्कि API, वेबहुक हैंडलर और माइक्रोसर्विसेज के लिए एक कार्यशील उपकरण है। स्पॉयलर: आपको अपनी पसंदीदा भाषा को छोड़ने की ज़रूरत नहीं होगी।
\n\nवास्तव में Serverless क्या है?
\n\nआइए पहले एक मिथक को दूर करें। "Serverless" का मतलब "बिना सर्वर के" नहीं है। इसका मतलब है कि आप सर्वर के बारे में नहीं सोचते। प्लेटफ़ॉर्म (AWS, Google Cloud, Vercel) स्वयं इंफ्रास्ट्रक्चर का प्रबंधन करता है: स्केल करना, अपडेट करना, ठीक करना। आप बस कोड अपलोड करते हैं और उसके निष्पादन समय के लिए भुगतान करते हैं।
\n\nPHP के लिए यह एक चुनौती की तरह लगता है। आखिरकार, PHP को पारंपरिक रूप से एक वेब सर्वर (Apache, Nginx) और PHP-FPM मॉड्यूल की आवश्यकता होती है। लेकिन प्रौद्योगिकी स्थिर नहीं है।
\n\nबेसर्वर वातावरण में PHP कैसे काम करता है?
\n\nमुख्य समस्या: Lambda फंक्शन (और उनके विकल्प) stateless कंटेनर हैं जो कुछ सेकंड या मिनट तक जीवित रहते हैं। वे मेमोरी में सत्र नहीं रखते, Apache नहीं चलाते। इसलिए मानक PHP स्क्रिप्ट जो $_GET की प्रतीक्षा करती है या $_SESSION में लिखती है, उसे अनुकूलित करने की आवश्यकता है।
समाधान विशेष रनटाइम के रूप में आया। वे Lambda इवेंट (जैसे, API Gateway से HTTP अनुरोध) को परिचित PHP संदर्भ में बदल देते हैं। इसके लिए सबसे लोकप्रिय उपकरण Bref है।
\n\nBref: AWS Lambda के लिए PHP इंजन
\n\nBref एक ओपन-सोर्स प्रोजेक्ट है जो AWS Lambda पर PHP को "आउट ऑफ द बॉक्स" चलाने की अनुमति देता है। यह तैयार लेयर्स के साथ आता है जिनमें PHP 8.x और लोकप्रिय एक्सटेंशन (PDO, Redis, gd, mbstring) शामिल हैं।
\n\nस्थापना और पहला रन
\n\nकाम करने के लिए आपको चाहिए:
\n- \n
- AWS खाता \n
- स्थापित
composerऔरaws-cli\n - Node.js (Serverless Framework के लिए) \n
आइए एक सरल फंक्शन बनाएं जो वर्तमान समय के साथ JSON लौटाता है:
\n\n// index.php\n<?php\nrequire __DIR__ . '/vendor/autoload.php';\n\nuse Bref\\Context\\Context;\nuse Bref\\Event\\Http\\HttpHandler;\n\nclass TimeHandler extends HttpHandler\n{\n public function handleRequest($request, Context $context): array\n {\n return [\n 'statusCode' => 200,\n 'headers' => ['Content-Type' => 'application/json'],\n 'body' => json_encode([\n 'server_time' => date('Y-m-d H:i:s'),\n 'php_version' => PHP_VERSION,\n 'message' => 'Hello from Serverless PHP!'\n ]),\n ];\n }\n}\n\nreturn new TimeHandler();\n\nअब डिप्लॉयमेंट सेट करें। serverless.yml फ़ाइल बनाएं:
# serverless.yml\nservice: php-time-api\n\nprovider:\n name: aws\n region: eu-central-1\n runtime: provided.al2\n\nplugins:\n - ./vendor/bref/bref\n\nfunctions:\n api:\n handler: index.php\n timeout: 28\n layers:\n - ${bref:layer.php-81}\n events:\n - httpApi: 'GET /time'\n\nडिप्लॉयमेंट चलाएं:
\ncomposer require bref/bref\nserverless deploy\n\nएक मिनट में आपको इस प्रकार का URL मिलेगा: https://xxx.execute-api.eu-central-1.amazonaws.com/time. इसे ब्राउज़र में खोलें - आपको JSON दिखाई देगा। बधाई हो, आपने अभी AWS Lambda पर एक serverless PHP फंक्शन चलाया है!
PHP के लिए AWS Lambda के विकल्प
\n\nAWS से बंधना नहीं चाहते? ऐसे विकल्प हैं जो PHP के साथ भी काम करते हैं।
\n\nGoogle Cloud Functions (अनुकूलन के साथ)
\n\nGoogle मूल रूप से PHP का समर्थन नहीं करता, लेकिन आप