LAMP Stack in 90 Sekunden mit Cloud-Init installieren

Die Entwicklung von Software besteht heute aus vielen verschiedenen Technologien wie Programmiersprachen, Frameworks, Datenbanken und anderen Tools. All dies zusammen ist das, was man den „Tech-Stack“ eines Unternehmens nennt. Ein beliebter Stack ist zum Beispiel der MERN-Stack, der für MongoDB, Express, React und Node steht. Aber heute wollen wir uns den LAMP-Stack ansehen, da er einer der einflussreichsten und beliebtesten ist.

Inhaltsverzeichnis

Was ist LAMP Stack?

LAMP steht für Linux, Apache, MySQL und PHP und existiert seit 1998 als freie und Open-Source Alternative zu kommerzieller Software für die Erstellung von Websites. Seitdem haben viele Unternehmen und Tools diesen Technologie-Stack übernommen und er ist bis heute weit verbreitet.

Ist LAMP nicht veraltet?

Es gibt viele andere Tech-Stacks, die immer mehr an Popularität gewinnen und die Webentwicklung ist nicht mehr so komplex wie vor 20 Jahren. Trotzdem ist LAMP immer noch weit verbreitet und Tools wie WordPress, das 43% des Webs betreibt, leisten einen großen Beitrag dazu, LAMP am Leben zu erhalten.

Hier sind nur ein paar Beispiele für große Unternehmen oder Tools, die den LAMP-Stack verwenden:

  • WordPress
  • Wikipedia
  • Slack
  • Facebook

Übrigens läuft auch dieser Blog auf WordPress und nutzt somit den LAMP Tech Stack!

LAMP Stack einrichten

Jetzt weißt Du also, wovon wir sprechen. Machen wir uns an die Arbeit und richten eine Website mit dem LAMP Stack ein. Das Ziel ist es, einen Apache-Webserver mit PHP und MySQL kaufen zu lassen, und das können wir mit einer einfachen Installation mit apt (Advanced Packaging Tool) unter Linux erreichen. Aber neben dieser manuellen Installationsmethode gibt es auch noch andere Möglichkeiten, den LAMP Stack auf unserem Server zum Laufen zu bringen.

Obwohl es bei Contabo möglich ist, eine neue Instanz mit vorinstalliertem LAMP Stack auf einem VPS oder VDS einzurichten, wenn man eine neue Instanz anlegt oder das Neuinstallations-Panel verwendet, ist es manchmal notwendig, einige Einstellung zu ändern, sodass eine manuelle Installation vielleicht bessere Weg ist.

Manuelle Installation

Um loszulegen, brauchst Du nur einen Linux-Server und Root-Zugriff auf diesen, damit wir die erforderlichen Pakete installieren und konfigurieren können. In diesem Leitfaden verwenden wir Debian 11 auf einem Contabo Cloud VPS.

Bevor Du neue Pakete installierst, solltest Du sicherstellen, dass Dein Server auf dem neusten Stand ist, indem Du die Pakete aktualisierst und upgradest:

apt update && apt upgrade -y

Als nächstes fügen wir Apache2, sowie einige Pakete hinzu, die für die Installation benötigt werden:

apt-get install software-properties-common wget curl apache2 -y

Um die PHP-Pakete installieren zu können, müssen wir zunächst das PHP-Repository hinzufügen:

curl -sSL https://packages.sury.org/php/README.txt | sudo bash -x

Nun können wir die PHP-Pakete installieren:

apt-get install php8.1 php8.1-cli php8.1-common php8.1-curl php8.1-gd php8.1-intl php8.1-mbstring php8.1-mysql php8.1-opcache php8.1-readline php8.1-xml php8.1-xsl php8.1-zip php8.1-bz2 libapache2-mod-php8.1 -y

Wenn Du die oben genannten Erweiterungen nicht benötigst, kannst Du PHP auch ohne die zusätzlichen Pakete installieren:

apt-get install php8.1 php8.1-cli libapache2-mod-php8.1 -y

Starte nun den Apache2 Webserver mit dem folgendem Befehl neu:

service apache2 restart

Wenn Du die IP-Adresse Deines Servers aufrufst, sollte die Apache2 Standardseite erscheinen:

Um einen vollständigen LAMP Stack zu installieren, muss nur noch MySQL installiert werden. Die geht mit diesem Befehl:

apt install mariadb-server mariadb-client -y && mysql-secure-installation

Dadurch wird MariaDB (MySQL) installiert und das Installationsprogramm automatisch gestartet. Während des Installationsprozesses wirst Du zudem aufgefordert, ein neues Root-Passwort festzulegen. Um auf Deine Datenbank zuzugreifen, kannst Du „root“ als Benutzername und das eben festgelegte Passwort verwenden.

Glückwunsch! Du hast LAMP Stack erfolgreich auf Deinem System installiert. Dieser Prozess kann aber deutlich effizienter gemacht werden, also lasst uns mit Cloud-Init automatisieren, was wir eben manuell gemacht haben!

Installation mit Cloud-Init

