Wie kann man eine EC2-Mikroinstanz dazu bringen, CGI-Skripte von lighthttpd aus zu bedienen? Zum Beispiel Python CGI?
Nun, es hat einen halben Tag gedauert, aber ich habe Python cgi auf einer kostenlosen Amazon AWS EC2-Mikroinstanz mit dem lighttpd-Server zum Laufen gebracht. Ich denke, es wird meinen Noobs helfen, alle Schritte an einem Ort zu platzieren. Mit den folgenden einfachen Schritten können Sie die Dinge in nur 15 Minuten einrichten!
Meine Frage an die erfahreneren Benutzer, die dies lesen, lautet: Gibt es Sicherheitslücken in dem, was ich getan habe? (Siehe Datei- und Verzeichnisberechtigungen.)
Schritt 1: Starten Sie Ihre EC2-Instanz und ssh hinein.
[Natürlich müssen Sie sich bei Amazon EC2 anmelden und Ihre Schlüsselpaare in einer * .pem-Datei speichern. Ich werde nicht darauf eingehen, da Amazon Ihnen sagt, wie es geht.]
Melden Sie sich in Ihrem AWS-Konto an und starten Sie Ihre EC2-Instanz. Das Web bietet dazu Tutorials. Beachten Sie, dass die Standardinstanzgröße, die Amazon für Sie bereitstellt, "klein" ist. Dies ist kein "Mikro" und kostet Sie Geld. Stellen Sie sicher, dass Sie "micro" manuell auswählen. (Micro-Instanzen sind nur für das erste Jahr kostenlos ...)
Suchen Sie den öffentlichen DNS-Code für Ihre laufende Instanz. Klicken Sie dazu im oberen Bereich des Dashboards auf die Instanz. Schließlich wird im unteren Bereich das Feld "Öffentliches DNS" angezeigt. (Möglicherweise müssen Sie ein wenig fummeln.) Das öffentliche DNS sieht ungefähr so aus:
ec2-174-129-110-23.compute-1.amazonaws.comStarten Sie Ihr Unix-Konsolenprogramm. (Unter Max OS X heißt es Terminal und befindet sich im Ordner Applications -> Utilities.)
Wechseln Sie in das Verzeichnis auf Ihrem Desktop-System, in dem sich Ihre * .pem-Datei befindet, die Ihre AWS-Schlüsselpaare enthält.
ssh zu Ihrer EC2-Instanz mit einem Befehl wie:
ssh -i <<your *.pem filename>> ec2-user@<< Public DNS address >>Für mich war das also:
ssh -i amzn_ec2_keypair.pem ec2-user@ec2-174-129-110-23.compute-1.amazonaws.comIhre EC2-Instanz sollte Sie einlassen.
Schritt 2: Laden Sie lighttpd auf Ihre EC2-Instanz herunter.
Um lighttpd zu installieren, benötigen Sie Root-Zugriff auf Ihrer EC2-Instanz. Das Problem ist: Bei Amazon können Sie sich nicht als root anmelden. (Zumindest nicht direkt.) Es gibt jedoch eine Problemumgehung. Geben Sie diesen Befehl ein:
sudo /bin/bashDas System-Eingabeaufforderungszeichen ändert sich von $ in #. Wir werden "sudo" bis zum allerletzten Schritt in diesem gesamten Prozess nicht verlassen.
Installieren Sie die lighttpd-Anwendung (Version 1.4.28-1.3.amzn1 für mich):
yum install lighttpdInstallieren Sie die FastCGI-Bibliotheken für lighttpd (nicht erforderlich, aber warum nicht?):
yum install lighttpd-fastcgiTesten Sie, ob Ihr Server funktioniert:
/etc/init.d/lighttpd start
Schritt 3: Lassen Sie die Außenwelt Ihren Server sehen.
Wenn Sie jetzt versuchen, Ihren Server über den Browser auf Ihrem Desktop zu erreichen, schlägt dies fehl. Der Grund: Standardmäßig öffnet Amazon AWS keine Ports für Ihre EC2-Instanz. Sie müssen die Ports also manuell öffnen.
Rufen Sie im Browser Ihres Desktops Ihr EC2-Dashboard auf. Klicken Sie im linken Bereich auf "Sicherheitsgruppen". Eine oder mehrere Sicherheitsgruppen werden im oberen rechten Bereich angezeigt. Wählen Sie die aus, die Ihrer EC2-Instanz beim Starten Ihrer Instanz zugewiesen wurde.
Eine Tabelle mit dem Namen "Zugelassene Verbindungen" wird im unteren rechten Bereich angezeigt. In einem Popup-Menü können Sie "HTTP" als Verbindungsmethode auswählen.
Die anderen Werte in dieser Zeile der Tabelle sollten sein: tcp, 80, 80, 0.0.0.0/0
Schlagen Sie jetzt den Server Ihrer EC2-Instanz vom Desktop in Ihrem Browser aus an. Verwenden Sie die öffentliche DNS-Adresse, die Sie zuvor für SSH verwendet haben. Die allgemeine Webseite lighttpd sollte angezeigt werden. Wenn Sie nicht, kann ich Ihnen nicht helfen, weil ich so ein Noob bin. :-(
Schritt 4: Konfigurieren Sie lighttpd für CGI.
Zurück im Konsolenprogramm, wechseln Sie in das Konfigurationsverzeichnis für lighttpd:
cd /etc/lighttpdUm CGI zu aktivieren, müssen Sie eine Zeile in der Datei <modules.conf> auskommentieren. (Ich hätte Fast CGI aktivieren können, aber Babyschritte sind am besten!) Sie können dies mit dem Editor "ed" wie folgt tun:
ed modules.conf
/include "conf.d\/cgi.conf"/
s/#//
w
qErstellen Sie das Verzeichnis, in dem CGI-Programme gespeichert werden. (Die Datei /etc/lighttpd/lighttpd.conf legt fest, wo sich diese befindet.) Wir erstellen unser Verzeichnis am Standardspeicherort, sodass wir keine Konfigurationsdateien bearbeiten müssen:
cd /var/www/lighttpd
mkdir cgi-bin
chmod 755 cgi-binFast dort! Natürlich müssen Sie ein Test-CGI-Programm in das cgi-bin-Verzeichnis stellen. Hier ist eine:
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.pyStarten Sie Ihren lighttpd-Server neu:
/etc/init.d/lighttpd restartTesten Sie Ihr CGI-Programm. Klicken Sie im Browser Ihres Desktops auf diese URL und ersetzen Sie die öffentliche DNS-Adresse Ihrer EC2-Instanz:
http://<<Public DNS>>/cgi-bin/hellopyworld.pyFür mich war das:
http://ec2-174-129-110-23.compute-1.amazonaws.com/cgi-bin/hellopyworld.py
Schritt 5: Das war's! Räumen Sie auf und danken Sie!
Geben Sie Folgendes ein, um den zuvor angegebenen Befehl "sudo / bin / bash" zu beenden:
exitDanksagung: Vielen Dank an:
wiki.vpslink.com/Install_and_Configure_lighttpd
www.cyberciti.biz/tips/lighttpd-how-setup-cgi-bin-access-for-perl-programs.html
aws.typepad.com/aws/2010/06/building-three-tier-architectures-with-security-groups.html
Viel Glück, Freunde! Ich entschuldige mich für die unkonventionelle Natur dieser "Frage", aber ich habe so viel Hilfe von Stackoverflow bekommen, dass ich unbedingt etwas zurückgeben wollte.