DevOps, Webentwicklung, Wordpress
Februar 19, 2019

Im folgenden Tutorial werden Sie einen LAMP Web-Server ( Linux, Apache, MySQL, PHP)  auf einer EC2 Instanz mit  Amazon Linux AMI 2  einrichten.

LAMP auf AWS EC 2 – Grundeinstellungen

Verbinden Sie sich zunächst mit der ec2-Instance. Ein Standard Linux-Benutzer für eine neue AMI2 Instanz heißt ec2-user. Für die Verbindung werden Sie des Weiteren Ihren Public DNS sowie Ihren pem-Schlüssel benötigen. Den Schlüssel haben Sie während der Einrichtung der ec2-Instanz bereits erhalten.

ssh -i your-key.pem [email protected]

Im nächsten Schritt wird sichergestellt, dass alle Softwarepakete in Ihrem Amazon Linux 2 System aktuell sind. Dafür wird der Befehl yum update verwendet. Yum Packagemanager  können Sie auch von CentOs/Red Hat kennen.

sudo yum update -y

Installieren Sie jetzt lamp-mariadb10.2-php7.2- und php7.2 von Amazon Linux Repository, um die aktuellen Versionen der LAMP MariaDB- und PHP-Pakete für Amazon Linux 2 zu erhalten.

sudo amazon-linux-extras install -y lamp-mariadb10.2-php7.2 php7.2

Ihre Instance ist bereits aktuell, Sie können also mit Installieren der Softwarepakete für den Apache-Webserver, MariaDB und PHP fortfahren. Dafür verwenden Sie weiterhin den Befehl yum install.

sudo yum install -y httpd mariadb-server

Jetzt wenn die Installation Ihres Apache-Webservers sowie des MariaDB-Servers geklappt hat, können Sie den Apache-Webserver starten.

sudo systemctl start httpd

Sie sollen auf jeden Fall auch den Apache-Webserver so konfigurieren, dass er bei jedem Systemstart automatisch startet.

sudo systemctl enable httpd

Testen Sie Ihren Webserver. Sie können den Test durchführen, in dem Sie in einen Web-Browser die öffentliche DNS-Adresse ( oder die öffentliche IP-Adresse) Ihrer Instance eingeben. Wenn Sie die bisherigen Schritte korrekt ausgeführt haben und Ihre Security-Groups-Einstellungen den Port 80 ( Standardport des Apache-Webservers) zulassen, werden Sie in Ihrem Web-Browser folgende Seite sehen.

Standardmäßig werden von httpd die Dateien berücksichtigt, die in dem Apache-Dokumenten-Stammverzeichnis liegen. Das Amazon Linux-Apache-Dokumenten-Stammverzeichnis ist /var/www/html

Damit die Dateien in diesem Verzeichnis von ec2-user-Konto bearbeitet werden können, müssen die Eigentümerschaft sowie die Berechtigungen des Verzeichnisses geändert werden.

Um dies zu erreichen, werden folgende Schritte benötigt:

  1. Den ec2-user zur apache-Gruppe hinzufügen
  2. Der apache-Gruppe die Eigentümerschaft über das Verzeichnis /var/www geben
  3. Der apache-Gruppe die Schreibberechtigungen zuweisen

Fügen Sie den ec2-user zu der apache-Gruppe hinzu

sudo usermod -a -G apache ec2-user

Melden Sie sich ab und wieder an, damit die Änderungen der Gruppe aktiv und für Sie sichtbar sind.

Mit exit Befehl können Sie sich abmelden, ohne das Terminal-Fenster schließen zu müssen.

exit

Nach dem erneuten Einloggen in das System können Sie mit groups-Befehl die Mitgliedschaft des ec2-users verifizieren.

groups

Übertragen Sie jetzt die Eigentümerschaft der Datei /var/www und alle darunter liegende Inhalte

sudo chown -R ec2-user:apache /var/www

Jetzt braucht man noch die Schreibberechtigungen für die Gruppe. Des weiteren sollen alle Unterverzeichnisse in var/www auch der Gruppe apache zugehören. Das erreichen wir mit folgendem Befehl.

sudo chmod 2775 /var/www && find /var/www -type d -exec sudo chmod 2775 {} \;

