🖥️ 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.
🧭 5.9 phpMyAdmin starten
Aufruf im Browser: http://localhost/phpmyadmin/
⚠️ 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
Link zur automatischen Erstellung:
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:
apache2statthttpd. - Gruppe:
www-datastatthttp. - 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:
- Pakete installieren
- MariaDB vorbereiten (btrfs/no-COW)
- MariaDB initialisieren & absichern
- Apache konfigurieren (lokaler Zugriff, Module, Systemd-Härtung)
- phpMyAdmin installieren & konfigurieren
- User-Verzeichnisse (~/public_html) aktivieren
- Dateiberechtigungen für CMS & Webserver setzen
- Hinweis auf Debian/Mint/Ubuntu-Kompatibilität

