Cómo acceder al servidor web Django local desde el mundo exterior

3 minutos de lectura

seguí las instrucciones aquí para ejecutar Django usando el servidor web incorporado y pude ejecutarlo con éxito usando python manage.py runserver. Si accedo a 127.0.0.1:port localmente desde el servidor web, obtengo la página de Django que indica que funcionó.

Me doy cuenta de que el servidor web Django no es un servidor de producción, pero es importante para mí, con fines de prueba, poder acceder a él desde el mundo exterior, es decir, no desde un navegador web en el servidor, sino desde una computadora diferente.

Lo intenté:

http://mywebserver:port_django_runs_on

Pero no funcionó. También intenté usar la IP en su lugar (basado en ifconfig) para acceder a:

http://myipaddress:port_django_runs_on 

que tampoco funcionó.

El servidor web se está ejecutando, por lo que debe ser accesible desde el exterior, pero no estoy seguro de cómo. Estoy ejecutando Linux con Apache, aunque no he configurado Django con Apache.

¿Alguna idea sobre cómo hacer esto?

  • ¿Por qué no configurar Django con Apache y mod_wsgi? ¿Por qué no hacer esto correctamente?

    – S. Lott

    15 de febrero de 2010 a las 3:05

  • @S.Lott ¿Qué sucede si tiene muchos proyectos diferentes en el servidor que desea ejecutar en diferentes momentos y no desea volver a configurar Apache cada vez que agrega un nuevo proyecto?

    – Robenkleene

    16 de febrero de 2020 a las 19:49


  • ¿Responde esto a tu pregunta? ¿Cómo hacer público el servidor de desarrollo de Django? ¿Es generalmente posible?

    – alexdlaird

    7 de mayo de 2020 a las 14:13

avatar de usuario
Félix Kling

Tienes que ejecutar el servidor de desarrollo de manera que escucha en la interfaz a su red.

P.ej

python manage.py runserver 0.0.0.0:8000

escucha en cada interfaz en el puerto 8000.

No importa si accede al servidor web con la IP o el nombre de host. Supongo que todavía estás en tu propia LAN.
Si realmente desea acceder al servidor desde el exterior, también debe configurar su enrutador para reenviar el puerto, por ejemplo. 8000 a su servidor.


¡Compruebe su firewall en su servidor si las conexiones entrantes al puerto en uso están permitidas!

Suponiendo que pueda acceder a su servidor Apache desde el exterior con éxito, también puede probar esto:

  • Detenga el servidor Apache, para que el puerto 80 está libre.
  • Inicie el servidor de desarrollo con sudo python manage.py runserver 0.0.0.0:80

  • El uso de “python manage.py runserver 0.0.0.0:8000” sigue dando el mismo resultado. ¿Podría decir más sobre cómo puedo configurar Apache para manejar este puerto?

    usuario248237

    14 de febrero de 2010 a las 10:38

  • @user248237: ejecuta el servidor de desarrollo, esto no tiene ninguna relación con el servidor web Apache. El servidor de desarrollo es un servidor web independiente.

    – Félix Kling

    14 de febrero de 2010 a las 10:43


  • Requiere privilegios especiales para usar el puerto 80. Puede probar un sudo python manage.py runserver 80.

    – S. Lott

    14 de febrero de 2010 a las 11:57

  • @ S. Lott: Oh, gracias. Lo sé, estaba en mi mente cuando lo escribí, pero de alguna manera no llegó al teclado;)

    – Félix Kling

    14 de febrero de 2010 a las 12:07

  • Permitiendo a todos ALLOWED_HOSTS = ['*'] funcionó para mí para acceder a la aplicación Django en una Mac desde mi teléfono Android

    – Anupam

    28 de diciembre de 2017 a las 6:02

Tuve que agregar esta línea a settings.py para que funcionara (de lo contrario, mostraba un error cuando se accedía desde otra computadora)

ALLOWED_HOSTS = ['*']

luego ejecutó el servidor con:

python manage.py runserver 0.0.0.0:9595

También asegúrese de que el firewall permita conexiones a ese puerto

