*

Offline Jo

  • *****
  • 223
  • Geschlecht: Männlich
    • JoLichter.de
Debian Webserver einrichten
« am: 06. Dezember 2009, 20:29:22 »
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
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_installationdamit 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
Zitat
Warning 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.phpFind 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.phpFind 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

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 removeDienst 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.confAllowOverride 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 reloadDanach 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/$USERprü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
« Letzte Änderung: 24. Januar 2019, 19:24:04 von Jo »