Neuigkeiten:

Privates MODX und LINUX BLOG, User Registrierung ist deaktiviert! Fragen oder Tipps? Bitte per Matrix: @jolichter:tchncs.de

Hauptmenü

Debian Webserver einrichten

Begonnen von Jo, 2009-12-06 | 20:29:22

« vorheriges - nächstes »

Jo

Ein Linux Desktop eignet sich Zuhause hervorragend um diesen als einen "Webserver Testsystem" einzurichten und damit z.B. ein CMS zu testen (Ubuntu 16.04 mit PHP 7 und Ubuntu 18.04 mit PHP 7.2).

Achtung! So wie ich das hier beschreibe ist der Webserver nur für Daheim zum testen geeignet (siehe unten).


Installation (Reihenfolge ist wichtig!)
1. mariadb-server (anstatt mysql-server)
2. apache2
3. apache2-utils
4. phpMyAdmin
5. php-curl
6. GD
7. Imagemagick
sudo apt install mariadb-server apache2 apache2-utils phpmyadmin php-curl php-gd imagemagick php-imagick

alles löschen:
sudo apt-get --purge remove mariadb-server apache2 apache2-utils phpmyadmin php-curl php-gd imagemagick php-imagick

Hinweis: Beim konfigurieren des phpMyAdmin müsst ihr den apache2 auswählen.

MariaDB für phpMyAdmin konfigurieren, z.B.:
sudo dpkg-reconfigure phpmyadmin

  • Datenbank für phpmyadmin neu installieren?  Ja
  • Unix-Socket
  • MySQL-Datenbankname für phpmyadmin: phpmyadmin
  • MySQL-Benutzername für phpmyadmin: root@localhost
  • MySQL-Anwendungspasswort für phpmyadmin: meinSQL-PASSWORT
  • Name des administrativen Datenbank-Benutzers: root
  • Webserver, die automatisch konfiguriert werden sollen: apache2

Anschließend könnt ihr auch via localhost/phpmyadmin/ zugreifen!

MariaDB per Konsole (Shell-Script) anpassen:
mysql_secure_installation
damit kann

  • ein neues Passwort für Root-Accounts festgelegt werden
  • Root-Accounts entfernen, auf die von außerhalb des lokalen Hosts zugegriffen werden kann
  • Anonyme Benutzerkonten entfernen
  • Testdatenbank entfernen, auf die standardmäßig von anonymen Benutzern zugegriffen werden kann





Wenn ihr nach der Neuinstallation und dem Restart von Apache2 diese Fehlermeldung bekommt:
"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."
Kann der Server die Adresse nicht richtig auflösen, dann muss folgender Eintrag in die /etc/apache2/apache2.conf hinzugefügt werden: ServerName localhost
danach speichern und den Apache neu starten
sudo /etc/init.d/apache2 restart


Webseiten ablegen und aufrufen
Das Server Root Verzeichnis des Apache Webservers liegt in /var/www/.
Legt man dort Dateien ab, so können diese mit http://localhost bzw. http://<server-ip> (127.0.0.1)
im Browser aufgerufen werden. Standardmäßig ist dort eine Demoseite installiert, was zeigt das es funktioniert!

Nun möchte ich mein CMS natürlich nicht als Root im Ordner /var/www/ testen, sondern in meinem /home.
Dazu wird das Modul mod_userdir benötigt, daß bei der Installation von Apache mit installiert wurde.

Abftrage ist userdir dabei?
ls /etc/apache2/mods-enabled

wenn nicht:

Aktivieren des Moduls:
sudo a2enmod userdir
(deaktivieren: sudo a2dismod userdir)
  und
sudo /etc/init.d/apache2 restart
(Neuladen des Apache)

Dann im Benutzerverzeichnis /home/Benutzername/ (chmod 0755!) das Verzeichnis 'public_html' mit 0775 Rechten erstellen (www-data User muss auf das Verzeichnis lesend zugreifen können).
chmod 755 /home/$USER
mkdir /home/$USER/public_html
chmod 775 /home/$USER/public_html


Startseite: http://localhost/~UserName  :wink:

Dateien die der Webserver erzeugt oder ändert (z.B. ein CMS) sind nur für Mitglieder der Gruppe www-data schreibbar. Um diese Dateien zu beschreiben, den Benutzer zu dieser Gruppe hinzufügen:
sudo adduser $USER www-data
(Benutzer aus der Gruppe entfernen: sudo deluser $USER www-data)

Dabei muss man beachten das der User "www-data" unter dem Apache läuft. Jeder User der sich in das CMS anmeldet wird zum "www-data" User. Hier noch einmal der Hinweis > siehe Unten!

Quelle: wiki.ubuntuusers.de/Apache


Tipp für MODX Revolution:
Ab PHP 5.3 muss in der Datei "/etc/php/7.2/apache2/php.ini" (z.B. PHP7.2) der Eintrag date.timezone = Europe/Berlin gesetzt sein.
VISUAL=kate sudoedit /etc/php/7.2/apache2/php.ini

Ebenso muss die Datei "/etc/php/7.2/conf.d/suhosin.ini" angepasst werden: suhosin.get.max_value_length = 4096 (wenn benutzt). Dateigrößen auf meinem Heimserver: post_max_size = 48M, memory_limit = 128M, upload_max_filesize = 48M.


mod_rewrite ist ein Apache-Modul, um URLs zu manipulieren.
Mit der RewriteEngine des Apache-Webservers ist es möglich, die angeforderte URL anhand von Regeln umzuschreiben (friendly URL). Modul aktivieren:
sudo a2enmod rewrite
sudo /etc/init.d/apache2 restart



phpMyAdmin - beim Exportieren einer Datenbank erscheint die Fehlermeldung
ZitatWarning in ./libraries/plugin_interface.lib.php#551
count(): Parameter must be an array or an object that implements Countable"

