स्थानीय Django वेबसर्वर को बाहरी दुनिया से कैसे एक्सेस करें


176

मैंने यहाँ अंतर्निहित वेबसर्वर का उपयोग करके Django चलाने के निर्देशों का पालन ​​किया और इसे सफलतापूर्वक उपयोग करके चलाने में सक्षम था python manage.py runserver। यदि मैं वेबसर्वर से स्थानीय रूप से 127.0.0.1:पोर्ट का उपयोग करता हूं, तो मुझे Django पृष्ठ मिलता है जो यह दर्शाता है कि यह काम कर रहा है।

मुझे एहसास है कि Django वेबसर्वर एक प्रोडक्शन सर्वर नहीं है, लेकिन मेरे लिए यह ज़रूरी है कि परीक्षण के उद्देश्यों के लिए इसे बाहरी दुनिया से एक्सेस करने में सक्षम होना चाहिए - अर्थात सर्वर पर वेब ब्राउज़र से नहीं, बल्कि एक अलग कंप्यूटर से।

मैंने कोशिश की:

http://mywebserver:port_django_runs_on

लेकिन यह काम नहीं करता। मैंने इसके बजाय IP का उपयोग करने की कोशिश की (ifconfig पर आधारित) का उपयोग करने के लिए:

http://myipaddress:port_django_runs_on 

जो या तो काम नहीं किया।

वेब सर्वर चल रहा है इसलिए इसे बाहर से सुलभ होना चाहिए, मुझे यकीन नहीं है कि कैसे। मैं अपाचे के साथ लिनक्स चला रहा हूं, हालांकि मैंने अपाचे के साथ Django को कॉन्फ़िगर नहीं किया है।

इसे कैसे करना है इस पर कोई आइडिया?


3
अपाचे और mod_wsgi के साथ Django कॉन्फ़िगर क्यों नहीं? ऐसा ठीक से क्यों नहीं?
S.Lott

@ S.Lott क्या होगा यदि आपके पास सर्वर पर कई अलग-अलग परियोजनाएं हैं जिन्हें आप अलग-अलग समय पर चलाना चाहते हैं और आप एक नई परियोजना जोड़ने पर हर बार अपाचे को फिर से कॉन्फ़िगर नहीं करना चाहते हैं?
लूटेन्कलेन

जवाबों:


303

आपको डेवलपमेंट सर्वर को ऐसे चलाना है कि वह इंटरफ़ेस पर आपके नेटवर्क पर सुने

उदाहरण के लिए

python manage.py runserver 0.0.0.0:8000

पोर्ट 8000 पर प्रत्येक इंटरफ़ेस पर सुनता है ।

इससे कोई फर्क नहीं पड़ता कि आप वेबसर्वर को आईपी या होस्टनाम के साथ एक्सेस करते हैं या नहीं। मुझे लगता है कि आप अभी भी अपने लैन में हैं।
यदि आप वास्तव में सर्वर को बाहर से एक्सेस करना चाहते हैं, तो आपको अपने राउटर को फॉरवर्ड पोर्ट जैसे 8000अपने सर्वर पर कॉन्फ़िगर करना होगा।


अपने सर्वर पर अपने फ़ायरवॉल की जाँच करें कि क्या उपयोग में पोर्ट के लिए आने वाले कनेक्शन की अनुमति है!

यह मानते हुए कि आप अपने Apache सर्वर को बाहर से सफलतापूर्वक एक्सेस कर सकते हैं, आप यह भी आज़मा सकते हैं:

  • Apache सर्वर बंद करें, ताकि पोर्ट 80मुफ्त हो।
  • के साथ विकास सर्वर शुरू करें sudo python manage.py runserver 0.0.0.0:80

1
"Python manage.py runserver 0.0.0.0:8000" का उपयोग करना अभी भी एक ही परिणाम देता है। क्या आप इस पोर्ट को संभालने के लिए अपाचे को कैसे कॉन्फ़िगर कर सकते हैं, इसके बारे में अधिक बता सकते हैं?

1
@ user248237: आप विकास सर्वर चलाते हैं, यह पूरी तरह से अपाचे वेब सर्वर से संबंधित नहीं है। विकास सर्वर एक स्टैंडअलोन वेब सर्वर है।
फेलिक्स क्लिंग

पोर्ट 80 का उपयोग करने के लिए विशेष विशेषाधिकार की आवश्यकता होती है। आप एक कोशिश कर सकते हैं sudo python manage.py runserver 80
एस.लॉट

@ S.Lott: ओह शुक्रिया। मुझे पता है, यह मेरे दिमाग में था जैसा कि उसने लिखा था, लेकिन किसी तरह इसे कीबोर्ड के लिए नहीं बनाया;)
फेलिक्स क्लिंग

1
हर किसी ALLOWED_HOSTS = ['*']ने मेरे लिए अपने Android फोन से मैक पर Django ऐप का उपयोग करने के लिए काम किया
अनुपम

28

इसे काम करने के लिए मुझे इस लाइन को settings.py में जोड़ना पड़ा (अन्यथा इसे किसी अन्य कंप्यूटर से एक्सेस करने पर कोई त्रुटि दिखाई दी)

ALLOWED_HOSTS = ['*']

इसके बाद सर्वर के साथ भाग गया:

python manage.py runserver 0.0.0.0:9595

यह भी सुनिश्चित करें कि फ़ायरवॉल उस पोर्ट से कनेक्शन की अनुमति देता है


14

