Ubuntu 18.04 (LTS) LAMP-Server Tutorial mit Apache, PHP 7.2 und MySQL

LAMP ist die Abkürzung für Linux, Apache, MySQL, PHP. Dieses Tutorial zeigt, wie Sie einen Apache Webserver auf einem Ubuntu 18.04 LTS (Bionic Beaver) Server mit PHP 7.2 (mod_php) und MySQL / MariaDB Unterstützung installieren können und wie Sie ein SSL Zertifikat mit Let’s encrypt einrichten. Zusätzlich werde ich PHPMyAdmin installieren, um die MySQL-Administration zu erleichtern. Ein LAMP-Setup ist eine perfekte Basis für gängige CMS-Systeme wie Joomla, WordPress oder Drupal.

Vorbemerkung

In diesem Tutorial werde ich den Hostnamen server1.example.com mit der IP-Adresse 192.168.1.100 verwenden. Diese Einstellungen können für Sie unterschiedlich sein, so dass Sie sie gegebenenfalls ersetzen müssen.

Ich empfehle, ein minimales Ubuntu-Server-Setup als Grundlage für das Tutorial zu verwenden, das ein Virtual- oder Root-Server-Image mit einer Ubuntu 18.04 Minimalinstallation von einem Web-Hosting-Unternehmen sein kann, oder Sie verwenden unser Minimal-Server-Tutorial, um einen Server von Grund auf neu zu installieren.

Ich führe alle Schritte in diesem Tutorial mit root-Rechten aus, also stellen Sie sicher, dass Sie als root angemeldet sind:

sudo -s

1. MySQL oder MariaDB Datenbank installieren

Es gibt derzeit zwei weit verbreitete MySQL-Datenbanksysteme, den klassischen „MySQL“-Server, der von Oracle entwickelt wurde und jetzt in der Version 5.7 verfügbar ist, und die MySQL-Gabel MariaDB, die vom ursprünglichen MySQL-Entwickler Monty Widenius entwickelt wurde.

Ich werde dir zeigen, wie du beide Alternativen installieren kannst. Folgen Sie einfach entweder Kapitel 1.1 oder 1.2, aber nicht beide. Ich werde MySQL 5.7 für das Image der virtuellen Maschine verwenden, das unter Howtoforge heruntergeladen werden kann.

1.1 MySQL installieren 5.7

Um MySQL 5.7 zu installieren, führen Sie diesen Befehl aus:

apt-get -y install mysql-server mysql-client

Die Pakete mysql-server und mysql-client sind sogenannte’meta-packages‘, sie installieren immer die neueste MySQL-Version, die von Ubuntu erhältlich ist. Die neueste Version ist derzeit MySQL 5.7.

Wir haben das Root-Passwort für MySQL bereits während der Installation festgelegt, aber ich möchte den anonymen Benutzer und die Testdatenbank aus Sicherheitsgründen entfernen. Führen Sie den folgenden Befehl mysql_secure_installation aus, um dies zu erreichen.

mysql_secure_installation

Diese Fragen werden Ihnen gestellt:

