eigener Webserver


© Mai 2021, Letzte Änderung 10.12.21

--- still under construction ---

Die klassische Abkürzung woraus ein Webserver besteht
ist LAMP (Linux, Apache, MySQL, PHP).

Übersicht

Linux

Zum betreiben eines Web-Servers wird ein Betriebssystem benötigt.
Da solche Web-Seiten schon mal gehackt werden können, sollte,
zwecks Kapselung, nicht das eigene Betriebssystem,
sondern ein virtualisiertes Betriebssystem verwendet werden.

Da ein Web-Server meist 24h/7 im Betrieb ist und remote erreichbar sein sollte,
sind mindestens ssh, public-key & fail2ban zu empfehlen.

Über DSL eine eigene Web-Seite anzubieten, würde ich nur bedingt empfehlen.
Zum einen ändert sich täglich meine IP-Adresse
→ weitere Kompensations-Maßnahmen erforderlich
und zum anderen werde ich mit vielen Hack-Versuchen konfrontiert.
Da haben professionelle Anbieter - Hoster einfach mehr Erfahrung.

Was ich aber empfehlen kann, ist lokal eine Webseite aufzubauen
und wenn dann alles wie gewünscht läuft,
können die Seiten z.B. per filezilla auf einen Hoster kopiert werden.
Somit habe ich zum einen einen Vorabtest und zum anderen ein Backup.

Für einen Web-Server benötigt das darunter liegende Linux
keine grafische Oberfläche. Aber manche grafischen Tools wie
Filezilla, Bluefish, Thunar, etc. möchte man vielleicht nutzen.
Daher schadet es nicht gleich ein normales Linux mit z.B. xfce zu installieren.
Da der Zugriff remote erfolgen soll, darf natürlich ssh & fail2ban nicht fehlen.

Virtualisierung   habe ich bereits beschrieben.
ebenso wie ich z.B. ein   Debian via LiveCD   installiere.

Siehe auch:
debian.org   Debian ist ein völlig freies Betriebssystem!
digitalocean.com   Initial Server Setup with Debian 10 (2019)
computerwoche.de   Empfehlenswerte Linux-Distributionen für Server (2015)

Zum Anfang

Apache

Um mindestens eine statische html-Seiten darzustellen,
ist Apache nötig.

su                                     sudo -s   wenn su nicht mehr funktioniert
apt install apache2

/etc/init.d/apache2 restart
[ ok ] Restarting apache2 (via systemctl): apache2.service.

systemctl restart apache2              kann man alternativ verwenden 
                                       (ohne Meldung)
sudo systemctl status apache2