Jetzt müssen noch Dateiberechtigungen in den Unterverzeichnissen angepasst werden.

find /var/www -type f -exec sudo chmod 0664 {} \;

Sie können jetzt Ihren LAMP-Server testen

Zuerst können Sie testen, ob PHP richtig auf Ihrem Server installiert wurde. Um dies zu erreichen, erstellen Sie eine simple php Datei mit dem Aufruf der phpinfo() Funktion, die wichtigste Daten über die installierte PHP Version anzeigt.

echo "" > /var/www/html/phpinfo.php

In Ihrem Web-Browser geben Sie folgende URL ein

http://my.public.dns.amazonaws.com/phpinfo.php

Sie werden folgende Seite mit den PHP-Informationen sehen.

php-info-apache-lamp

phpinfo() Funktion Output

Damit unsere WordPress-Seite korrekt funktioniert, benötigen wir ein PHP Modul SimpleXML für die Behandlung von XML-Dateien. Dieses ist aber standardmäßig auf dem LAMP-Server nicht verfügbar. Sie werden es in den nächsten Schritten installieren.

Zuerst führen Sie folgenden Befehl aus

php --modules

Dieser zeigt Ihnen noch mal übersichtlich eine Liste von aktiven Modulen. SimpleXML ist dort soweit nicht zu finden.

Als nächstes werden Sie in dem yum-Repository ein Paket finden, welches XML-Funktionalitäten beinhaltet, damit Sie wissen, welches Paket installiert werden soll.

yum provides php-xml

Sie werden Output wie diesen sehen:

php-modules-apache-lamp-aws

php-modules-apache-lamp-aws

Da Sie die PHP in Version 7.2.14 auf Ihrem Server installiert haben, ist auch dieses Paket für Sie relevant: php-xml-7.2.14-1.amzn2.0.1.x86_64

Jetzt brauchen Sie nur noch genau dieses Paket mit yum zu installieren

sudo yum install php-xml-7.2.14-1.amzn2.0.1.x86_64

Wenn Sie erneut php –modules ausführen, werden Sie unter den aktiven Modules SimpleXML wiederfinden.

php --modules

php-modules

php-modules

Abschließend können Sie die phpinfo.php Datei entfernen, weil wir man sie aus Sicherheitsgründen nicht jedem frei verfügbar in Internet stellen soll.

rm /var/www/html/phpinfo.php

Datenbank sichern

Bevor Sie überhaupt daran denken, mit Ihrem neu konfigurierten LAMP Server in die öffentlichkeit zu treten, sollen Sie Ihre MariaDB-Server sichern. Ein MariaDB-Server kommt standardmäßig mit einigen Features, die für das Testing und Entwicklungsarbeiten eine sehr große Unterstützung sind, in der produktiven Umgebung aber eine Sicherheitslücke verursachen würden. Wie Sie Ihren MariaDB Server grundsätzlich schützen, erfahren Sie in den hier aufgelisteten Schritten:

Zunächst starten Sie den MariaDB-Server

sudo systemctl start mariadb

Dann führen Sie den Befehl

sudo mysql_secure_installation

Wenn Sie diesen Befehl zum ersten mal ausführen, werden Sie folgende Information angezeigt bekommen

mysql_secure_installation

mysql_secure_installation

Sie werden hier noch mal deutlich darauf hingewiesen, dass Sie diesen Schritt für jede produktive Umgebung mit einem MariaDB-Server ausführen sollen. Sie werden auch um Ihr aktuelles root-Password gebeten, welches beim initialen Aufruf einfach leer ist. Sie können also einfach mit der Eingabetaste bestätigen.

Daraufhin werden Sie gefragt, ob Sie ein neues root-Password setzen möchten, was Sie natürlich unbedingt tun sollen.

root-password-mysql

root-password-mysql

Tippen Sie “Y” ein und bestätigen Sie. Danach tragen Sie Ihr gewünschtes Passwort zweimal und ebenso bestätigen Sie mit der Eingabetaste.

Da der root-Benutzer nur zur Datenbankverwaltung verwendet werden soll, sollten Sie weitere Fragen auch mit Y beantworten und die anonymen Benutzerkonten und Testdatenbank entfernen sowie den Remote-Zugriff für den Root-Benutzer deaktivieren.

