Skip to main content

🖥️ Webserver installieren

Optional: Webserver installieren und einrichten (lokal)

Plattform: Linux Manjaro (Zetar)
Versionen verwendet (Stand dieser Anleitung):

  • Apache 2.4.65 (Webserver)
  • PHP 8.4.12 (Serverside-Skriptsprache)
  • MariaDB 12.0.2 (Datenbankserver)

Diese Seite beschreibt die native Installation unter Linux Manjaro.
Ziel ist es, den Webserver nur lokal zum Testen zu nutzen.
Der Online-Server läuft im FastCGI-Modus ohne Desktop-Umgebung, mit Firewall, gehärteter CMS-Installation und wird stets aktuell gehalten.

Hinweis:

  • Alle Angaben ohne Gewähr. Änderungen an Systemdateien und Diensten immer mit Bedacht durchführen.
  • Erstelle vor jeder Anpassung ein Backup Deiner Daten und Konfigurationen.
  • Kompatibilität mit Debian/Mint/Ubuntu: siehe unten Punkt 8.

🧩 1. Pakete für Webserver installieren

sudo pacman -S --needed mariadb php php-apache phpmyadmin php-gd php-imagick

🗃️ 2. btrfs: Copy-on-Write deaktivieren (no-COW)

Wenn sich die Datenbank /var/lib/mysql auf einem btrfs-Dateisystem befindet, sollte Copy-on-Write deaktiviert werden, bevor eine DB angelegt wird.

2.1 prüfen ob Ordner leer ist

sudo ls -all /var/lib/mysql/

2.2 no-COW aktivieren

sudo chattr +C /var/lib/mysql

2.3 Attribut prüfen

sudo lsattr -d /var/lib/mysql
# Erwartet: ---------------C------ /var/lib/mysql

2.4 Wenn Verzeichnis nicht leer ist

