नेटवर्क पर दिखाई देने के लिए फ्लास्क देव सर्वर कॉन्फ़िगर करें


443

मुझे यकीन नहीं है कि यह फ्लास्क विशिष्ट है, लेकिन जब मैं देव मोड ( http://localhost:5000) में एक ऐप चलाता हूं, तो मैं इसे नेटवर्क (अन्य) से अन्य मशीनों से एक्सेस नहीं कर सकता http://[dev-host-ip]:5000। देव मोड में रेल के साथ, उदाहरण के लिए, यह ठीक काम करता है। मैं फ्लास्क देव सर्वर विन्यास के बारे में कोई डॉक्स नहीं पा सका। किसी भी विचार यह सक्षम करने के लिए क्या कॉन्फ़िगर किया जाना चाहिए?

जवाबों:


713

जबकि यह संभव है, आपको उत्पादन में फ्लास्क देव सर्वर का उपयोग नहीं करना चाहिए। फ्लास्क देव सर्वर को विशेष रूप से सुरक्षित, स्थिर या कुशल बनाने के लिए नहीं बनाया गया है। सही समाधान के लिए तैनाती पर डॉक्स देखें ।


अपने लिए एक पैरामीटर जोड़ें app.run()। डिफ़ॉल्ट रूप से यह लोकलहोस्ट पर चलता है, इसे app.run(host= '0.0.0.0')अपने मशीनों के आईपी पते पर चलाने के लिए बदल दें ।

क्विकस्टार्ट पृष्ठ पर "बाह्य रूप से दर्शनीय सर्वर" के तहत फ्लास्क साइट पर प्रलेखित :

बाह्य रूप से दृश्यमान सर्वर

यदि आप सर्वर चलाते हैं तो आप देखेंगे कि सर्वर केवल आपके ही कंप्यूटर से उपलब्ध है, नेटवर्क में किसी अन्य से नहीं। यह डिफ़ॉल्ट है क्योंकि डिबगिंग मोड में एप्लिकेशन का उपयोगकर्ता आपके कंप्यूटर पर मनमाने ढंग से पायथन कोड निष्पादित कर सकता है। यदि आपके पास डिबग अक्षम है या अपने नेटवर्क के उपयोगकर्ताओं पर भरोसा है, तो आप सर्वर को सार्वजनिक रूप से उपलब्ध करा सकते हैं।

बस run()इस तरह दिखने के लिए विधि की कॉल बदलें :

app.run(host='0.0.0.0')

यह आपके ऑपरेटिंग सिस्टम को सार्वजनिक आईपी पर सुनने के लिए कहता है।


44
एक विशिष्ट आईपी app.run (होस्ट = "192.168.1.7", पोर्ट = 5010) पर सेट करने के लिए अगर आपके पीसी में कुछ आईपी है
lxx

2
वैश्विक स्तर पर फ्लास्क स्क्रिप्ट का उपयोग कैसे करें, मेरे अपने सर्वर पर होस्टिंग
pyd

यह समाधान डॉकटर कंटेनरों के लिए भी काम करता है। यह पोस्ट इन मामलों के समाधान का वर्णन करता है।

मैक के लिए: मैं सिस्टम प्रिवेंसेस> शेयरिंग में निर्दिष्ट डोमेन को लक्षित करके, अपने फ्लास्क ऐप को 0.0.0.0 (भले ही वहां पर परोसा गया हो) को एक्सेस नहीं कर सका । डोमेन कुछ इस तरह होना चाहिए mymacname.local
निको सर्नक

14
किसी तरह मेरे मैक पर मुझे flask run --host 0.0.0.0इसे काम करने के लिए स्पष्ट रूप से उपयोग करना होगा।
मिन्ह नगू

122

यदि आप अपने सर्वर को शुरू करने के लिए फ्लास्क निष्पादन योग्य का उपयोग करते हैं, तो आप flask run --host=0.0.0.0127.0.0.1 से डिफ़ॉल्ट को बदलने के लिए उपयोग कर सकते हैं और इसे गैर स्थानीय कनेक्शन तक खोल सकते हैं। विन्यास और app.run तरीके जो अन्य उत्तरों का वर्णन करते हैं, वे शायद बेहतर अभ्यास हैं, लेकिन यह आसान भी हो सकता है।

बाह्य रूप से दृश्यमान सर्वर यदि आप सर्वर चलाते हैं तो आप देखेंगे कि सर्वर केवल आपके ही कंप्यूटर से सुलभ है, नेटवर्क में किसी अन्य से नहीं। यह डिफ़ॉल्ट है क्योंकि डिबगिंग मोड में एप्लिकेशन का उपयोगकर्ता आपके कंप्यूटर पर मनमाने ढंग से पायथन कोड निष्पादित कर सकता है।

यदि आपके पास डिबगर अक्षम है या अपने नेटवर्क के उपयोगकर्ताओं पर भरोसा है, तो आप सर्वर को सार्वजनिक रूप से कमांड लाइन में --host = 0.0.0.0 जोड़कर उपलब्ध करा सकते हैं:

फ्लास्क रन-host = 0.0.0.0 यह आपके ऑपरेटिंग सिस्टम को सभी सार्वजनिक आईपी पर सुनने के लिए कहता है।

संदर्भ: http://flask.pocoo.org/docs/0.11/quickstart/


2
मुझे नहीं पता कि किसी और ने इसका अनुभव किया है, लेकिन मैंने इस विधि को सबसे पहले क्विकस्टार्ट डॉक्स के अनुसार आजमाया, लेकिन कुछ अजीब कारणों से आईपी चालू 127.0.0.1रहा (मैंने अपने फ्लास्क को ठीक से सेट किया, या ऐसा नहीं लगा। यकीन है कि मैं क्या गलत कर रहा था)। हालाँकि, app.run(host='0.0.0.0')मेरे सर्वर फ़ाइल में एक अन्य उत्तर में दिए गए विवरण को जोड़ने के बाद , मैं पूरे नेटवर्क में पृष्ठ तक पहुंचने में सक्षम था। किसी और के पास एक मुद्दा है जैसा मैंने वर्णित किया है या उस पर कोई जानकारी है?
ट्विनकब

2
मेरे लिए, फ्लास्क रन-host = 0.0.0.0 समस्या को हल करता है। मैं url -http: // <ip एड्रेस>: 5000 का उपयोग करने में सक्षम था। पहले मैंने जाँच की कि कमांड - sudo फ़ायरवॉल-cmd --zone = पब्लिक - पोर्ट्स-पोर्ट्स का उपयोग करके मशीन पर कौन से पोर्ट्स खुले हैं, तब मुझे पता चला कि पोर्ट 5000 ओपन नहीं है। मैंने इस पोर्ट को कमांड - sudo फ़ायरवॉल-cmd --zone = public --permanent --add-port = 5000 / tcp के बाद sudo फ़ायरवॉल-cmd --reload का उपयोग करके खोला। फिर, फ्लास्क ऐप को इस रूप में चलाएं - फ्लास्क रन --host = 0.0.0.0
पिंटू कुमार

24

यदि 0.0.0.0 विधि काम नहीं करती है तो यह कोशिश करें

उबाऊ सामान

मैंने अपने ऐप को लोकल-सर्वर के माध्यम से अपने ऐप को अन्य डिवाइस (लैपटॉप और मोबाइल फोन) तक पहुंचाने के लिए बहुत संघर्ष किया। मैंने 0.0.0.0 विधि की कोशिश की, लेकिन कोई भाग्य नहीं। फिर मैंने पोर्ट बदलने की कोशिश की, लेकिन यह काम नहीं किया। इसलिए, विभिन्न संयोजनों की एक गुच्छा की कोशिश करने के बाद, मैं इस एक पर पहुंच गया, और इसने मेरे ऐप को स्थानीय सर्वर पर तैनात करने की मेरी समस्या को हल कर दिया।

कदम

  1. अपने कंप्यूटर का स्थानीय IPv4 पता प्राप्त करें। यह ipconfigविंडोज ifconfigपर और लिनक्स और मैक पर टाइप करके किया जा सकता है ।

IPv4 (विंडोज)

कृपया ध्यान दें: उपरोक्त चरण उस मशीन पर किया जाना है जिसे आप ऐप पर सेवा दे रहे हैं, और उस मशीन पर नहीं जिस पर आप इसे एक्सेस कर रहे हैं। यह भी ध्यान दें, यदि आप नेटवर्क को डिस्कनेक्ट और फिर से कनेक्ट करते हैं तो IPv4 पता बदल सकता है।

  1. अब, बस प्राप्त IPv4 पते के साथ फ्लास्क ऐप चलाएं।

    flask run -h 192.168.X.X

    जैसे मेरे मामले में (छवि देखें), मैंने इसे इस प्रकार चलाया:

    flask run -h 192.168.1.100

फ्लास्क ऐप चला रहा है

मेरे मोबाइल डिवाइस पर

मेरे मोबाइल फोन से स्क्रीनशॉट

वैकल्पिक सामग्री

यदि आप इस प्रक्रिया को विंडोज पर कर रहे हैं, और CLI के रूप में पावर शेल का उपयोग कर रहे हैं, और आप अभी भी वेबसाइट तक नहीं पहुंच पा रहे हैं, तो शेल में CTRL + C कमांड को आज़माएं जो ऐप चला रहा है। पावर शेल कभी-कभी जम जाता है और इसे पुनर्जीवित करने के लिए एक चुटकी की आवश्यकता होती है। ऐसा करने से सर्वर समाप्त भी हो सकता है, लेकिन यह कभी-कभी ट्रिक करता है।

बस। अगर आपको यह मददगार मिला तो एक अंगूठा दें

कुछ और वैकल्पिक सामान

मैंने एक छोटी Powershell स्क्रिप्ट बनाई है जो आपको अपना आईपी पता प्राप्त करेगी जब भी आपको एक की आवश्यकता होगी:

$env:getIp = ipconfig
if ($env:getIp -match '(IPv4[\sa-zA-Z.]+:\s[0-9.]+)') {
    if ($matches[1] -match '([^a-z\s][\d]+[.\d]+)'){
        $ipv4 = $matches[1]
    }
}
echo $ipv4

इसे .ps1 एक्स्टेंशन (पावरशेल के लिए) के साथ एक फ़ाइल में सहेजें, और अपना ऐप शुरू करने से पहले इसे चलाएं। आप इसे अपने प्रोजेक्ट फ़ोल्डर में सहेज सकते हैं और इसे निम्नानुसार चला सकते हैं:

.\getIP.ps1; flask run -h $ipv4

नोट: मैंने getIP.ps1 में उपरोक्त शेल कोड सहेजा है।

Cool.👌


1
हाँ! यह काम करता हैं। मैं अपने मोबाइल पर flv ipv4 ip सेट करके इसे प्राप्त करने में सक्षम हूं। उम्मीद है कि यह अन्य मदद भी करेगा :)
आशु कुमार

