Ubuntu 16.04 (LTS) LAMP-Server Tutorial mit Apache, PHP 7 und MySQL
LAMP ist die Abkürzung für Linux, Apache, MySQL, und PHP. Dieses Tutorial zeigt, wie Sie einen Apache Webserver auf einem Ubuntu 16.04 LTS (Xenial Xerus) Server mit PHP 7 (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 16.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 su
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 so genannte’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
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:
Um die 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 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 installieren
Wir können PHP 7 und das Apache PHP-Modul wie folgt installieren:
apt-get -y install php7.0 libapache2-mod-php7.0
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:
Wie Sie sehen, funktioniert PHP 7.0, 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 PHP5 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 Paket php7.0-mysql 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.0
Wählen Sie die gewünschten aus und installieren Sie sie so:
apt-get -y install php7.0-mysql php7.0-curl php7.0-gd php7.0-intl php-pear php-imagick php7.0-imap php7.0-mcrypt php-memcache php7.0-pspell php7.0-recode php7.0-sqlite3 php7.0-tidy php7.0-xmlrpc php7.0-xsl php7.0-mbstring php-gettext
Starten Sie nun den Apache2 neu:
systemctl restart apache2
PHP 7 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.0-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:
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.
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.
Das geschlossene „Green Lock“ 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, um die Website mit einem Let’s Encrypt SSL-Zertifikat zu sichern, ist die Installation des python-letsencrypt-apache Pakets. Führen Sie den folgenden Befehl aus:
apt-get -y install python-letsencrypt-apache
Im nächsten Schritt werden wir ein SSL-Zertifikat von Let’s Encrypt anfordern, während dieses Prozesses versucht der Let’s Encrypt-Server, sich mit Ihrem Server über den Domänennamen zu verbinden, den Sie dem Befehl letsencrypt 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:
letsencrypt --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.
Akzeptieren Sie die Bedingungen der Let’s Encrypt SSL-Autorität.
Wählen Sie, 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.
Das SSL-Zertifikat wurde erfolgreich ausgestellt.
Wenn Sie jetzt mit einem Browser auf die Website zugreifen, werden Sie automatisch zu SSL umgeleitet und das grüne Schloss vor der URL-Leiste im Browser zeigt an, dass wir jetzt ein vertrauenswürdiges SSL-Zertifikat verwenden.
8.1 Lassen Sie uns die automatische Verlängerung verschlüsseln.
Let’s Encrypt SSL-Zertifikate sind nur für einen kurzen Zeitraum von 80 Tagen gültig. Deshalb werden wir jetzt einen Cronjob einrichten, um das SSL-Zertifikat bei Bedarf automatisch zu verlängern. Der Befehl lautet’letsencrypt renew‘.
Richten Sie einen Cronjob für die automatische LE-Erneuerung ein. Lauf:
crontab -e
um die root crontab in einem Editor zu öffnen. Fügen Sie die folgende Zeile am Ende der Datei ein:
0 1 * * * /usr/bin/letsencrypt renew &> /dev/null
Speichern Sie die Datei, dadurch wird der Cronjob aktiviert. Dieser Cronjob ruft jeden Abend um 1 Uhr den Befehl Let’s Encrypt renew auf. Der Befehl erneuert das SSL-Zertifikat nur bei Bedarf (30 Tage vor Ablauf), es besteht kein Problem, es jede Nacht auszuführen.
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 mit MariaDB
Der folgende Schritt ist nur für MariaDB-Installationen erforderlich, wenn Sie MySQL 5.7 verwenden, dann überspringen Sie diesen Schritt.
MariaDB aktiviert 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:
10 Links
- Apache: http://httpd.apache.org/
- PHP: http://www.php.net/
- MySQL: http://www.mysql.com/
- MariaDB: https://mariadb.com/
- Ubuntu: http://www.ubuntu.com/
- phpMyAdmin: http://www.phpmyadmin.net/