Elija uno o más de:

  • Su aplicación no está escuchando con éxito en la IP: PUERTO prevista
    • Porque no lo has configurado correctamente
    • Porque el usuario no tiene permiso para
  • Su aplicación está escuchando correctamente en la IP: PUERTO prevista, pero los clientes no pueden acceder a ella porque
    • El servidor local iptables lo impide.
    • Un cortafuegos lo impide.

Entonces, puede verificar que su aplicación esté escuchando correctamente ejecutando lsof -i como root en la máquina y busque un python entrada con el puerto correspondiente que ha especificado.

Los usuarios no root generalmente no pueden vincularse a puertos <1024.

Tendrás que mirar iptables -nvL para ver si hay una regla que impida el acceso a la ip: puerto al que está intentando vincular su aplicación.

Si hay un firewall ascendente y no sabe mucho al respecto, deberá hablar con los administradores de su red.

  • puedes explicar you haven't configured it successfully?

    – Chillar Anand

    20 de julio de 2015 a las 6:39

  • @ChillarAnand: simplemente que verifiques que el django runserver en realidad está escuchando donde pretende que esté, por ejemplo, usando lsof.

    – MattH

    20 de julio de 2015 a las 8:53

  • @ChillarAnand Seguí los pasos que me indicaste. Usando lsof Veo una entrada de python para mi puerto. Pero mi enlace, es decir, myip:8000, no responde. Sé que es tarde, pero cualquier sugerencia ayudará.

    – WaterRocket8236

    18 de febrero de 2017 a las 7:24


avatar de usuario
Joish

solo haz esto:

python manage.py runserver 0:8000

con el comando anterior, en realidad lo está vinculando a la dirección IP externa. por lo que ahora cuando acceda a su dirección IP con el número de puerto, podrá acceder a ella en el navegador sin ningún problema.

simplemente escriba lo siguiente en la barra de direcciones del navegador:

<your ip address>:8000

p.ej:

192.168.1.130:8000

es posible que deba editar settings.py y agregar lo siguiente en settings.py en la última línea:

ALLOWED_HOSTS = ['*']

Espero que esto ayude…

avatar de usuario
datavoredan

Para usuarios de AWS.

Tuve que usar los siguientes pasos para llegar allí.

1) Asegúrese de que pip y django estén instalados en el nivel de sudo

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

2) Asegúrese de que las reglas de entrada del grupo de seguridad incluyan http en el puerto 80 para 0.0.0.0/0

  • configurado a través de la consola de AWS

3) Agregar IP pública y DNS a ALLOWED_HOSTS

  • ALLOWED_HOSTS es un objeto de lista que puede encontrar en settings.py
  • HOST_PERMITIDO = [“75.254.65.19″,”ec2-54-528-27-21.compute-1.amazonaws.com”]

4) Inicie el servidor de desarrollo con sudo en el puerto 80

  • sudo python manage.py servidor de ejecución 0:80

El sitio ahora está disponible en cualquiera de los siguientes (no se necesita :80 ya que es el valor predeterminado para http):

  • [Public DNS] es decir, ec2-54-528-27-21.compute-1.amazonaws.com
  • [Public IP] es decir, 75.254.65.19

avatar de usuario
el hombre de hojalata

Voy a agregar esto aquí:

  1. sudo python manage.py runserver 80

  2. Vaya a su teléfono o computadora e ingrese la IP interna de su computadora (por ejemplo, 192.168.0.12) en el navegador.

En este punto, debería estar conectado al servidor Django.

Esto también debería funcionar sin sudo:

python manage.py runserver 0.0.0.0:8000

ACTUALIZADO 2020 PRUEBE DE ESTA MANERA

python manage.py runserver yourIp:8000

ALLOWED_HOSTS = ["*"]

  • Use 0.0.0.0:8000 en lugar de su propia IP

    – Shayne

    20 de septiembre de 2020 a las 11:28

  • sí, ambos son la forma correcta de usar cualquiera, depende de las situaciones

    – Kashif

    14 oct 2020 a las 12:55

¿Ha sido útil esta solución?

Esta web utiliza cookies propias y de terceros para su correcto funcionamiento y para fines analíticos y para mostrarte publicidad relacionada con sus preferencias en base a un perfil elaborado a partir de tus hábitos de navegación. Al hacer clic en el botón Aceptar, acepta el uso de estas tecnologías y el procesamiento de tus datos para estos propósitos. Configurar y más información
Privacidad