@nwillo मोबाइल करते हैं और जिस मशीन पर मैं सेवा करता हूं वह उसी वाईफाई / नेटवर्क से जुड़ा होता है।
साचिन राठौड़

@sachinrathod हाँ उन्हें करना है। कि वे एक ही आईपी गेटवे का उपयोग कैसे कर सकते हैं।
nwillo

22

यदि आपके coolऐप में बाहरी फ़ाइल से लोड किया गया कॉन्फ़िगरेशन है, जैसे निम्न उदाहरण में, तो HOST = "0.0.0.0" के साथ संबंधित कॉन्फ़िगरेशन फ़ाइल को अपडेट करना न भूलें।

cool.app.run(
    host=cool.app.config.get("HOST", "localhost"),
    port=cool.app.config.get("PORT", 9000)
)            

1
यह फ्लास्क कॉन्फ़िगरेशन में होस्टनाम और पोर्टनंबर को स्टोर करने का एक अच्छा तरीका है। मैं वास्तव में इस समाधान के लिए देख रहा था।
compie

20

अपने प्रोजेक्ट में नीचे की पंक्तियों को जोड़ें

if __name__ == '__main__':
    app.debug = True
    app.run(host = '0.0.0.0',port=5005)

मैं हो रही हैOSError: [WinError 10013] An attempt was made to access a socket in a way forbidden by its access permissions
PYD

