ফ্ল্যাশ ডেভ সার্ভারটি নেটওয়ার্ক জুড়ে দৃশ্যমান হতে কনফিগার করুন


442

এটি ফ্লাস্ক নির্দিষ্ট কিনা তা আমি নিশ্চিত নই, তবে আমি যখন ডেভ মোডে অ্যাপ্লিকেশন চালাচ্ছি ( http://localhost:5000) তখন নেটওয়ার্কের অন্যান্য মেশিনগুলি থেকে (এটি দিয়ে http://[dev-host-ip]:5000) আমি এটিকে অ্যাক্সেস করতে পারি না । দেব মোডে রেলগুলি সহ, উদাহরণস্বরূপ, এটি দুর্দান্ত কাজ করে। ফ্লাস্ক ডেভ সার্ভার কনফিগারেশন সম্পর্কিত কোনও ডক্স আমি পাইনি। এটিকে সক্ষম করতে কোনটি কনফিগার করা উচিত?

উত্তর:


712

এটি সম্ভব হওয়ার পরেও, আপনি উত্পাদনে ফ্লাস্ক ডেভ সার্ভার ব্যবহার করবেন না। ফ্লাস্ক ডেভ সার্ভারটি বিশেষ সুরক্ষিত, স্থিতিশীল বা দক্ষ হিসাবে ডিজাইন করা হয়নি। সঠিক সমাধানের জন্য মোতায়েন করার বিষয়ে ডকগুলি দেখুন ।


আপনার একটি পরামিতি যুক্ত করুন app.run()। ডিফল্টরূপে এটি লোকালহোস্টে app.run(host= '0.0.0.0')চলে, আপনার মেশিনের আইপি ঠিকানায় চালানোর জন্য এটি পরিবর্তন করুন।

কুইকস্টার্ট পৃষ্ঠায় "বাহ্যিকভাবে দৃশ্যমান সার্ভার" এর অধীনে ফ্লাস্ক সাইটে নথিযুক্ত :

বাহ্যিকভাবে দৃশ্যমান সার্ভার

আপনি যদি সার্ভারটি চালনা করেন তবে আপনি খেয়াল করবেন সার্ভারটি কেবলমাত্র আপনার নিজের কম্পিউটার থেকে উপলব্ধ, কোনও নেটওয়ার্কের অন্য কোনও থেকে নয়। এটি ডিফল্ট কারণ ডিবাগিং মোডে অ্যাপ্লিকেশনটির একজন ব্যবহারকারী আপনার কম্পিউটারে পাইথন কোড নির্বিচারে কার্যকর করতে পারে। আপনি যদি ডিবাগ অক্ষম করে থাকেন বা আপনার নেটওয়ার্কের ব্যবহারকারীদের উপর বিশ্বাস করেন তবে আপনি সার্ভারটিকে সর্বজনীনভাবে উপলভ্য করতে পারেন।

এর মতো দেখতে কেবল run()পদ্ধতির কলটি পরিবর্তন করুন :

app.run(host='0.0.0.0')

এটি আপনার অপারেটিং সিস্টেমকে পাবলিক আইপিতে শুনতে বলে।


44
কোনও নির্দিষ্ট আইপি অ্যাপ্লিকেশন সেট করতে (হোস্ট = "192.168.1.7", পোর্ট = 5010) যদি আপনার পিসিতে কয়েকটি আইপস থাকে তবে
lxx

2
কীভাবে
ফ্ল্যাশ

এই দ্রবণটি ডকার পাত্রেও কাজ করে। এই পোস্টে এই কেসগুলির সমাধান বর্ণনা করে।

ম্যাকের জন্য: সিস্টেম পছন্দসমূহ> ভাগ করে নেওয়ার ক্ষেত্রে নির্দিষ্ট ডোমেনকে লক্ষ্য করে আমি 0.0.0.0 এ আমার ফ্লাস্ক অ্যাপ্লিকেশনটি অ্যাক্সেস করতে পারি না (যদিও এটি সেখানে পরিবেশিত হয়েছিল) । ডোমেনটি এমন কিছু হওয়া উচিত mymacname.local
নিকো সের্নেক

14
flask run --host 0.0.0.0এটিকে কাজ করার জন্য আমার ম্যাকের কোনওভাবে আমাকে স্পষ্টতই ব্যবহার করতে হবে।
মিন্হ Nghĩa

122

আপনি যদি আপনার সার্ভারটি শুরু করতে ফ্লাস্ক এক্সিকিউটেবল ব্যবহার করেন তবে আপনি flask run --host=0.0.0.0127.0.0.1 থেকে ডিফল্টটি পরিবর্তন করতে এবং অ স্থানীয় লোকাল সংযোগগুলিতে খুলতে পারেন। অন্যান্য উত্তরগুলি বর্ণনা করে এমন কনফিগারেশন এবং অ্যাপ্লিকেশন পদ্ধতিগুলি সম্ভবত আরও ভাল অনুশীলন তবে এটি কার্যকরও হতে পারে।

বাহ্যিকভাবে দৃশ্যমান সার্ভার আপনি যদি সার্ভারটি চালনা করেন তবে আপনি খেয়াল করবেন সার্ভারটি কেবলমাত্র আপনার নিজের কম্পিউটার থেকে অ্যাক্সেসযোগ্য, অন্য কোনও নেটওয়ার্কের নয়। এটি ডিফল্ট কারণ ডিবাগিং মোডে অ্যাপ্লিকেশনটির একজন ব্যবহারকারী আপনার কম্পিউটারে পাইথন কোড নির্বিচারে কার্যকর করতে পারে।

আপনার যদি ডিবাগারটি অক্ষম থাকে বা আপনার নেটওয়ার্কের ব্যবহারকারীদের উপর বিশ্বাস থাকে তবে আপনি কমান্ড লাইনে --host = 0.0.0.0 যুক্ত করে সার্ভারটিকে সর্বজনীনভাবে উপলভ্য করতে পারেন:

ফ্লাস্ক চালান - হোস্ট = 0.0.0.0 এটি আপনার অপারেটিং সিস্টেমকে সমস্ত পাবলিক আইপি শুনতে বলে tells

তথ্যসূত্র: http://flask.pocoo.org/docs/0.11/quickstart/


2
আমি জানি না অন্য কেউ এটির অভিজ্ঞতা অর্জন করেছে কিনা, তবে আমি কুইকস্টার্ট ডক্স অনুসারে প্রথমে এই পদ্ধতিটি চেষ্টা করেছিলাম, তবে কোনও অদ্ভুত কারণে আইপি চলতে থাকে 127.0.0.1(আমি আমার ফ্লাস্ককে কার্যকরভাবে নির্বাহযোগ্যভাবে সেটআপ করেছি, বা তাই মনে হয়েছিল, এটি ছিল না) নিশ্চিত আমি কী ভুল করছি)। যাইহোক, app.run(host='0.0.0.0')আমার সার্ভার ফাইলে অন্য উত্তরে উল্লিখিত হিসাবে যুক্ত করার পরে , আমি নেটওয়ার্ক জুড়ে পৃষ্ঠাটি অ্যাক্সেস করতে সক্ষম হয়েছি। আমি বর্ণনা করেছি এমন মত অন্য কারও কাছে সমস্যা আছে বা এর কোনও তথ্য আছে?
twknab

