Mam serwer Flask działający przez port 5000 i jest w porządku. Mogę uzyskać do niego dostęp pod adresem http://example.com:5000
Ale czy można po prostu uzyskać do niego dostęp na stronie http://example.com ? Zakładam, że oznacza to, że muszę zmienić port z 5000 na 80. Ale kiedy spróbuję tego na Flask, pojawia się ten komunikat o błędzie po uruchomieniu.
Traceback (most recent call last):
File "xxxxxx.py", line 31, in <module>
app.run(host="0.0.0.0", port=int("80"), debug=True)
File "/usr/local/lib/python2.6/dist-packages/flask/app.py", line 772, in run
run_simple(host, port, self, **options)
File "/usr/local/lib/python2.6/dist-packages/werkzeug/serving.py", line 706, in run_simple
test_socket.bind((hostname, port))
File "<string>", line 1, in bind
socket.error: [Errno 98] Address already in use
Bieganie lsof -i :80
powraca
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
apache2 467 root 3u IPv4 92108840 0t0 TCP *:www (LISTEN)
apache2 4413 www-data 3u IPv4 92108840 0t0 TCP *:www (LISTEN)
apache2 14346 www-data 3u IPv4 92108840 0t0 TCP *:www (LISTEN)
apache2 14570 www-data 3u IPv4 92108840 0t0 TCP *:www (LISTEN)
apache2 14571 www-data 3u IPv4 92108840 0t0 TCP *:www (LISTEN)
apache2 14573 www-data 3u IPv4 92108840 0t0 TCP *:www (LISTEN)
Czy najpierw muszę zabić te procesy? Czy to jest bezpieczne? A może jest inny sposób, aby Flask działał na porcie 5000, ale domena strony głównej jakoś przekierowała?
python
networking
flask
port
drżenie kwantowe
źródło
źródło
Odpowiedzi:
Wyrzuca ten komunikat o błędzie, ponieważ masz
apache2
port 80.Jeśli jest to do opracowania, zostawiłbym to tak, jak jest na porcie 5000.
Jeśli jest do produkcji:
Niepolecane
apache2
pierwszy;Niezalecane, jak stwierdzono w dokumentacji:
Zalecana
HTTP
Ruch proxy przezapache2
Flask.W ten sposób
apache2
może obsłużyć wszystkie pliki statyczne (w których jest bardzo dobry - znacznie lepiej niż serwer debugowania wbudowany w Flask) i działać jako odwrotne proxy dla zawartości dynamicznej, przekazując te żądania do Flask.Oto link do oficjalnej dokumentacji dotyczącej konfigurowania Flask za pomocą Apache + mod_wsgi.
Edycja 1 - Wyjaśnienie @Djack
Kiedy żądanie przychodzi do serwera na porcie 80 (
HTTP
) lub porcie 443 (HTTPS
), serwer WWW, taki jak Apache lub Nginx, obsługuje połączenie żądania i określa, co z nim zrobić. W naszym przypadku otrzymane żądanie należy skonfigurować tak, aby było przekazywane do Flask na protokole WSGI i obsługiwane przez kod Pythona. To jest część „dynamiczna”.Konfigurowanie serwera WWW ma kilka zalet, jak wyżej;
źródło
Proxy HTTP traffic to Flask through apache2
” i „reverse proxy for dynamic content
”?1- Zatrzymaj inne aplikacje korzystające z portu 80. 2- Uruchom aplikację z portem 80:
źródło
W przypadku serwera widocznego z zewnątrz, na którym nie używasz apache lub innego serwera WWW, który po prostu wpisujesz
źródło
CMD flask run --host=0.0.0.0 --port=$PORT
Wciąż próbuję w moim Dockerfile (z powodów heroku) i ciągle pojawiają się błędy związane z potrzebą liczby całkowitej dla mojego portuJeśli użyjesz następujących opcji, aby zmienić port lub host:
użyj następującego kodu, aby uruchomić serwer (moje główne wejście do skrzynki to app.py):
zamiast używać:
źródło
Jeśli chcesz, aby Twoja aplikacja korzystała z tego samego portu, tj. Portu = 5000, uruchom tylko to polecenie w swoim terminalu:
a następnie uruchom:
Jeśli chcesz uruchomić na określonym porcie, np. Jeśli chcesz uruchomić na porcie = 80, w głównym pliku po prostu wspomnij o tym:
źródło
Wygodnym sposobem jest użycie pakietu
python-dotenv
: odczytuje.flaskenv
plik, w którym można przechowywać zmienne środowiskowe dla kolby.pip install python-dotenv
.flaskenv
w katalogu głównym aplikacjiWewnątrz pliku określasz:
Następnie wystarczy uruchomić aplikację
flask run
i uzyskać dostęp do aplikacji na tym porcie.Należy pamiętać, że
FLASK_RUN_HOST
domyślne127.0.0.1
iFLASK_RUN_PORT
domyślne5000
.źródło
To jedyne rozwiązanie, które działało dla mnie na Ubuntu-18.
W pliku
app.py
użyj:Powyższy kod da ten sam błąd uprawnień, chyba że
sudo
zostanie użyty do uruchomienia:źródło
Problem polega na tym, że masz już uruchomiony serwer Apache, który już korzysta z portu 80. Możesz więc:
Kill apache: Prawdopodobnie powinieneś to zrobić poprzez
/etc/init.d/apache2 stop
, zamiast po prostu ich zabijać.Wdróż aplikację flask w procesie apache, jak opisuje flask w apache .
źródło
Musiałem ustawić
FLASK_RUN_PORT
w moim środowisku określony numer portu. Następnym razem, gdy uruchomisz aplikację, Flask załaduje tę zmienną środowiskową z wybranym numerem portu.źródło
Nie musisz zmieniać numeru portu dla swojej aplikacji, wystarczy skonfigurować serwer www (nginx lub apache) do zapytań proxy do portu flask. Zwróć uwagę na
uWSGI
.źródło
ustaw port, przy
app.run(port=80,debug=True)
którym powinieneś ustawić debugowanie na true, gdy używasz devźródło
Najłatwiejsze i najlepsze rozwiązanie
Zapisz plik .py w folderze. W tym przypadku nazwa mojego folderu to test. W wierszu polecenia uruchom następujące polecenie
----------------- Następujące zostaną zwrócone ----------------
Teraz w przeglądarce wpisz: http://127.0.0.1:8000 . Dzięki
źródło
W moim scenariuszu następujące kroki działały jak urok:
Instalowanie pakietu:
Tworzenie ukrytego pliku w moim katalogu aplikacji „flaskr / .flaskenv”
Dodanie następującej treści:
Na koniec jeszcze raz uruchom komendę flask:
Wersja, nad którą pracuję, to:
źródło