© Mai 2021, Letzte Änderung 19.10.24
Die klassische Abkürzung woraus ein Webserver besteht
ist LAMP (Linux, Apache, MySQL, PHP).
Zum betreiben eines eigenen 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 (siehe filezilla-project.org)
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.
Die Virtualisierung
habe ich bereits beschrieben.
ebenso wie ich z.B. ein
Debian via LiveCD
installiere.
Siehe auch folgende externe Verküpfungen:
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
Um mindestens eine statische html
-Seiten darzustellen zu können,
ist Apache nötig, welches mit wenigen Schritten installiert ist.
Alternativ zu Apache würde ich mitlerweile zu Nginx tendieren.
Siehe
yarnaudov.com
mod_php vs php-fpm Performance Benchmark
[Surprising Results]
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 remote direkt auf dem Webserver,
kann man im lokalen Browser
http://localhost/
oder 127.0.0.1
eingeben.
Genauso ist es möglich innerhalb des eigenen Netzes die Adresse des Webservers,
hier z.B. http://gj5.fritz.box
bzw.
gj5.fritz.box einzugeben.
Um eine eigene Webseite zu erstellen kann man im einfachsten Fall
die Datei index.html
überschreiben
oder in der Datei 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
ist.
Das muß aber nicht immer so sein.
Noch besser ist es, alles unterhalb des Ordners www
der Gruppe www-data
zuzuordnen.
Siehe auch askubuntu.com Permissions problems with /var/www/html…
su chgrp -R www-data /var/www/html find /var/www/html -type d -exec chmod g+rx {} + find /var/www/html -type f -exec chmod g+r {} +
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.
Nach dem Anpassen sollte man überprüfen ob noch alles gültig ist.
Ist das der Fall, muß Apache neu geladen werden,
damit die Änderungen wirksam werden.
sudo apache2ctl configtest AH00558: apache2: Could not reliably determine the server's fully qualified domain name, using 127.0.1.1. Set the 'ServerName' directive globally to suppress this message Syntax OK
ls /etc/apache2/sites-available/ 000-default.conf default-ssl.conf nano ... ServerName your_domain ServerAlias www.your_domain
sudo systemctl reload apache2
Mit Editoren wie Nano
oder mousepad
kann man Webseiten erstellen.
Das würde ich aber nicht empfehlen. Stattdessen verwende ich z.B. bluefish
.
Siehe auch:
apache.org
The Apache software foundation
digitalocean.com
So sichern Sie Apache mit Let's Encrypt unter Ubuntu 20.04
webhosterwissen.de
Tutorial: Apache Domains & Virtual Hosts anlegen
Zum Anfang
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 php-intl
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 gj5.fritz.box/info.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
So richtig interessant wird PHP erst,
wenn ich es mit einer My-SQL (Structured Query Language) Datenbank verbinde.
Hierfür sind noch ein paar Kleinigkeiten 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 muß ich 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
Mit einen einfachen Befehl kann man die SQL-Datenbank weiter absichern.
Hier wird z.B.
Bei mariadb ist der Dialog etwas ausführlicher.
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
Ein 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.
Damit ein potentielles CMS die Datenbank benutzen kann,
ist sie noch für einen bestimmten Benutzer anzulegen.
In diesen Beispiel definiere ich den Benutzer m_db
für nextcloud.
Statt password
ist natürlich etwas komplizierteres einzugeben.
su mysql für DEB 12 CREATE USER 'm_db'@'localhost' IDENTIFIED BY 'password'; Query OK, 0 row affected (0,045 sec) CREATE DATABASE nextcloud CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci; Query OK, 1 row affected (0,096 sec) GRANT ALL PRIVILEGES ON nextcloud.* TO 'm_db'@'localhost'; Query OK, 0 row affected (0,023 sec) FLUSH PRIVILEGES; Query OK, 0 row affected (0,004 sec) quit Bye
Zum Anfang
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
Um eine HTTPS-Seite zu betreiben, ist es nötig, vergleichbar mit SSH oder PGP,
ein Schlüsselpaar zu erzeugen. Der private Schlüssel wird dann vom Webserver verwendet
und der öffentliche Schlüssel wird an einer öffentlich zugänglichen Stelle platziert.
Zusätzlich zu den Schlüssel werden weitere Informationen in einen Zertifikat zusammen gefasst.
Eine kostenfreie Zertifizierungsstelle - CA ist beispielsweise letsencrypt.org
In meinen Fall habe ich SSH-Zugriff auf meinen Webserver.
Daher bietet es sich an, fertige Software zum Erzeugen der Zertifikate zu verwenden.
z.B. certbot von der US-Seite certbot.eff.org.
Certbot benötigt Informationen wie:
Die Debian-Version habe ich mir via folgenden Befehl anzeigen lassen.
cat /etc/debian_version 10.13
Diese Informationen trage ich auf der oben genannten certbot-Webseite ein.
Abweichend von der Anleitung installiere ich nicht Ubuntu's snap
.
sudo apt install certbot
Entsprechend brauche ich auch keinen Link /usr/bin/certbot
erzeugen,
sondern kann gleich loslegen.
sudo certbot --apache [sudo] password for m: Saving debug log to /var/log/letsencrypt/letsencrypt.log The requested apache plugin does not appear to be installed
Leider gab es bei mir eine Fehlermeldung, welche ich mit folgender Installation beheben konnte.
sudo apt-get install python-certbot-apache
Nach erneuten Aufruf komme ich schon ein Stück weiter.
sudo certbot --apache Saving debug log to /var/log/letsencrypt/letsencrypt.log
Plugins selected: Authenticator apache, Installer apache
Enter email address (used for urgent renewal and security notices)
(Enter 'c' to cancel): …@supercalifragilis.de
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Please read the Terms of Service at https://letsencrypt.org/documents/LE-SA-v1.3-September-21-2022.pdf.
You must agree in order to register with the ACME server at https://acme-v02.api.letsencrypt.org/directory
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
(A)gree/(C)ancel: A
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Would you be willing to share your email address with the Electronic Frontier Foundation,
a founding partner of the Let's Encrypt project and the non-profit organization that develops Certbot?
We'd like to send you email about our work encrypting the web, EFF news, campaigns, and ways to support digital freedom.
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
(Y)es/(N)o: Y
No names were found in your configuration files. Please enter in your domain name(s) (comma and/or space separated)
(Enter 'c' to cancel): supercalifragilis.de
Obtaining a new certificate Performing the following challenges: http-01 challenge for supercalifragilis.de
Enabled Apache rewrite module Waiting for verification...
Cleaning up challenges Failed authorization procedure. supercalifragilis.de (http-01):
urn:ietf:params:acme:error:unauthorized :: The client lacks sufficient authorization :: 2a03:4000:61:16d8::17:2730:
Invalid response from http://supercalifragilis.de/.well-known/acme-challenge/-OhpOd-Lfo_oshVTBdu-ETaXJerQsgQTK9yyLtsWnwE: 404
IMPORTANT NOTES:
- The following errors were reported by the server:
Domain: supercalifragilis.de
Type: unauthorized
Detail: 2a03:4000:61:16d8::17:2730: Invalid response from http://supercalifragilis.de/.well-known/acme-challenge/-OhpOd-Lfo_oshVTBdu-ETaXJerQsgQTK9yyLtsWnwE: <404>
To fix these errors, please make sure that your domain name was entered correctly and the DNS A/AAAA record(s) for that domain contain(s) the right IP address.
- Your account credentials have been saved in your Certbot configuration directory at /etc/letsencrypt.
You should make a secure backup of this folder now.
This configuration directory will also contain certificates and private keys obtained by Certbot so making regular backups of this folder is ideal.
Leider funktioniert es nicht mit einer lokalen Webseite auf diese Art und Weise.
Und ich finde es schwach, das Europa da keine Alternative anzubieten hat.
Zertifikate wurden auch nicht erstellt, bzw. der Ordner /var/log/letsencrypt/.certbot.lock
existiert garnicht.
sudo certbot certificates Saving debug log to /var/log/letsencrypt/letsencrypt.log - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - No certs found. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - sudo ls -la /var/log/letsencrypt/ total 32 drwx------ 2 root root 4096 Nov 12 21:43 . drwxr-xr-x 11 root root 4096 Nov 12 00:00 .. -rw-r--r-- 1 root root 23936 Nov 12 21:43 letsencrypt.log
howtoforge.de
Wie man Let’s Encrypt SSL/TLS-Zertifikate mit Certbot erstellt und verwaltet
veuhoff.net
Raspberry Pi: Lets Encrypt SSL Zertifikat mit Certbot installieren
ubuntuusers.de
certbot
bogomolov.tech
How to get HTTPS working on localhost
Zum Anfang
Wie anfangs beschrieben, wird mit Installation von Apache ein Ordner
/var/www/html
angelegt.
Um den Zugriff zu erleichtern,
habe ich mir in meinen Benutzer-Ordner eine Verknüpfung gelegt
via ln -s /var/www/html/ html
.
Innerhalb des html-Ordners (mit Root-Rechten), befinden sich die Ordner
mit den verschiedenen Versionen der selben Webseite. z.B. s06, s07
Jedes Mal wenn ich per filezilla
den Ordner mit der letzten Version,
hier s07, zu netcup übertragen habe,
lösche ich die vorherige Version, hier s06
und erstelle mir aus der aktuellesten Version eine Arbeitskopie → s08.
sudo rm -rf s06 sudo cp -r s07 s08 sudo chown -Rc m:m s08 ist erforderlich, weil ich nicht cp -a verwendet habe sudo nano index.html
Danach editiere ich die index.html und ergänze eine Verknüpfung
auf die neue Arbeitskopie s08.
Zum Anfang
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
https://wiki.ubuntuusers.de/ssl-cert/
https://bogomolov.tech/localhost-https/
https://seo-summary.de/website-auf-https-ssl-umstellen/
Zum Anfang