Abschließend sollen Sie noch dafür sorgen, dass der MariaDB-Server bei jedem Systemstart automatisch gestartet wird.

sudo systemctl enable mariadb

VirtualHosts für den WordPress-LAMP-Server einrichten

Nach dem Sie erfolgreich den standard Apache-Web-Server eingerichtet haben, werden Sie jetzt die Virtual Hosts einrichten. VirtualHost ist eine grundlegende Einheit auf dem Apache-Web-Server, die es ermöglicht, verschiedene Domains auf einem Server zu hosten, Durch ein Matching-System des Apache Web-Servers wird es mittels Konfigurationsdateien auf unterschiedliche Inhalte auf dem Server hingewiesen.

Für unser Beispiel benötigen Sie zwei Domaine

example.com – Ihre Hauptdomain.

und

staging.example.com – Ihre staging Subdomain

Sie werden zwei Verzeichnisse unter dem Apache-Dokumenten-Stammverzeichnis var/www anlegen – jeweils example.com und staging.example.com und in beiden Verzeichnissen jeweils ein public_html Verzeichnis. Diese werden zu Stammverzeichnissen der jeweiligen Doamins werden und von dort aus werden die entsprechenden Inhalte ( WordPress Installationen in unserem Fall ) ausgeliefert.

sudo mkdir -p /var/www/example.com/public_html
sudo mkdir -p /var/www/staging.example.com/public_html

Berechtigungen für Dateien in den angelegten Verzeichnissen.

Standardmäßig wird der root-Benutzer der Inhaber (owner) von den neu angelegten Verzeichnissen und Dateien, die mit sudo angelegt wurden. Damit aber unser ec2-user auf die Dateien zugreifen kann, müssen die Berechtigungen (permissions) entsprechend gesetzt werden.
sudo chown -R $USER /var/www/example.com.com/public_html
sudo chown -R $USER /var/www/staging.example.com.com/public_html

Anschließend müssen Sie noch die Berechtigungen für das Apache-Dokumenten-Stammverzeichnis so anpassen, dass Lesen-Zugriff ( read permission ) erlaubt ist, damit die Inhalte in den Zielverzeichnissen von Apache problemlos gelesen werden können.

sudo chmod -R 755 /var/www

Demo Seiten anlegen

Um die Konfiguration von Virtual Hosts testen zu können, werden Sie jetzt zwei Testseiten in den jeweiligen Domain-Verzeichnissen anlegen.

vim /var/www/wartin.com/public_html/index.html
vim /var/www/stagin.wartin.com/public_html/index.html

TIP: Wenn Sie sich im vim-Editor befinden, tippen Sie i ein, um in das Eingabe-Modus ( i von input ) zu gelangen und tippen Sie z.B example.com. Dieses Dokument muss keine andere Informationen beinhalten. Wenn Sie fertig sind, drücken Sie ESC taste sowie tippen Sie :wq! und bestätigen mit der Eingabe-Taste, um speichern (w = write ) und die Datei beenden ( q = quit )

VirutalHosts-Konfigurationsdateien anlegen

Jetzt können Sie zu dem wichtigsten Schritt in dieser Sektion kommen und die eigentlichen Konfigurationsdateien für die Virtual Host anlegen.
Damit Sie immer den Überblick auf Ihrem Server behalten können, auch wenn Sie vielleicht später mehr als nur diese zwei Webseite hosten möchten, wird folgende Struktur empfohlen.

Im Verzeichnis sites-available werden sich alle verfügbare Virtual Host Konfigurationen befinden. Im Verzeichnis sites-enabled werden sich die aktuell von Ihnen aktivierten Konfigurationsdateien befinden. Das gibt Ihnen in der Zukunft große Flexibilität beim Anlegen oder Entfernen neuer Virtual Hosts. Auch eine temporäre Deaktivierung nur eines Virtual Hosts ist somit trivial.

Standardmäßig wird Apache nichts von diesen neuen Verzeichnissen wissen. Sie müssen in der Apache-Hauptkonfigurationsdatei dem Apache mitteilen, dass er weitere Konfigurationsdateien laden und interpretieren soll.

Öffen Sie zu diesem Zweck erstmal die httpd.conf Datei