Securing the MySQL server deployment.
Enter password for user root: <-- Enter the MySQL root password
VALIDATE PASSWORD PLUGIN can be used to test passwords
and improve security. It checks the strength of password
and allows the users to set only those passwords which are
secure enough. Would you like to setup VALIDATE PASSWORD plugin?
Press y|Y for Yes, any other key for No:
Using existing password for root.
Change the password for root ? ((Press y|Y for Yes, any other key for No) : <-- Choose 'y' here if you like to enable the password validation, I don't need that function, so I choose 'n' here.
... skipping.
By default, a MySQL installation has an anonymous user,
allowing anyone to log into MySQL without having to have
a user account created for them. This is intended only for
testing, and to make the installation go a bit smoother.
You should remove them before moving into a production
environment.
Remove anonymous users? (Press y|Y for Yes, any other key for No) : <-- y
Success.
Normally, root should only be allowed to connect from
'localhost'. This ensures that someone cannot guess at
the root password from the network.
Disallow root login remotely? (Press y|Y for Yes, any other key for No) : <-- y
Success.
By default, MySQL comes with a database named 'test' that
anyone can access. This is also intended only for testing,
and should be removed before moving into a production
environment.
Remove test database and access to it? (Press y|Y for Yes, any other key for No) : <-- y
- Dropping test database...
Success.
- Removing privileges on test database...
Success.
Reloading the privilege tables will ensure that all changes
made so far will take effect immediately.
Reload privilege tables now? (Press y|Y for Yes, any other key for No) : <-- y
Success.
All done!

Das MySQL-Setup ist nun gesichert.

1.2 MariaDB 10 installieren

Führen Sie den folgenden Befehl aus, um MariaDB-Server und Client zu installieren:

apt-get -y install mariadb-server mariadb-client

Nun setzen wir ein Root-Passwort für MariaDB.

mysql_secure_installation

Diese Fragen werden Ihnen gestellt:

Enter current password for root (enter for none): <-- press enter
Set root password? [Y/n] <-- y
New password: <-- Enter the new MariaDB root password here
Re-enter new password: <-- Repeat the password
Remove anonymous users? [Y/n] <-- y
Disallow root login remotely? [Y/n] <-- y
Reload privilege tables now? [Y/n] <-- y

1.3 Testen Sie das MySQL/MariaDB Root-Login.

Testen Sie die Anmeldung an MariaDB mit dem Befehl „mysql“.

mysql -u root -p

und geben Sie das MariaDB-Root-Passwort ein, das Sie oben festgelegt haben. Das Ergebnis sollte dem Screenshot unten ähnlich sein:

Testen der MySQL-Root-Anmeldung unter Ubuntu 18.04 LTS

Um die MySQL/MariaDB-Shell zu verlassen, geben Sie den Befehl „quit“ ein und drücken Sie Enter.

2. Apache Web Server installieren

Apache 2 ist als Ubuntu-Paket verfügbar, daher können wir es so installieren:

apt-get -y install apache2

Richten Sie nun Ihren Browser auf http://192.168.1.100, und Sie sollten die Apache2-Standardseite sehen (Es funktioniert!):

Die Apache Standardseite

Die Dokument-Root des apache default vhost ist /var/wwww/html auf Ubuntu und die Hauptkonfigurationsdatei ist /etc/apache2/apache2.conf. Das Konfigurationssystem ist vollständig dokumentiert in /usr/share/doc/apache2/README.Debian.gz.

3. PHP 7.2 installieren

Wir können PHP 7.2 und das Apache PHP-Modul wie folgt installieren:

apt-get -y install php7.2 libapache2-mod-php7.2

Starten Sie dann den Apache neu:

systemctl restart apache2

4. Testen Sie PHP und erfahren Sie mehr über Ihre PHP-Installation.

Das Dokumentenverzeichnis der Standardwebsite ist /var/wwww/html. Wir werden nun eine kleine PHP-Datei (info.php) in diesem Verzeichnis erstellen und sie in einem Browser aufrufen. Die Datei zeigt viele nützliche Details über unsere PHP-Installation, wie z.B. die installierte PHP-Version.

nano /var/www/html/info.php
<?php
phpinfo();

Ändern Sie dann den Besitzer der Datei info.php auf den Benutzer und die Gruppe www-data.

chown www-data:www-data /var/www/html/info.php

Nun rufen wir diese Datei in einem Browser (z.B. http://192.168.1.100/info.php) auf:

Ubuntu 18.04 PHP 7.2 Info

Wie Sie sehen, funktioniert PHP 7.2, und es funktioniert über den Apache 2.0 Handler, wie in der Server-API-Zeile dargestellt. Wenn Sie weiter nach unten scrollen, sehen Sie alle Module, die in PHP bereits aktiviert sind. MySQL ist dort nicht aufgeführt, was bedeutet, dass wir noch keine MySQL / MariaDB-Unterstützung in PHP haben.

5. MySQL / MariaDB Unterstützung in PHP erhalten

Um MySQL-Unterstützung in PHP zu erhalten, können wir das php7.2-mysql-Paket installieren. Es ist eine gute Idee, einige andere PHP-Module zu installieren, da Sie diese für Ihre Anwendungen benötigen könnten. Sie können auf diese Weise nach verfügbaren PHP-Modulen suchen:

apt-cache search php7.2

und

apt-cache search php-

da nicht alle PHP-Pakete die Versionsnummer 7.2 im Namen haben.

Wählen Sie die gewünschten aus und installieren Sie sie so:

apt-get -y install php7.2-mysql php7.2-curl php7.2-gd php7.2-intl php-pear php-imagick php7.2-imap php-memcache  php7.2-pspell php7.2-recode php7.2-sqlite3 php7.2-tidy php7.2-xmlrpc php7.2-xsl php7.2-mbstring php-gettext

Starten Sie nun den Apache2 neu:

systemctl restart apache2

PHP 7.2 mit geladener MySQL-Erweiterung

PHP 7.2 unterstützt nun MySQL / MariaDB, wie in phpinfo() oben gezeigt.

6. Installieren Sie den Opcache + APCu PHP-Cache, um PHP zu beschleunigen.

PHP 7 wird mit einem integrierten Opcode-Cache zum Caching und zur Optimierung von PHP-Zwischencode ausgeliefert, hat den Namen’opcache‘ und ist im Paket php7.0-opcache enthalten. Es wird dringend empfohlen, einen Opcache zu installieren, um Ihre PHP-Seite zu beschleunigen. Neben dem Opcache werde ich APCu installieren, einen Kompatibilitäts-Wrapper für den Opcache, um die Funktionen des APC-Cache bereitzustellen, einem in PHP 5.x-Versionen häufig verwendeten Caching-System, das von vielen CMS-Systemen noch verwendet wird.

Opcache und APCu können wie folgt installiert werden:

apt-get -y install php7.2-opcache php-apcu

Keine Sorge, wenn es zeigt, dass Opcache bereits installiert ist.

Starten Sie nun den Apache neu:

systemctl restart apache2

Laden Sie nun http://192.168.1.100/info.php in Ihrem Browser neu und scrollen Sie erneut nach unten zum Modulbereich. Dort sollten Sie nun viele neue Module finden:

APC und APCu aktiviert in PHP 7.2

Bitte vergessen Sie nicht, die Datei info.php zu löschen, wenn Sie sie nicht mehr benötigen, da sie sensible Details Ihres Servers enthält. Führen Sie den folgenden Befehl aus, um die Datei zu löschen.

rm -f /var/www/html/info.php

7. Aktivieren der SSL-Website im Apache

SSL/ TLS ist eine Sicherheitsschicht zur Verschlüsselung der Verbindung zwischen dem Webbrowser und Ihrem Server. Die meisten Webbrowser zeigen Websites heute als unsicher an, wenn die Verbindung zwischen dem Server und dem Webbrowser nicht mit SSL verschlüsselt ist. In diesem Kapitel werde ich Ihnen zeigen, wie Sie Ihre Website mit SSL sichern können.

Führen Sie die folgenden Befehle auf Ihrem Server aus, um die SSL-Unterstützung (https://) zu aktivieren. Lauf:

a2enmod ssl
a2ensite default-ssl

die das SSL-Modul aktiviert und einen Symlink im Ordner /etc/apache2/sites-enabled zur Datei /etc/apache2/sites-available/default-ssl.conf hinzufügt, um es in die aktive Apache-Konfiguration aufzunehmen. Starten Sie dann den Apache neu, um die neue Konfiguration zu aktivieren:

systemctl restart apache2

Testen Sie nun die SSL-Verbindung, indem Sie https://192.168.1.100 in einem Webbrowser öffnen.

Warnung vor selbstsignierten SSL-Zertifikaten

Sie erhalten eine SSL-Warnung, da das SSL-Zertifikat des Servers ein „selbstsigniertes“ SSL-Zertifikat ist, d.h. der Browser vertraut diesem Zertifikat standardmäßig nicht und Sie müssen die Sicherheitswarnung zuerst akzeptieren. Nachdem Sie die Warnung akzeptiert haben, sehen Sie die Standardseite des Apache.

Apache mit aktiviertem SSL

Das geschlossene „Green Padlock“ vor der URL im Browser zeigt an, dass die Verbindung verschlüsselt ist.

Es gibt zwei Möglichkeiten, die SSL-Warnung loszuwerden, entweder das selbstsignierte SSL-Zertifikat /etc/ssl/certs/ssl-cert-snakeoil.pem durch ein offiziell unterzeichnetes SSL-Zertifikat zu ersetzen, das Sie bei einer SSL-Autorität kaufen, oder Sie erhalten ein kostenloses SSL-Zertifikat von Let’s encrypt, das ich in Kapitel 8 beschreiben werde.

8. Holen Sie sich ein kostenloses SSL-Zertifikat von Let’s Encrypt.

Der erste Schritt zur Sicherung der Website mit einem Let’s Encrypt SSL-Zertifikat ist die Installation des python3-certbot-apache Pakets. Führen Sie den folgenden Befehl aus:

apt-get -y install python3-certbot-apache

Im nächsten Schritt werden wir ein SSL-Zertifikat von Let’s Encrypt anfordern, indem wir das certbot-Client-Programm verwenden. Während dieses Prozesses versucht der Let’s Encrypt-Server, sich mit Ihrem Server über den Domänennamen zu verbinden, den Sie dem Befehl certbot zur Verfügung stellen. Es ist wichtig, dass dieser Domainname bereits im DNS auf Ihren Server zeigt, damit die Website über ihren Domainnamen auf Port 80 (http) bereits erreichbar ist. Wenn die Website nicht über das Internet erreichbar ist, schlägt die Erstellung des Let’s Encrypt SSL-Zertifikats fehl.

Bevor wir mit der Erstellung des SSL-Zertifikats beginnen können, setzen Sie den Domänennamen in der vhost-Konfigurationsdatei. Öffnen Sie die Standard-Vhost-Datei mit einem Editor:

nano /etc/apache2/sites-available/000-default.conf

und fügen Sie die Zeile hinzu:

ServerName example.com

Direkt unter der Zeile „DocumentRoot“. Ersetzen Sie example.com durch den Domainnamen Ihrer eigenen Website.

Erstellen Sie dann das SSL-Zertifikat mit diesem Befehl:

certbot --apache -d example.com

Ersetzen Sie example.com hier wieder durch Ihren Domainnamen. Der Befehl startet einen Assistenten, der Ihnen mehrere Fragen stellt.

Geben Sie die E-Mail-Adresse ein, an die der Administrator, der für diese Website verantwortlich ist, erreicht werden kann.

E-Mail-Adresse einstellen

Akzeptieren Sie die Bedingungen der Let’s Encrypt SSL-Autorität.

Akzeptieren Sie die Allgemeinen Geschäftsbedingungen

Certbot wird Sie jetzt fragen, ob Sie Ihre E-Mail-Adresse an die Electronic Frontier Foundation weitergeben möchten. Wählen Sie hier, was immer Sie bevorzugen.

E-Mail-Adresse FSF

Wählen Sie dann, ob Sie Nicht-SSL-Anfragen automatisch an https:// weiterleiten möchten. Ich werde hier Ja wählen, um Probleme mit doppelten Inhalten zu vermeiden, wenn die Website als http:// und https:// Version verfügbar ist.

HTTP-Anfragen umleiten

Das SSL-Zertifikat wurde erfolgreich ausgestellt.

SSL-Zertifikat erfolgreich ausgestellt

Wenn Sie jetzt mit einem Browser auf die Website zugreifen, werden Sie automatisch zu SSL umgeleitet und das grüne Vorhängeschloss vor der URL-Leiste im Browser zeigt an, dass wir jetzt ein vertrauenswürdiges SSL-Zertifikat verwenden.

SSL-geschützte Website

8.1 Let’s encrypt Zertifikate automatisch verlängern

Let’s Encrypt SSL-Zertifikate sind nur für einen kurzen Zeitraum von 80 Tagen gültig. Daher ist ein Cronjob zum automatischen Verlängern der SSL-Zertifikate erforderlich, der den certbot –verlängerung Befehl.

Dieser Cronjob wird automatisch eingerichtet, wenn Sie certbot installieren, die Cron-Datei ist/etc/cron.d/certbot. Also gibt es hier nichts mehr zu tun. Wenn Sie wissen möchten, wie der Cronjob aussieht, führen Sie den Befehl aus:

/etc/cron.d/certbot

Das Ergebnis ist:

root@server1:~# cat /etc/cron.d/certbot
# /etc/cron.d/certbot: crontab entries for the certbot package
#
# Upstream recommends attempting renewal twice a day
#
# Eventually, this will be an opportunity to validate certificates
# haven't been revoked, etc. Renewal will only occur if expiration
# is within 30 days.
SHELL=/bin/sh
PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin
0 */12 * * * root test -x /usr/bin/certbot -a \! -d /run/systemd/system && perl -e 'sleep int(rand(43200))' && certbot -q renew

 

9. phpMyAdmin installieren

phpMyAdmin ist eine Weboberfläche, mit der Sie Ihre MySQL-Datenbanken verwalten können. Es ist eine gute Idee, es zu installieren:

apt-get -y install phpmyadmin

WICHTIG: Der apt-Installer wird Ihnen jetzt mehrere Fragen stellen, eine davon ist die Auswahl des Webserver-Typs. Ein häufiger Fehler ist, dass der Webserver-Typ nur markiert, aber nicht ausgewählt ist. Um einen Eintrag in einem Apt-Menü auszuwählen, müssen Sie die Leertaste auf der Tastatur drücken, nachdem Sie mit der Tabulatortaste oder den Pfeiltasten zu dem Eintrag navigiert haben. Es reicht nicht aus, nur darauf hinzuweisen!

Sie werden die folgenden Fragen sehen:

Web server to configure automatically: <-- Select the option: apache2
Configure database for phpmyadmin with dbconfig-common? <-- Yes
MySQL application password for phpmyadmin: <-- Press enter, apt will create a random password automatically.

9.1 Root-Zugriff auf PHPMyAdmin

MariaDB und MySQL aktivieren standardmäßig ein Plugin namens „unix_socket“ für den Root-Benutzer, dieses Plugin verhindert, dass sich der Root-Benutzer bei PHPMyAdmin anmelden kann und dass TCP-Verbindungen zu MySQL für den Root-Benutzer funktionieren. Um einen Benutzer mit Berechtigungen zum Erstellen anderer Benutzer und Datenbanken in PHPMyAdmin zu veranlassen, werde ich einen neuen MySQL-Benutzer mit dem Namen „admin“ mit den gleichen Berechtigungen wie der root-Benutzer anlegen.

Melden Sie sich in der MySQL-Datenbank als root-Benutzer auf der Shell an:

mysql -u root

Erstellen Sie einen neuen Benutzer mit dem Namen „admin“ und dem Passwort „howtoforge“. Ersetzen Sie das Passwort „howtoforge“ durch ein sicheres Passwort in den folgenden Befehlen!

CREATE USER 'admin'@'localhost' IDENTIFIED BY 'howtoforge';
GRANT ALL PRIVILEGES ON *.* TO 'admin'@'localhost' WITH GRANT OPTION;
FLUSH PRIVILEGES;
exit

Danach können Sie phpMyAdmin unter http://192.168.1.100/phpmyadmin/: erreichen:

phpMyAdmin Login

Melden Sie sich als administrativer Benutzer bei phpMyAdmin an.

10 Links

Das könnte dich auch interessieren …