परिचय: Kubernetes में PHP क्यों डिप्लॉय करें?
\n\nPHP वेब डेवलपमेंट के लिए सबसे लोकप्रिय भाषाओं में से एक बना हुआ है। हालांकि, लोड और प्रोजेक्ट्स (Laravel, Symfony, Bitrix) की जटिलता बढ़ने के साथ, पारंपरिक LAMP-स्टैक काम करना बंद कर देता है। Kubernetes (K8s) एक समाधान प्रदान करता है: स्वचालित स्केलिंग, फॉल्ट टॉलरेंस, zero-downtime डिप्लॉय और कॉन्फ़िगरेशन प्रबंधन।
\n\nइस मार्गदर्शिका में, हम व्यावहारिक रूप से Kubernetes में PHP एप्लिकेशन डिप्लॉय करने के पूरे चक्र को समझेंगे: Docker इमेज बनाने से लेकर Ingress कॉन्फ़िगर करने तक। आप सीखेंगे कि मेनिफेस्ट कैसे तैयार करें, एनवायरनमेंट वेरिएबल्स कैसे प्रबंधित करें और क्लस्टर में PHP-FPM का संचालन कैसे सुनिश्चित करें।
\n\n1. PHP एप्लिकेशन और Docker इमेज तैयार करना
\n\n1.1. PHP प्रोजेक्ट की संरचना
\n\nडिप्लॉय के लिए हमें एक न्यूनतम PHP एप्लिकेशन चाहिए। आइए एक क्लासिक index.php लें:
\n\n<?php\n// index.php\necho "Hello from Kubernetes! PHP version: " . phpversion();\n\nसाथ ही composer.json बनाएं (यदि आप फ्रेमवर्क का उपयोग कर रहे हैं):
\n\n{\n "require": {\n "php": "^8.1"\n }\n}\n\n1.2. PHP-FPM के लिए Dockerfile
\n\nमुख्य बिंदु: Kubernetes में PHP PHP-FPM के माध्यम से काम करता है, और स्टैटिक फ़ाइलें Nginx द्वारा परोसी जाती हैं। आइए Dockerfile बनाएं:
\n\nFROM php:8.2-fpm-alpine\n\n# आवश्यक एक्सटेंशन इंस्टॉल करना\nRUN docker-php-ext-install pdo_mysql mysqli opcache\n\n# एप्लिकेशन कोड कॉपी करें\nCOPY . /var/www/html\n\n# एक्सेस अधिकार\nRUN chown -R www-data:www-data /var/www/html\n\n# PHP सेटिंग्स\nCOPY php.ini /usr/local/etc/php/conf.d/custom.ini\n\nWORKDIR /var/www/html\n\nEXPOSE 9000\nCMD ["php-fpm"]\n\nप्रोडक्शन के लिए opcache जोड़ें:
\n\n; php.ini\nopcache.enable=1\nopcache.memory_consumption=128\nopcache.max_accelerated_files=10000\n\n1.3. Nginx के लिए Dockerfile
\n\nNginx PHP-FPM को अनुरोध प्रॉक्सी करेगा:
\n\nFROM nginx:alpine\n\nCOPY nginx.conf /etc/nginx/conf.d/default.conf\nCOPY public/ /var/www/html/public\n\nEXPOSE 80\n\nnginx.conf का उदाहरण:
\n\nserver {\n listen 80;\n root /var/www/html/public;\n index index.php;\n\n location / {\n try_files $uri $uri/ /index.php?$query_string;\n }\n\n location ~ \\.php$ {\n fastcgi_pass php-service:9000;\n fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;\n include fastcgi_params;\n }\n}\n\n2. Kubernetes मेनिफेस्ट बनाना
\n\n2.1. Namespace
\n\nअपने एप्लिकेशन को अलग करें:
\n\napiVersion: v1\nkind: Namespace\nmetadata:\n name: php-app\n\n2.2. एनवायरनमेंट वेरिएबल्स के लिए ConfigMap
\n\nPHP एप्लिकेशन अक्सर एनवायरनमेंट वेरिएबल्स का उपयोग करते हैं (उदाहरण के लिए, DB से कनेक्ट करने के लिए):
\n\napiVersion: v1\nkind: ConfigMap\nmetadata:\n name: php-config\n namespace: php-app\ndata:\n APP_ENV: production\n APP_DEBUG: "false"\n DB_HOST: mysql-service\n\n2.3. संवेदनशील डेटा के लिए Secret
\n\nपासवर्ड और कुंजियाँ Secret में स्टोर करें:
\n\napiVersion: v1\nkind: Secret\nmetadata:\n name: php-secrets\n namespace: php-app\ntype: Opaque\ndata:\n DB_PASSWORD: cGFzc3dvcmQxMjM= # base64 "password123"\n\n2.4. PHP-FPM के लिए Deployment
\n\nमुख्य घटक — PHP-FPM:
\n\napiVersion: apps/v1\nkind: Deployment\nmetadata:\n name: php-deployment\n namespace: php-app\nspec:\n replicas: 2\n selector:\n matchLabels:\n app: php-app\n template:\n metadata:\n labels:\n app: php-app\n spec:\n containers:\n - name: php-fpm\n image: my-registry/php-app:latest\n ports:\n - containerPort: 9000\n envFrom:\n - configMapRef:\n name: php-config\n - secretRef:\n name: php-secrets\n resources:\n requests:\n memory: "128Mi"\n cpu: "250m"\n limits:\n memory: "256Mi