से एक या अधिक चुनें:

  • आपका आवेदन सफलतापूर्वक आईपी पर नहीं सुना जा रहा है: पोर्ट
    • क्योंकि आपने इसे सफलतापूर्वक कॉन्फ़िगर नहीं किया है
    • क्योंकि उपयोगकर्ता के पास इसकी अनुमति नहीं है
  • आपका एप्लिकेशन अभीष्ट IP पर सफलतापूर्वक सुन रहा है: PORT, लेकिन ग्राहक इस तक नहीं पहुंच सकते क्योंकि
    • सर्वर स्थानीय iptables इसे रोकता है।
    • एक फ़ायरवॉल इसे रोकता है।

तो, आप देख सकते हैं कि आपका आवेदन lsof -iमशीन पर रूट के रूप में चल रहा है और सफलतापूर्वक एक के लिए देख रहा हैpython आपके द्वारा निर्दिष्ट पोर्ट के साथ प्रविष्टि के देख रहा है।

गैर-रूट उपयोगकर्ता आमतौर पर पोर्ट <b> 1024 से बंध नहीं सकते हैं।

आपको यह देखने की आवश्यकता iptables -nvLहोगी कि क्या कोई नियम है जो आईपी तक पहुंच को रोक देगा: पोर्ट जिसे आप अपने एप्लिकेशन को बांधने की कोशिश कर रहे हैं।

यदि कोई अपस्ट्रीम फ़ायरवॉल है और आपको इसके बारे में अधिक जानकारी नहीं है, तो आपको अपने नेटवर्क प्रशासकों से बात करनी होगी।


क्या आप समझा सकते हैं you haven't configured it successfully?
चिल्लरअनंद

@ChillarAnand: बस जब आप जाँचते हैं कि django runserverवास्तव में सुन रहा है जहाँ आप इसे होने का इरादा रखते हैं, उदाहरण के लिए lsof
मैथ्यू जूल

@ChillarAnand मैं आपके द्वारा बताए गए चरणों से गुजरा। उपयोग करने से lsofमुझे अपने पोर्ट के लिए एक अजगर प्रविष्टि दिखाई देती है। लेकिन मेरा लिंक यानी myip: 8000 जवाब नहीं दे रहा है। मुझे इसकी देरी का पता है लेकिन कोई सुझाव मदद करेगा।
वाटररकेट 8236

8

बस यह करो:

python manage.py runserver 0:8000

उपरोक्त आदेश द्वारा आप वास्तव में इसे बाहरी आईपी पते से जोड़ रहे हैं। इसलिए अब जब आप पोर्ट नंबर के साथ अपना आईपी पता एक्सेस करते हैं, तो आप इसे बिना किसी समस्या के ब्राउज़र में एक्सेस कर पाएंगे।

ब्राउज़र एड्रेस बार में निम्नलिखित टाइप करें:

<your ip address>:8000

उदाहरण के लिए:

192.168.1.130:8000

आपको अंतिम पंक्ति में सेटिंग्स में निम्नलिखित जोड़ने के लिए सेटिंग्स को संपादित करना होगा:

ALLOWED_HOSTS = ['*']

उम्मीद है कि यह मदद करेगा ...


5

AWS उपयोगकर्ताओं के लिए।

मुझे वहां पहुंचने के लिए निम्न चरणों का उपयोग करना था।

1) सुनिश्चित करें कि पाइप और django sudo स्तर पर स्थापित हैं

  • sudo apt-get install अजगर-पाइप
  • sudo pip स्थापित करें django

2) यह सुनिश्चित करें कि सुरक्षा समूह में बन्धे नियमों में http 80.0.0.0/0 के लिए पोर्ट शामिल है

  • AWS कंसोल के माध्यम से कॉन्फ़िगर किया गया

3) ALLOWED_HOSTS में सार्वजनिक आईपी और डीएनएस जोड़ें

  • ALLOWED_HOSTS एक सूची ऑब्जेक्ट है जो आप सेटिंग्स में पा सकते हैं
  • ALLOWED_HOSTS = ["75.254.65.19", "ec2-54-528-27-21.compute-1.amazonaws.com"]

4) पोर्ट 80 पर सुडो के साथ विकास सर्वर लॉन्च करें

  • sudo python manage.py runserver 0:80

साइट अब निम्नलिखित में से किसी पर भी उपलब्ध है (http के लिए डिफ़ॉल्ट के रूप में: 80 की आवश्यकता नहीं है):

  • [पब्लिक डीएनएस] अर्थात ec2-54-528-27-21.compute-1.amazonaws.com
  • [पब्लिक आईपी] यानी 75.254.65.19

2

मैं इसे यहाँ जोड़ने जा रहा हूँ:

  1. sudo python manage.py runserver 80

  2. अपने फोन या कंप्यूटर पर जाएं और अपने कंप्यूटरों को आंतरिक आईपी (जैसे 192.168.0.12) ब्राउज़र में दर्ज करें ।

इस बिंदु पर आपको Django सर्वर से जुड़ा होना चाहिए।

यह भी sudo के बिना काम करना चाहिए:

python manage.py runserver 0.0.0.0:8000

0

यदि आप डॉकर का उपयोग कर रहे हैं, तो आपको यह सुनिश्चित करने की आवश्यकता है कि बंदरगाहों को भी उजागर किया जाए


0

अद्यतन 2020 तक यह तरीका है

python manage.py runserver yourIp:8000

ALLOWED_HOSTS = ["*"]
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.