PHP-Webanwendung auf einem LAMP-Stack in VPC

Für dieses Lernprogramm können Kosten anfallen. Mit dem Kostenschätzer können Sie eine Kostenschätzung für Ihre voraussichtliche Nutzung generieren.

In diesem Tutorial erfahren Sie, wie Sie einen virtuellen Ubuntu-Linux-Server mit Apache-Webserver, MySQL-Datenbank und PHP-Scripting in der VPC-Infrastruktur(Virtual Private Cloud) IBM Cloud erstellen. Diese Kombination von Software – allgemein als LAMP-Stack bezeichnet – wird häufig zur Bereitstellung von Websites und Webanwendungen verwendet. Mit IBM Cloud VPC können Sie schnell Ihren LAMP-Stack implementieren und bei Bedarf eine Protokollierung und Überwachung hinzufügen. Um den LAMP-Server in Aktion zu erleben, installieren und konfigurieren Sie auch das kostenlose Open-Source-Content-Management-System WordPress.

Ziele

  • Bereitstellung einer virtuellen Serverinstanz (VSI) in einem VPC.
  • Installieren Sie die neueste Apache-, MySQL- und PHP-Software.
  • Hosten Sie eine Website oder einen Blog durch die Installation und Konfiguration von WordPress.
  • Konfigurieren Sie die Protokollierung und Überwachung, um Ausfallzeiten zu erkennen und eine langsame Leistung zu überwachen (optional).
  • Ändern Sie die Größe der VSI (optional).

des

  1. Der Endbenutzer greift auf den LAMP-Server zu, der auf einem VPC unter Verwendung eines Web-Browsers ausgeführt wird.
  2. Die VSI ist für die Verwendung von Daten aus einem verschlüsselten Blockspeicherdatenträger (optional) konfiguriert.

Vorbereitende Schritte

Für dieses Lernprogramm ist Folgendes erforderlich:

  • Abrechnungsfähiges IBM Cloud-Konto
  • IBM Cloud CLI,
    • IBM Cloud VPC-Plug-in (vpc-infrastructure)
  • terraform zur Bereitstellung von Ressourcen mithilfe von IaC (Infrastructure as Code)
  • jq zum Abfragen von JSON-Dateien
  • git zum Klonen des Quellcode-Repositorys

Anweisungen zum Herunterladen und Installieren dieser Tools für Ihre Betriebsumgebung finden Sie im Leitfaden "Erste Schritte mit Lösungs-Tutorials ". Um die Installation dieser Tools zu vermeiden, können Sie Cloud Shell verwenden.

Services erstellen

In diesem Abschnitt werden Sie eine VPC, ein Subnetz, eine Sicherheitsgruppe und eine virtuelle Serverinstanz (VSI) mithilfe IBM Cloud Shell und IBM Cloud bereitstellen. Virtuelle Server werden oft für Lastspitzen eingesetzt, nach denen sie ausgesetzt oder heruntergefahren werden können, sodass die Cloud-Umgebung perfekt zu Ihren Infrastrukturanforderungen passt.

Wenn Sie eine Terraform-Vorlage verwenden möchten, um diese Ressourcen zu generieren, können Sie die hier verfügbare Vorlage verwenden: https://github.com/IBM-Cloud/vpc-tutorials/tree/master/vpc-lamp. Befolgen Sie die Anweisungen in der Datei README.md. Diese Vorlage kann auch in Schematics verwendet werden.

  1. Starten Sie während der Anmeldung an Ihrem IBM Cloud-Kontodas IBM Cloud Shell.
  2. In der Shell werden Sie automatisch in einer IBM Cloud angemeldet. Sie können zu einer anderen Region wechseln, indem Sie den folgenden Befehl ausführen:
    ibmcloud target -r <region-name> -g <resource-group>
    

