Chociaż jest to możliwe, nie należy używać serwera deweloperskiego Flask podczas produkcji. Serwer deweloperski Flask nie jest zaprojektowany jako szczególnie bezpieczny, stabilny ani wydajny. Prawidłowe rozwiązania znajdują się w dokumentacji dotyczącej wdrażania .
Dodaj parametr do swojego app.run()
. Domyślnie działa na komputerze lokalnym, zmień go app.run(host= '0.0.0.0')
na adres IP komputera.
Udokumentowane w witrynie Flask w sekcji „Zewnętrznie widoczny serwer” na stronie Szybki start :
Serwer widoczny z zewnątrz
Jeśli uruchomisz serwer, zauważysz, że serwer jest dostępny tylko z twojego komputera, a nie z jakiegokolwiek innego w sieci. Jest to ustawienie domyślne, ponieważ w trybie debugowania użytkownik aplikacji może wykonać dowolny kod w języku Python na komputerze. Jeśli wyłączono debugowanie lub ufasz użytkownikom w sieci, możesz udostępnić serwer publicznie.
Wystarczy zmienić wywołanie run()
metody, aby wyglądała następująco:
app.run(host='0.0.0.0')
Mówi to systemowi operacyjnemu, aby nasłuchiwał na publicznym IP.
mymacname.local
.flask run --host 0.0.0.0
żeby to działało.Jeśli używasz pliku wykonywalnego flask do uruchomienia serwera, możesz go użyć
flask run --host=0.0.0.0
do zmiany wartości domyślnej z 127.0.0.1 i otwarcia jej na połączenia nielokalne. Metody config i app.run, które opisują inne odpowiedzi, są prawdopodobnie lepszą praktyką, ale może to być również przydatne.Odniesienie: http://flask.pocoo.org/docs/0.11/quickstart/
źródło
127.0.0.1
(ustawiłem mój plik wykonywalny Flask poprawnie, a przynajmniej tak się wydawało, nie był jasne, co robiłem źle). Jednak po dodaniu,app.run(host='0.0.0.0')
jak wspomniano w innej odpowiedzi do mojego pliku serwera, mogłem uzyskać dostęp do strony w sieci. Czy ktoś jeszcze ma problem taki jak ten, który opisałem lub ma jakieś informacje na jego temat?Spróbuj tego, jeśli metoda 0.0.0.0 nie działa
Nudne rzeczy
Dużo osobiście walczyłem, aby moja aplikacja była dostępna dla innych urządzeń (laptopów i telefonów komórkowych) za pośrednictwem lokalnego serwera. Próbowałem metody 0.0.0.0, ale bez powodzenia. Potem próbowałem zmienić port, ale to po prostu nie działało. Tak więc, po wypróbowaniu kilku różnych kombinacji, doszedłem do tego i rozwiązało to mój problem z wdrożeniem mojej aplikacji na serwerze lokalnym.
Kroki
ipconfig
w systemie Windows,ifconfig
Linux i Mac.Uwaga: powyższy krok należy wykonać na komputerze, na którym aplikacja jest obsługiwana, a nie na komputerze, na którym uzyskujesz do niej dostęp. Należy również pamiętać, że adres IPv4 może ulec zmianie, jeśli odłączysz się i ponownie połączysz z siecią.
Teraz wystarczy uruchomić aplikację kolby z uzyskanym adresem IPv4.
flask run -h 192.168.X.X
Np. W moim przypadku (patrz zdjęcie) uruchomiłem go jako:
flask run -h 192.168.1.100
Na moim urządzeniu mobilnym
Opcjonalne rzeczy
Jeśli wykonujesz tę procedurę w systemie Windows i używasz Power Shell jako interfejsu CLI, a nadal nie możesz uzyskać dostępu do witryny, wypróbuj polecenie CTRL + C w powłoce, w której działa aplikacja. Power Shell czasami się zamarza i potrzebuje ożywienia, by ożywić. Może to nawet zakończyć serwer, ale czasem to rozwiązuje.
Otóż to. Poddaj kciuki, jeśli uznasz to za pomocne
Więcej opcjonalnych rzeczy
Stworzyłem krótki skrypt Powershell, który dostarczy ci twój adres IP, gdy tylko będziesz go potrzebować:
Zapisz go w pliku z rozszerzeniem .ps1 (dla PowerShell) i uruchom go przed uruchomieniem aplikacji. Możesz zapisać go w folderze projektu i uruchomić jako:
Uwaga: Zapisałem powyższy kod powłoki w getIP.ps1.
Cool.👌
źródło
Jeśli Twoja
cool
aplikacja ma konfigurację załadowaną z zewnętrznego pliku, jak w poniższym przykładzie, nie zapomnij zaktualizować odpowiedniego pliku konfiguracyjnego za pomocą HOST = „0.0.0.0”źródło
Dodaj poniższe wiersze do swojego projektu
źródło
OSError: [WinError 10013] An attempt was made to access a socket in a way forbidden by its access permissions
netstat -na|findstr 5005
.Sprawdź, czy dany port jest otwarty na serwerze, aby obsługiwał klienta, czy nie?
w dystrybucji Ubuntu lub Linux
Skonfiguruj aplikację do obsługi zdalnych żądań
źródło
Przejdź do ścieżki projektu na CMD (wiersz polecenia) i wykonaj następujące polecenie: -
ustaw FLASK_APP = ABC.py
SET FLASK_ENV = programowanie
uruchom kolbę -h [twójIP] -p 8080
dostaniesz następujące o / p na CMD: -
Teraz możesz uzyskać dostęp do aplikacji kolby na innym komputerze, używając http: // [twójIP]: 8080 / url
źródło
Jeśli masz problemy z dostępem do serwera Flask, wdrożonego za pomocą PyCharm , weź pod uwagę następujące kwestie :
PyCharm nie uruchamia twojego głównego pliku .py bezpośrednio, więc żaden kod w nim
if __name__ == '__main__':
nie zostanie wykonany, a wszelkie zmiany (jakapp.run(host='0.0.0.0', port=5000)
) nie wejdą w życie.Zamiast tego należy skonfigurować serwer Flask za pomocą opcji Uruchom konfiguracje, w szczególności umieszczając
--host 0.0.0.0 --port 5000
w polu Opcje dodatkowe .Więcej informacji o konfigurowaniu serwera Flask w PyCharm
źródło
Dla mnie podążyłem za powyższą odpowiedzią i nieco ją zmodyfikowałem:
Na przykład:
źródło
Miałem ten sam problem, używam PyCharm jako edytora, a kiedy tworzyłem projekt, PyCharm stworzył serwer Flask. Stworzyłem serwer z Pythonem w następujący sposób;
w zasadzie to, co zrobiłem, to stworzenie nowego serwera, ale jeśli nie, to kolba
Mam nadzieję, że Ci to pomoże
źródło
Ta odpowiedź nie dotyczy wyłącznie kolby, ale powinna mieć zastosowanie do wszystkich, którzy nie mogą połączyć usługi z innego problemu z hostem .
netstat -ano | grep <port>
aby sprawdzić, czy adres to 0.0.0.0 lub ::. Jeśli jest to 127.0.0.1, dotyczy to tylko żądań lokalnych.Dzisiaj uruchamiam aplikację flask jak zwykle, ale zauważyłem, że nie można połączyć się z innym serwerem. Następnie uruchamiam
netstat -ano | grep <port>
, a adres lokalny to::
lub0.0.0.0
(próbowałem obu i wiem, że 127.0.0.1 zezwala tylko na połączenie z lokalnego hosta). Potem użyłemtelnet host port
, wynik jest jakconnect to ...
. To bardzo dziwne. Pomyślałem wtedy, że lepiej to sprawdzićtcpdump -i any port <port> -w w.pcap
. Zauważyłem, że wszystko wygląda tak:Następnie, sprawdzając
iptables --list
sekcję WYJŚCIE, zobaczyłem kilka zasad:zasady te zabraniają wysyłania ważnych pakietów tcp podczas uzgadniania. Po ich usunięciu problem zniknął.
źródło
przejdź do zestawu ścieżek projektu FLASK_APP = ABC.py SET FLASK_ENV = programowanie
uruchom flask -h [twójIP] -p 8080 będziesz śledził o / p na CMD: - * Serving Flask app "expirement.py" (leniwe ładowanie) * Środowisko: programowanie * Tryb debugowania: włączony * Ponowne uruchamianie ze stat * Debugger jest aktywny ! * PIN debugera: 199-519-700 * Działa na http: // [twójIP]: 8080 / (Naciśnij CTRL + C, aby wyjść)
źródło
Możesz także ustawić hosta (aby udostępnić go w sieci adresowi IP) i port za pomocą zmiennych środowiskowych.
Zobacz Jak uzyskać wszystkie dostępne opcje poleceń, aby ustawić zmienne środowiskowe?
źródło
Utwórz plik
.flaskenv
w katalogu głównym projektu.Parametry w tym pliku to zwykle:
Jeśli masz środowisko wirtualne, aktywuj je i zrób
pip install python-dotenv
.Ten pakiet będzie używał
.flaskenv
pliku, a zawarte w nim deklaracje będą automatycznie importowane między sesjami terminali.To możesz zrobić
flask run
źródło