Come si può fare in modo che una microistanza EC2 serva script CGI da lighthttpd? Ad esempio Python CGI?
Bene, ci è voluta mezza giornata, ma ho fatto funzionare Python cgi su una microistanza gratuita di Amazon AWS EC2, usando il server lighttpd. Penso che aiuterà i miei compagni di studio a mettere tutti i passaggi in un unico posto. Grazie ai semplici passaggi di seguito, ci vorranno solo 15 minuti per impostare le cose!
La mia domanda per gli utenti più esperti che leggono questo è: ci sono dei difetti di sicurezza in quello che ho fatto? (Vedi le autorizzazioni per file e directory.)
Passaggio 1: avvia l'istanza EC2 e ssh in essa.
[Ovviamente, dovrai registrarti ad Amazon EC2 e salvare le tue coppie di chiavi in un file * .pem. Non andrò oltre, poiché Amazon ti dice come farlo.]
Accedi al tuo account AWS e avvia l'istanza EC2. Il web ha tutorial su come farlo. Nota che la dimensione dell'istanza predefinita che Amazon ti presenta è "piccola". Questo non è "micro" e quindi ti costerà denaro. Assicurati di scegliere manualmente "micro". (Le microistanze sono gratuite solo per il primo anno ...)
Trova il codice DNS pubblico per l'istanza in esecuzione. Per fare ciò, fai clic sull'istanza nel riquadro superiore della dashboard e alla fine vedrai il campo "DNS pubblico" popolato nel riquadro inferiore. (Potrebbe essere necessario giocherellare un po '.) Il DNS pubblico è simile a:
ec2-174-129-110-23.compute-1.amazonaws.com
Avvia il tuo programma di console Unix. (Su Max OS X, si chiama Terminal, e vive nella cartella Applicazioni -> Utilità.)
cd nella directory del sistema desktop in cui è presente il file * .pem contenente i file chiave AWS.
ssh alla tua istanza EC2 usando un comando come:
ssh -i <<your *.pem filename>> ec2-user@<< Public DNS address >>
Quindi, per me, questo era:
ssh -i amzn_ec2_keypair.pem ec2-user@ec2-174-129-110-23.compute-1.amazonaws.com
La tua istanza EC2 dovrebbe farti entrare.
Passaggio 2: scarica lighttpd nell'istanza EC2.
Per installare lighttpd, avrai bisogno dell'accesso root sulla tua istanza EC2. Il problema è: Amazon non ti consentirà di accedere come root. (Non direttamente, almeno.) Ma c'è una soluzione alternativa. Digita questo comando:
sudo /bin/bash
Il carattere di richiesta del sistema cambierà da $ a #. Non usciremo da "sudo" fino all'ultimo passo dell'intero processo.
Installa l'applicazione lighttpd (versione 1.4.28-1.3.amzn1 per me):
yum install lighttpd
Installa le librerie FastCGI per lighttpd (non necessario, ma perché no?):
yum install lighttpd-fastcgi
Verifica che il tuo server funzioni:
/etc/init.d/lighttpd start
Passaggio 3: consenti al mondo esterno di vedere il tuo server.
Se ora provassi a colpire il tuo server dal browser sul desktop, fallirebbe. Il motivo: per impostazione predefinita, Amazon AWS non apre alcuna porta all'istanza EC2. Quindi, devi aprire le porte manualmente.
Vai alla dashboard EC2 nel browser del desktop. Fai clic su "Gruppi di sicurezza" nel riquadro a sinistra. Uno o più gruppi di sicurezza appariranno nel riquadro in alto a destra. Scegli quello assegnato alla tua istanza EC2 quando hai lanciato la tua istanza.
Una tabella chiamata "Connessioni consentite" apparirà nel riquadro in basso a destra. Un menu a comparsa ti consentirà di scegliere "HTTP" come metodo di connessione.
Gli altri valori in quella riga della tabella dovrebbero essere: tcp, 80, 80, 0.0.0.0/0
Ora colpisci il server della tua istanza EC2 dal desktop nel browser. Utilizzare l'indirizzo DNS pubblico utilizzato in precedenza per SSH. Dovresti vedere la pagina Web generica lighttpd. Se non lo fai, non posso aiutarti perché sono un tale noob. :-(
Passaggio 4: configura lighttpd per servire CGI.
Di nuovo nel programma della console, cd nella directory di configurazione per lighttpd:
cd /etc/lighttpd
Per abilitare CGI, si desidera decommentare una riga nel file <modules.conf>. (Avrei potuto abilitare Fast CGI, ma i piccoli passi sono i migliori!) Puoi farlo con l'editor "ed" come segue:
ed modules.conf
/include "conf.d\/cgi.conf"/
s/#//
w
q
Creare la directory in cui vivranno i programmi CGI. (Il file /etc/lighttpd/lighttpd.conf determina dove sarà.) Creeremo la nostra directory nella posizione predefinita, quindi non dovremo effettuare alcuna modifica dei file di configurazione:
cd /var/www/lighttpd
mkdir cgi-bin
chmod 755 cgi-bin
Quasi lì! Naturalmente è necessario inserire un programma CGI di prova nella directory cgi-bin. Eccone uno:
cd cgi-bin
ed
a
#!/usr/bin/python
print "Content-type: text/html\n\n"
print "<html><body>Hello, pyworld.</body></html>"
.
w hellopyworld.py
q
chmod 655 hellopyworld.py
Riavvia il tuo server lighttpd:
/etc/init.d/lighttpd restart
Metti alla prova il tuo programma CGI. Nel browser del desktop, premi questo URL, sostituendo l'indirizzo DNS pubblico dell'istanza EC2:
http://<<Public DNS>>/cgi-bin/hellopyworld.py
Per me questo era:
http://ec2-174-129-110-23.compute-1.amazonaws.com/cgi-bin/hellopyworld.py
Passaggio 5: tutto qui! Pulisci e ringrazia!
Per uscire dal comando "sudo / bin / bash" fornito in precedenza, digitare:
exit
Ringraziamenti: Mille grazie a:
wiki.vpslink.com/Install_and_Configure_lighttpd
www.cyberciti.biz/tips/lighttpd-howto-setup-cgi-bin-access-for-perl-programs.html
aws.typepad.com/aws/2010/06/building-three-tier-architectures-with-security-groups.html
Buona fortuna, amigos! Mi scuso per la natura non tradizionale di questa "domanda", ma ho ricevuto così tanto aiuto da Stackoverflow che non vedevo l'ora di dare qualcosa in cambio.