ठीक करने के तरीकों के लिए आपको व्यवस्थापक के रूप में चलाने के साथ अजगर फ़ाइल को चलाने और खिड़कियों पर किसी भी बंदरगाह को चलाने की आवश्यकता है netstat -na|findstr 5005
जीवन चैतन्य

10

जाँचें कि क्या क्लाइंट परोसने के लिए सर्वर पर विशेष पोर्ट खुला है या नहीं?

उबंटू या लिनक्स डिस्ट्रो में

sudo ufw enable
sudo ufw allow 5000/tcp //allow the server to handle the request on port 5000

दूरस्थ अनुरोधों को संभालने के लिए एप्लिकेशन को कॉन्फ़िगर करें

app.run(host='0.0.0.0' , port=5000)


python3 app.py & #run application in background

5

CMD (कमांड प्रॉम्प्ट) पर अपने प्रोजेक्ट पथ पर जाएं और निम्नलिखित कमांड निष्पादित करें: -

FLASK_APP = ABC.py सेट करें

FLASK_ENV = विकास सेट करें

फ्लास्क रन -h [yourIP] -p 8080

आपको CMD पर निम्नलिखित ओ / पी मिलेगा: -

  • फ्लास्क एप्लिकेशन "expirement.py" (आलसी लोड हो रहा है) की सेवा
    • पर्यावरण: विकास
    • डिबग मोड: पर
    • स्टैट के साथ फिर से शुरू करना
    • डीबगर सक्रिय है!
    • डीबगर पिन: 199-519-700
    • Http पर चल रहा है : // [yourIP]: 8080 / (प्रेस CTRL + C छोड़ने के लिए)

