2017-01-01 8 views
9

मेरे पास एक PHP सर्वर है जो PHP-FPM के माध्यम से चल रहा है जिसे पोर्ट 7000 पर nginx के माध्यम से fastcgi के साथ परोसा जाता है। इस एप्लिकेशन को डॉकराइज्ड किया गया है और एक चल रहे कंटेनर के रूप में चल रहा है, उदा। my_apiमैं एक nginx रिवर्स प्रॉक्सी के पीछे एक PHP अपस्ट्रीम के साथ XDebug का उपयोग कैसे कर सकता हूं?

my_api डोकर कंटेनर एक और कंटेनर जो प्रॉक्सी upstreams का उपयोग करता है बंदरगाहों 80 और पर my_api आवेदन (और अन्य) को बेनकाब करने के रिवर्स एक nginx रूप में कार्य करता माध्यम से जोड़ा जा सकता बंदरगाह 7000 (विवेक की जाँच के लिए) के माध्यम से सीधे के साथ-साथ उपयुक्त स्थानों के तहत proxy_pass निर्देशों के माध्यम से 443 (पोर्ट 80 एसएसएल पर रीडायरेक्ट करता है)।

अगर मैं dbgp बंदरगाह पर 9000 सीधे खिलाफ एक फ़ाइल http://localhost:7000 से परोसा का उपयोग कर एक XDebug सत्र शुरू मैं देख सकता हूँ डिबगिंग सत्र सही ढंग से स्थापित किया गया है और मैं डीबग कर सकते हैं।

हालांकि, अगर मैं nginx रिवर्स प्रॉक्सी द्वारा प्रदान किए गए यूआरएल के खिलाफ एक्सडीबग सत्र शुरू करने का प्रयास करता हूं, उदा। https://localhost/my-api, डीबग सत्र शुरू नहीं होता है या कम से कम यह कनेक्शन ठीक से नहीं बनाता है (मेरे आईडीई में कोई ब्रेकपॉइंट हिट नहीं होता है)।

मैं nginx रिवर्स प्रॉक्सी के माध्यम से किए गए अनुरोधों के लिए XDebug सत्र कैसे स्थापित कर सकता हूं?

डोकर-compose.yml:

version: "2" 

services: 
    api: 
    build: <path_to_dockerfile> 
    ports: 
     - 7000:7000 
     #- 9000:9000 # may be uncommented for direct debugging access 
    nginx_proxy: 
    build: <path_to_dockerfile> 
    links: 
     ... 
     - api:api 
    ports: 
     - 80:80 
     - 443:443 

xdebug.ini

इस सवाल के प्रयोजनों के लिए, नीचे एक (प्रासंगिक) मेरी docker-compose.yml विन्यास और xdebug.ini का नमूना है

zend_extension=xdebug.so 
xdebug.remote_enable=true 
xdebug.remote_connect_back=1 
xdebug.remote_port=9000 
xdebug.remote_handler=dbgp 
xdebug.remote_autostart=0 

एनबी: मैंने dbgpproxy चलाने वाले डॉकर कंटेनर को लॉन्च करने सहित इस काम को करने और प्राप्त करने के लिए कुछ अलग-अलग कॉन्फ़िगरेशन की कोशिश की है, लेकिन कुछ भी मुझे रिवर्स प्रॉक्सी से गुजरने वाले अनुरोधों को डीबग करने की अनुमति नहीं देता है। यह बहुत संभव है हालांकि कॉन्फ़िगरेशन मैं इन प्रयासों के लिए उपयोग कर रहा था, बस गलत था।

मेरे पास कुछ समस्याएं हैं जो मेरी समस्याएं हो सकती हैं, उनमें से संदेह है कि यह रिवर्स प्रॉक्सी का आईपी पता है जिसे X12ebug को remote_connect_back कॉन्फ़िगरेशन प्रॉपर्टी के माध्यम से सूचित किया जा रहा है।

किसी भी मदद या अंतर्दृष्टि को XDebug को ठीक से कॉन्फ़िगर करने के तरीके को कॉन्फ़िगर करने के लिए कैसे करें जो nginx प्रॉक्सी के माध्यम से सर्वर पर किए गए अनुरोधों के साथ काम करने के लिए अपस्ट्रीम सर्वर पर जाता है!

यदि मैं सहायक होगा तो मैं और विवरण प्रदान कर सकता हूं!

+1

'xdebug.remote_connect_back = 1' - यह = बनाने' 0' और उचित होस्ट का उपयोग/Ip में 'xdebug.remote_host' – LazyOne

+1

भी - xdebug लॉग सक्षम करें और देखें कि उसे क्या कहना होगा - यह दिखाएगा कि आईपी क्या है: por यह कनेक्ट करने का प्रयास करता है और (यदि डीबग सत्र स्वीकार किया जाता है) वहां क्या हो रहा है। – LazyOne

उत्तर

1

यहाँ कैसे मैं एक dockerized php-एफ पी एम/nginx आवेदन करने के लिए कनेक्ट करने के लिए पीएचपी तूफान मिला है:

कंटेनर में दूरस्थ होस्ट आईपी सम्मिलित करें।

XDEBUG_HOST=$(ipconfig getifaddr en0) 

मैं डोकर-लिखें सुविधा के साथ भी परिचित नहीं कर रहा हूँ: अपने मेजबान में, चर सेट। मैं कुबर्नेट्स मैनिफेस्ट का उपयोग कर रहा हूं, लेकिन मुझे यकीन है कि पर्यावरण चर इंजेक्ट करने का एक तरीका है।

xdebug.ini में

:

xdebug.remote_host=${XDEBUG_HOST} 

अब आप डिबग कनेक्शन के लिए xdebug.remote_port पर सुनने के लिए अपने xdebug क्लाइंट सेट करने में सक्षम होना चाहिए। आपको PHP स्टॉर्म में किसी भी आईडीई को सेट करना होगा या जो भी आईडीई आप http://127.0.0.1:8080 (या जो भी बंदरगाह आप पोर्ट-अग्रेषित करने के लिए nginx कंटेनर को अग्रेषित कर रहे हैं) में उपयोग कर रहे हैं।

यहां मेरा सेटअप कैसा दिखता है। मैं PHP तूफान का उपयोग कर रहा हूं लेकिन मुझे यकीन है कि आप इसे अन्य xdebug क्लाइंट्स में अनुकूलित कर सकते हैं।

PHP Storm Xdebug server settings

PHP Storm preferences

xdebug.ini:

zend_extension=xdebug.so 
xdebug.remote_enable=1 
xdebug.remote_port=10000 
xdebug.remote_autostart=1 
xdebug.idekey=www-data 
xdebug.remote_host=${XDEBUG_HOST} 

संदर्भ: https://shippingdocker.com/xdebug/

संबंधित मुद्दे