Comment accéder au serveur Web Django local depuis le monde extérieur

177

J'ai suivi les instructions ici pour exécuter Django à l'aide du serveur Web intégré et j'ai pu l'exécuter avec succès en utilisant python manage.py runserver. Si j'accède à 127.0.0.1:port localement depuis le serveur Web, j'obtiens la page Django indiquant que cela a fonctionné.

Je me rends compte que le serveur Web Django n'est pas un serveur de production, mais il est important pour moi à des fins de test de pouvoir y accéder depuis le monde extérieur - c'est-à-dire pas depuis un navigateur Web sur le serveur, mais depuis un ordinateur différent.

J'ai essayé:

http://mywebserver:port_django_runs_on

Mais cela n'a pas fonctionné. J'ai également essayé d'utiliser l'IP à la place (basé sur ifconfig) pour accéder:

http://myipaddress:port_django_runs_on 

qui n'a pas fonctionné non plus.

Le serveur Web fonctionne donc il doit être accessible de l'extérieur, je ne sais pas comment. J'utilise Linux avec Apache, bien que je n'ai pas configuré Django avec Apache.

auriez vous des idées pour faire ça?

l'homme d'étain
la source
3
Pourquoi ne pas configurer Django avec Apache et mod_wsgi? Pourquoi ne pas le faire correctement?
S.Lott
@ S.Lott Que faire si vous avez de nombreux projets différents sur le serveur que vous souhaitez exécuter à des moments différents et que vous et vous ne voulez pas reconfigurer Apache à chaque fois que vous ajoutez un nouveau projet?
robenkleene

Réponses:

304

Vous devez exécuter le serveur de développement de manière à ce qu'il écoute sur l'interface de votre réseau.

Par exemple

python manage.py runserver 0.0.0.0:8000

écoute sur chaque interface sur le port 8000.

Peu importe que vous accédiez au serveur Web avec l'adresse IP ou le nom d'hôte. Je suppose que vous êtes toujours dans votre propre LAN.
Si vous voulez vraiment accéder au serveur de l'extérieur, vous devez également configurer votre routeur pour transférer le port, par exemple 8000vers votre serveur.


Vérifiez votre pare-feu sur votre serveur si les connexions entrantes au port utilisé sont autorisées!

En supposant que vous puissiez accéder à votre serveur Apache de l'extérieur avec succès, vous pouvez également essayer ceci:

  • Arrêtez le serveur Apache pour que le port 80soit libre.
  • Démarrez le serveur de développement avec sudo python manage.py runserver 0.0.0.0:80
Félix Kling
la source
1
L'utilisation de "python manage.py runserver 0.0.0.0:8000" donne toujours le même résultat. Pouvez-vous en dire plus sur la façon dont je peux configurer Apache pour gérer ce port?
1
@ user248237: Vous exécutez le serveur de développement, cela n'a aucun rapport avec le serveur Web Apache. Le serveur de développement est un serveur Web autonome.
Felix Kling
Il nécessite des privilèges spéciaux pour utiliser le port 80. Vous pouvez essayer un sudo python manage.py runserver 80.
S.Lott
@ S.Lott: Oh merci. Je sais, c'était dans mon esprit quand je l'ai écrit mais je ne suis pas arrivé au clavier;)
Felix Kling
1
Permettre à tout le monde a ALLOWED_HOSTS = ['*']travaillé pour moi d'accéder à l'application Django sur un Mac à partir de mon téléphone Android
Anupam
28

J'ai dû ajouter cette ligne à settings.py afin de le faire fonctionner (sinon, il a montré une erreur lors de l'accès depuis un autre ordinateur)

ALLOWED_HOSTS = ['*']

puis a exécuté le serveur avec:

python manage.py runserver 0.0.0.0:9595

Assurez-vous également que le pare-feu autorise les connexions à ce port

Bonfix Ngetich
la source
14