अब आप http: // [yourIP]: 8080 / url का उपयोग करके अपने फ्लास्क ऐप को किसी अन्य मशीन पर एक्सेस कर सकते हैं


4

यदि आपको अपने फ्लास्क सर्वर तक पहुँचने में परेशानी हो रही है, तो PyCharm का उपयोग करके तैनात किया गया है , निम्नलिखित को ध्यान में रखें:

PyCharm आपकी मुख्य .py फ़ाइल को सीधे नहीं चलाता है, इसलिए किसी भी कोड को if __name__ == '__main__':निष्पादित नहीं किया जाएगा, और कोई भी परिवर्तन (जैसे app.run(host='0.0.0.0', port=5000)) प्रभावी नहीं होगा।

इसके बजाय, आपको रन कॉन्फ़िगरेशन का उपयोग करके फ्लास्क सर्वर को कॉन्फ़िगर करना चाहिए, विशेष रूप से, अतिरिक्त विकल्प क्षेत्र --host 0.0.0.0 --port 5000में रखकर ।

फ्लास्क सर्वर PyCharm के cofigurations चलाएं

PyCharm में फ्लास्क सर्वर को कॉन्फ़िगर करने के बारे में अधिक


यह वास्तव में मेरी सभी समस्याओं को हल करता है और इस प्रश्न का सही उत्तर होना चाहिए!
अल्बर्टो बेलिनी

4

मेरे लिए मैंने उपरोक्त उत्तर का पालन किया और इसे थोड़ा संशोधित किया:

  1. कमांड प्रॉम्प्ट पर ipconfig का उपयोग करके बस अपना IPv4 पता पकड़ो
  2. उस फ़ाइल पर जाएं जिसमें फ्लास्क कोड मौजूद है
  3. मुख्य समारोह में app.run (होस्ट = 'अपना ipv4 पता') लिखें

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

यहां छवि विवरण दर्ज करें


3

मुझे एक ही समस्या थी, मैं एक संपादक के रूप में PyCharm का उपयोग करता हूं और जब मैंने प्रोजेक्ट बनाया, तो Pyharm ने एक फ्लास्क सर्वर बनाया। मैंने जो किया वह निम्नलिखित तरीके से पायथन के साथ एक सर्वर तैयार करना था;

अजगर सर्वर PyCharm कॉन्फ़िगर करें मूल रूप से मैंने जो किया वह एक नया सर्वर बनाया गया था, लेकिन फ्लाइट यदि अजगर नहीं था

मुझे उम्मीद है इससे आपको मदद मिली होगी


कृपया केवल एक छवि पोस्ट न करें - विशेष रूप से वर्णन करें कि आप क्या करते हैं जो समस्या का समाधान करता है।
२.२२ बजे कुछ निश्चितरूपेण

अरे, बेशक अगर मैं पहले से ही उत्तर को बेहतर बनाने के लिए पोस्ट को संपादित कर रहा हूं।
जुआनस ३०