SSH-Schlüssel erstellen

  1. In VPC wird ein SSH-Schlüssel für den Administratorzugriff auf eine VSI anstelle eines Kennworts verwendet. Erstellen Sie einen SSH-Schlüssel, indem Sie den folgenden Befehl ausführen und die Standardwerte akzeptieren, wenn Sie dazu aufgefordert werden. Weitere Informationen zu SSH-Schlüsseln finden Sie in den Dokumenten zu SSH-Schlüssel.

    ssh-keygen -t rsa -b 4096
    

    Der Befehl oben generiert zwei Dateien im ~/.ssh-Verzeichnis: id_rsa und id_rsa.pub. Ihre Cloud Shell-Sitzung ist nur kurze Zeit gültig und alle Dateien, die Sie in IBM Cloud Shell erstellen, sollten zur späteren Wiederverwendung an einem sicheren Ort gespeichert werden. In Cloud Shell gibt es oben rechts im Bildschirm eine Option für den Download und Upload von Dateien.

    Wenn Sie einen vorhandenen SSH-Schlüssel haben, den Sie wiederverwenden möchten, können Sie ihn auch in Ihre Cloud Shell-Sitzung hochladen.

  2. Fügen Sie den SSH-Schlüssel zu Ihrem Konto hinzu.

    SSHKEY_ID=$(ibmcloud is key-create sshkey-lamp-tutorial @$HOME/.ssh/id_rsa.pub --json | jq -r '.id')
    

VPC, Teilnetze und Sicherheitsgruppen erstellen

  1. Erstellen Sie ein VPC. Weitere Informationen finden Sie in der Dokumentation zur Erstellung einer VPC in der Konsole oder in der Befehlszeilenschnittstelle (CLI).

    VPC_ID=$(ibmcloud is vpc-create vpc-lamp-tutorial --json | jq -r '.id')
    
  2. Erstellen Sie das Teilnetz für Ihren VPC.

    SUBNET_ID=$(ibmcloud is subnet-create subnet-lamp-1 $VPC_ID --zone $(ibmcloud target --output json | jq -r '.region.name')-1 --ipv4-address-count 256 --json | jq -r '.id')
    
  3. Erstellen Sie die Sicherheitsgruppe für Ihren VPC.

    SG_ID=$(ibmcloud is security-group-create sg-lamp-1 $VPC_ID --json | jq -r '.id')
    
  4. Fügen Sie eine Regel hinzu, um eingehende Daten an den SSH-Port 22 zu begrenzen.

    ibmcloud is security-group-rule-add $SG_ID inbound tcp --port-min 22 --port-max 22 --json
    

    Sie können den Zugriff auf den SSH-Port auf eine Teilmenge von Adressen beschränken. Verwenden Sie im obigen Befehl --remote ", um den Zugriff auf diesen Server einzuschränken, d. h. ibmcloud is security-group-rule-add $SG_ID inbound tcp --remote YOUR_IP_ADDRESS --port-min 22 --port-max 22 --json

  5. Fügen Sie eine Regel hinzu, um eingehende Daten an den HTTP-Port 80 zu begrenzen.

    ibmcloud is security-group-rule-add $SG_ID inbound tcp --port-min 80 --port-max 80 --json
    

    Sie können den Zugriff auf HTTP auch auf eine Teilmenge von Adressen beschränken. Verwenden Sie im obigen Befehl --remote ", um den Zugriff auf diesen Server einzuschränken, d. h. ibmcloud is security-group-rule-add $SG_ID inbound tcp --remote YOUR_IP_ADDRESS --port-min 80 --port-max 80 --json

  6. Fügen Sie eine Regel hinzu, um abgehende Daten zu allen zu ermöglichen. Dies ist für die Installation von Software erforderlich. Sie kann später inaktiviert oder entfernt werden.

    ibmcloud is security-group-rule-add $SG_ID outbound all --json
    