sudo vim /etc/httpd/conf/httpd.conf

Und fügen am Ende der Datei hingu

IncludeOptional sites-enabled/*.conf

Erste VirtualHost-Konfigurationsdatei

Jetzt haben Sie alles um Ihre erste Virtual Host Datei anzulegen.

sudo vim /etc/httpd/sites-available/example.com.conf

Fügen Sie dorthin den folgenden Inhalt ein

 

    ServerName www.example.com
    ServerAlias example.com
    DocumentRoot /var/www/example.com/public_html
    ErrorLog /var/www/example.com/error.log
    CustomLog /var/www/example.com/requests.log combined

 

Sie deklarieren Hier den VirtualHost-Block und sagen dem Server, dass der auf Port 80 lauschen soll ( das ist Standardport für HTTP-Server ). Sie definieren noch den Server-Name, also für welche Domain diese Konfiguration gelten soll. Weiterhin werden das Stammverzeichnis für diese Domain sowie die Pfade zu den Log-Dateien bestimmt.

Um die Konfiguration für die staging-Subdomain einzurichten, können Sie sich an der bereits existierenden Datei bedienen. Erzeugen Sie einfach eine Kopie davon und passen Sie anschließend den ServerNamen sowie den DocumentRoot-Pfad an.

sudo cp /etc/httpd/sites-available/example.com.conf /etc/httpd/sites-available/staging.example.com.conf

MySQL-Benutzer und Datenbank

Bevor Sie mit der Installation von zwei WordPress-Versionen fortfahren, brauchen Sie noch MySQL-Datenbanken jeweils für produktive Umgebung und die Staging-Umgebung. Für die produktive Umgebung werden wir später auf AWS RDS umstellen, um eine hoch sichere und performante Lösung zu haben. Um jetzt nicht zwischen allen diesen Themen zu springen, richten wir zwei lokale Datenbanken ein und später ersetzen wir die produktive Datenbank.

Mit folgendem Befehl loggen Sie sich als root-User in die MySQL bzw. MariaDB Datenbank ein

mysql -u root -p

Create DATABASE example_prod;
Create DATABASE example_staging;

Jetzt fehlen noch die jeweiligen Datenbank-Benutzer

CREATE USER 'example_prod'@'localhost' IDENTIFIED BY 'user_password';

CREATE USER 'example_staging'@'localhost' IDENTIFIED BY 'user_password';

Nachdem die Benutzer-Accounts sowie Datenbanken stehen, müssen noch die Benutzer den Datenbanken zugewiesen werden bzw. entsprechende Berechtigungen erhalten, um die Datenbanken verwalten zu können.

GRANT ALL PRIVILEGES ON example_prod.* TO 'example_prod'@'localhost';
GRANT ALL PRIVILEGES ON example_staging.* TO 'example_staging'@'localhost';

Sie können noch kurz testen, ob die Berechtigungen richtig zugewiesen wurden

SHOW GRANTS FOR 'example_prod'@'localhost'

WordPress-CLI auf LAMP-Server

Für die Installation von WordPress Core und WordPress Plugins bietet sich WP CLI sehr gut an. Im nächsten Schritt werden Sie WP CLI auf Ihrem Server installieren und anschließend die WordPress Core Installation einrichten.

Begeben Sie sich zunächst in das home-Verzeichnis des ec2-user

cd
curl -O https://raw.githubusercontent.com/wp-cli/builds/gh-pages/phar/wp-cli.phar

Jetzt prüfen Sie ob die heruntergeladene Datei wirklich funktioniert

php wp-cli.phar --info

Wir wollen aber, dass wp cli global auf dem Server verfügbar ist. Dadurch wird es möglich sein, aus jedem Verzeichnis heraus einfach wp auszuführen, um den Gebrauch von wp cli zu machen.

Sie müssen der wp-cli.phar Datei die Execute-Berechtigung geben und anschließend sie in das /usr/local/bin Verzeichnis verschieben.

chmod +x wp-cli.phar
sudo mv wp-cli.phar /usr/local/bin/wp

Verifizieren Sie jetzt, ob die wp cli global verfügbar ist.

wp --info

wordpress-cli-lamp-aws

wordpress-cli-lamp-aws