3

यह उत्तर पूरी तरह से फ्लास्क से संबंधित नहीं है, लेकिन सभी के लिए लागू होना चाहिए जो किसी अन्य होस्ट समस्या से सेवा को कनेक्ट नहीं कर सकता है

  1. netstat -ano | grep <port>यह देखने के लिए उपयोग करें कि पता 0.0.0.0 या :: है या नहीं। यदि यह 127.0.0.1 है तो यह केवल स्थानीय अनुरोधों के लिए है।
  2. यह देखने के लिए कि क्या कोई पैकेट गायब है, tcpdump का उपयोग करें। यदि यह स्पष्ट असंतुलन दिखाता है, तो iptables द्वारा रूटिंग नियमों की जांच करें।

आज मैं हमेशा की तरह अपना फ्लास्क ऐप चलाता हूं, लेकिन मैंने देखा कि यह दूसरे सर्वर से कनेक्ट नहीं हो सकता। फिर मैं चलाता हूं netstat -ano | grep <port>, और स्थानीय पता है ::या 0.0.0.0(मैंने दोनों की कोशिश की, और मुझे पता है कि 127.0.0.1 केवल स्थानीय होस्ट से कनेक्शन की अनुमति देता है)। फिर मैंने उपयोग किया telnet host port, परिणाम जैसा है connect to ...। यह बहुत अजीब है। तब मुझे लगा कि मैं इसके साथ बेहतर जांच करूंगा tcpdump -i any port <port> -w w.pcap। और मैंने देखा कि यह सब इस तरह है:

tcpdump परिणाम से पता चलता है कि दूरस्थ मेजबान से केवल SYN पैकेट है

फिर iptables --listOUTPUT अनुभाग की जाँच करके , मैं कई नियम देख सकता था:

iptables सूची परिणाम

इन नियमों के उत्पादन में tcp महत्वपूर्ण पैकेटों को चलाने के लिए मना किया है। इन्हें हटाने से समस्या दूर हो जाती है।


1

प्रोजेक्ट पथ सेट पर जाएं FLASK_APP = ABC.py SET FLASK_ENV = विकास

फ्लास्क रन -h [yourIP] -p 8080 आप CMD पर o / p का अनुसरण करेंगे: - * फ्लास्क ऐप "expirement.py" (आलसी लोड हो रहा है) की सेवा करना * पर्यावरण: विकास * डिबग मोड: प्रतिमा के माध्यम से पुनः आरंभ करना = डीबगर सक्रिय है ! * डीबगर पिन: 199-519-700 * http पर चल रहा है : // [yourIP]: 8080 / (प्रेस CTRL + C छोड़ने के लिए)


1

आप होस्ट को भी सेट कर सकते हैं (आईपी पते का सामना करने वाले नेटवर्क पर इसे उजागर करने के लिए) और पर्यावरण चर के माध्यम से पोर्ट कर सकते हैं।

$ export FLASK_APP=app.py
$ export FLASK_ENV=development
$ export FLASK_RUN_PORT=8000
$ export FLASK_RUN_HOST=0.0.0.0

$ flask run
 * Serving Flask app "app.py" (lazy loading)
 * Environment: development
 * Debug mode: on
 * Running on https://0.0.0.0:5000/ (Press CTRL+C to quit)
 * Restarting with stat
 * Debugger is active!
 * Debugger PIN: 329-665-000

पर्यावरण चर सेट करने के लिए सभी उपलब्ध कमांड विकल्प कैसे देखें ?


1

.flaskenvप्रोजेक्ट रूट डायरेक्टरी में फ़ाइल बनाएँ ।

इस फ़ाइल में पैरामीटर आमतौर पर हैं:

FLASK_APP=app.py
FLASK_ENV=development
FLASK_RUN_HOST=[dev-host-ip]
FLASK_RUN_PORT=5000

यदि आपके पास एक आभासी वातावरण है, तो इसे सक्रिय करें और करें pip install python-dotenv

यह पैकेज .flaskenvफ़ाइल का उपयोग करने जा रहा है , और इसके अंदर घोषणाएं टर्मिनल सत्रों में स्वचालित रूप से आयात की जाएंगी ।

तब आप कर सकते हैं flask run

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