Instanz eines virtuellen Servers erstellen

  1. IBM Cloud aktualisiert das Ubuntu-Image regelmäßig mit der neuesten Software, erhält die Image-ID für das neueste Ubuntu 20.x, indem Sie den folgenden Befehl ausführen.
    IMAGE_ID=$(ibmcloud is images --json | jq -r '.[] | select (.name=="ibm-ubuntu-22-04-1-minimal-amd64-3") | .id')
    
  2. Virtuelle Serverinstanz erstellen
    NIC_ID=$(ibmcloud is instance-create vsi-lamp-1 $VPC_ID $(ibmcloud target --output json | jq -r '.region.name')-1 cx2-2x4 $SUBNET_ID --image-id $IMAGE_ID --key-ids $SSHKEY_ID --security-group-ids $SG_ID --json | jq -r '.primary_network_interface.id')
    
  3. Variable IP-Adresse reservieren
    FLOATING_IP=$(ibmcloud is floating-ip-reserve fip-lamp-1 --nic-id $NIC_ID --json | jq -r '.address')
    
  4. Stellen Sie eine Verbindung mit dem Server über SSH her. Beachten Sie, dass es etwa eine Minute dauern kann, bis der neu erstellte Server über SSH erreichbar ist.
    ssh root@$FLOATING_IP
    
    Für den Zugriff auf den virtuellen Server über Ihren Browser müssen Sie die variable IP-Adresse kennen. Da sie zuvor in einer Shellvariablen erfasst wurde, können Sie den folgenden Befehl ausführen, um die variable IP-Adresse echo $FLOATING_IP zu erhalten oder indem Sie ibmcloud is floating-ips --json ausführen und nach dem Namen suchen, der für die Erstellung der variable IP-Adresse fip-lamp-1 im Ergebnis verwendet wird. Sie können die dynamische IP-Adresse des Servers auch über die Webkonsole abrufen.

Apache, MySQL und PHP installieren

In diesem Abschnitt führen Sie Befehle aus, um Ubuntu-Paketquellen zu aktualisieren und Apache, MySQL und PHP mit der neuesten Version zu installieren.

Wenn der Server zum ersten Mal hochgefahren wird, ist es möglich, dass er bereits Systemaktualisierungen ausführt und Sie an der Ausführung der nachfolgend genannten Befehle hindert. Sie können den Status der Systemaktualisierungen überprüfen, indem Sie ps aux | grep -i apt ausführen und dann entweder warten, bis die Task für das automatisierte System aktualisiert wird oder die Task beendet wird.

  1. Interaktiven Modus bei Aktualisierungen inaktivieren
    export DEBIAN_FRONTEND=noninteractive
    
  2. Pakete aktualisieren
    apt update
    
  3. Apache installieren
    apt install apache2 -y
    
  4. MySQL installieren
    apt install mysql-server -y
    
  5. PHP installieren
    apt install php libapache2-mod-php php-mysql php-common php-cli -y
    

Installation und Konfiguration überprüfen

In diesem Abschnitt überprüfen Sie, ob Apache, MySQL und PHP auf dem neuesten Stand sind und auf dem Ubuntu-Image ausgeführt werden. Außerdem implementieren Sie die empfohlenen Sicherheitseinstellungen für MySQL.

  1. Überprüfen Sie Ubuntu, indem Sie die variable IP-Adresse im Browser öffnen. Die Ubuntu-Begrüßungsseite sollte aufgerufen werden.
    Verify Ubuntu
    Verify Ubuntu
  2. Überprüfen Sie die installierten Versionen von Apache, MySQL und PHP, indem Sie die folgenden Befehle verwenden.
    apache2 -v
    
    mysql -V
    
    php -v
    
  3. Öffnen Sie eine mysql-Eingabeaufforderung.
    mysql
    
  4. Führen Sie die folgenden Befehle aus und ersetzen Sie dabei yourPassworddurch Ihr Kennwort.
    ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'yourPassword';
    
  5. Verlassen Sie die Eingabeaufforderung mysql.
    exit
    
  6. Führen Sie das folgende Script aus, um die MySQL-Datenbank zu sichern. Wählen Sie die Optionen aus, die Ihren Vorgaben am besten entsprechen, oder drücken Sie einfach die Eingabetaste, um das Setup schnell durchzugehen.
    mysql_secure_installation
    
  7. Zusätzlich können Sie mit dem folgenden Befehl schnell eine PHP-Infoseite erstellen.
    echo "<?php phpinfo(); ?>" > /var/www/html/info.php
    
  8. Zeigen Sie die von Ihnen erstellte PHP-Infoseite an: Öffnen Sie einen Browser und wechseln Sie zu http://{FloatingIPAddress}/info.php. Ersetzen Sie die variable IP-Adresse Ihrer VSI. Das Ganze sieht dann in etwa wie folgt aus.

PHP-Informationen
PHP-Informationen

WordPress installieren und konfigurieren

