{"id":7464,"date":"2021-09-17T18:30:00","date_gmt":"2021-09-17T16:30:00","guid":{"rendered":"https:\/\/u-labs.de\/portal\/?p=7464"},"modified":"2022-12-12T18:29:39","modified_gmt":"2022-12-12T16:29:39","slug":"dynmaische-webseiten-apache2-webserver-mit-php-und-mysql-mariadb-auf-dem-raspberry-pi-installieren-einfachster-weg-fuer-anfaenger-lamp","status":"publish","type":"post","link":"https:\/\/u-labs.de\/portal\/dynmaische-webseiten-apache2-webserver-mit-php-und-mysql-mariadb-auf-dem-raspberry-pi-installieren-einfachster-weg-fuer-anfaenger-lamp\/","title":{"rendered":"Dynmaische Webseiten: Apache2 Webserver mit PHP und MySQL\/MariaDB auf dem Raspberry Pi installieren &#8211; einfachster Weg f\u00fcr Anf\u00e4nger (LAMP)"},"content":{"rendered":"<p>Apache2 und das ebenfalls quelloffene PHP geh\u00f6ren zum Urgestein des Internets aus den 90ern. Bis heute eignen sie sich zur dynamischen Bereitstellung von Webseiten. Die grundlegende Funktion ist einfach sowie \u00fcberschaubar, und dadurch auch f\u00fcr Anf\u00e4nger geeignet. Im folgenden m\u00f6chte ich euch den einfachsten Weg zeigen, wie man Apache2 mit PHP und einer MariaDB-Datenbank \u00fcber die Paketverwaltung auf den Raspberry Pi installieren kann.<\/p>\n<p><a href=\"https:\/\/u-labs.de\/portal\/wie-betreibe-ich-eine-webseite-auf-dem-raspberry-pi-was-sind-statische-dynamische-internetseiten-http-grundlagen-mit-fokus-auf-den-pi\/\" title=\"Wie betreibe ich eine Webseite auf dem Raspberry Pi? Was sind statische\/dynamische Internetseiten? HTTP-Grundlagen mit Fokus auf den Pi\">Die Funktionsweise von HTTP und das betreiben einer Internetseite auf dem Raspberry Pi haben wir in einem separaten Videobeitrag bereits genauer erkl\u00e4rt<\/a>. Auf die Hintergr\u00fcnde werde ich daher an dieser Stelle nicht weiter eingehen. <a href=\"https:\/\/u-labs.de\/portal\/neue-programme-auf-dem-raspberry-pi-per-apt-paketverwaltung-installieren-das-solltest-du-vorher-machen\/\" title=\"Neue Programme auf dem Raspberry Pi per APT Paketverwaltung installieren: Das solltest du vorher machen!\">Was man vor der Installation neuer Software grunds\u00e4tzlich beachten sollte, erf\u00e4hrst du hier<\/a>.<\/p>\n<h2 class=\"wp-block-heading\">Apache2 und PHP installieren<\/h2>\n<p>Im Grunde m\u00fcssen wir nur 2-4 Pakete installieren, um grundlegende PHP-Webseiten betreiben zu k\u00f6nnen. Zun\u00e4chst installieren wir den Webserver:<\/p>\n<pre class=\"wp-block-prismatic-blocks\"><code class=\"\" data-line=\"\">sudo apt install apache2<\/code><\/pre>\n<p>Anschlie\u00dfend folgt PHP. Die Mbstring-Erweiterung ist nicht zwingend erforderlich, aber wird f\u00fcr verschiedene Anwendungen wie z.B. f\u00fcr WordPress ben\u00f6tigt. PHP-MySQL eben so, diese Erweiterung erm\u00f6glicht das Verbinden mit MySQL-Datenbanken. <\/p>\n<pre class=\"wp-block-prismatic-blocks\"><code class=\"\" data-line=\"\">sudo apt install php php-mysql php-mbstring<\/code><\/pre>\n<p>Mittlerweile wird die MySQL-Erweiterung automatisch geladen. Falls dies bei dir nicht funktioniert, den Apache-Webserver einmal neu starten:<\/p>\n<pre class=\"wp-block-prismatic-blocks\"><code class=\"\" data-line=\"\">sudo systemctl restart apache2<\/code><\/pre>\n<h3 class=\"wp-block-heading\">Berechtigungen setzen und Testseite erstellen<\/h3>\n<p>Standardm\u00e4\u00dfig liefert Apache alle Dateien im Ordner <strong>\/var\/www\/html<\/strong> aus. Dieser geh\u00f6rt jedoch root, d.H. wir k\u00f6nnen dort nur Dateien erstellen oder bearbeiten, wenn wir z.B. sudo nutzen &#8211; das ist eine (unn\u00f6tig) schlechte Praxis und sollte ge\u00e4ndert werden. Unser Benutzer mit dem wir an der Seite arbeiten m\u00f6chten (hier <strong>pi<\/strong>) erh\u00e4lt volle Rechte. Die Gruppe <strong>www-data<\/strong> unter der Apache2 l\u00e4uft, darf Lesen + Ausf\u00fchren. Alle anderen erhalten keinerlei Berechtigungen &#8211; was in der Form Sinn macht, wenn wir nur mit einem Benutzer arbeiten.<\/p>\n<pre class=\"wp-block-prismatic-blocks\"><code class=\"\" data-line=\"\">sudo chown -R pi:www-data -R \/var\/www\/html\nchmod 750 -R \/var\/www\/html<\/code><\/pre>\n<p>Nun k\u00f6nnen wir mit unserem pi-Benutzer problemlos Dateien erstellen und bearbeiten. Als ersten Test erzeugen wir eine PHP-Datei namens <strong>i.php<\/strong> (frei w\u00e4hlbar) und lassen uns die PHP-Info ausgeben. Das ist eine von PHP generierte Seite, die alle relevanten Informationen rund um die PHP-Konfiguration anzeigt &#8211; darunter unter anderem die Version oder die Installierten Erweiterungen. Bei einer frischen Installation ist sie daher ein guter erster Test um sicherzustellen, dass alles wie gew\u00fcnscht funktioniert:<\/p>\n<pre class=\"wp-block-prismatic-blocks\"><code class=\"\" data-line=\"\">echo &#039;&lt;?php phpinfo();&#039; &gt; \/var\/www\/html\/i.php<\/code><\/pre>\n<p>Nun k\u00f6nnen wir diese Seite \u00fcber die IP-Adresse oder den Hostname gefolgt von \/i.php aufrufen, beispielsweise http:\/\/testpi\/i.php<\/p>\n<figure class=\"wp-block-image size-full\"><a href=\"https:\/\/u-labs.de\/portal\/wp-content\/uploads\/2021\/09\/grafik-2.png\"><img loading=\"lazy\" decoding=\"async\" width=\"967\" height=\"493\" src=\"https:\/\/u-labs.de\/portal\/wp-content\/uploads\/2021\/09\/grafik-2.png\" alt=\"\" class=\"wp-image-7465\" srcset=\"https:\/\/u-labs.de\/portal\/wp-content\/uploads\/2021\/09\/grafik-2.png 967w, https:\/\/u-labs.de\/portal\/wp-content\/uploads\/2021\/09\/grafik-2-300x153.png 300w, https:\/\/u-labs.de\/portal\/wp-content\/uploads\/2021\/09\/grafik-2-768x392.png 768w, https:\/\/u-labs.de\/portal\/wp-content\/uploads\/2021\/09\/grafik-2-70x36.png 70w\" sizes=\"auto, (max-width: 967px) 100vw, 967px\" \/><\/a><\/figure>\n<p>Damit ist unsere Apache-Installation mit PHP bereit. Alle Dateien in <strong>\/var\/www\/html<\/strong> werden im Wurzelverzeichnis angezeigt bzw. im Falle von PHP ausgef\u00fchrt. <strong>i.php<\/strong> ist frei gew\u00e4hlt, ihr k\u00f6nnt die Datei auch anders nennen.<\/p>\n<h2 class=\"wp-block-heading\">MySQL\/MariaDB installieren<\/h2>\n<p>MySQL ist ebenfalls eine \u00e4ltere, aber nach wie vor verbreitete und n\u00fctzliche SQL-Datenbank. Als diese von Oracle gekauft wurde, entwickelte sich MariaDB. Der Fork sollte sicherstellen, dass die Datenbank quelloffen und transparent bleibt. Ihr Ziel ist es, mit MySQL kompatibel zu sein. Sie hat sich zu einer ressourcensparenden Alternative etabliert, womit sie sich f\u00fcr den Raspberry Pi optimal anbietet. Man ben\u00f6tigt nicht zwingend eine Datenbank f\u00fcr PHP, aber in vielen F\u00e4llen ist dies zumindest sinnvoll. An dieser Stelle sei auch erw\u00e4hnt, dass MariaDB bzw. MySQL nicht die Einzigen sind, wenngleich sie zu den verbreitetsten geh\u00f6ren.<\/p>\n<p>MariaDB l\u00e4sst sich \u00fcber die Standardpaketquellen installieren:<\/p>\n<pre class=\"wp-block-prismatic-blocks\"><code class=\"\" data-line=\"\">sudo apt install mariadb-server<\/code><\/pre>\n<p>Standardm\u00e4\u00dfig kommt der lokale Benutzer <strong>root<\/strong> lokal ohne Passwort auf den MariaDB-Server, wenn man sich als root (z.B. mit sudo) verbindet. Auf der Konsole kann man anschlie\u00dfend mit vollen Rechten SQL-Abfragen ausf\u00fchren &#8211; beispielsweise die Statusseite, um uns Testweise die Laufzeit des Servers anzuzeigen:<\/p>\n<pre class=\"wp-block-prismatic-blocks\"><code class=\"language-bash\" data-line=\"\">$ sudo mysql\nWelcome to the MariaDB monitor.  Commands end with ; or \\g.\nYour MariaDB connection id is 50\nServer version: 10.3.29-MariaDB-0+deb10u1 Raspbian 10\n\nCopyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others.\n\nType &#039;help;&#039; or &#039;\\h&#039; for help. Type &#039;\\c&#039; to clear the current input statement.\n\nMariaDB [(none)]&gt; SHOW GLOBAL STATUS LIKE &#039;Uptime&#039;;\n+---------------+-------+\n| Variable_name | Value |\n+---------------+-------+\n| Uptime        | 54    |\n+---------------+-------+\n1 row in set (0.003 sec)\n<\/code><\/pre>\n<h2 class=\"wp-block-heading\">Weiterer Ausbau<\/h2>\n<p>Nun habt ihr eine grundlegende LAMP-Installation, also ein auf Linux basiertes Serversystem mit dem Apache-Webserver, einer MariaDB bzw. MySQL Datenbank und der Skriptsprache PHP. Ihr k\u00f6nnt nun eine Datenbank mit Benutzer und den entsprechenden Berechtigungen darauf anlegen. Dieser l\u00e4sst sich in einem PHP-Skript nutzen, um eure Datenbank zu F\u00fcllen oder Inhalte daraus anzuzeigen. Nat\u00fcrlich m\u00fcsst ihr nicht zwingend etwas selbst programmieren. Auch fertige PHP-Anwendungen k\u00f6nnen auf dem Pi betrieben werden, etwa ein WordPress-CMS.<\/p>\n<p>Sowohl ein erstes selbst programmiertes Skript als auch die Installation von WordPress werden wir uns noch in folgenden Videos anschauen und oben verlinkten. Oder du st\u00f6berst selbst<a href=\"https:\/\/u-labs.de\/portal\/category\/raspberry-pi\/\"> in unseren weiteren Beitr\u00e4gen<\/a>: Neben weiteren Tutorials die zeigen wie man den Pi als kleinen Mini-Server nutzen kann, sind dort ebenfalls andere Tipps, Tricks und Anleitungen zu finden. Ich w\u00fcnsche dir viel Erfolg mit deinem Projekt \ud83d\ude42<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Apache2 und das ebenfalls quelloffene PHP geh\u00f6ren zum Urgestein des Internets aus den 90ern. Bis heute eignen sie sich zur dynamischen Bereitstellung von Webseiten. Die grundlegende Funktion ist einfach sowie \u00fcberschaubar, und dadurch auch f\u00fcr Anf\u00e4nger geeignet. Im folgenden m\u00f6chte ich euch den einfachsten Weg zeigen, wie man Apache2 mit PHP und einer MariaDB-Datenbank \u00fcber &#8230;<\/p>\n","protected":false},"author":5,"featured_media":7512,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[671],"tags":[944,55,937],"class_list":["post-7464","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-raspberry-pi","tag-lamp","tag-php","tag-webserver"],"_links":{"self":[{"href":"https:\/\/u-labs.de\/portal\/wp-json\/wp\/v2\/posts\/7464","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/u-labs.de\/portal\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/u-labs.de\/portal\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/u-labs.de\/portal\/wp-json\/wp\/v2\/users\/5"}],"replies":[{"embeddable":true,"href":"https:\/\/u-labs.de\/portal\/wp-json\/wp\/v2\/comments?post=7464"}],"version-history":[{"count":7,"href":"https:\/\/u-labs.de\/portal\/wp-json\/wp\/v2\/posts\/7464\/revisions"}],"predecessor-version":[{"id":9831,"href":"https:\/\/u-labs.de\/portal\/wp-json\/wp\/v2\/posts\/7464\/revisions\/9831"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/u-labs.de\/portal\/wp-json\/wp\/v2\/media\/7512"}],"wp:attachment":[{"href":"https:\/\/u-labs.de\/portal\/wp-json\/wp\/v2\/media?parent=7464"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/u-labs.de\/portal\/wp-json\/wp\/v2\/categories?post=7464"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/u-labs.de\/portal\/wp-json\/wp\/v2\/tags?post=7464"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}