sudo systemctl stop mysqld
mv /var/lib/mysql /var/lib/mysql_old
mkdir /var/lib/mysql
chattr +C /var/lib/mysql
cp -a /var/lib/mysql_old/* /var/lib/mysql
chown -R mysql:mysql /var/lib/mysql
sudo systemctl restart mysqld
rm -rf /var/lib/mysql_old

🚀 3. MariaDB (MySQL) initialisieren & absichern

3.1 initialisieren

sudo mariadb-install-db --user=mysql --basedir=/usr --datadir=/var/lib/mysql

3.2 starten & aktivieren

sudo systemctl start mysqld
sudo systemctl enable mysqld

3.3 Status prüfen

systemctl status mysqld

3.4 root-Passwort setzen

sudo mariadb
MariaDB [(none)]> ALTER USER 'root'@'localhost' IDENTIFIED BY 'MeinPASSWORT';
MariaDB [(none)]> FLUSH PRIVILEGES;
MariaDB [(none)]> exit

3.5 mysql_secure_installation ausführen

mysql_secure_installation
  • Als erstes werdet ihr nach dem MySQL root Passwort gefragt. Dann bei der Frage "Switch to unix_socket authentication" mit 'n' weiter und bei "You already have your root account protected" ebenfalls mit 'n'.

  • Als nächstes sollte der Anonymous User entfernt werden, wenn der Server produktiv eingesetzt wird.

  • Im folgenden Schritt sollte dem root User das Recht entzogen werden, sich über das Netzwerk anzumelden (für lokale Nutzung empfohlen).

  • Zusätzlich zur Anonymous-User-Entfernung gibt es eine Testdatenbank, die ebenfalls gelöscht werden sollte.

Am Ende werden die Berechtigungen neu geladen.

3.6 Wenn Passwort nicht akzeptiert wird (Reset)

sudo mysqld_safe --skip-grant-tables &
sudo mysql -u root

Dann:

MariaDB [(none)]> use mysql;
MariaDB [(none)]> FLUSH PRIVILEGES;
MariaDB [(none)]> ALTER USER 'root'@'localhost' IDENTIFIED BY 'MeinPASSWORT';
MariaDB [(none)]> exit

3.7 Tabellen prüfen, reparieren, optimieren

sudo killall -9 mysqld
sudo mysqlcheck -A --auto-repair -u root -p
sudo mysqlcheck -A --auto-repair -f -o -u root -p

3.8 mysql_secure_installation erneut durchführen

mysql_secure_installation

3.9 MariaDB aktualisieren

sudo su
systemctl restart mariadb.service && mariadb-upgrade -u root -p
exit

🔧 4. Apache konfigurieren

4.1 Konfigurationsdatei öffnen

nano /etc/httpd/conf/httpd.conf

4.2 nur lokal erreichbar

Listen 127.0.0.1:80

4.3 Module anpassen

Auskommentieren:

#LoadModule unique_id_module modules/mod_unique_id.so
#LoadModule authn_file_module modules/mod_authn_file.so
#LoadModule mpm_event_module modules/mod_mpm_event.so

Aktivieren:

LoadModule mpm_prefork_module modules/mod_mpm_prefork.so

Am Ende hinzufügen:

LoadModule php_module modules/libphp.so
AddHandler php-script .php
Include conf/extra/php_module.conf
Include conf/extra/phpmyadmin.conf

Prüfen:

LoadModule userdir_module modules/mod_userdir.so
LoadModule rewrite_module modules/mod_rewrite.so

🛡️ 4.4 ProtectHome-Problem bei Apache 2.4.58–2.4.65

Viele Distributionen haben ProtectHome=on gesetzt (2024–2025).
Dadurch sind /home-Verzeichnisse blockiert → UserDir & CMS können nicht schreiben.

Lösung

sudo systemctl edit httpd

Datei enthält:

[Service]
### Editing /etc/systemd/system/httpd.service.d/override.conf
ProtectHome=no

Danach:

sudo systemctl daemon-reload
sudo systemctl restart httpd

Prüfen:

systemctl show -p ProtectHome httpd

📁 5. phpMyAdmin konfigurieren

5.1 phpmyadmin.conf erstellen

nano /etc/httpd/conf/extra/phpmyadmin.conf
Alias /phpmyadmin "/usr/share/webapps/phpMyAdmin"
<Directory "/usr/share/webapps/phpMyAdmin">
    DirectoryIndex index.php
    AllowOverride All
    Options FollowSymlinks
    Require local
</Directory>

Hinweis: Require all granted nur wenn nicht lokal.


📝 5.2 php.ini anpassen

nano /etc/php/php.ini

Folgende Zeilen prüfen/aktivieren:

date.timezone = Europe/Berlin
extension=gd
extension=exif
extension=iconv
extension=pdo_mysql
extension=mysqli
open_basedir = /srv/http/:/var/www/:/home/:/tmp/:/var/tmp/:/var/cache/:/usr/share/pear/:/usr/share/webapps/:/etc/webapps/
session.gc_probability = 1
session.gc_divisor = 1000
session.gc_maxlifetime = 1440
upload_max_filesize = 20M
max_file_uploads = 40

🔐 5.3 config.inc.php konfigurieren

nano /etc/webapps/phpmyadmin/config.inc.php

Hier ein 32 stelliges Passwort zur Cookie-Authentifizierung setzen, z.B.:

$cfg['blowfish_secret'] = 'seit_phpMyAdmin504istdasPflicht';

🚀 5.4 Apache starten & aktivieren

sudo systemctl restart httpd
sudo systemctl enable httpd

5.5 Status

systemctl status httpd

5.6 PHP-Module

php -m

5.7 Fehlerlog

nano /var/log/httpd/error_log

🔎 5.8 PHP-Info testen

nano /srv/http/phpinfo.php
<?php
phpinfo();
?>

Aufruf im Browser: http://localhost/phpinfo.php
Die PHP Version und Konfiguration sollte angezeigt werden.

phpinfo.jpg


🧭 5.9 phpMyAdmin starten

Aufruf im Browser: http://localhost/phpmyadmin/

phpMyAdmin.jpg


⚠️ 5.10 TempDir-Fehler beheben

Wenn die Fehlermeldung "Auf das $cfg['TempDir'] (/usr/share/webapps/phpMyAdmin/tmp/) kann nicht zugegriffen werden. PhpMyAdmin kann keine Templates zwischenspeichern und ist daher langsam." kommt, den Temp Ordner anlegen und "http" als Besitzer und Gruppe setzen (chmod 777 ist dann nicht notwendig):

sudo mkdir /usr/share/webapps/phpMyAdmin/tmp/
sudo chown -R http:http /usr/share/webapps/phpMyAdmin/tmp/

⚠️ 5.11 phpMyAdmin-Konfigurationsspeicher fehlt

http://localhost/phpmyadmin/index.php?route=/check-relations

Manuell anlegen:

  • phpMyAdmin öffnen
  • Reiter „Datenbanken“
  • Datenbank „phpmyadmin“ erstellen
  • Zeichensatz: utf8mb4_unicode_ci

Hinweis:
utf8mb4_unicode_ci sortiert und vergleicht Zeichen genauer nach Unicode-Regeln,
utf8mb4_general_ci ist minimal schneller, aber weniger präzise.

Dann Reiter „Importieren“ → Datei:
/usr/share/webapps/phpMyAdmin/sql/create_tables.sql


🏠 6. User directories aktivieren (~/public_html)

(Wenn CMS-Installationen nicht im Standardordner /var/www/, sondern im jeweiligen Home-Verzeichnis getestet werden)

nano /etc/httpd/conf/extra/httpd-userdir.conf

Inhalt:

UserDir public_html
<Directory "/home/*/public_html">
    DirectoryIndex index.php index.html
    AllowOverride All
    Options MultiViews SymLinksIfOwnerMatch IncludesNoExec
    Require method GET POST OPTIONS
