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

176

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, aparece 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 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:

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 hacerlo. Estoy ejecutando Linux con Apache, aunque no he configurado Django con Apache.

¿Alguna idea sobre cómo hacer esto?

el hombre de hojalata
fuente
3
¿Por qué no configurar Django con Apache y mod_wsgi? ¿Por qué no hacer esto correctamente?
S.Lott
@ S.Lott ¿Qué sucede si tiene muchos proyectos diferentes en el servidor que desea ejecutar en diferentes momentos y usted y no desea volver a configurar Apache cada vez que agrega un nuevo proyecto?
Robenkleene

Respuestas:

303

Debe ejecutar el servidor de desarrollo de modo que escuche en la interfaz de 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, 8000a su servidor.


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

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

  • Detenga el servidor Apache, para que el puerto 80esté libre.
  • Inicie el servidor de desarrollo con sudo python manage.py runserver 0.0.0.0:80
Felix Kling
fuente
1
El uso de "python manage.py runserver 0.0.0.0:8000" todavía da el mismo resultado. ¿Podría decir más sobre cómo puedo configurar Apache para manejar este puerto?
1
@ 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.
Felix Kling
Requiere privilegios especiales para usar el puerto 80. Puede probar a sudo python manage.py runserver 80.
S.Lott
@ S.Lott: Oh, gracias. Lo sé, estaba en mi mente cuando lo escribí, pero de alguna manera no llegó al teclado;)
Felix Kling
1
Permitir que todos trabajen ALLOWED_HOSTS = ['*']para mí acceder a la aplicación Django en una Mac desde mi teléfono Android
Anupam
28

Tuve que agregar esta línea a settings.py para que funcione (de lo contrario, mostró un error al acceder 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

Bonfix Ngetich
fuente
14

Elija uno o más de:

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

Por lo tanto, puede verificar que su aplicación esté escuchando correctamente ejecutándose lsof -icomo root en la máquina y buscar una pythonentrada con el puerto correspondiente que haya especificado.

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

Deberá mirar iptables -nvLpara ver si hay una regla que impida el acceso al puerto ip: al que está intentando vincular su aplicación.

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

MattH
fuente
puedes explicar you haven't configured it successfully?
ChillarAnd
@ChillarAnand: simplemente comprueba que django runserverrealmente está escuchando donde pretendes que esté, por ejemplo, usando lsof.
MattH
@ChillarAna y seguí los pasos que me indicaste. Usando lsofveo 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
8

solo haz esto:

python manage.py runserver 0:8000

con el comando anterior, realmente lo está vinculando a la dirección IP externa. así 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

puede que tenga que editar settings.py agregue lo siguiente en settings.py en la última línea:

ALLOWED_HOSTS = ['*']

Espero que esto ayude ...

Joish
fuente
5

Para usuarios de AWS.

Tuve que seguir los siguientes pasos para llegar allí.

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

  • sudo apt-get install python-pip
  • sudo pip install 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) Agregue IP pública y DNS a ALLOWED_HOSTS

  • ALLOWED_HOSTS es un objeto de lista que puedes encontrar en settings.py
  • ALLOWED_HOSTS = ["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 runserver 0:80

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

  • [DNS público], es decir, ec2-54-528-27-21.compute-1.amazonaws.com
  • [IP pública], es decir, 75.254.65.19
datavoredan
fuente
2

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
James111
fuente
0

Si está utilizando Docker, debe asegurarse de que los puertos también estén expuestos

Amjad Al Taleb
fuente
0

ACTUALIZADO 2020 INTENTE ESTE CAMINO

python manage.py runserver yourIp:8000

ALLOWED_HOSTS = ["*"]
Kashif
fuente