Machen Sie sich mit Ihrem LAMP-Stack vertraut, indem Sie eine Anwendung installieren. In den folgenden Schritten wird die Open-Source-WordPress-Plattform installiert, die häufig zum Erstellen von Websites und Blogs verwendet wird. Weitere Informationen und Einstellungen für die Produktionsinstallation finden Sie in WordPress.

  1. Führen Sie den folgenden Befehl aus, um WordPress zu installieren.
    apt install wordpress -y
    
  2. Konfigurieren Sie WordPress für die Verwendung von MySQL und PHP. Führen Sie den folgenden Befehl aus, um einen Texteditor zu öffnen und die Datei /etc/wordpress/config-localhost.php zu erstellen.
    sensible-editor /etc/wordpress/config-localhost.php
    
  3. Kopieren Sie die folgenden Zeilen in die Datei. Dabei wird yourPassword durch das MySQL-Datenbankkennwort ersetzt, während die anderen Werte unverändert bleiben. Speichern Sie die Datei und beenden Sie sie.
    <?php
    define('DB_NAME', 'wordpress');
    define('DB_USER', 'wordpress');
    define('DB_PASSWORD', 'yourPassword');
    define('DB_HOST', 'localhost');
    define('WP_CONTENT_DIR', '/usr/share/wordpress/wp-content');
    ?>
    
  4. Öffnen Sie eine mysql-Eingabeaufforderung und geben Sie Ihr Kennwort an.
    mysql -u root -p
    
  5. Führen Sie die folgenden Befehle aus, wobei Sie Ihr Datenbankpasswort durch yourPassword ersetzen und die anderen Werte unverändert lassen.
    CREATE DATABASE wordpress;
    
    CREATE USER 'wordpress'@'localhost' IDENTIFIED BY 'yourPassword';
    
    GRANT SELECT,INSERT,UPDATE,DELETE,CREATE,DROP,ALTER ON wordpress.* TO 'wordpress'@'localhost';
    
    FLUSH PRIVILEGES;
    
  6. Verlassen Sie die Eingabeaufforderung mysql.
    exit
    
  7. Verschieben Sie die WordPress-Installation in das Dokumentstammverzeichnis des Web-Servers.
    ln -s /usr/share/wordpress /var/www/html/wordpress
    
    mv /etc/wordpress/config-localhost.php /etc/wordpress/config-default.php
    
  8. Schließen Sie die WordPress-Konfiguration ab und veröffentlichen Sie das System auf der Plattform. Öffnen Sie einen Browser und gehen Sie zu http://{FloatingIPAddress}/wordpress/wp-admin. Ersetzen Sie die variable IP-Adresse Ihrer Instanz. Das Ganze sollte wie die folgende Abbildung aussehen.
    WordPress Website läuft
    WordPress-Website läuft

Domäne konfigurieren

Wenn Sie einen vorhandenen Domänennamen mit Ihrem LAMP-Server verwenden möchten, aktualisieren Sie den A-Datensatz so, dass er auf die variable IP-Adresse des VSI verweist.

Serverüberwachung und Protokollverwaltung

Um die Serververfügbarkeit und eine optimale Benutzererfahrung zu gewährleisten, sollte die Überwachung auf jedem Produktionsserver aktiviert werden. Es stehen mehrere Optionen zur Verfügung, um Ihre VSI zu überwachen und Protokolle an einer zentralen Stelle zur Analyse zu erfassen.

Serverüberwachung

Sie können die CPU-, Datenträger-, Speicher-und Netznutzung Ihrer VSI-Instanzen überwachen, nachdem Sie eine Instanz des IBM Cloud Monitoring-Service eingerichtet haben. Wenn Sie den Überwachungsservice konfigurieren möchten, führen Sie die Schritte aus, die in der Dokumentation unter Linux-Host überwachen beschrieben sind.

Serverprotokollierung

Sie können IBM Cloud Logs erstellen, um System- und Anwendungsprotokolle in IBM Cloud zu verwalten.

IBM Cloud Logs bietet Administratoren, DevOps-Teams und Entwicklern erweiterte Funktionen zum Filtern, Durchsuchen und Verfolgen von Protokolldaten, zum Definieren von Benachrichtigungen und zum Entwerfen benutzerdefinierter Ansichten zur Überwachung von Anwendungs- und Systemprotokollen.

