AWS Cloud9 ist für Neukunden nicht mehr verfügbar. Bestandskunden von AWS Cloud9 können den Service weiterhin wie gewohnt nutzen. Weitere Informationen
Die vorliegende Übersetzung wurde maschinell erstellt. Im Falle eines Konflikts oder eines Widerspruchs zwischen dieser übersetzten Fassung und der englischen Fassung (einschließlich infolge von Verzögerungen bei der Übersetzung) ist die englische Fassung maßgeblich.
LAMPTutorial für AWS Cloud9
Dieses Tutorial ermöglicht Ihnen die Einrichtung und Ausführung LAMP (Linux, Apache HTTPServer, MySQL, und PHP) innerhalb einer AWS Cloud9 Entwicklungsumgebung.
Wenn Sie diesem Tutorial folgen und dieses Beispiel erstellen, können Gebühren für Sie anfallen AWS-Konto. Dazu gehören mögliche Gebühren für AWS-Services beispielsweise Amazon Elastic Compute Cloud (AmazonEC2). Weitere Informationen finden Sie unter EC2Amazon-Preise
Themen
Voraussetzungen
Bevor Sie dieses Beispiel verwenden, stellen Sie sicher, dass Ihre Einrichtung die folgenden Anforderungen erfüllt:
-
Sie müssen über eine bestehende AWS Cloud9 EC2 Entwicklungsumgebung verfügen. In diesem Beispiel wird davon ausgegangen, dass Sie bereits über eine EC2 Umgebung verfügen, die mit einer EC2 Amazon-Instance verbunden ist, auf der Amazon Linux ausgeführt wird, oder Ubuntu Server. Wenn Sie ein andere Art von Umgebung oder ein anderes Betriebssystem verwenden, müssen Sie die Anweisungen dieses Beispiels zum Einrichten zugehöriger Tools möglicherweise anpassen. Weitere Informationen finden Sie unter Schaffung einer Umgebung in AWS Cloud9.
-
Sie haben die AWS Cloud9 IDE für die bestehende Umgebung bereits geöffnet. Wenn Sie eine Umgebung AWS Cloud9 öffnen, wird die IDE für diese Umgebung in Ihrem Webbrowser geöffnet. Weitere Informationen finden Sie unter Öffnen einer Umgebung in AWS Cloud9.
Schritt 1: Installieren der Tools
In diesem Schritt installieren Sie folgende Tools:
-
Apache HTTPServer, ein Webserver-Host.
-
PHP, eine Skriptsprache, die sich besonders für die Webentwicklung eignet und in die eingebettet HTML werden kann.
-
MySQL, ein Datenbankmanagementsystem.
Anschließend beenden Sie diesen Schritt, indem Sie beginnen Apache HTTPServer und dann MySQL.
-
Stellen Sie sicher, dass die Sicherheitsupdates und Fehlerbehebungen in der Instance auf dem aktuellen Stand sind. Führen Sie dazu in einer Terminalsitzung im AWS Cloud9 IDE
yum update
for (Amazon Linux) oderapt update
for (Ubuntu Befehl (Server). (Um eine neue Terminalsitzung zu starten, wählen Sie in der Menüleiste Window (Fenster), New Terminal (Neues Terminal) aus.Für Amazon Linux:
sudo yum -y update
Wählen Sie in der &Snowconsole; Ihren Auftrag aus der Tabelle. Ubuntu Server:
sudo apt -y update
-
Prüfen Sie, ob Apache HTTPDer Server ist bereits installiert. Führen Sie dazu den Befehl
httpd -v
(für Amazon Linux) oderapache2 -v
(für Ubuntu Befehl (Server).Bei Erfolg enthält die Ausgabe den Apache HTTPVersionsnummer des Servers.
Wenn Sie einen Fehler sehen, installieren Sie Apache HTTPServer, indem Sie den
install
Befehl ausführen.Für Amazon Linux:
sudo yum install -y httpd24
Wählen Sie in der &Snowconsole; Ihren Auftrag aus der Tabelle. Ubuntu Server:
sudo apt install -y apache2
-
Bestätigen Sie, ob PHP ist bereits installiert, indem Sie den
php -v
Befehl ausführen.Bei Erfolg enthält die Ausgabe die PHP Versionsnummer.
Wenn Sie einen Fehler sehen, installieren Sie ihn, PHP indem Sie den
install
Befehl ausführen.Für Amazon Linux:
sudo yum install -y php56
Wählen Sie in der &Snowconsole; Ihren Auftrag aus der Tabelle. Ubuntu Server:
sudo apt install -y php libapache2-mod-php php-xml
-
Bestätigen Sie, ob MySQL ist bereits installiert, indem Sie den
mysql --version
Befehl ausführen.Bei Erfolg enthält die Ausgabe den MySQL Versionsnummer.
Wenn Sie einen Fehler sehen, installieren Sie MySQL indem Sie den
install
Befehl ausführen.Für Amazon Linux:
sudo yum install -y mysql-server
Wählen Sie in der &Snowconsole; Ihren Auftrag aus der Tabelle. Ubuntu Server:
sudo apt install -y mysql-server
-
Nach der Installation Apache HTTPServer, PHP, und MySQL, starten Apache HTTPServer, und bestätigen Sie dann, dass er gestartet wurde, indem Sie den folgenden Befehl ausführen.
Für Amazon Linux (diesen Befehl müssen Sie möglicherweise zweimal ausführen):
sudo service httpd start && sudo service httpd status
Wählen Sie in der &Snowconsole; Ihren Auftrag aus der Tabelle. Ubuntu Server (um zur Eingabeaufforderung zurückzukehren, drücken Sie
q
):sudo service apache2 start && sudo service apache2 status
-
Starten MySQL, und bestätigen Sie dann, dass es gestartet wurde, indem Sie den folgenden Befehl ausführen.
Für Amazon Linux:
sudo service mysqld start && sudo service mysqld status
Wählen Sie in der &Snowconsole; Ihren Auftrag aus der Tabelle. Ubuntu Server (um zur Befehlszeile zurückzukehren, drücken Sie
q
):sudo service mysql start && sudo service mysql status
Schritt 2: Einrichten MySQL
In diesem Schritt richten Sie ein MySQL zu folgen MySQL Bewährte Methoden im Bereich Sicherheit. Zu diesen bewährten Sicherheitsmethoden gehören das Festlegen eines Passworts für Root-Konten und das Entfernen von Root-Konten, auf die von außerhalb des lokalen Hosts zugegriffen werden kann. Weitere bewährte Methoden, die Sie beachten sollten, sind das Entfernen anonymer Benutzer, das Entfernen der Testdatenbank und das Entfernen von Rechten, die es jedem ermöglichen, auf Datenbanken zuzugreifen, deren Namen mit test_
beginnen.
Anschließend beenden Sie diesen Schritt, indem Sie das Starten und Beenden des MySQL Befehlszeilen-Client.
-
Implementieren MySQL Bewährte Sicherheitsmethoden für MySQL Installation durch Ausführen des folgenden Befehls in einer Terminalsitzung im AWS Cloud9 IDE.
sudo mysql_secure_installation
-
Beantworten Sie die folgenden Fragen wie angegeben, wenn Sie dazu aufgefordert werden.
Für Amazon Linux:
-
Enter current password for root (enter for none) (Geben Sie das aktuelle Stamm-Passwort ein (Eingabetaste, wenn keines vorhanden)) – Geben Sie
Enter
ein (wenn kein Passwort vorhanden). -
Set root password (Passwort für Stamm festlegen) – Geben Sie
Y
ein und drücken Sie dannEnter
. -
New password (Neues Passwort) – Geben Sie ein Passwort ein und drücken Sie dann
Enter
. -
Re-enter new password (Passwort nochmals eingeben) – Geben Sie das Passwort erneut ein und drücken Sie dann
Enter
. (Vergewissern Sie sich, das Passwort für die spätere Nutzung an einem sicheren Ort zu speichern.) -
Remove anonymous user (Anonyme Benutzer entfernen) – Geben Sie
Y
ein und drücken Sie anschließendEnter
. -
Disallow root login remotely (Fernzugriff auf Stamm verweigern) – Geben Sie
Y
ein und drücken Sie dannEnter
. -
Remove test database and access to it (Testdatenbank und Zugriff darauf entfernen) – Geben Sie
Y
ein und drücken Sie dannEnter
. -
Reload privilege tables now (Berechtigungstabelle jetzt neu laden) – Geben Sie
Y
ein und drücken Sie dannEnter
.
Wählen Sie in der &Snowconsole; Ihren Auftrag aus der Tabelle. Ubuntu Server:
-
Möchten Sie das VALIDATE PASSWORD Plugin einrichten — Geben Sie die Eingabetaste ein
y
und drücken Sie dannEnter
. -
There are three levels of password validation policy (Die Richtlinie für die Passwortvalidierung umfasst drei Stufen) – Geben Sie
0
,1
oder2
ein und drücken Sie dannEnter
. -
New password (Neues Passwort) – Geben Sie ein Passwort ein und drücken Sie dann
Enter
. -
Re-enter new password (Passwort nochmals eingeben) – Geben Sie das Passwort erneut ein und drücken Sie dann
Enter
. Speichern Sie das Passwort für die spätere Nutzung unbedingt an einem sicheren Ort. -
Do you wish to continue with the password provided (Möchten Sie mit dem bereitgestellten Passwort fortfahren) – Geben Sie
y
ein und drücken Sie dannEnter
. -
Remove anonymous user (Anonyme Benutzer entfernen) – Geben Sie
y
ein und drücken Sie anschließendEnter
. -
Disallow root login remotely (Fernzugriff auf Stamm verweigern) – Geben Sie
y
ein und drücken Sie dannEnter
. -
Remove test database and access to it (Testdatenbank und Zugriff darauf entfernen) – Geben Sie
y
ein und drücken Sie dannEnter
. -
Reload privilege tables now (Berechtigungstabelle jetzt neu laden) – Geben Sie
y
ein und drücken Sie dannEnter
.
-
-
Um direkt zu interagieren mit MySQL, starte den MySQL Befehlszeilenclient als Root-Benutzer, indem Sie den folgenden Befehl ausführen. Geben Sie auf Aufforderung das Stammbenutzerpasswort ein, das Sie zuvor festgelegt haben und drücken Sie dann
Enter
. Die Eingabeaufforderung wechselt zu,mysql>
während Sie sich im MySQL Befehlszeilen-Client.sudo mysql -uroot -p
-
Um das zu beenden MySQL Führen Sie den folgenden Befehl vom Befehlszeilen-Client aus. Die Eingabeaufforderung ändert sich wieder in
$
.exit;
Schritt 3: Einrichten einer Website
In diesem Schritt richten Sie das Standard-Stammverzeichnis der Website ein Apache HTTPServer mit empfohlenen Besitzern und Zugriffsberechtigungen. Anschließend erstellen Sie einen PHPbasierte Webseite innerhalb dieses Standard-Website-Stammverzeichnisses.
Anschließend ermöglichen Sie eingehenden Webverkehr, um diese Webseite anzuzeigen, indem Sie die Sicherheitsgruppe in Amazon EC2 und die Netzwerkzugriffskontrollliste (NetzwerkACL) in Amazon Virtual Private Cloud (AmazonVPC) einrichten, die mit dieser EC2 Umgebung verknüpft sind. Jede EC2 Umgebung muss sowohl einer Sicherheitsgruppe in Amazon EC2 als auch einem Netzwerk ACL in Amazon zugeordnet seinVPC. Obwohl das Standardnetzwerk ACL in an den gesamten eingehenden und ausgehenden Verkehr für die Umgebung AWS-Konto zulässt, lässt die Standardsicherheitsgruppe jedoch nur eingehenden Datenverkehr SSH über Port 22 zu. Weitere Informationen finden Sie unter VPCEinstellungen für AWS Cloud9 Entwicklungsumgebungen.
Anschließend beenden Sie diesen Schritt, indem Sie die Webseite erfolgreich von außerhalb des aufrufen AWS Cloud9 IDE.
-
Richten Sie das Standard-Website-Stammverzeichnis für die ein Apache HTTPServer (
/var/www/html
) mit empfohlenen Besitzern und Zugriffsberechtigungen. Führen Sie dazu die folgenden sechs Befehle nacheinander in der folgenden Reihenfolge in einer Terminalsitzung in der aus AWS Cloud9 IDE. Informationen dazu, was die einzelnen Befehle auslösen, finden Sie in der Erklärung hinter dem#
-Zeichen hinter jedem Befehl.Für Amazon Linux:
sudo groupadd web-content # Create a group named web-content. sudo usermod -G web-content -a ec2-user # Add the user ec2-user (your default user for this environment) to the group web-content. sudo usermod -G web-content -a apache # Add the user apache (Apache HTTP Server) to the group web-content. sudo chown -R ec2-user:web-content /var/www/html # Change the owner of /var/www/html and its files to user ec2-user and group web-content. sudo find /var/www/html -type f -exec chmod u=rw,g=rx,o=rx {} \; # Change all file permissions within /var/www/html to user read/write, group read-only, and others read/execute. sudo find /var/www/html -type d -exec chmod u=rwx,g=rx,o=rx {} \; # Change /var/www/html directory permissions to user read/write/execute, group read/execute, and others read/execute.
Wählen Sie in der &Snowconsole; Ihren Auftrag aus der Tabelle. Ubuntu Server:
sudo groupadd web-content # Create a group named web-content. sudo usermod -G web-content -a ubuntu # Add the user ubuntu (your default user for this environment) to the group web-content. sudo usermod -G web-content -a www-data # Add the user www-data (Apache HTTP Server) to the group web-content. sudo chown -R ubuntu:web-content /var/www/html # Change the owner of /var/www/html and its files to user ubuntu and group web-content. sudo find /var/www/html -type f -exec chmod u=rw,g=rx,o=rx {} \; # Change all file permissions within /var/www/html to user read/write, group read-only, and others read/execute. sudo find /var/www/html -type d -exec chmod u=rwx,g=rx,o=rx {} \; # Change /var/www/html directory permissions to user read/write/execute, group read/execute, and others read/execute.
-
Erstellen Sie ein PHPbasierte Webseite, benannt
index.php
im Standard-Stammordner der Website für Apache HTTPServer (das ist/var/www/html
), indem Sie den folgenden Befehl ausführen.Für Amazon Linux:
sudo touch /var/www/html/index.php && sudo chown -R ec2-user:web-content /var/www/html/index.php && sudo chmod u=rw,g=rx,o=rx /var/www/html/index.php && sudo printf '%s\n%s\n%s' '<?php' ' phpinfo();' '?>' >> /var/www/html/index.php
Der obige Befehl für Amazon Linux ändert auch den Eigentümer der Datei in
ec2-user
, ändert die Gruppe der Datei in und ändert die Dateiberechtigungen read/write for the user, and read/execute für die Gruppe und andere.web-content
Wählen Sie in der &Snowconsole; Ihren Auftrag aus der Tabelle. Ubuntu Server:
sudo touch /var/www/html/index.php && sudo chown -R ubuntu:web-content /var/www/html/index.php && sudo chmod u=rw,g=rx,o=rx /var/www/html/index.php && sudo printf '%s\n%s\n%s' '<?php' ' phpinfo();' '?>' >> /var/www/html/index.php
Der vorhergehende Befehl für Ubuntu Der Server ändert außerdem den Besitzer der Datei in
ubuntu
, ändert die Gruppe der Datei in und ändert die Dateiberechtigungen read/write for the user, and read/execute für die Gruppe und andere.web-content
Ist der Vorgang erfolgreich, wird durch den oben genannten Befehl die Datei
index.php
mit den folgenden Inhalten erstellt:<?php phpinfo(); ?>
-
Aktivieren Sie eingehenden Webverkehr über Port 80, um die neue Webseite anzuzeigen, indem Sie das Netzwerk ACL in Amazon VPC und die Sicherheitsgruppe Amazon einrichtenEC2, die mit dieser EC2 Umgebung verknüpft ist. Führen Sie dazu die folgenden acht Befehle nacheinander in der angegebenen Reihenfolge aus: Informationen dazu, was die einzelnen Befehle auslösen, finden Sie in der Erklärung hinter dem
#
-Zeichen für jeden Befehl.Wichtig
Durch Ausführen der folgenden Befehle wird eingehender Webdatenverkehr über Port 80 für alle EC2 Umgebungen und EC2 Amazon-Instances aktiviert, die der Sicherheitsgruppe und dem Netzwerk ACL für diese Umgebung zugeordnet sind. Dies kann dazu führen, dass unerwartet eingehender Webdatenverkehr über Port 80 für andere EC2 Umgebungen und EC2 Amazon-Instances als diese aktiviert wird.
Anmerkung
Mit den Befehlen zwei bis vier wird die Sicherheitsgruppe aktiviert, um eingehenden Web-Datenverkehr über Port 80 zu aktivieren. Wenn Sie über eine Standardsicherheitsgruppe verfügen, die nur eingehenden SSH Datenverkehr über Port 22 zulässt, müssen Sie den ersten Befehl ausführen, gefolgt von diesen zweiten bis vierten Befehlen. Wenn Sie jedoch über eine benutzerdefinierte Sicherheitsgruppe verfügen, die bereits eingehenden Web-Datenverkehr über Port 80 zulässt, können Sie diese Befehle überspringen.
Mit den folgenden Befehlen von fünf ACL bis acht kann das Netzwerk eingehenden Webverkehr über Port 80 zulassen. Wenn Sie über ein Standardnetzwerk verfügenACL, das bereits den gesamten eingehenden Datenverkehr über alle Ports zulässt, können Sie die Ausführung dieser Befehle getrost überspringen. Nehmen wir jedoch an, Sie haben ein benutzerdefiniertes NetzwerkACL, das eingehenden Webverkehr über Port 80 nicht zulässt. Führen Sie dann den ersten Befehl aus, gefolgt von den Befehlen 5 bis 8.
MY_INSTANCE_ID=$(curl http://169.254.169.254/latest/meta-data/instance-id) # Get the ID of the instance for the environment, and store it temporarily. MY_SECURITY_GROUP_ID=$(aws ec2 describe-instances --instance-id $MY_INSTANCE_ID --query 'Reservations[].Instances[0].SecurityGroups[0].GroupId' --output text) # Get the ID of the security group associated with the instance, and store it temporarily. aws ec2 authorize-security-group-ingress --group-id $MY_SECURITY_GROUP_ID --protocol tcp --cidr 0.0.0.0/0 --port 80 # Add an inbound rule to the security group to allow all incoming IPv4-based traffic over port 80. aws ec2 authorize-security-group-ingress --group-id $MY_SECURITY_GROUP_ID --ip-permissions IpProtocol=tcp,Ipv6Ranges='[{CidrIpv6=::/0}]',FromPort=80,ToPort=80 # Add an inbound rule to the security group to allow all incoming IPv6-based traffic over port 80. MY_SUBNET_ID=$(aws ec2 describe-instances --instance-id $MY_INSTANCE_ID --query 'Reservations[].Instances[0].SubnetId' --output text) # Get the ID of the subnet associated with the instance, and store it temporarily. MY_NETWORK_ACL_ID=$(aws ec2 describe-network-acls --filters Name=association.subnet-id,Values=$MY_SUBNET_ID --query 'NetworkAcls[].Associations[0].NetworkAclId' --output text) # Get the ID of the network ACL associated with the subnet, and store it temporarily. aws ec2 create-network-acl-entry --network-acl-id $MY_NETWORK_ACL_ID --ingress --protocol tcp --rule-action allow --rule-number 10000 --cidr-block 0.0.0.0/0 --port-range From=80,To=80 # Add an inbound rule to the network ACL to allow all IPv4-based traffic over port 80. Advanced users: change this suggested rule number as desired. aws ec2 create-network-acl-entry --network-acl-id $MY_NETWORK_ACL_ID --ingress --protocol tcp --rule-action allow --rule-number 10100 --ipv6-cidr-block ::/0 --port-range From=80,To=80 # Add an inbound rule to the network ACL to allow all IPv6-based traffic over port 80. Advanced users: change this suggested rule number as desired.
-
Rufen Sie URL die
index.php
Datei im Stammverzeichnis des Webservers auf. Führen Sie dazu den folgenden Befehl aus und verwenden Sie eine neue Webbrowser-Registerkarte oder einen anderen Webbrowser als den angezeigten, AWS Cloud9 IDE um zu dem zu gelangenURL, der angezeigt wird. Wenn der Vorgang erfolgreich ist, werden auf der Webseite Informationen zu folgenden Themen angezeigt Apache HTTPServer, MySQL, PHPund andere verwandte Einstellungen.MY_PUBLIC_IP=$(curl http://169.254.169.254/latest/meta-data/public-ipv4) && echo http://$MY_PUBLIC_IP/index.php # Get the URL to the index.php file within the web server root.
Schritt 4: Bereinigen
Angenommen, Sie möchten diese Umgebung weiterhin verwenden, aber den eingehenden Web-Datenverkehr über Port 80 deaktivieren. Führen Sie dann nacheinander die folgenden acht Befehle in der folgenden Reihenfolge aus, um die entsprechenden Regeln für eingehenden Datenverkehr zu löschen, die Sie zuvor in der Sicherheitsgruppe und im Netzwerk festgelegt habenACL, die der Umgebung zugeordnet sind. Informationen dazu, was die einzelnen Befehle auslösen, finden Sie in der Erklärung hinter dem #
-Zeichen für jeden Befehl.
Wichtig
Wenn Sie die folgenden Befehle ausführen, wird eingehender Webdatenverkehr über Port 80 für alle EC2 Umgebungen und EC2 Amazon-Instances deaktiviert, die der Sicherheitsgruppe und dem Netzwerk ACL für diese Umgebung zugeordnet sind. Dies kann dazu führen, dass eingehender Webverkehr über Port 80 für andere EC2 Umgebungen und EC2 Amazon-Instances als diese unerwartet deaktiviert wird.
Anmerkung
Mit den folgenden Befehlen fünf bis acht werden bestehende Regeln entfernt, die verhindern, dass das Netzwerk ACL eingehenden Webverkehr über Port 80 zulässt. Wenn Sie über ein Standardnetzwerk verfügenACL, das bereits den gesamten eingehenden Datenverkehr über alle Ports zulässt, können Sie die Ausführung dieser Befehle überspringen. Nehmen wir jedoch an, Sie haben ein benutzerdefiniertes Netzwerk ACL mit vorhandenen Regeln, die eingehenden Webverkehr über Port 80 zulassen, und Sie möchten diese Regeln löschen. In diesem Fall müssen Sie den ersten Befehl ausführen, gefolgt von den Befehlen 5 bis 8.
MY_INSTANCE_ID=$(curl http://169.254.169.254/latest/meta-data/instance-id) # Get the ID of the instance for the environment, and store it temporarily. MY_SECURITY_GROUP_ID=$(aws ec2 describe-instances --instance-id $MY_INSTANCE_ID --query 'Reservations[].Instances[0].SecurityGroups[0].GroupId' --output text) # Get the ID of the security group associated with the instance, and store it temporarily. aws ec2 revoke-security-group-ingress --group-id $MY_SECURITY_GROUP_ID --protocol tcp --cidr 0.0.0.0/0 --port 80 # Delete the existing inbound rule from the security group to block all incoming IPv4-based traffic over port 80. aws ec2 revoke-security-group-ingress --group-id $MY_SECURITY_GROUP_ID --ip-permissions IpProtocol=tcp,Ipv6Ranges='[{CidrIpv6=::/0}]',FromPort=80,ToPort=80 # Delete the existing inbound rule from the security group to block all incoming IPv6-based traffic over port 80. MY_SUBNET_ID=$(aws ec2 describe-instances --instance-id $MY_INSTANCE_ID --query 'Reservations[].Instances[0].SubnetId' --output text) # Get the ID of the subnet associated with the instance, and store it temporarily. MY_NETWORK_ACL_ID=$(aws ec2 describe-network-acls --filters Name=association.subnet-id,Values=$MY_SUBNET_ID --query 'NetworkAcls[].Associations[0].NetworkAclId' --output text) # Get the ID of the network ACL associated with the subnet, and store it temporarily. aws ec2 delete-network-acl-entry --network-acl-id $MY_NETWORK_ACL_ID --ingress --rule-number 10000 # Delete the existing inbound rule from the network ACL to block all IPv4-based traffic over port 80. Advanced users: if you originally created this rule with a different number, change this suggested rule number to match. aws ec2 delete-network-acl-entry --network-acl-id $MY_NETWORK_ACL_ID --ingress --rule-number 10100 # Delete the existing inbound rule from the network ACL to block all IPv6-based traffic over port 80. Advanced users: if you originally created this rule with a different number, change this suggested rule number to match.
Wenn Sie die Umgebung nicht mehr benötigen, löschen Sie sie, um zu verhindern, dass weiterhin Gebühren für Ihr AWS-Konto anfallen. Detaillierte Anweisungen finden Sie unter Löschen einer Umgebung in AWS Cloud9.