Apache, PHP und mySQL

Aus Gargi.org
Wechseln zu: Navigation, Suche

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...

Directorylist.jpg

...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)

Letsencrypt.jpg

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