Folgen Sie den Anweisungen im Abschnitt Verwalten des Protokollierungsagenten für Linux

Einen mit Bring-Your-Own-Key (BYOK) verschlüsselten Datenträger konfigurieren (optional)

Die VSI wurde mit einem vom Provider verwalteten verschlüsselten Boot-Datenträger von 100 GB erstellt. Wenn Sie jedoch diese VSI löschen, müssen alle Daten, die gesichert werden sollen, verschoben werden, bevor Sie die VSI löschen. Eine Alternative besteht darin, einen Data-Datenträger zu erstellen, der auch dann als persistent definiert werden kann, wenn die VSI gelöscht und an eine neue VSI angehängt wird. Sie können den Datenträger auch mit Ihrem eigenen Schlüssel verschlüsseln. Wenn dies Ihr gewünschtes Ergebnis ist, führen Sie die folgenden Schritte aus, um einen Datenträger zu erstellen und ihn an Ihren VSI anzuhängen.

  1. Erstellen Sie eine Datendatenträgerkonfigurationsdatei.

    VOLUME_ID=$(ibmcloud is volume-create volume-lamp-1 10iops-tier $(ibmcloud target --output json | jq -r '.region.name')-1 --capacity 100 --json | jq -r '.id')
    

    In VPC haben Sie außerdem die Möglichkeit, einen vom Kunden verwalteten Verschlüsselungsschlüssel zu verwenden. Für die Speicherung Ihrer eigenen Verschlüsselungscodes können Sie einen von zwei verfügbaren Diensten nutzen: (1) einen FIPS 140-2 Level 3-Dienst IBM Key Protect. Weitere Informationen finden Sie im Abschnitt Bereitstellung der IBM Key Protect -Service in der Dokumentation. (2) Weiteres zu einem FIPS 140-2 Level 4-Service IBM Cloud Hyper Protect Crypto Services finden Sie im Abschnitt Erste Schritte mit IBM Cloud Hyper Protect Crypto Services in der Dokumentation. Bei der Erstellung des Datenträgers können Sie den Parameter --encryption-key mit dem CRN für den Verschlüsselungsschlüssel angeben, den Sie verwenden möchten.

  2. Erfassen Sie die ID der VSI, die zuvor erstellt wurde, indem Sie alle Instanzen auflisten und nach dem Instanznamen filtern:

    VSI_ID=$(ibmcloud is instances --json | jq -r '.[] | select(.name == "vsi-lamp-1") | .id')
    
  3. Hängen Sie den Datenträger an Ihre vorhandene VSI an.

    ibmcloud is instance-volume-attachment-add attachment-data-1 $VSI_ID $VOLUME_ID --auto-delete false --json
    
  4. Stellen Sie eine Verbindung zum Server mit SSH her.

    ssh root@$FLOATING_IP
    
  5. Konfigurieren Sie den neu erstellten Datenträger auf der VSI; führen Sie die nachfolgenden Zeilen einzeln nacheinander aus.

    new_bsv=$(echo $(parted -l 2>&1) | awk 'NR==1{print $2}' | sed 's/:$//')
    parted $new_bsv mklabel gpt
    parted -a opt $new_bsv mkpart primary ext4 0% 100%
    new_part=${new_bsv}1
    mkfs.ext4 -L lamp-data ${new_part}
    mkdir /data
    mount ${new_part} /data
    echo "${new_part} /data ext4 defaults,relatime 0 0" | tee -a /etc/fstab
    mount -a
    

Apache für die Verwendung des neuen /data-Dateisystems konfigurieren

  1. Apache-Service stoppen
    service apache2 stop
    
  2. Apache-Verzeichnis von /var zu /data verschieben
    mv /var/www /data/
    
  3. Link zur neuen Position erstellen
    ln -s /data/www /var/www
    
  4. Apache-Service starten
    service apache2 start
    

