193 votes

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

J'ai suivi les instructions aquí pour exécuter Django en utilisant le 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 à partir du serveur Web, j'obtiens la page Django indiquant que le processus a fonctionné.

Je réalise 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 non pas depuis un navigateur web sur le serveur, mais depuis un autre ordinateur.

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, il doit donc être accessible de l'extérieur, mais je ne sais pas comment. J'utilise Linux avec Apache, mais je n'ai pas configuré Django avec Apache.

Avez-vous des idées sur la manière de procéder ?

3 votes

Pourquoi ne pas configurer Django avec Apache et mod_wsgi ? Pourquoi ne pas le faire correctement ?

0 votes

@S.Lott Et si vous avez de nombreux projets différents sur le serveur que vous voulez exécuter à des moments différents et que vous ne voulez pas reconfigurer Apache à chaque fois que vous ajoutez un nouveau projet ?

0 votes

334voto

Felix Kling Points 247451

Vous devez exécuter le serveur de développement de telle sorte qu'il écoute sur l'interface à votre réseau.

Par exemple

python manage.py runserver 0.0.0.0:8000

écoute chaque sur le port 8000.

Il importe peu que vous accédiez au serveur Web par l'IP ou le nom d'hôte. Je suppose que vous êtes toujours dans votre propre réseau local.
Si vous voulez vraiment accéder au serveur depuis l'extérieur, vous devez également configurer votre routeur pour qu'il transfère le port, par exemple. 8000 sur votre serveur.


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

En supposant que vous puissiez accéder à votre serveur Apache depuis l'extérieur, vous pouvez également essayer ceci :

  • Arrêtez le serveur Apache, pour que le port 80 est gratuit.
  • Démarrez le serveur de développement avec sudo python manage.py runserver 0.0.0.0:80

1 votes

L'utilisation de "python manage.py runserver 0.0.0.0:8000" donne toujours le même résultat. Pourriez-vous m'en dire plus sur la façon dont je peux configurer Apache pour gérer ce port ?

1 votes

@user248237 : Vous exécutez le serveur de développement, ce qui n'a rien à voir avec le serveur web Apache. Le serveur de développement est un serveur web autonome.

0 votes

L'utilisation du port 80 nécessite des privilèges spéciaux. Vous pouvez essayer un sudo python manage.py runserver 80 .

31voto

Bonfix E Ngetich Points 343

J'ai dû ajouter cette ligne à settings.py pour que cela fonctionne (sinon, une erreur apparaissait lors de l'accès depuis un autre ordinateur).

ALLOWED_HOSTS = ['*']

puis a lancé le serveur avec :

python manage.py runserver 0.0.0.0:9595

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

15voto

MattH Points 15352

Choisissez-en un ou plusieurs :

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

Ainsi, vous pouvez vérifier que votre application écoute avec succès en exécutant lsof -i en tant que Root sur la machine et recherchez une python avec le port correspondant que vous avez spécifié.

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

Vous devrez examiner iptables -nvL pour voir s'il y a 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 ne savez pas grand-chose à son sujet, vous devrez en parler à vos administrateurs réseau.

0 votes

Pouvez-vous expliquer you haven't configured it successfully ?

0 votes

@ChillarAnand : simplement que vous vérifiez que la django runserver est effectivement à l'écoute là où vous le souhaitez, en utilisant, par exemple, l'option lsof .

0 votes

@ChillarAnand J'ai suivi les étapes que vous avez indiquées. En utilisant lsof Je vois une entrée python pour mon port. Mais mon lien, c'est-à-dire myip:8000, ne répond pas. Je sais qu'il est tard mais toute suggestion sera utile.

13voto

Joish Points 329

Fais juste ça :

python manage.py runserver 0:8000

Avec la commande ci-dessus, vous le liez à l'adresse IP externe. Ainsi, maintenant, lorsque vous accédez à votre adresse IP avec le numéro de port, vous serez en mesure d'y accéder dans le navigateur sans aucun problème.

il suffit de taper ce qui suit dans la barre d'adresse du navigateur :

<your ip address>:8000

eg :

192.168.1.130:8000

vous devrez peut-être modifier le fichier settings.py ajoutez ce qui suit dans le settings.py à la dernière ligne :

ALLOWED_HOSTS = ['*']

J'espère que cela vous aidera...

7voto

datavoredan Points 836

Pour les utilisateurs d'AWS.

J'ai dû suivre les étapes suivantes pour y parvenir.

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

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

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

  • configuré via la console AWS

3) Ajouter l'IP publique et le DNS à ALLOWED_HOSTS

  • ALLOWED_HOSTS est un objet 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

Le site est maintenant disponible à l'une ou l'autre des adresses suivantes (pas besoin de :80 car c'est la valeur par défaut pour http) :

  • [DNS public] c'est-à-dire ec2-54-528-27-21.compute-1.amazonaws.com
  • [IP publique] c'est-à-dire 75.254.65.19

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X