LAMP-Tutorial für AWS Cloud9 - AWS Cloud9

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.

LAMP-Tutorial für AWS Cloud9

In diesem Tutorial können Sie LAMP (Linux, Apache HTTP-ServerMySQL, undPHP) in einer AWS Cloud9 Entwicklungsumgebung einrichten und ausführen.

Wenn Sie dieses Tutorial befolgen und dieses Beispiel erstellen, fallen möglicherweise Gebühren für Sie anAWS-Konto. Dies umfasst mögliche Kosten für AWS-Services wie Amazon Elastic Compute Cloud (Amazon EC2). Weitere Informationen dazu finden Sie unter Amazon EC2 – Preise.

Voraussetzungen

Bevor Sie dieses Beispiel verwenden, stellen Sie sicher, dass Ihre Einrichtung die folgenden Anforderungen erfüllt:

  • Sie müssen über eine vorhandene AWS Cloud9-EC2-Entwicklungsumgebung verfügen. Bei diesem Beispiel wird davon ausgegangen, dass Sie bereits eine EC2-Umgebung eingerichtet haben, die mit einer Amazon-EC2-Instance verbunden ist, die Amazon Linux oder Ubuntu Server ausführt. 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.

  • Die AWS Cloud9-IDE für die vorhandene Umgebung ist bereits geöffnet. Wenn Sie eine Umgebung öffnen, AWS Cloud9 öffnet die IDE für diese Umgebung in Ihrem Webbrowser. Weitere Informationen finden Sie unter Öffnen einer Umgebung in AWS Cloud9.

Schritt 1: Installieren der Tools

In diesem Schritt installieren Sie folgende Tools:

  • Apache HTTP Server, ein Web-Server-Host.

  • PHP, eine Skriptsprache, die speziell für die Web-Entwicklung geeignet ist und in HTML eingebettet werden kann.

  • MySQL, ein Datenbankmanagementsystem.

Dann schließen Sie diesen Schritt ab, indem Sie Apache HTTP Server und danach MySQL starten.

  1. Stellen Sie sicher, dass die Sicherheitsupdates und Fehlerbehebungen in der Instance auf dem aktuellen Stand sind. Führen Sie dazu in einer Terminalsitzung in der AWS Cloud9-IDE den Befehl yum update (für Amazon Linux) oder apt update (für Ubuntu Server) aus. (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

    Für Ubuntu Server:

    sudo apt -y update
  2. Überprüfen Sie, ob Apache HTTP Server bereits installiert ist. Führen Sie dazu den Befehl httpd -v (für Amazon Linux) oder apache2 -v (für Ubuntu Server) aus.

    Wenn diese Aktion erfolgreich ist, enthält die Ausgabe die Versionsnummer von Apache HTTP Server.

    Wenn Sie einen Fehler sehen, installieren Sie Apache HTTP Server, indem Sie den Befehl install ausführen.

    Für Amazon Linux:

    sudo yum install -y httpd24

    Für Ubuntu Server:

    sudo apt install -y apache2
  3. Prüfen Sie, ob PHP bereits installiert ist, indem Sie den Befehl php -v ausführen.

    Bei Erfolg enthält die Ausgabe die PHP-Versionsnummer.

    Wenn Sie einen Fehler sehen, installieren Sie PHP, indem Sie den Befehl install ausführen.

    Für Amazon Linux:

    sudo yum install -y php56

    Für Ubuntu Server:

    sudo apt install -y php libapache2-mod-php php-xml
  4. Prüfen Sie, ob MySQL bereits installiert ist, indem Sie den Befehl mysql --version ausführen.

    Bei Erfolg enthält die Ausgabe die MySQL-Versionsnummer.

    Wenn Sie einen Fehler sehen, installieren Sie MySQL, indem Sie den Befehl install ausführen.

    Für Amazon Linux:

    sudo yum install -y mysql-server

    Für Ubuntu Server:

    sudo apt install -y mysql-server
  5. Nachdem Sie Apache HTTP Server, PHP und MySQL installiert haben, starten Sie Apache HTTP Server und bestätigen anschließend den Start, indem Sie 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

    Für Ubuntu Server (um zur Eingabeauffoderung zurückzukehren, drücken Sie q):

    sudo service apache2 start && sudo service apache2 status
  6. Starten Sie MySQL und bestätigen Sie anschließend den Start, indem Sie folgenden Befehl ausführen.

    Für Amazon Linux:

    sudo service mysqld start && sudo service mysqld status

    Für Ubuntu Server (um zur Eingabeauffoderung zurückzukehren, drücken Sie q):

    sudo service mysql start && sudo service mysql status

Schritt 2: MySQL einrichten

In diesem Schritt richten Sie MySQL ein, um den bewährten Methoden für die MySQL-Sicherheit zu folgen. 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 schließen Sie diesen Schritt ab, indem Sie den Befehlszeilen-Client von MySQL starten und dann beenden.

  1. Implementieren Sie bewährte Sicherheitsmethoden von MySQL für die MySQL-Installation, indem Sie folgenden Befehl in einer Terminal-Sitzung in der AWS Cloud9-IDE ausführen.

    sudo mysql_secure_installation
  2. Beantworten Sie die folgenden Fragen wie angegeben, wenn Sie dazu aufgefordert werden.

    Für Amazon Linux:

    1. 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).

    2. Set root password (Passwort für Stamm festlegen) – Geben Sie Y ein und drücken Sie dann Enter.

    3. New password (Neues Passwort) – Geben Sie ein Passwort ein und drücken Sie dann Enter.

    4. 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.)

    5. Remove anonymous user (Anonyme Benutzer entfernen) – Geben Sie Y ein und drücken Sie anschließend Enter.

    6. Disallow root login remotely (Fernzugriff auf Stamm verweigern) – Geben Sie Y ein und drücken Sie dann Enter.

    7. Remove test database and access to it (Testdatenbank und Zugriff darauf entfernen) – Geben Sie Y ein und drücken Sie dann Enter.

    8. Reload privilege tables now (Berechtigungstabelle jetzt neu laden) – Geben Sie Y ein und drücken Sie dann Enter.

    Für Ubuntu Server:

    1. Would you like to setup VALIDATE PASSWORD plugin (Möchten Sie das Plug-in VALIDATE PASSWORD einrichten) – Geben Sie y ein und drücken Sie dann Enter.

    2. There are three levels of password validation policy (Die Richtlinie für die Passwortvalidierung umfasst drei Stufen) – Geben Sie 0, 1 oder 2 ein und drücken Sie dann Enter.

    3. New password (Neues Passwort) – Geben Sie ein Passwort ein und drücken Sie dann Enter.

    4. 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.

    5. 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 dann Enter.

    6. Remove anonymous user (Anonyme Benutzer entfernen) – Geben Sie y ein und drücken Sie anschließend Enter.

    7. Disallow root login remotely (Fernzugriff auf Stamm verweigern) – Geben Sie y ein und drücken Sie dann Enter.

    8. Remove test database and access to it (Testdatenbank und Zugriff darauf entfernen) – Geben Sie y ein und drücken Sie dann Enter.

    9. Reload privilege tables now (Berechtigungstabelle jetzt neu laden) – Geben Sie y ein und drücken Sie dann Enter.

  3. Wenn Sie direkt mit MySQL interagieren möchten, starten Sie den Befehlszeilen-Client von MySQL als Root-Benutzer, indem Sie 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 befinden.

    sudo mysql -uroot -p
  4. Führen Sie folgenden Befehl aus, um den Befehlszeilen-Client von MySQL zu beenden. Die Eingabeaufforderung ändert sich wieder in $.

    exit;

