Einführung
Aktuell erarbeite ich gerade wieder ein paar Webseiten (oder pflege und aktualisiere diese) und es stehen auch (endlich) Tests mit neuen Entwicklungsumgebungen an. Allen voran muss ich mir PHP 7 genauer anschauen, da mittel- und langfristig hier die technischen Umsetzungen bei Hostern, CMS, Frameworks oder manuellen Skriptlösungen liegen werden.
Auch die nächste Ausbaustufe des "CMS Online Designer (VHS)" (CMSOD 3.0) wird PHP 7 in den Mittelpunkt rücken. Dann aber wahrscheinlich mit einer windowsbasierten XAMPP-Lösung - schauen wir mal. Die Testumgebungen für meine Website-Projekte laufen seit Jahren erfolgreich auf Debian VMs (meist unter VirtualBox oder Hyper-V).
Die folgende Kurzanleitung beschreibt einen exemplarischen Installvorgang eines Debian 9 - Codename "Stretch". Zum jetzigen Zeitpunkt stellt diese Version die Testingversion dar (immer Codename "Sid" bei Debianversionen). Stretch hat über die Standardrepositories Zugriff auf PHP 7 Installpakete.
"Disclaimer": Die hier dargestellten Umsetzungen haben nur eine lokale Entwicklungsumgebung zum Ziel. Es werden keinerlei Ansprüche an Sicherheit umgesetzt! Es existiert auch kein praxisrelevanter FTP-Zugriff mit ausgeklügelten Benutzerrechten, sondern nur eine "root-Umgebung" mit Zugriff auf die Web- und DB-Server (inkl. PhpMyAdmin). Der Server wird nicht zum öffentlichen Internet-Hosting genutzt!
Wir starten mit einer kleinen tabellarischen Übersicht der Technik:
Technik | LAMP | Anmerkungen |
Betriebssystem | L |
Debian 9 - Codename Stretch Installquelle: |
Webserver | A | Apache 2.4.23 |
Datenbank | M | MariaDB 10.0.25 kompatibel MySQL 5.5.5 |
Skriptsprache | P | PHP 7.0.8 |
DB-Administration | PhpMyAdmin 4.6.3 |
Jetzt aber zur Zusammenfassung der aktuellen Installation für meinen "Debian 9 - Stretch"-Lamp...
Betriebssystem Debian "Stretch" (L)
Eine Installation von Debian auf einer VirtualBox oder einem Hyper-V sollte keine Probleme darstellen. Ich installiere meine Debian-Server-VMs roh ohne jeglichen "Schnickschnack" außer natürlich SSH. Also wähle ich hier bei Debian im Installschritt "tasksel" einfach fast alles ab. Und natürlich reicht als "Server" auch ein ausrangiertes Notebook!
Ansonsten alles wie gehabt: Installation von einem Netzwerkinstall-ISO und alles aktualisieren und testen.
Ich persönlich habe meine VMs gerne mit zwei Netzwerkadaptern:
- Host-Only-Adapter (hier: 192.168.56.0 / 24)
hier kann ich mit der VM exklusiv nur zwischen Host und VM kommunizieren
Anm.: so kann ich auch unterwegs (beim Kunden) auf die VM zugreifen, ohne von einer Netzwerkstruktur abhängig zu sein - Bridged-Adapter
für die Verbindung je nach Umgebung Internet / Intranet
für Aktualisierungen der VM
Selbstverständlich kann man das auch beliebig anders lösen (siehe VirtualBox bzw. Hyper-V Netzwerkkonfigurationsanleitungen).
Webserver Apache (A)
Der Webserver ist schnell installiert und getestet.
{code lang:bash showtitle:false lines:true hidden:false}apt-get install apache2{/code}
Und der Test einfach über einen Browser - hier auf der Host-Maschine für die VM:
Datenbankserver MariaDB (M)
MariaDB ist der "Community-Entwicklungszweig" (fork) von MySQL (My und Maria sind die Töchter des früheren MySQL-Haupt-Entwicklers Ulf Michael Widenius).
Meine Gründe für den Einsatz von MariaDB statt MySQL:
- Testen der Kompatibilität (meine Hoster nutzen MySQL - manche denken über einen Wechsel nach)
- mehr Storage Engines
- Geschwindigkeitsvorteile
Auch hier ist die reine Technik - inklusiver aller Abhängigkeiten - schnell installiert.
{code lang:bash showtitle:false lines:true hidden:false}apt-get install mariadb-server mariadb-client
mysql_secure_installation{/code}
Der Aufruf mysql_secure_installation
ruft ein Skript zum Erstellen und Absichern des DB-Servers auf (Passwort für DB-root). Ob man das Remote-Login ausschalten möchte ("Disallow root login remotely") als auch das Entfenen von Testdatenbank oder Anonymous-Users kann jeder für sich entscheiden.
Serverseitige Skriptsprache PHP (P)
Das eigentliche Ziel dieser Installation: die aktuellste und modernste PHP-Version 7.0.
Anm.: meine aktuellen CMS Joomla 3.6 und TYPO3 7.6 laufen auch unter PHP 7 und für den neuen Entwicklerzweig TYPO3 Version 8 (aktuell 8.2) ist PHP 7 sogar Voraussetzung!
Los geht's - wir brauchen einen Haufen Zeug und ich lasse auch gleich ein paar Pakete mitinstallieren, die ich für eine empfohlene TYPO3-Umgebung benötige:
{code lang:bash showtitle:false lines:true hidden:false}apt-get install php7.0 php7.0-mysql php7.0-mcrypt php7.0-curl php7.0-gd libapache2-mod-php7.0 php7.0-mbstring php7.0-xml php7.0-soap curl php-gettext php-pear{/code}
Die installierte PHP-CLI-Version lässt sich schnell in der Konsole testen:
{code lang:bash showtitle:false lines:true hidden:false}root@debian-stretch:~# cat /etc/debian_version
stretch/sid
root@debian-stretch:~# php --version
PHP 7.0.8-5 (cli) ( NTS )
Copyright (c) 1997-2016 The PHP Group
Zend Engine v3.0.0, Copyright (c) 1998-2016 Zend Technologies
with Zend OPcache v7.0.8-5, Copyright (c) 1999-2016, by Zend Technologies
root@debian-stretch:~#{/code}
Der Browser-Test findet natürlich über ein kleines klassisches phpinfo()
Skript statt:
Das weitere Feintuning orientiert sich an der Install-Anleitung von TYPO3 und dem sogenannten "Recommended TYPO3 7.6 und 8.x Environment"
Der Apache Webserver soll mit Modulen mod_expires
und mod_rewrite
betrieben werden: (Befehl a2enmod
)
{code lang:bash showtitle:false lines:true hidden:false}root@debian-stretch:/var/www/html# a2enmod expires
Enabling module expires.
To activate the new configuration, you need to run:
service apache2 restart
root@debian-stretch:/var/www/html# service apache2 restart
root@debian-stretch:/var/www/html# a2enmod rewrite
Enabling module rewrite.
To activate the new configuration, you need to run:
service apache2 restart
root@debian-stretch:/var/www/html# service apache2 restart{/code}
Selbstverständlich sollte man die beiden Module auch über die PHP-Infos ausgeben lassen und checken:
GraphicsMagick (oder alternativ ImageMagick v6+) müssen für TYPO3 installiert werden:
{code lang:bash showtitle:false lines:true hidden:false}apt-get install graphicsmagick{/code}
Ich mag anscheinend das etwas "modernere" GM.
PHP Konfigurationsdatei /etc/php/7.0/apache2/php.ini
Es sollten einige kleine Anpassungen für TYPO3 vorgenommen werden
- memory_limit = 256M
- max_execution_time = 300
- max_input_vars = 1500
Selbstverständlich kann man noch andere Anpassungen vornehmen.
PhpMyAdmin
Eine komfortable Nutzung / Verwaltung mittels der klassischen Verwaltungsoberfläche
{code lang:bash showtitle:false lines:true hidden:false}apt-get install phpmyadmin{/code}
Wenn man jetzt über den Browser nicht mittels DB-root + Passwort Zugang bekommt, dann liegt das wahrscheinlich an einer Grundkonfiguration des MariaDB-Users root:
der User root hat in Feld "plugin" den Eintrag "unix_socket" - das bedeutet, dass der User sich nach Anmeldungen am Linux-Server-System automatisch per root am MySQL/MariaDB Server authentifizieren kann. Sehr gut für cron-Jobs und Sicherheit und überhaupt ...
Für unsere "sehr einfache" Umgebung aber nicht so schön, weil wir natürlich einfach von unserer VM-Host-Maschine PhpMyAdmin nutzen wollen!
Einfache Lösung: für den User root den Eintrag im Feld plugin löschen: (auf Server mit MySQL- bwz. natürlich auch MariaDB-Client)
{code lang:sql showtitle:false lines:false hidden:false}root@debian-stretch:~# mysql -u root
[mysql] use mysql;
[mysql] update user set plugin='' where user='root';
[mysql] flush privileges;
quit
Bye{/code}
Im folgenden Screenshot ist der fragliche Datensatz "zusammengerückt" worden und man erkennt jetzt das "leere" Feld plugin für den User root:
TYPO3 Webserver Environment
Dann vervollständigen wir das Ganze mal mit einer Grundausstattung "Apache2" für eine beispielhafte TYPO3-Umgebung gemäß Vorgaben der TYPO3-Entwicklerteams:
In /etc/apache2/sites-available mit Kopie aus bestehenden Vorlagen eine VHosts-Deklaration erstellen:
Datei: /etc/apache2/sites-available/typo3-7.conf
{code lang:xml showtitle:false lines:true hidden:false}<VirtualHost *:80>
ServerAdmin webmaster@cmsod30
ServerName typo3-7.cmsod30
ServerAlias www.typo3-7.cmsod30
DocumentRoot /var/www/html/typo3/typo3-7
<Directory />
Options FollowSymLinks
AllowOverride Indexes FileInfo
</Directory>
<Directory /var/www/html/typo3/typo3-7/>
Options Indexes FollowSymLinks MultiViews
AllowOverride Indexes FileInfo
Order allow,deny
allow from all
</Directory>
ErrorLog ${APACHE_LOG_DIR}/error.log
# Possible values include: debug, info, notice, warn, error, crit,
# alert, emerg.
LogLevel warn
CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>{/code}
Diese Konfiguration mittels a2ensite aktivieren und natürlich Apache reloaden:
{code lang:bash showtitle:false lines:true hidden:false}a2ensite typo3-7.conf
service apache2 reload{/code}
Natürlich noch Testdomain per DNS erreichbar machen (DNS-Server Eintrag) oder bei lokalen Testsystemen einfach die hosts-Datei bearbeiten.
Windows hosts-Datei: C:\Windows\System32\Drivers\etc\hosts
{code lang:bash showtitle:false lines:true hidden:false}# hosts
# Projekte: TYPO3
192.168.56.21 debian-stretch
192.168.56.21 typo3-7.cmsod30 www.typo3-7.cmsod30{/code}
Alles wieder testen und schon kann es mit einem neuen TYPO3-Projekt losgehen...
Conclusio
Die hier gezeigte exemplarische LAMP-Basisinstallation funktioniert sauber mit meinen aktuellen Joomla (Version 3.6) und TYPO3 (Versionen 7.6.x und 8.2.x).
Braunschweig, Sommer 2016
Ihr Joe Brandes