J'ai un serveur Flask passant par le port 5000, et ça va. Je peux y accéder sur http://example.com:5000
Mais est-il possible d'y accéder simplement sur http://example.com ? Je suppose que cela signifie que je dois changer le port de 5000 à 80. Mais lorsque j'essaie cela sur Flask, je reçois ce message d'erreur lorsque je l'exécute.
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
Exécution des lsof -i :80
retours
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)
Dois-je d'abord tuer ces processus? Est-ce sûr? Ou existe-t-il un autre moyen de faire fonctionner Flask sur le port 5000 mais de rediriger le domaine du site Web principal d'une manière ou d'une autre?
python
networking
flask
port
quantumtremor
la source
la source
Réponses:
Il lance donc ce message d'erreur car vous avez
apache2
exécuté sur le port 80.Si c'est pour le développement, je le laisserais tel quel sur le port 5000.
Si c'est pour la production:
Non recommandé
apache2
abord;Non recommandé comme indiqué dans la documentation:
conseillé
HTTP
Trafic proxy viaapache2
Flask.De cette façon,
apache2
peut gérer tous vos fichiers statiques (ce qui est très bon - beaucoup mieux que le serveur de débogage intégré à Flask) et agir comme un proxy inverse pour votre contenu dynamique, en transmettant ces demandes à Flask.Voici un lien vers la documentation officielle sur la configuration de Flask avec Apache + mod_wsgi.
Edit 1 - Clarification pour @Djack
Lorsqu'une demande parvient au serveur sur le port 80 (
HTTP
) ou le port 443 (HTTPS
), un serveur Web comme Apache ou Nginx gère la connexion de la demande et détermine ce qu'il faut en faire. Dans notre cas, une demande reçue doit être configurée pour être transmise à Flask sur le protocole WSGI et gérée par le code Python. Il s'agit de la partie "dynamique".Il y a quelques avantages à configurer votre serveur Web comme ci-dessus;
la source
Proxy HTTP traffic to Flask through apache2
" et "reverse proxy for dynamic content
"?1- Arrêtez les autres applications utilisant le port 80. 2- Exécutez l'application avec le port 80:
la source
Pour un serveur visible de l'extérieur, où vous n'utilisez pas Apache ou un autre serveur Web que vous tapez simplement
la source
CMD flask run --host=0.0.0.0 --port=$PORT
dans mon Dockerfile (pour des raisons de Heroku) et je reçois toujours des erreurs sur la nécessité d'avoir un entier pour mon portSi vous utilisez ce qui suit pour modifier le port ou l'hôte:
utilisez le code suivant pour démarrer le serveur (mon entrée principale pour flask est app.py):
à la place d'utiliser:
la source
Si vous voulez que votre application sur le même port, c'est-à-dire port = 5000, alors juste dans votre terminal exécutez cette commande:
puis exécutez:
Si vous souhaitez exécuter sur un port spécifié, par exemple si vous souhaitez exécuter sur port = 80, dans votre fichier principal, mentionnez simplement ceci:
la source
Un moyen pratique est d'utiliser le package
python-dotenv
: il lit un.flaskenv
fichier dans lequel vous pouvez stocker des variables d'environnement pour flask.pip install python-dotenv
.flaskenv
dans le répertoire racine de votre applicationDans le fichier que vous spécifiez:
Après cela, il vous suffit d'exécuter votre application avec
flask run
et d'accéder à votre application sur ce port.Veuillez noter que par
FLASK_RUN_HOST
défaut127.0.0.1
et parFLASK_RUN_PORT
défaut5000
.la source
C'est la seule solution qui a fonctionné pour moi sur Ubuntu-18.
Dans le fichier
app.py
, utilisez:Le code ci-dessus donnera la même erreur d'autorisation sauf s'il
sudo
est utilisé pour l'exécuter:la source
Votre problème est que vous avez déjà un serveur Web Apache en cours d'exécution qui utilise déjà le port 80. Vous pouvez donc:
Kill apache: Vous devriez probablement le faire via
/etc/init.d/apache2 stop
, plutôt que de simplement les tuer.Déployez votre application flask dans votre processus apache, comme décrit flask dans apache .
la source
J'ai dû définir
FLASK_RUN_PORT
dans mon environnement le numéro de port spécifié. La prochaine fois que vous lancerez votre application, Flask chargera cette variable d'environnement avec le numéro de port que vous avez sélectionné.la source
Vous n'avez pas besoin de changer le numéro de port pour votre application, il suffit de configurer votre serveur www (nginx ou apache) pour des requêtes proxy sur le port flask. Faites attention
uWSGI
.la source
définissez le port avec
app.run(port=80,debug=True)
vous devez définir le débogage sur true lorsque le devla source
La solution la plus simple et la meilleure
Enregistrez votre fichier .py dans un dossier. Dans ce cas, le nom de mon dossier est test. Dans l'invite de commandes, exécutez ce qui suit
----------------- Ce qui suit sera retourné ----------------
Maintenant sur votre type de navigateur: http://127.0.0.1:8000 . Merci
la source
Dans mon scénario, les étapes suivantes ont fonctionné comme un charme:
Installation du package:
Créer un fichier caché dans mon répertoire d'application "flaskr / .flaskenv"
Ajout du contenu suivant:
Enfin, exécutez la commande flask une fois de plus:
La version sur laquelle je travaille est:
la source