</Directory>

Habe das "Directory Listing" des Apache-Webservers deaktiviert, also "Indexes" entfernt (Zugriff auf alle Unterverzeichnisse werden verwehrt).


📂 6.1 Ordner erstellen & Rechte setzen

mkdir ~/public_html
chmod 775 ~/public_html
chmod 711 /home/$USER
sudo systemctl restart httpd

6.2 PHP-Info testen

nano ~/public_html/phpinfo.php
<?php
phpinfo();
?>

Aufruf:
http://localhost/~BENUTZERNAME/phpinfo.php


🔒 7. Dateiberechtigungen für CMS

7.1 Benutzer zur Gruppe http hinzufügen

Dateien, die der Webserver erzeugt oder ändert (z.B. ein CMS), sind nur für Mitglieder der Gruppe http (unter Debian www-data) schreibbar. Damit du diese Dateien bearbeiten kannst, musst du deinen Benutzer zu dieser Gruppe hinzufügen (Neustart notwendig).

sudo gpasswd -a $USER http

(entfernen mit: sudo gpasswd -d $USER http)

7.2 Home-Rechte korrigieren

sudo chown -R $USER:$USER ~/
find ~/ \( -type d -exec chmod 755 {} + \) -or \( -type f -exec chmod 644 {} + \)
chmod 711 /home/$USER

7.3 public_html vorbereiten

find ~/public_html/ \( -type d -exec chmod 775 {} + \) -or \( -type f -exec chmod 664 {} + \)

7.4 Schreibrechte für Apache

sudo chown -R http:http ~/public_html

7.5 AppImage & Shell-Scripts ausführbar machen

find ~ -type f -name "*.AppImage" -exec chmod +x {} +
find ~ -type f -name "*.sh" -exec chmod +x {} +

📌 8. Kompatibilität mit Debian/Mint/Ubuntu

  • Paketnamen unterscheiden sich (apache2, php, mariadb-server).
  • Pfade unterscheiden sich (/etc/apache2/ statt /etc/httpd/).
  • Dienstname: apache2 statt httpd.
  • Gruppe: www-data statt http.
  • ProtectHome-Thema existiert dort ebenfalls bei neuen Apache-Versionen.

📌 9. Zusammenfassung

Mit dieser Anleitung baust Du lokal unter Manjaro einen Webserver mit Apache 2.4, PHP 8.4 und MariaDB 12.0 auf.
Der Webserver dient ausschliesslich zum Testen von CMS-Seiten im lokalen Netzwerk oder auf dem eigenen Rechner.
Die einzelnen Schritte:

  1. Pakete installieren
  2. MariaDB vorbereiten (btrfs/no-COW)
  3. MariaDB initialisieren & absichern
  4. Apache konfigurieren (lokaler Zugriff, Module, Systemd-Härtung)
  5. phpMyAdmin installieren & konfigurieren
  6. User-Verzeichnisse (~/public_html) aktivieren
  7. Dateiberechtigungen für CMS & Webserver setzen
  8. Hinweis auf Debian/Mint/Ubuntu-Kompatibilität