2
আমার জন্য, ফ্লাস্ক চালান - হোস্ট = 0.0.0.0 সমস্যাটি সমাধান করুন। আমি url -http: // <ip ঠিকানা>: 5000 অ্যাক্সেস করতে সক্ষম হয়েছি। প্রথমে আমি কমান্ডটি ব্যবহার করে মেশিনে কী কী বন্দরগুলি খোলা আছে তা যাচাই করেছিলাম - sudo ফায়ারওয়াল-সেমিডি - জোন = পাবলিক - লিস্ট-পোর্ট, তারপরে আমি জানতে পেরেছিলাম যে 5000 বন্দরটি খোলা নেই। আমি এই পোর্টটি কমান্ডটি ব্যবহার করে খুলেছি - sudo ফায়ারওয়াল-সেমিডি - জোন = পাবলিক - পারমানেন্ট - এডিডি-পোর্ট = 5000 / টিসিপি এর পরে সুডো ফায়ারওয়াল-সেমিডি - রিলোড। তারপরে, ফ্ল্যাস্ক অ্যাপটি চালান - ফ্লাস্ক চালান - হোস্ট = 0.0.0.0
পিন্টু কুমার

24

0.0.0.0 পদ্ধতিটি যদি কাজ না করে তবে এটি চেষ্টা করুন

বোরিং স্টাফ

লোকাল-সার্ভারের মাধ্যমে আমার অ্যাপ্লিকেশনটিকে অন্যান্য ডিভাইসগুলিতে (ল্যাপটপ এবং মোবাইল ফোন) অ্যাক্সেস করার জন্য ব্যক্তিগতভাবে আমি অনেক লড়াই করেছি। আমি 0.0.0.0 পদ্ধতিটি চেষ্টা করেছি, তবে ভাগ্য নেই। তারপরে আমি বন্দরটি পরিবর্তন করার চেষ্টা করেছি, তবে এটি কার্যকর হয়নি। সুতরাং, বিভিন্ন সংমিশ্রণগুলির একটি গুচ্ছ চেষ্টা করার পরে, আমি এটির কাছে পৌঁছেছি এবং এটি আমার অ্যাপ্লিকেশন স্থানীয়-সার্ভারে স্থাপন করার সমস্যাটি সমাধান করেছে।