● apache2.service - The Apache HTTP Server
   Loaded: loaded (/lib/systemd/system/apache2.service; enab…
   Active: active (running) since Fri 2021-12-10 21:46:21 CE…
     Docs: https://httpd.apache.org/docs/2.4/
  Process: 2137 ExecStart=/usr/sbin/apachectl start (code=ex…
 Main PID: 2141 (apache2)
    Tasks: 10 (limit: 2316)
   Memory: 19.1M
   CGroup: /system.slice/apache2.service
           ├─2141 /usr/sbin/apache2 -k start
           ├─2142 /usr/sbin/apache2 -k start
           ├─2143 /usr/sbin/apache2 -k start
           ├─2144 /usr/sbin/apache2 -k start
           ├─2145 /usr/sbin/apache2 -k start
           ├─2146 /usr/sbin/apache2 -k start
           ├─2150 /usr/sbin/apache2 -k start
           ├─2151 /usr/sbin/apache2 -k start
           ├─2152 /usr/sbin/apache2 -k start
           └─2177 /usr/sbin/apache2 -k start

Dec 10 21:46:21 gj5 systemd[1]: Starting The Apache HTTP Server...
Dec 10 21:46:21 gj5 apachectl[2137]: AH00558: apache2: Could…
Dec 10 21:46:21 gj5 systemd[1]: Started The Apache HTTP Server.
lines 1-23/23 (END)
                                       

Danach befindet sich im Ordner  /var/www/html  eine
index.html  Datei mit root-Rechten.
welche man im Browser sich angucken kann.
Befindet man sich direkt auf dem Webserver,
kann man im Browser http://localhost/  oder  127.0.0.1  eingeben.
Genauso ist es möglich innerhalb des eigenen Netzes
die Adresse des Webservers,
hier  http://gj5.fritz.box  einzugeben.

apache2

Um eine eigene Webseite zu erstellen kann man im einfachsten Fall die  index.html  überschreiben
oder dort eine Verknüpfung plazieren.

Hier habe ich einen neuen Ordner  super08 , zugreifbar vom Benutzer  m ,
für meine Web-Seite erstellt und eine Verknüpfung darauf angelegt .

su
 cd /var/www/html
 mkdir super08
 chown m:m super08
 chown m:m index.html
exit

nano index.html
…
  <body>
    <div class="main_page">
      <div class="page_header floating_element">
        <img src="/icons/openlogo-75.png" alt="Debian Lo…
        <span class="floating_element">
          Apache2 Debian Default Page
        </span>
      </div>


<p><a href="./super08/index.html" target="_top" >2021-08</a></p>

Man sieht, dass der Einsprungsort meiner Webseite hier ebenfalls  index.html.
Das muß aber nicht immer so sein.
Bei einem CMS wird der ausführbare Code meist via  index.php  gestartet.

Falls erforderlich kann man den Webserver über  /etc/apache2/apache2.conf  anpassen.

Mit Editoren wie Nano oder mousepad kann man Webseiten erstellen.
würde ich aber nicht empfehlen. Stattdessen verwende ich z.B. bluefish.

Siehe auch:
apache.org   The Apache software foundation

Zum Anfang

PHP

Wem das direkte schreiben in Html zu mühsam ist,
wird wahrscheinlich ein sog. content management system - CMS installieren wollen.
Dies ermöglicht zwar eine einfachere Eingabe von Inhalten,
bedarf aber der Pflege (Updates einspielen, Plug-Ins auf Funktion überprüfen, etc.)

Ich selber habe ein paar Jahre websitebaker.org verwendet,
welches ich über einen VHS-Kurs kennen gelernt habe.
Dann gab es innerhalb der Websitebaker-Gemeinde Streit
und das CMS wurde längere Zeit nicht mehr gepflegt.
Und mein Web-Hoster ist wegen Sicherheitsproblemen
auf eine höhere PHP-Version gegangen,
welche von meiner Websitebaker-Version noch nicht unterstützt wurde.
Nachdem ein Websitebaker-Update zur Verfügung stand,
hoffte ich, meine Seite tanzfreudig.de wieder zum Leben zu erwecken.
Aber das Update schlug fehl - Seitdem ruht die Seite.
Nun muß das nicht immer so passieren, kann aber.

Zumindest wird für viele CMS ein PHP-Hypertext-Preprocessor benötigt,
welcher sich wie folgt installieren läßt.

su
apt install php libapache2-mod-php

Die Zeitzone muß in der PHP-Konfiguration ≥ PHP 5.3 angepasst werden.

su
cd /etc/php/7.3/apache2                Der Pfad kann variieren

nano php.ini                           mit Ctrl-W   "date.timezone ="  suchen

;date.timezone =                       folgende Zeile ergänzen (ohne ;)
date.timezone = Europe/Berlin

systemctl restart apache2              ein Neustart schadet nicht

Zum Test habe ich einen Einzeiler erstellt,
deren Ergebnis ich mir im Browser angucken kann.

su
cd /var/www/html
nano info.php

<?php phpinfo(); ?>

Die Adresse für das Testergebnis lautet bei mir http://gj5.fritz.box/info.php

php

Möchten man php auf der Webseite ausführbar machen,
ist eine Änderung der Dateiendung von .html zu .php nötig.
Im Gegensatz zu Javascript, läuft PHP auf dem Web-Server und
erzeugt dann eine dynamische html-Seite, welche der Klient in seinem Browser sieht.
Wenn ich also im Browser mit Ctrl-Shift-I mir den Code angucke, steht dort Text,
statt der PHP-Code, welcher den Text erzeugt.

Siehe auch:
php.net   PHP is a popular general-purpose scripting language that is especially suited to web development.
php.net   sys_getloadavg — Ermittelt die durchschnittliche Systemlast
educba.com   PHP Commands

Zum Anfang

MySQL-Datenbank

So richtig interessant wird PHP erst,
wenn ich es mit einer My-SQL (Structured Query Language) Datenbank verbinde.
Hierfür sind noch ein paar Kleingkeiten zu installieren.

Ich habe mich hier statt für MySQL von Oracle,
für die Alternative mariadb entschieden.

su
sudo apt install mysql-server          → E: Package 'mysql-server' has no installation candidate
sudo apt install default-mysql-server  Name bei DEB 10 

apt install mariadb-server             alternative Datenbank
…
perl: warning: Setting locale failed.
perl: warning: Please check that your locale settings:
   LANGUAGE = (unset),
   LC_ALL = (unset),                   dabei gibt es noch Schwierigkeiten
   LANG = "en_GB.UTF-8"
…

Entsprechend ist der Service noch nicht betriebsbereit

su
service mysql status                   Test

systemctl status mysql                 Alternative

● mariadb.service - MariaDB 10.3.31 database server
   Loaded: loaded (/lib/systemd/system/mariadb.service; enabled; vendor preset: enabled)
   Active: inactive (dead)  
     Docs: man:mysqld(8)
           https://mariadb.com/kb/en/library/systemd/

Also erst einmal die Spracheinstellungen richtig setzen und die My-SQL Datenbank neu starten.
Die erneute Überprüfung sollte nun nicht mehr fehl schlagen.

sudo systemctl restart mysql
sudo systemctl status mysql

Zu den Datenbank-Server wird noch ein Client benötigt.

su
apt install default-mysql-client       für Orcale

apt install mariadb-client             für die Alternative

Datenbank absichern

Mit einen einfachen Befehl kann man die SQL-Datenbank weiter absichern.
Hier wird z.B.

su
mysql_secure_installation
…
If you've just installed MariaDB, and
you haven't set the root password yet, the password will be blank,

Enter current password for root (enter for none):  ↵

Remove anonymous users? [Y/n]          y

Disallow root login remotely? [Y/n]    y

Remove test database and access to it? [Y/n] y

Reload privilege tables now? [Y/n]     y

systemctl restart apache2              ein Neustart schadet nicht

Test der MySQL-Datenbank kann wie folgt passieren.
Wobei erst das sudo-Passwort und dann
das root-Passwort vom SQL-Server einzugeben ist.

sudo  mysqladmin -u root -p version

mysqladmin  Ver 9.1 Distrib 10.3.31-MariaDB, for debian-linux-gnu on x86_64
Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others.

Server version		10.3.31-MariaDB-0+deb10u1
Protocol version	10
Connection		Localhost via UNIX socket
UNIX socket		/var/run/mysqld/mysqld.sock
Uptime:			3 hours 53 min 1 sec

Threads: 6  Questions: 486  Slow queries: 0  Opens: 175  Flush tables: 1  Open tables: 31  
Queries per second avg: 0.034

Wie es aussieht, läuft alles nach Plan.

Zum Anfang

phpMyAdmin

Um die MySQL-Datenbank verwalten zu können, ist noch sinnvoll folgendes zu installieren.

sudo apt install phpmyadmin            → E: Package 'phpmyadmin' has no installation candidate

Eine weitere Möglichkeit ist sich den Tar-Ball runter zu laden
und z.B. im Ordner /var/www/html/extraGeheimerOrdner/ zu entpacken.

Zum Anfang

Quellen

textbroker.de   Content-Management-System
websitebaker.org   WebsiteBaker Open Source Content Management
technikaffe.de   Einen Linux Webserver installieren
pcwelt.de   Apache-Webserver auf Linux installieren - so geht's (2018)
codeflow.site   So installieren Sie den Apache-Webserver unter Debian 10
jolichter.de   Debian Webserver einrichten (2009)
itler.net   Unter Debian eine Webserver-Umgebung installieren
otremba.net   Webserver installieren (Debian 8 ca. 2018)
debianforum.de   Webserver mit Apache PHP und MySQL (Debian 7 < 2018)
https://kifarunix.com/install-lamp-stack-with-mariadb-10-on-debian-10-buster/
https://www.linuxandubuntu.com/home/10-steps-to-secure-linux-server

Zum Anfang