In einem früheren Artikel haben wir bereits die Vorteile von Cloud-Init erklärt. Im Allgemeinen ist Cloud-Init ein Tool zum Einrichten einer Cloud-Instanz unter Verwendung einer vordefinierten Konfigurationsdatei. Cloud-Init automatisiert nicht nur den Einrichtungsprozess, sondern hilft auch in Situationen wie der Disaster Recovery.

Mit der manuellen Installationsanleitung im Hinterkopf können wir nun die Cloud-Init Konfigrationsdatei erstellen, um den Prozess zu automatisieren und auf mehreren Systemen zu replizieren.

Um anzuzeigen, dass es sich um eine Cloud-Init Konfigurationsdatei handelt, sieht die erste Zeile wie folgt aus:

#cloud-config

Cloud-Init bietet zwei einfache Optionen, um zu steuern, ob die Pakete zunächst aktualisiert (update) und geupgraded (upgrade) werden sollen. Um sicherzustellen, dass wir mit den neusten Paketen arbeiten, setzen wir die folgenden Werte auf true:

package_update: true
package_upgrade: true

Nun können der Apache2 Webserver und weitere benötigte Programme installiert werden. Außerdem können wir Cloud-Init anweisen, Paketmodule mit zu installieren:

packages:
  - software-properties-common
  - wget
  - curl
  - apache2

Der Rest der Installation wird mit dem Modul runcmd durchgeführt. Hiermit ist es möglich, eine Liste von Befehlen, die in der Cloud-Init „config“-Phase ausgeführt werden, auszuführen.

Um PHP zu installieren, können wir die gleichen Befehle wie bei der manuellen Installation verwenden:

runcmd:
  - curl -sSL https://packages.sury.org/php/README.txt | sudo bash -x
  - sudo apt-get install php8.1 php8.1-cli php8.1-common php8.1-curl php8.1-gd php8.1-intl php8.1-mbstring php8.1-mysql php8.1-opcache php8.1-readline php8.1-xml php8.1-xsl php8.1-zip php8.1-bz2 libapache2-mod-php8.1 -y
  - service apache2 restart

Die Einrichtung von MySQL bzw. MariaDB ist ein wenig anders. Zuerst müssen wir es installieren:

apt install mariadb-server mariadb-client -y

Da wir in diesem Fall nicht den mysql-secure-installation Installer verwenden können, müssen wir das Passwort in der Cloud-Init Konfigrationsdatei festlegen. Wir wollen allerdings nicht, das ein Passwort in dieser Datei gespeichert wird, also erstellen wir einfach ein zufälliges und speichern dies in einer Datei auf dem Server (unter /home/mysql_access.txt), damit wir per SSH darauf zugreifen können.

pw=$(openssl rand -base64 18); echo „mysql_password=$pw” >> /home/mysql_access.txt

Um das Passwort tatsächlich zu ändern, kannst Du den mysqladmin-Befehl verwenden.

pw=$(openssl rand -base64 18); mysqladmin -u root -h localhost password “$pw” echo “mysql_password=$pw” >> /home/mysql_access.txt

Lass tuns nun die Berechtigungstabelle neu laden, um sicherzustellen, dass die Änderungen wirksam sind:

mysqladmin reload

Wenn wir nun alle diese Konfigurationen in einer Datei kombinieren, erhalten wir eine vollständige Cloud-Init Konfiguration, die zur Erstellung neuer Instanzen mit installiertem und konfigurierten LAMP Stack verwendet werden kann:

#cloud-config
package_update: true
package_upgrade: true
packages:
  - software-properties-common
  - wget
  - curl
  - apache2
runcmd:
  - curl -sSL https://packages.sury.org/php/README.txt | sudo bash -x
  - sudo apt-get install php8.1 php8.1-cli php8.1-common php8.1-curl php8.1-gd php8.1-intl php8.1-mbstring php8.1-mysql php8.1-opcache php8.1-readline php8.1-xml php8.1-xsl php8.1-zip php8.1-bz2 libapache2-mod-php8.1 -y
  - service apache2 restart
  - apt install mariadb-server mariadb-client -y
  - pw=$(openssl rand -base64 18); mysqladmin -u root -h localhost password "$pw"; echo "mysql_password=$pw" >> /home/mysql_access.txt
  - mysqladmin reload

Die Vorteile von Cloud-Init

Mit dieser Konfigurationsdatei hast Du eine einzige Datei erstellt, die Du nun immer wieder und auf mehreren Instanzen verwenden kannst, um diese Einrichtung zu replizieren.

Benötigst Du eine weitere Website, die auf LAMP basiert? Starte einfach einen neuen Server und schon kannst Du dein neues Projekt anfangen.

Es ist etwas schlimmes passiert und eine Instanz ist ausgefallen? Kein Problem! Mit dieser Cloud-Init Konfiguration kannst Du schnell eine neue Instanz erstellen, auf die Deine gesamte Konfiguration bereits angewendet wurde.

Es geht um Replikation und Notfallwiederherstellung: Du musst neue Instanzen nicht mehr manuell installieren, denn mit dieser Konfiguration hast Du eine Vorlage erstellt, die bei der Erstellung neuer Instanzen wiederverwendet werden kann – das bedeutet weniger Arbeit für Dich und einen viel effizienteren Workflow.