MySQL für die Verwendung des neuen /data-Dateisystems konfigurieren

  1. MySQL-Service stoppen
    service mysql stop
    
  2. MySQL-Verzeichnis von /var in /data verschieben
    mkdir /data/lib
    
    mv /var/lib/mysql /data/lib/
    
  3. Link zur neuen Position erstellen
    ln -s /data/lib/mysql /var/lib/mysql
    
  4. Fügen Sie AppArmor einen Alias des neuen Speicherorts hinzu, da AppArmor sonst den Zugriff blockiert.
    echo "alias /var/lib/mysql/ -> /data/lib/mysql/," >> /etc/apparmor.d/tunables/alias
    
  5. AppArmor-Service erneut starten
    systemctl restart apparmor
    
  6. MySQL-Service starten
    service mysql start
    
  7. Öffnen Sie einen Browser und gehen Sie zu http://{FloatingIPAddress}/wordpress. Ersetzen Sie die variable IP-Adresse Ihrer Instanz. Nun sollten Sie auf Ihre WordPress-Seite genauso wie vor dem Hinzufügen des neuen Datenträgers zugreifen können.

VSI-Größe ändern (optional)

Die VSI wurde mit einem der kompaktesten Profile erstellt, die in VPC verfügbar sind, also 2 vCPU und 4 GiB RAM. Sie können den verfügbaren Umfang von vCPU und RAM abhängig von Ihren Nutzungsanforderungen erhöhen (oder auch verringern); entsprechende Informationen finden Sie unter Größe einer virtuellen Serverinstanz ändern.

  1. Erfassen Sie die ID der VSI, die zuvor erstellt wurde, indem Sie alle Instanzen auflisten und nach dem Instanznamen filtern:

    VSI_ID=$(ibmcloud is instances --json | jq -r '.[] | select(.name == "vsi-lamp-1") | .id')
    
  2. Stoppen Sie die -Instanz.

    ibmcloud is instance-stop $VSI_ID
    
  3. Ändern Sie die Größe der Instanz.

    ibmcloud is instance-update $VSI_ID --profile cx2-4x8
    

    Eine Liste mit alternativen Profilen können Sie mit dem Befehl ibmcloud is instance-profiles abrufen. Beachten Sie jedoch die Einschränkungen für die Größenänderung, die für das aktuelle bzw. das Zielprofil im Abschnitt Größe einer virtuellen Serverinstanz ändern angegeben sind.

  4. Starten Sie die Instanz.

    ibmcloud is instance-start $VSI_ID
    
  5. Möglicherweise müssen Sie einige Minuten warten, weil die VSI auf einem geeigneten Host platziert und gestartet wird. Öffnen Sie einen Browser und gehen Sie zu http://{FloatingIPAddress}/wordpress. Ersetzen Sie die variable IP-Adresse Ihrer Instanz. Nun sollten Sie auf Ihre WordPress-Seite genauso wie vor der Größenänderung zugreifen können.

Ressourcen entfernen

  1. Klicken Sie in der VPC-Konsole auf Variable IP-Adressen und dann auf die IP-Adresse für Ihre VSIs. Wählen Sie anschließend im Aktionsmenü die Option Veröffentlichen aus. Bestätigen Sie, dass die IP-Adresse veröffentlicht werden soll.
  2. Wechseln Sie als Nächstes zu Virtuelle Serverinstanzen. Löschen Sie Ihre Instanz.
  3. Sobald die VSIs entfernt wurden, wechseln Sie zu Teilnetze. Löschen Sie Ihr Teilnetz.
  4. Wechseln Sie nach dem Löschen der Teilnetze zur Registerkarte VPC und löschen Sie Ihre VPC.
  5. Wenn Sie den optionalen Datendatenträger erstellt haben und ihn nicht mehr benötigen, wechseln Sie auf die Registerkarte Blockspeicherdatenträger und löschen Sie den Datenträger.

Wenn Sie die Konsole verwenden, müssen Sie Ihre Browseransicht möglicherweise aktualisieren, damit aktualisierte Statusinformationen nach dem Löschen einer Ressource angezeigt werden.

Je nach Ressource wird diese möglicherweise nicht sofort gelöscht, sondern (standardmäßig für 7 Tage) aufbewahrt. Sie können die Ressource zurückfordern, indem Sie sie permanent löschen oder innerhalb des Aufbewahrungszeitraums wiederherstellen. In diesem Dokument erfahren Sie mehr zur Verwendung der Ressourcenrückforderung.