Choisissez-en un ou plusieurs parmi:

  • Votre application n'écoute pas correctement sur l'adresse IP prévue: PORT
    • Parce que vous ne l'avez pas configuré avec succès
    • Parce que l'utilisateur n'a pas l'autorisation de
  • Votre application écoute avec succès sur l'adresse IP prévue: PORT, mais les clients ne peuvent pas l'atteindre car
    • Le serveur iptables local l'empêche.
    • Un pare-feu l'empêche.

Ainsi, vous pouvez vérifier que votre application écoute correctement en s'exécutant en lsof -itant que root sur la machine et recherchez une pythonentrée avec le port correspondant que vous avez spécifié.

Les utilisateurs non root ne peuvent généralement pas se lier aux ports <1024.

Vous devrez iptables -nvLvérifier s'il existe une règle qui empêcherait l'accès à l'ip: port auquel vous essayez de lier votre application.

S'il existe un pare-feu en amont et que vous n'en savez pas grand-chose, vous devrez en parler à vos administrateurs réseau.

MattH
la source
pouvez-vous expliquer you haven't configured it successfully?
ChillarAnand
@ChillarAnand: il vous suffit de vérifier que le django runserverécoute réellement là où vous le souhaitez, par exemple en utilisant lsof.
MattH
@ChillarAnand j'ai suivi les étapes que vous avez indiquées. En utilisant, lsofje vois une entrée python pour mon port. Mais mon lien ie myip: 8000 ne répond pas. Je sais que c'est tard mais toutes les suggestions vous aideront.
WaterRocket8236
8

fais juste ceci:

python manage.py runserver 0:8000

par la commande ci-dessus, vous le liez réellement à l'adresse IP externe. alors maintenant, lorsque vous accédez à votre adresse IP avec le numéro de port, vous pourrez y accéder dans le navigateur sans aucun problème.

tapez simplement ce qui suit dans la barre d'adresse du navigateur:

<your ip address>:8000

par exemple:

192.168.1.130:8000

vous devrez peut-être modifier les paramètres.py ajouter ce qui suit dans les paramètres.py à la dernière ligne:

ALLOWED_HOSTS = ['*']

j'espère que cela aidera ...

Joish
la source
5

Pour les utilisateurs AWS.

J'ai dû utiliser les étapes suivantes pour y arriver.

1) Assurez-vous que pip et django sont installés au niveau sudo

  • sudo apt-get installer python-pip
  • sudo pip installer django

2) Assurez-vous que les règles liées au groupe de sécurité incluent http sur le port 80 pour 0.0.0.0/0

  • configuré via la console AWS

3) Ajouter une adresse IP publique et un DNS à ALLOWED_HOSTS

  • ALLOWED_HOSTS est un objet de liste que vous pouvez trouver dans settings.py
  • ALLOWED_HOSTS = ["75.254.65.19", "ec2-54-528-27-21.compute-1.amazonaws.com"]

4) Lancer le serveur de développement avec sudo sur le port 80

  • sudo python manage.py runserver 0:80

Site maintenant disponible sur l'un des sites suivants (pas besoin de: 80 car c'est par défaut pour http):

  • [DNS public] c.-à-d. Ec2-54-528-27-21.compute-1.amazonaws.com
  • [IP publique] soit 75.254.65.19
datavoredan
la source
2

Je vais ajouter ceci ici:

  1. sudo python manage.py runserver 80

  2. Accédez à votre téléphone ou à votre ordinateur et entrez l'adresse IP interne de votre ordinateur (par exemple 192.168.0.12) dans le navigateur.

À ce stade, vous devez être connecté au serveur Django.

Cela devrait également fonctionner sans sudo:

python manage.py runserver 0.0.0.0:8000
James111
la source
0

Si vous utilisez Docker, vous devez vous assurer que les ports sont également exposés

Amjad Al Taleb
la source
0

MISE À JOUR 2020 ESSAYEZ DE CETTE MANIÈRE

python manage.py runserver yourIp:8000

ALLOWED_HOSTS = ["*"]
Kashif
la source