2012-03-26 31 views
18

Sono nuovo all'EC2 e allo sviluppo web. Attualmente ho un'istanza Linux EC2 in esecuzione e ho installato Django. Sto creando un progetto di test prima di iniziare il mio vero progetto e ho provato a eseguire un server di prova Django.Connessione a EC2 Server di sviluppo Django

Questa è la mia uscita nella shell:

python manage.py runserver ec2-###-##-##-##.compute-1.amazonaws.com:8000 
Validating models... 

0 errors found 
Django version 1.3, using settings 'testsite.settings' 
Development server is running at http://ec2-###-##-##-##.compute-1.amazonaws.com:8000/ 
Quit the server with CONTROL-C. 

Per verificare che sia wroking ho cercato di visitare: ec2-###-##-##-##.compute-1.amazonaws.com:8000 ma ottengo sempre un messaggio "Impossibile connettersi" dal mio browser.

Ogni volta che faccio questo lcoally sul mio computer, tuttavia, riesco ad arrivare alla home page di sviluppo di DJango a 127.0.0.1:8000. Qualcuno potrebbe aiutarmi a capire cosa sto facendo male/potrebbe mancare quando sto facendo questo sulla mia istanza EC2 rispetto al mio portatile?

+2

Hai risolto questo problema ora? Incontro lo stesso problema. – Treper

risposta

16

Probabilmente non ci sono porte 8000 aperte sul firewall. Verifica quale gruppo di sicurezza è in esecuzione l'istanza (probabilmente "predefinito") e controlla le regole in esecuzione. Probabilmente troverai che la porta 8000 non è elencata.

+0

Ok, ho aggiunto 8000 a UDP, TCP e ALL a ICMP con 'default' come sorgente ma il tentativo di connettersi alla porta 8000 non funziona ancora. Questo significa forse che Django non funziona o è ancora il firewall sui server di Amazon ec2? Grazie mille per il vostro aiuto! –

+0

Aprire una seconda connessione alla stessa macchina e provare a telnet sulla porta 80, 'telnet localhost 80', quindi digitare' GET/'e premere invio un paio di volte. Se non riesci a connetterti allora runserver non funziona correttamente, se puoi e ottieni HTML da 'GET', allora è tra il server e dove sei che il problema è. – KayEss

+0

Ho un "telnet: comando non trovato" erorr:/ –

0

Sì, se si utilizza l'opzione EC2 di avvio rapido, è necessario aggiungere una nuova regola HTTP (così come appare nell'elenco) per eseguire un server di sviluppo.

+1

Puoi chiarire "così come appare sulla lista"? – pjmorse

35

utilizzando un'istanza ec-2 con Ubuntu, ho trovato che specificando 0.0.0.0:8000 lavorato:

$python manage.py runserver 0.0.0.0:8000 

Naturalmente 8000 ha bisogno di essere aperto per il protocollo TCP nelle impostazioni gruppo di protezione.

+1

Vorrei aver visto questo commento 5 ore fa !!! Grazie compagno! –

+0

È inoltre necessario assicurarsi che questa porta non sia già in uso. – bozdoz

+0

Questa è la risposta giusta per questa domanda. Grazie –

8

1) È necessario assicurarsi che la porta 8000 viene aggiunto come una regola TCP personalizzata nella tua lista di porte in ingresso Security Group

2) Le probabilità sono che l'IP che vedete elencato sulla console AWS, che è associato alla tua istanza è un IP pubblico OPPURE un nome di dominio PUBBLICO (ad esempio ec2 - ### - ## - ## - ##. compute-1.amazonaws.com o 174.101.122.132) che Amazon assegna.

2.1) Se si tratta di un IP pubblico, l'istanza non ha modo di sapere qual è l'IP pubblico ad esso assegnato, ma conoscerà solo l'IP locale assegnato.

2.2) per ottenere il vostro IP locale su un sistema Linux, tipo:

$ ifconfig 

poi guardare l'eth0 dati e vedrete un IP accanto a "inet addr" del formato xxx.xxx .xxx.xxx (ad esempio 10.10.12.135) Questo è il vostro IP locale

3) Per successo runserver si può fare in uno dei seguenti due:

$ python manage.py runserver <LOCAL IP>:8000 
    or 
    $ python manage.py runserver 0.0.0.0:8000 

** Anche l'opzione 2 funziona alla grande come ha detto Ernest Ezis nella sua risposta. EDIT: From The Django libro: "L'indirizzo IP 0.0.0.0 indica al server per l'ascolto su qualsiasi interfaccia di rete"

** La mia teoria di IP pubblico potrebbe essere sbagliato, dal momento che io non sono sicuro di come Amazon assegna gli IP. Gradirei essere corretto.

+0

Grazie mille, mi hai salvato la giornata. Grazie per averlo condiviso .. –

+0

Grazie! Il tuo passo n. 1 "Devi assicurarti che la porta 8000 sia aggiunta come regola TCP personalizzata all'elenco di porte in entrata del tuo gruppo di sicurezza" era quello di cui avevo bisogno. In seguito, python manage.py runserver 0.0.0.0:8000 ha funzionato come un fascino (py)! –

+0

come fare il primo passo? –

1

Avevo lo stesso problema. Ma stavo eseguendo RHEL su EC2.Oltre ad aggiungere una regola al gruppo di sicurezza, ho dovuto aggiungere manualmente una porta a firewalld.

firewall-cmd --permanent --add-port=8000/tcp 
firewall-cmd --reload 

Questo ha funzionato per me! (Anche se non ho idea del motivo per cui dovevo farlo)

+0

Questo ha funzionato per me su CENTOS7. Prima di aprire questa porta sul firewall usando il firewall-cmd, la pagina di prova non era accessibile da ec2 - ### - ## - ## - ##. Compute-1.amazonaws.com:8000. È apparso immediatamente dopo aver provato questo. – eculeus

Problemi correlati