ধাপ

  1. আপনার কম্পিউটারের স্থানীয় IPv4 ঠিকানা পান। এটি ipconfigউইন্ডোজ এবং ifconfigলিনাক্স এবং ম্যাকে টাইপ করে করা যেতে পারে ।

আইপিভি 4 (উইন্ডোজ)

দয়া করে নোট করুন: উপরের পদক্ষেপটি আপনি যে মেশিনটিতে অ্যাপ্লিকেশনটি সরবরাহ করছেন তার মেশিনে এবং আপনি যে মেশিনটিতে অ্যাক্সেস করছেন তাতে নয় performed এছাড়াও মনে রাখবেন, আপনি যদি নেটওয়ার্কে সংযোগ বিচ্ছিন্ন ও পুনরায় সংযোগ স্থাপন করেন তবে আইপিভি 4 ঠিকানাটি পরিবর্তিত হতে পারে।

  1. এখন, অর্জিত আইপিভি 4 ঠিকানা দিয়ে কেবল ফ্লাস্ক অ্যাপটি চালান run

    flask run -h 192.168.X.X

    উদাহরণস্বরূপ, আমার ক্ষেত্রে (চিত্রটি দেখুন), আমি এটিকে এটির মতো চালিয়েছি:

    flask run -h 192.168.1.100

ফ্লাস্ক অ্যাপ্লিকেশন চলছে

আমার মোবাইল ডিভাইসে

আমার মোবাইল ফোন থেকে স্ক্রিনশট

.চ্ছিক স্টাফ

আপনি যদি উইন্ডোজে এই পদ্ধতিটি সম্পাদন করে থাকেন এবং সিআইএল হিসাবে পাওয়ার শেল ব্যবহার করে থাকেন এবং আপনি এখনও ওয়েবসাইটটি অ্যাক্সেস করতে সক্ষম না হন তবে অ্যাপটি চালাচ্ছে এমন শেলটিতে একটি CTRL + C কমান্ড চেষ্টা করুন try পাওয়ার শেল কখনও কখনও হিমশীতল হয়ে যায় এবং এটি পুনরুদ্ধারে এক চিমটি দরকার ch এটি করার ফলে এমনকি সার্ভারটি শেষ হয়ে যায়, তবে এটি কখনও কখনও কৌশলটি করে।

এটাই. আপনি যদি এই সহায়ক খুঁজে পান তবে থাম্বস ছেড়ে দিন 😉

আরও কিছু alচ্ছিক জিনিস

আমি একটি সংক্ষিপ্ত পাওয়ারশেল স্ক্রিপ্ট তৈরি করেছি যা আপনার আইপি অ্যাড্রেসটি পাবেন যখনই আপনার প্রয়োজন হবে:

$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
হ্যাঁ! এটা কাজ করে। আমি ফ্লাস্কে আইপিভি 4 আইপি সেট করে আমার মোবাইলে এটি পেতে সক্ষম। আশা করি এটি
অন্যকেও

@ এনউইলো দো মোবাইল এবং যে মেশিনে আমি পরিবেশন করি তারা একই ওয়াইফাই / নেটওয়ার্কের সাথে সংযুক্ত থাকে।
সাচিন রাথড

পছন্দ করুন তাদের করতে হবে. তারা একই আইপি গেটওয়েটি অ্যাক্সেস করতে পারে।
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
ফ্ল্যাশ কনফিগারেশনে হোস্টনাম এবং পোর্টনাম্বার সংরক্ষণ করার জন্য এটি একটি দুর্দান্ত উপায়। আমি ঠিক এই সমাধান খুঁজছিলাম।
সংকলন

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
পাইড

আচার-ব্যবহার ঠিক করতে আপনার কাছে অ্যাডমিনস্ট্রেটর হিসাবে চালাতে সঙ্গে পাইথন ফাইলটি রান এবং চেক কোন পোর্ট উইন্ডোজ চলছে প্রয়োজন 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

সিএমডি (কমান্ড প্রম্পট) এ আপনার প্রকল্পের পথে যান এবং নিম্নলিখিত আদেশটি কার্যকর করুন: -

FLASK_APP = ABC.py সেট করুন

সেট FLASK_ENV = বিকাশ

ফ্লাস্ক রান -h [আপনার আইআইপি] -পি 8080

আপনি সিএমডি-তে নিম্নলিখিত ও / পি পাবেন: -

  • ফ্লাস্ক অ্যাপ্লিকেশন "expirement.py" পরিবেশন করা হচ্ছে (অলস লোডিং)
    • পরিবেশ: বিকাশ
    • ডিবাগ মোড: চালু
    • স্ট্যাট দিয়ে পুনঃসূচনা হচ্ছে
    • ডিবাগার সক্রিয়!
    • ডিবাগার পিন: 199-519-700
    • চলমান HTTP: // [yourIP]: 8080 / (Ctrl + C টিপুন প্রস্থান করার জন্য)