Schritt 3: Einrichten einer Website

In diesem Schritt richten Sie den Standard-Website-Stamm für den Apache HTTP Server mit empfohlenen Besitzern und Zugriffsberechtigungen ein. Anschließend erstellen Sie eine PHP-basierte Webseite innerhalb dieses Stamms der Website.

Anschließend aktivieren Sie den eingehenden Web-Datenverkehr zum Anzeigen dieser Webseite, indem Sie die Sicherheitsgruppe in Amazon EC2 und die Netzwerkzugriffskontrollliste (Network Access Control List, Network ACL) in Amazon Virtual Private Cloud (Amazon VPC) einrichten, die mit dieser EC2-Umgebung verbunden sind. Jede EC2-Umgebung muss sowohl mit einer Sicherheitsgruppe in Amazon EC2 als auch mit einer Netzwerk-ACL in Amazon VPC verbunden sein. Während die Standard-Netzwerk-ACL in einem AWS-Konto jedoch den gesamten eingehenden und ausgehenden Datenverkehr für die Umgebung zulässt, erlaubt die Standard-Sicherheitsgruppe nur eingehenden Datenverkehr unter Verwendung von SSH über Port 22. Weitere Informationen finden Sie unter VPC-Einstellungen für AWS Cloud9 Entwicklungsumgebungen.

