Apache, PHP und mySQL
Apache installieren
Der Apache 2 Webserver ist auf einem Debian Linux (dieses Tutorial bezieht sich auf Debian 9 - Stretch) schnell installiert. Führt dazu folgenden Befehl aus:
apt-get install apache2 php7.0 libapache2-mod-php7.0
Die Konfigurationsdateien finden sich zudem unter folgendem Verzeichnis:
/etc/apache2/
Bei Änderungen an den Konfigurationsdateien muß dann immer wieder der Apache 2 neu gestartet werden. Dazu gebt einfach folgenden Befehl ein:
/etc/init.d/apache2 restart
Wenn Ihr die Meldung apache2: Could not reliably determine the server's fully qualified domain name ist das nicht weiter wild. Abstellen könnt Ihr das wie folgt:
nano /etc/apache2/conf.d/fqdn
Fügt dann folgende Zeile ein:
ServerName localhost
Speichert die Änderung und startet den Apache2 neu durch:
/etc/init.d/apache2 restart
Directory Listing abstellen
Sollte der Server Euch die Dateien eines Verzeichnisses anzeigen, sobald keine Indexdatei vorhanden ist...
...dann musst Ihr in den Apache Konfigurationsdateien (entweder in der apache2.conf oder der 000-default.conf z.B.) nachsehen, ob hier bei den Options der Parameter Indexes vorhanden ist. Ist dies der Fall, dann löscht den Parameter und startet Apache neu.
mySQL installieren
Damit wir auch eine Datenbank zur Verfügung haben könnt Ihr diese mit
apt-get install php7.0-mysql mysql-server mysql-client
installieren. Setzt dann erstmal ein Passwort für mysql:
mysqladmin -u root password DEIN_GEHEIMES_PASSWORT
(dies wird auch bereits bei der Installation des mysql Pakets abgefragt.
Mit einem
mysqladmin -p create tabelle01
legt Ihr beispielsweise dann eine erste Datenbank namens tabelle01 an. Ihr könnt diese mit einem
mysqladmin -p drop tabelle01
wieder entfernen/löschen. Wenn Ihr das seht, dann ist die Tabele auch wieder entfernt:
Dropping the database is potentially a very bad thing to do.
Any data stored in the database will be destroyed.
Do you really want to drop the 'tabelle01' database [y/N] y
Database "tabelle01" dropped
Wenn Ihr einen neuen Datenbankuser anlegen wollt, dann gebt folgendes als Root ein:
mysql -p
Danach an der Konsole folgende Befehle eingeben:
CREATE USER 'neueruser'@'localhost' IDENTIFIED BY 'password';
GRANT ALL PRIVILEGES ON * . * TO 'neueruser'@'localhost';
FLUSH PRIVILEGES;
exit
Checkt nun, ob alles sauber läuft. Dazu legen wir in unser Dokumentenroot eine Datei mit folgenden Inhalt:
phpinfo.php
<?php
phpinfo();
?>
Erstellt die Datei einfach extern in einen Editor und ladet diese in Euer Dokumentenroot des Servers. Wenn Ihr diese nun im Browser aufruft, solltet Ihr eine entsprechende Anzeige bekommen.
APC Caching installieren
Um die Websiten etwas flotter zu machen kann man noch mit einem php Caching nachelfen. Das Paket APC lässt sich easy über ein
apt-get install php-pear php-apc
Startet den Webserver neu:
/etc/init.d/apache2 restart
Ein Serverzertifikat für https anlegen
Version ohne LetsEncrypt: Ein Serverzertifikat werdet Ihr dann benötigen, wenn Ihr eine sichere https Verbindung zu Eurem Server anbieten wollt. Wechselt dazu in Euer Root Home:
cd /root
Danach legen wir unser Serverzertifikat an:
openssl genrsa -out server.key 4096
openssl req -new -key server.key -out server.csr
Jetzt werdet Ihr einige Angaben abgefragt:
Country Name (Ländercode): = DE
State or Province Name (Bundesland): = zB Bayern
Locality Name, eg. City (Stadt): = zB Nuernberg
Organization Name (Firmenname): = hier irgendwas eingeben wie privat, zuhause etc.
Organizational Unit Name (Abteilung) = bleibt leer
Common Name, eg. YOUR Name: = Euer Servername
Email Adress: = eine E-Mail Adresse
A challenge password: = bleibt leer
An optional company name: = bleibt leer
Jetzt generieren wir das Zertifikat. Ich mache das gleich mal für 10 Jahre, dann ist Ruhe:
openssl x509 -req -days 3650 -in server.csr -signkey server.key -out server.crt
Noch ein paar Rechte festlegen:
chmod 400 server.key
Jetzt müssen wir noch ein paar Änderungen in einigen Apache Konfigurationsdateien vornehmen:
nano /etc/apache2/sites-enabled/000-default.conf
Am Ende der Konfigurationsdatei ergänzt folgende neue Sektion (das Alias für ein Beispiel an den installieren phpmyadmin):
<VirtualHost *:443>
DocumentRoot /var/www
ServerName EUER_SERVERNAME
SSLEngine on
SSLCertificateFile /root/server.crt
SSLCertificateKeyFile /root/server.key
Alias /phpmayadmin /usr/share/phpmyadmin
<Directory /usr/share/squirrelmail>
Options Indexes
AllowOverride All
DirectoryIndex index.php
Order allow,deny
allow from all
</Directory>
</VirtualHost>
EUER_SERVERNAME muss noch entsprechend eingetragen werden. Speichert die Änderung und editiert die ports.conf
nano /etc/apache2/ports.conf
und fügt ganz zum Schluss folgende Zeile ein:
NameVirtualHost *:443
Nun aktivieren wir das SSL Modul:
a2enmod ssl
Der Apache muss jetzt neu gestartet werden:
/etc/init.d/apache2 restart
Beachtet, dass das natürlich kein gekauftes Zertifikat ist. Euer Browser wird hier eine entsprechende Warnmeldung bringen. Aber Ihr wisst damit, warum diese Meldung kommt.
Rewrite auf https
Damit Eingaben mit http immer auf https umgeleitet werden, fügt in Eurer /etc/sites-enabled/000-default.conf einen Rewrite ganz unten in der VirtualHost Sektion ein:
<VirtualHost *:80>
....
RewriteEngine on
RewriteCond %{SERVER_NAME} =meinedomäne.de
RewriteRule ^ https://%{SERVER_NAME}%{REQUEST_URI} [END,QSA,R=permanent]
</VirtualHost>
Danach den Indianer neu starten:
/etc/init.d/apache2 restart
Serverzertifikat mit Let's Encrypt anlegen
Um ein Let's Encrypt Zertifikat anzulegen installiert den certbot:
apt-get install python-certbot-apache
Editiert Eure /etc/sites-enabled/000-default.conf und gebt dort unter ServerName Euren Domänen Namen an.
<VirtualHost *:80>
# The ServerName directive sets the request scheme, hostname and port that
# the server uses to identify itself. This is used when creating
# redirection URLs. In the context of virtual hosts, the ServerName
# specifies what hostname must appear in the request's Host: header to
# match this virtual host. For the default virtual host (this file) this
# value is not decisive as it is used as a last resort host regardless.
# However, you must set it for any further virtual host explicitly.
ServerName meinedomäne.de
ServerAdmin webmaster@localhost
Danach holt Euch ein Zertifikat mit dem Befehl:
certbot --apache
Hier müsst Ihr ein paar Fragen beantworten. Danach werden die Apache Scripte automatisch erweitert.
Startet den Server dann neu:
/etc/init.d/apache2 restart
Unter Debian 9 (Stretch) kommt es hierbei zu einem Fehler. Generiert deswegen das Zertifikat mit folgendem Befehl:
certbot --authenticator standalone --installer apache -d meinedomäne.de --pre-hook "service apache2 stop" --post-hook "service apache2 start"
(meinedomäne.de bitte durch Euren Domännamen ändern)
Das Zertifikat ist für 3 Monate gültig. Ihr müsst dann das Zertifikat wieder manuell erneuern:
certbot renew --agree-tos && /etc/init.d/apache2 restart
Ihr könnt auch einen täglichen Abruf über die crontab durchführen. Falls das Zertifikat noch gültig ist, wird kein Update gefahren. Mittels crontab -e fügt Folgendes ein:
# Check for Let's Encrypt Cert daily at 10 o clock
1 10 * * * certbot renew --agree-tos > /var/log/certbot.log && /etc/init.d/apache2 restart >> /var/log/certbot.log