Lösung gefunden auf stackoverflow.com:
kate /usr/share/phpmyadmin/libraries/sql.lib.php
Find the line
|| count($analyzed_sql_results['select_expr'] == 1)
and replace with
|| (count($analyzed_sql_results['select_expr']) == 1)
  und
kate /usr/share/phpmyadmin/libraries/plugin_interface.lib.php
Find the line "if ($options != null && count($options) > 0) {" and replace "count($options)" with "count((array)$options)".
dann
sudo service apache2 restart




Tipps:
- phpMyAdmin starten: http://localhost/phpmyadmin/ (Benutzername ist root)
- phpMyAdmin neu konfigurieren: sudo dpkg-reconfigure phpmyadmin
- sudo /etc/init.d/apache2 {start|stop|restart|reload|force-reload}, z.B: sudo /etc/init.d/apache2 reload
- mysqladmin neues Passwort: sudo mysqladmin password <NEUESPASSWORT>
- Konfiguration für das Apache-PHP-Modul: /etc/php/7.2/apache2/php.ini
- Webmin ist ein free HTTP-Server Admintool


Beispiele MySQL Konsole (MariaDB oder MySQL) :
mysql -u root -p
Wenn kein Kennwort für root gesetzt ist, dann verzichte auf den Parameter "-p".
Hilfe
help;
Datenbanken auflisten
SHOW DATABASES;
Datenbank erstellen
CREATE DATABASE dbTest001;
Datenbank löschen
DROP DATABASE dbTest001;
Ende
\q


Mit phpinfo() kann man einfach testen ob PHP läuft und sich viele Informationen über die momentane Konfiguration von PHP anzeigen lassen. Einfach mit einem Texteditor die Zeile <?php phpinfo(); ?> schreiben und als phpinfo.php in das Verzeichnis 'public_html' speichern. Testaufruf wäre dann:
http://localhost/~UserName/phpinfo.php

In der Standardkonfiguration wird der Apache-Server bei jedem Booten des Systems gestartet.
Wer das nicht will kann den Apache-Dienst aus dem Boot-Prozess entfernen:
sudo update-rc.d -f apache2 remove
Dienst wieder automatisch beim Booten starten:
sudo update-rc.d apache2 defaults



Nachtrag1: Wenn ihr den phpMyAdmin nicht wie üblich via http://localhost/phpmyadmin aufrufen könnt (404 Error), fehlen wahrscheinlich symbolische Links und ihr könnt diese so erzeugen:
sudo ln -s /etc/phpmyadmin/apache.conf /etc/apache2/conf-available/phpmyadmin.conf
sudo ln -s /usr/share/phpmyadmin /var/www/html/phpmyadmin


Nachtrag2:
Wenn ihr mod_userdir ab Ubuntu 10.04 benutzt und PHP Dateien zum herunterladen angezeigt werden, müsst ihr die Datei /etc/apache2/mods-available/php7.2.conf wie folgt anpassen - also ausklammern:
VISUAL=kate sudoedit /etc/apache2/mods-available/php7.2.conf

    #<IfModule mod_userdir.c>
    #    <Directory /home/*/public_html>
    #        php_admin_value engine Off
    #    </Directory>
    #</IfModule>


Damit mod_userdir und .htaccess funktioniert muss lediglich in der /etc/apache2/mods-available/userdir.conf eine Zeile geändert werden:
VISUAL=kate sudoedit /etc/apache2/mods-available/userdir.conf
AllowOverride FileInfo AuthConfig Limit Indexes Options
(einfach 'Options' ergänzen)

Beispiel .htaccess wenn Search Engine Friendly (SEF) aktiviert ist und das CMS MODX in /home/UserName/public_html/modx/ installiert ist:
RewriteEngine On
RewriteBase /~UserName/modx/
# The Friendly URLs part
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php?q=$1 [L,QSA]


Nach dem Editieren, Neuladen der Apache Konfiguration:
sudo /etc/init.d/apache2 reload
Danach kann man per http://servername.domain/server-status die Prozessliste ansehen.




ACHTUNG!
Bei dieser einfachsten Variante mit mod-php läuft der PHP Interpreter mit den gleichen Rechten wie der Webspace (User www-data oder wwwrun).
Dieses ist praktisch, man kann alles lesen und schreiben. Nachteil ist jedoch man kann wirklich alles lesen und schreiben, z.B. die Verzeichnisse eines anderen Users.
Wer solch einen Server mit Kunden am Netz betreibt handelt grob fahrlässig!
Mit Einstellungen wie "php safe mode on" oder "base_dir-Restriktion" lässt sich kein CMS vernünftig arbeiten.

Lösung: PHP als FastCGI-Mode - denn dann wird PHP pro User nur einmal gestartet und weiterverwendet. Damit gehören die Dateien dem jeweiligen User und nicht mehr dem www-data. Link: Wiki-FastCGI und das TuTo Apache Server mit PHP fcgid (ehemals FastCGI) und Debian


Besitzrechte aller Dateien rekursiv in /home/USERNAME dem USER geben (außer public_html):
sudo chown -R $USER:$USER /home/$USER
prüfen:
find ~ ! -user $USER -ls
(die Ausgabe sollte leer sein)

Gruppe $USER im Ordner public_html Schreibrechte geben und Besitzrechte auf www-data ändern:
find /home/$USER/public_html/ \( -type d -exec chmod 775 {} + \) -or \( -type f -exec chmod 664 {} + \)
sudo chown -R www-data:www-data /home/$USER/public_html


wieder prüfen:
find ~ ! -user $USER -ls
(nur www-data Ausgabe)

Tipp: LINUX-System aktualisieren, reinigen, alte Kernel löschen oder reparieren