Como acessar o servidor Django local de fora do mundo

176

Eu segui as instruções aqui para executar o Django usando o servidor da web embutido e consegui executá-lo com sucesso python manage.py runserver. Se eu acessar 127.0.0.1:port localmente a partir do servidor web, recebo a página do Django indicando que funcionou.

Sei que o servidor da Web do Django não é um servidor de produção, mas é importante para mim, para fins de teste, poder acessá-lo do mundo exterior - ou seja, não de um navegador da Web no servidor, mas de um computador diferente.

Eu tentei:

http://mywebserver:port_django_runs_on

mas não funcionou. Também tentei usar o IP (com base no ifconfig) para acessar:

http://myipaddress:port_django_runs_on 

que também não funcionou.

O servidor da web está sendo executado, portanto, deve ser acessível de fora, não sei como. Estou executando o Linux com Apache, embora não tenha configurado o Django com Apache.

Algumas ideias em como fazer isso?

o homem de lata
fonte
3
Por que não configurar o Django com Apache e mod_wsgi? Por que não fazer isso corretamente?
S.Lott 15/02/10
@ S.Lott E se você tiver muitos projetos diferentes no servidor que deseja executar em momentos diferentes e não desejar reconfigurar o Apache toda vez que adicionar um novo projeto?
robenkleene 16/02

Respostas:

303

Você precisa executar o servidor de desenvolvimento para que ele escute na interface a sua rede.

Por exemplo

python manage.py runserver 0.0.0.0:8000

escuta em todas as interfaces na porta 8000.

Não importa se você acessa o servidor da web com o IP ou o nome do host. Eu acho que você ainda está na sua própria LAN.
Se você realmente deseja acessar o servidor de fora, também precisa configurar o roteador para encaminhar a porta, por exemplo, 8000para o servidor.


Verifique seu firewall no servidor se são permitidas conexões de entrada com a porta em uso!

Supondo que você possa acessar o servidor Apache de fora com êxito, também pode tentar o seguinte:

  • Pare o servidor Apache, para que a porta 80fique livre.
  • Inicie o servidor de desenvolvimento com sudo python manage.py runserver 0.0.0.0:80
Felix Kling
fonte
1
O uso de "python manage.py runserver 0.0.0.0:8000" ainda fornece o mesmo resultado. Você poderia dizer mais sobre como eu posso configurar o Apache para lidar com essa porta?
1
@ user248237: Você executa o servidor de desenvolvimento, isso não tem nenhuma relação com o servidor da web Apache. O servidor de desenvolvimento é um servidor da web independente.
Felix Kling
Requer privilégios especiais para usar a porta 80. Você pode tentar a sudo python manage.py runserver 80.
S.Lott 14/02/10
@ S.Lott: Oh, obrigado. Eu sei, ele estava na minha mente como escreveu isso, mas de alguma forma não torná-lo para o teclado;)
Felix Kling
1
Permitindo que todos ALLOWED_HOSTS = ['*']trabalharam para mim acesso Django aplicativo em um Mac do meu telefone Android
Anupam
28

Eu tive que adicionar esta linha ao settings.py para fazê-lo funcionar (caso contrário, ele mostrava um erro quando acessado de outro computador)

ALLOWED_HOSTS = ['*']

Em seguida, execute o servidor com:

python manage.py runserver 0.0.0.0:9595

Verifique também se o firewall permite conexões com essa porta

Bonfix Ngetich
fonte
14

Escolha um ou mais de:

  • Seu aplicativo não está escutando com êxito o IP pretendido: PORT
    • Porque você não o configurou com sucesso
    • Como o usuário não tem permissão para
  • Seu aplicativo está ouvindo com êxito o IP: PORT pretendido, mas os clientes não podem acessá-lo porque
    • O iptables local do servidor evita isso.
    • Um firewall evita isso.

Portanto, você pode verificar se o seu aplicativo está escutando com êxito executando lsof -icomo root na máquina e procurar uma pythonentrada com a porta correspondente que você especificou.

Usuários não-root geralmente não podem se conectar a portas <1024.

Você precisará iptables -nvLverificar se há uma regra que impeça o acesso à porta ip: à qual você está tentando vincular seu aplicativo.

Se houver um firewall upstream e você não souber muito sobre ele, precisará conversar com os administradores de rede.

MattH
fonte
você pode explicar you haven't configured it successfully?
ChillarAnand
@ChillarAnand: basta verificar django runserverse realmente está ouvindo onde pretende, por exemplo, usando lsof.
Matth
@ChillarAnand segui as etapas que você instruiu. Usando lsofvejo uma entrada python para minha porta. Mas o meu link ou seja, myip: 8000 não está respondendo. Eu sei que é tarde, mas todas as sugestões ajudarão.
WaterRocket8236
8

apenas faça o seguinte:

python manage.py runserver 0:8000

pelo comando acima, você está realmente vinculando-o ao endereço IP externo. agora, quando você acessar seu endereço IP com o número da porta, poderá acessá-lo no navegador sem nenhum problema.

basta digitar o seguinte na barra de endereço do navegador:

<your ip address>:8000

por exemplo:

192.168.1.130:8000

pode ser necessário editar o settings.py e adicione o seguinte em settings.py na última linha:

ALLOWED_HOSTS = ['*']

espero que isso ajude ...

Joish
fonte
5

Para usuários da AWS.

Eu tive que usar as etapas a seguir para chegar lá.

1) Verifique se o pip e o django estão instalados no nível do sudo

  • O sudo apt-get instala o python-pip
  • sudo pip install django

2) Verifique se as regras de ligação do grupo de segurança incluem http na porta 80 para 0.0.0.0/0

  • configurado através do console da AWS

3) Adicione IP público e DNS a ALLOWED_HOSTS

  • ALLOWED_HOSTS é um objeto de lista que você pode encontrar em settings.py
  • ALLOWED_HOSTS = ["75.254.65.19", "ec2-54-528-27-21.compute-1.amazonaws.com"]

4) Inicie o servidor de desenvolvimento com sudo na porta 80

  • sudo python manage.py runserver 0:80

Site agora disponível em um dos seguintes (não é necessário: 80 como o padrão para http):

  • [DNS público], ou seja, ec2-54-528-27-21.compute-1.amazonaws.com
  • [IP público] ou seja, 75.254.65.19
datavoredan
fonte
2

Vou adicionar isso aqui:

  1. sudo python manage.py runserver 80

  2. Vá para o seu telefone ou computador e digite o IP interno do computador (por exemplo 192.168.0.12) no navegador.

Neste ponto, você deve estar conectado ao servidor Django.

Isso também deve funcionar sem o sudo:

python manage.py runserver 0.0.0.0:8000
James111
fonte
0

Se você estiver usando o Docker, verifique também se as portas estão expostas

Amjad Al Taleb
fonte
0

ATUALIZADO EM 2020 TENTE ESTA MANEIRA

python manage.py runserver yourIp:8000

ALLOWED_HOSTS = ["*"]
Kashif
fonte