Anschließend schließen Sie diesen Schritt ab, indem Sie die Webseite erfolgreich außerhalb der AWS Cloud9 IDE anzeigen lassen.

  1. Richten Sie den Standard-Website-Stamm für den Apache HTTP Server (/var/www/html) mit empfohlenen Besitzern und Zugriffsberechtigungen ein. Führen Sie dazu in einer Terminal-Sitzung in der AWS Cloud9 IDE die folgenden sechs Befehle nacheinander in der angegebenen Reihenfolge aus. 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.

    Für 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.
  2. Erstellen Sie eine PHP-basierte Website mit dem Namen index.php im Standard-Website-Stammordner für ApacheHTTP Server (wobei es sich um /var/www/html handelt), indem Sie 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 oben genannte Befehl für Amazon Linux ändert auch den Eigentümer der Datei in ec2-user, die Dateigruppe in web-content sowie die Lese- und Schreibberechtigungen des Benutzers an der Datei und die Berechtigungen zum Lesen und Ausführen der Datei für die Gruppe und andere Personen.

    Für 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 oben genannte Befehl für Ubuntu Server ändert auch den Eigentümer der Datei in ubuntu, die Dateigruppe in web-content sowie die Lese- und Schreibberechtigungen des Benutzers an der Datei und die Berechtigungen zum Lesen und Ausführen der Datei für die Gruppe und andere Personen.

    Ist der Vorgang erfolgreich, wird durch den oben genannten Befehl die Datei index.php mit den folgenden Inhalten erstellt:

    <?php phpinfo(); ?>
  3. Aktivieren Sie den eingehenden Webverkehr über Port 80, um die neue Webseite anzuzeigen, indem Sie die Netzwerk-ACL in Amazon VPC und die Sicherheitsgruppe Amazon EC2 einrichten, die mit dieser EC2-Umgebung verbunden 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 das Ausführen der folgenden Befehle wird der eingehende Web-Datenverkehr über Port 80 für alle EC2-Umgebungen und Amazon-EC2-Instances aktiviert, die mit der Sicherheitsgruppe und der Netzwerk-ACL für diese Umgebung verbunden sind. Dadurch kann es zu einer unerwarteten Aktivierung des eingehenden Web-Datenverkehrs über Port 80 für andere EC2-Umgebungen und Amazon-EC2-Instances als diese kommen.

    Anmerkung

    Mit den Befehlen zwei bis vier wird die Sicherheitsgruppe aktiviert, um eingehenden Web-Datenverkehr über Port 80 zu aktivieren. Wenn Sie über eine Standard-Sicherheitsgruppe verfügen, die ausschließlich eingehenden SSH-Datenverkehr über Port 22 zulässt, müssen Sie den ersten Befehl ausführen und anschließend die Befehle zwei bis vier. 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 Befehlen fünf bis acht wird die Netzwerk-ACL aktiviert, um eingehenden Web-Datenverkehr über Port 80 zu erlauben. Wenn Sie über eine Standard-Netzwerk-ACL verfügen, die bereits eingehenden Datenverkehr über alle Ports erlaubt, können Sie diese Befehle überspringen. Nehmen wir jedoch an, Sie haben eine benutzerdefinierte Netzwerk-ACL, die keinen eingehenden Web-Datenverkehr über Port 80 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.
  4. Rufen Sie die URL für die index.php Datei innerhalb des Web-Server-Stamms ab. Führen Sie dazu den folgenden Befehl aus und verwenden Sie eine neue Registerkarte des Webbrowsers oder einen anderen, von der AWS Cloud9 IDE getrennten Webbrowser, um die angezeigte URL aufzurufen. Ist dieser Vorgang erfolgreich, werden auf der Webseite Informationen über Apache HTTP Server, MySQL, PHP und andere entsprechende Einstellungen angezeigt.

    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 in diesem Fall die folgenden acht Befehle nacheinander in der angegebenen Reihenfolge aus. Damit löschen Sie die entsprechenden eingehenden Web-Datenverkehrregeln, die Sie zuvor in der mit der Umgebung verbundenen Sicherheitsgruppe und Netzwerk-ACL festgelegt haben. Informationen dazu, was die einzelnen Befehle auslösen, finden Sie in der Erklärung hinter dem #-Zeichen für jeden Befehl.

Wichtig

Durch das Ausführen der folgenden Befehle wird der eingehende Web-Datenverkehr über Port 80 für alle EC2-Umgebungen und Amazon-EC2-Instances deaktiviert, die mit der Sicherheitsgruppe und Netzwerk-ACL für diese Umgebung verbunden sind. Dadurch kann es zu einer unerwarteten Deaktivierung des eingehenden Web-Datenverkehrs über Port 80 für EC2-Umgebungen und andere Amazon-EC2-Instances kommen.

Anmerkung

Mit den Befehlen 5 bis 8 werden vorhandene Regeln entfernt, um zu verhindern, dass die Netzwerk-ACL eingehenden Web-Datenverkehr über Port 80 erlaubt. Wenn Sie über eine Standard-Netzwerk-ACL verfügen, die bereits eingehenden Datenverkehr über alle Ports erlaubt, können Sie diese Befehle überspringen. Angenommen, Sie verfügen jedoch über eine benutzerdefinierte Netzwerk-ACL mit vorhandenen Regeln, die eingehenden Web-Datenverkehr über Port 80 erlauben, und 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.