क्यों आपका PHP प्रोजेक्ट Docker का हकदार है
\n\nक्या आपने कभी किसी नए डेवलपर को एनवायरनमेंट सेट करना समझाने में आधा दिन बिताया है? या ऐसी स्थिति का सामना किया है जहां कोड आपके localhost पर काम करता है, लेकिन सर्वर पर फेल हो जाता है? परिचित लगता है? तो यह लेख आपके लिए है।
Docker सिर्फ एक फैशनेबल buzzword नहीं है। यह एक ऐसा टूल है जो वाक्यांश "मेरे पास काम करता है" को "सभी के पास काम करता है" में बदल देता है। PHP डेवलपर के लिए, कंटेनरीकरण एक सुपरपावर है: आप एप्लिकेशन, वेब सर्वर और डेटाबेस को हल्के कंटेनरों में पैकेज करते हैं जो किसी भी मशीन पर समान व्यवहार करने की गारंटी देते हैं।
\n\nइस गाइड में हम उबाऊ सिद्धांत नहीं पढ़ेंगे। हम सीधे काम पर आएंगे: PHP के लिए Dockerfile लिखेंगे, Docker Compose के माध्यम से Nginx + PHP-FPM + MySQL का सेटअप करेंगे और एक वास्तविक एप्लिकेशन डिप्लॉय करेंगे। झटपट - और आपका प्रोजेक्ट डिप्लॉयमेंट के लिए तैयार!
\n\nकंटेनरीकरण क्या है और PHP डेवलपर को इसकी आवश्यकता क्यों है?
\n\nकल्पना करें कि आप एक नए अपार्टमेंट में शिफ्ट हो रहे हैं। हर बार फर्नीचर को फिर से जोड़ने (PHP इंस्टॉल करना, Apache कॉन्फ़िगर करना, मॉड्यूल सेट करना) के बजाय, आप बस अपने एनवायरनमेंट का एक तैयार बॉक्स ले लेते हैं। Docker ऐसे ही बॉक्स हैं। इन्हें कंटेनर कहा जाता है।
\n\nPHP के लिए यह विशेष रूप से प्रासंगिक है। PHP के वर्जन बदलते रहते हैं, विभिन्न एक्सटेंशन (gd, mysqli, redis) की आवश्यकता होती है, और प्रोडक्शन में सब कुछ स्थिर होना चाहिए। कंटेनरीकरण तीन मुख्य समस्याओं को हल करता है:
\n- \n
- पुनरुत्पादन क्षमता — एनवायरनमेंट सभी के लिए समान: डेवलपर, टेस्टर, सर्वर। \n
- अलगाव — प्रोजेक्ट आपस में टकराते नहीं (PHP अपडेट के कारण आपकी पुरानी साइट कभी नहीं टूटेगी)। \n
- डिप्लॉयमेंट की सरलता — एक कमांड
docker-compose upसे चालू करें। \n
PHP एप्लिकेशन के लिए Dockerfile तैयार करना
\n\nचलिए मुख्य चीज़ से शुरू करते हैं - अपने PHP प्रोजेक्ट के लिए इमेज बनाना। मान लीजिए हमारे पास PHP 8.2 पर एक सरल एप्लिकेशन है जो MySQL के साथ काम करने के लिए PDO का उपयोग करता है। न्यूनतम Dockerfile इस प्रकार दिखता है:
# PHP 8.2 की आधिकारिक FPM इमेज का उपयोग करें\nFROM php:8.2-fpm-alpine\n\n# आवश्यक सिस्टम पैकेज इंस्टॉल करें\nRUN apk add --no-cache \\\n nginx \\\n supervisor \\\n libpq-dev \\\n && docker-php-ext-install pdo pdo_mysql\n\n# कॉन्फ़िग फ़ाइलें कॉपी करें (हम इन्हें बाद में बनाएंगे)\nCOPY ./docker/nginx.conf /etc/nginx/nginx.conf\nCOPY ./docker/supervisord.conf /etc/supervisord.conf\n\n# एप्लिकेशन कोड कॉपी करें\nCOPY . /var/www/html\n\n# लॉग और कैश के लिए राइट परमिशन\nRUN chown -R www-data:www-data /var/www/html/storage /var/www/html/bootstrap/cache\n\n# पोर्ट खोलें\nEXPOSE 80\n\n# supervisor चलाएं (यह nginx और php-fpm को मैनेज करेगा)\nCMD ["/usr/bin/supervisord", "-c", "/etc/supervisord.conf"]\n\nयहां क्या महत्वपूर्ण है? हम alpine वर्जन का उपयोग कर रहे हैं - यह कई गुना हल्का होता है। docker-php-ext-install के माध्यम से केवल आवश्यक एक्सटेंशन इंस्टॉल करते हैं। और हां, हम supervisor का उपयोग कर रहे हैं ताकि एक ही कंटेनर के अंदर Nginx और PHP-FPM दोनों चलें। यह छोटे प्रोजेक्ट के लिए सुविधाजनक है।
Nginx कॉन्फ़िग बनाना
\n\nअब हमें वेब सर्वर कॉन्फ़िगर करना है। फ़ाइल docker/nginx.conf बनाएं:
worker_processes auto;\nevents {\n worker_connections 1024;\n}\n\nhttp {\n include /etc/nginx/mime.types;\n default_type application/octet-stream;\n\n server {\n listen 80;\n server_name _;\n root /var/www/html/public;\n index index.php index.html;\n\n location / {\n try_files $uri $uri/ /index.php?$query_string;\n }\n\n location ~ \\.php$ {\n fastcgi_pass 127.0.0.1:9000;\n fastcgi_index index.php;\n fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;\n include fastcgi_params;\n }\n }\n}\n\nध्यान दें: PHP-FPM कंटेनर के अंदर पोर्ट 9000 पर सुनता है।