এখন আপনি http: // [yourIP]: 8080 / url ব্যবহার করে অন্য ফ্ল্যাশ অ্যাপ্লিকেশনটি অন্য মেশিনে অ্যাক্সেস করতে পারেন


4

যদি আপনার ফ্লাস্ক সার্ভার অ্যাক্সেস করতে সমস্যা হয়, পাইচার্ম ব্যবহার করে নিযুক্ত করা হয় , তবে নিম্নলিখিতগুলিকে বিবেচনা করুন:

পাইচার্ম আপনার মূল .py ফাইলটি সরাসরি চালায় না, সুতরাং কোনও কোড if __name__ == '__main__':কার্যকর করা হবে না এবং কোনও পরিবর্তন (যেমন app.run(host='0.0.0.0', port=5000)) কার্যকর হবে না।

পরিবর্তে, আপনার রান কন্ডিফিকেশনগুলি ব্যবহার করে ফ্ল্যাশ সার্ভারটি কনফিগার করা উচিত, বিশেষত অতিরিক্ত বিকল্প ক্ষেত্রের --host 0.0.0.0 --port 5000মধ্যে রেখে ।

ফ্লাস্ক সার্ভার পাইচার্মের সিফিগ্যুরেশনগুলি চালান

পাইচার্মে ফ্লাস্ক সার্ভারটি কনফিগার করার বিষয়ে আরও


এটি আসলে আমার সমস্ত সমস্যার সমাধান করেছে এবং এই প্রশ্নের সঠিক উত্তর হওয়া উচিত!
আলবার্তো বেলিনি

3

আমার একই সমস্যা ছিল, আমি পাইকার্মকে সম্পাদক হিসাবে ব্যবহার করি এবং যখন আমি প্রকল্পটি তৈরি করি তখন পাইচার্ম একটি ফ্লাস্ক সার্ভার তৈরি করে। আমি যা করেছি তা হল নীচের উপায়ে পাইথন সহ একটি সার্ভার তৈরি করা;

পাইথন সার্ভার পাইচার্ম কনফিগার করুন মূলত আমি যা করেছি তা একটি নতুন সার্ভার তৈরি করেছিল তবে অজগর না হলে ফ্লাস্ক

আমি এটি আপনাকে সাহায্য করে আশা করি


দয়া করে কেবল একটি চিত্র পোস্ট করবেন না - বিশেষত আপনি কী করেন যা সমস্যার সমাধান করে তা বর্ণনা করুন।
সার্টিফর্ম পারফরম্যান্স

আরে, অবশ্যই যদি আমি উত্তরটি উন্নত করতে ইতিমধ্যে পোস্টটি সম্পাদনা করি।
জুয়ানেস 30

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 তালিকা ফলাফল

এই নিয়মগুলি হ্যান্ডশেকিংয়ে আউটপুট টিসিপি গুরুত্বপূর্ণ প্যাকেটগুলি নিষিদ্ধ করে। এগুলি মুছে ফেললে সমস্যাটি চলে যায়।


3

আমার জন্য আমি উপরের উত্তরটি অনুসরণ করে এটিকে কিছুটা সংশোধন করেছি:

  1. কমান্ড প্রম্পটে আইকনফিগ ব্যবহার করে আপনার আইপিভি 4 ঠিকানাটি ধরুন
  2. ফ্ল্যাশ কোড উপস্থিত রয়েছে এমন ফাইলটিতে যান
  3. মূল ফাংশনে app.run লিখুন (হোস্ট = 'আপনার আইপিভি 4 ঠিকানা')

উদাহরণ:

এখানে চিত্র বর্ণনা লিখুন


1

প্রকল্পের পাথ সেট FLASK_APP = ABC.py SET FLASK_ENV = বিকাশে যান

ফ্লাস্ক চালানো - [আপনার আইআইপি] -p 8080 আপনি সিএমডি-তে ও / পি অনুসরণ করবেন: - * ফ্লাস্ক অ্যাপ্লিকেশন "মেয়াদোত্তীর্ণ" প্রদান করা (অলস লোডিং) * পরিবেশ: উন্নয়ন * ডিবাগ মোড: অন * স্ট্যাটাস দিয়ে পুনরায় চালু করা * ডিবাগার সক্রিয় ! * ডিবাগার পিন: 199-519-700 * http: // [আপনার আইআইপি] এ চলছে: 8080 / (ছাড়ার জন্য সিটিআরএল + সি টিপুন)


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

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.