{"id":7467,"date":"2021-09-12T23:18:28","date_gmt":"2021-09-12T21:18:28","guid":{"rendered":"https:\/\/u-labs.de\/portal\/?p=7467"},"modified":"2022-12-12T18:30:07","modified_gmt":"2022-12-12T16:30:07","slug":"wie-betreibe-ich-eine-webseite-auf-dem-raspberry-pi-was-sind-statische-dynamische-internetseiten-http-grundlagen-mit-fokus-auf-den-pi","status":"publish","type":"post","link":"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":{"rendered":"Wie betreibe ich eine Webseite auf dem Raspberry Pi? Was sind statische\/dynamische Internetseiten? HTTP-Grundlagen mit Fokus auf den Pi"},"content":{"rendered":"<p>Um eine Internetseite zu betreiben, muss diese <em>gehostet <\/em>werden. Das hei\u00dft: Die Seite liegt auf einem Server, der entsprechend eingerichtet wurde, um die gew\u00fcnschte Seite \u00fcbers Internet bereitzustellen. Hierf\u00fcr kommt das HTTP-Protokoll zum Einsatz, das seit Jahrzehnten die Grundlage f\u00fcr das Internet wie wir es heute kennen bildet. Informationen und Funktionen lassen sich damit \u00fcberall auf jedem Endger\u00e4t bereitstellen. Ob es sich um einen Computer, Laptop, Tablet, Smartphone handelt, ist dabei irrelevant. Selbst auf spezielle Ger\u00e4te wie z.B. im Internet der Dinge oder auf Anzeigetafeln kommt diese Technik im Hintergrund zum Einsatz.<\/p>\n<h2 class=\"wp-block-heading\">Wie funktioniert eine Internetseite per HTTP?<\/h2>\n<p>Der Browser eines Clients &#8211; beispielsweise auf einem Laptop oder Smartphone &#8211; sendet eine Anfrage an den Server, eine bestimmte Seite auszuliefern. Etwa die Suchmaschine Ecosia. Auf dem bzw. den Servern von Ecosia l\u00e4uft ein Webserver, der speziell f\u00fcr das HTTP-Protokoll ausgelegt ist und diese Anfrage bearbeiten kann. Als Antwort sendet er HTML an den Client. HTML ist eine Auszeichnungssprache. Das HTML-Dokument umfasst alle Informationen einer Internetseite: Metadaten wie etwa den Titel und nat\u00fcrlich den Inhalt. Der Inhalt wird dabei strukturiert, beispielsweise ob es sich um eine \u00dcberschrift oder einen Absatz handelt und in welcher Ebene. Auch das Darstellen von fettem oder kursivem Text und andere Formatierungen l\u00e4sst sich in HTML festlegen. Der Browser stellt die Inhalte entsprechend dar.<\/p>\n<figure class=\"wp-block-image size-large\"><a href=\"https:\/\/u-labs.de\/portal\/wp-content\/uploads\/2021\/09\/vlcsnap-2021-09-12-23h15m05s677.png\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"576\" src=\"https:\/\/u-labs.de\/portal\/wp-content\/uploads\/2021\/09\/vlcsnap-2021-09-12-23h15m05s677-1024x576.png\" alt=\"\" class=\"wp-image-7472\" srcset=\"https:\/\/u-labs.de\/portal\/wp-content\/uploads\/2021\/09\/vlcsnap-2021-09-12-23h15m05s677-1024x576.png 1024w, https:\/\/u-labs.de\/portal\/wp-content\/uploads\/2021\/09\/vlcsnap-2021-09-12-23h15m05s677-300x169.png 300w, https:\/\/u-labs.de\/portal\/wp-content\/uploads\/2021\/09\/vlcsnap-2021-09-12-23h15m05s677-768x432.png 768w, https:\/\/u-labs.de\/portal\/wp-content\/uploads\/2021\/09\/vlcsnap-2021-09-12-23h15m05s677-1536x864.png 1536w, https:\/\/u-labs.de\/portal\/wp-content\/uploads\/2021\/09\/vlcsnap-2021-09-12-23h15m05s677-2048x1152.png 2048w, https:\/\/u-labs.de\/portal\/wp-content\/uploads\/2021\/09\/vlcsnap-2021-09-12-23h15m05s677-70x39.png 70w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/a><\/figure>\n<p>Erg\u00e4nzt wird HTML von CSS, womit sich das Aussehen der Seite \u00e4ndern l\u00e4sst: Wie gro\u00df soll etwa die \u00dcberschrift sein? Welche Schriftart? Soll eine Box mit einem Rahmen versehen werden, wenn ja welcher Art und Farbe? Wie viel Abstand zwischen \u00dcberschrift und Text? Solche und viele weitere Dinge lassen sich mit CSS steuern.<\/p>\n<p>M\u00f6chte man Logik im Client abbilden, ben\u00f6tigt man JavaScript. Ein bekanntes Beispiel daf\u00fcr ist das Nachladen von Inhalten: Eine Nachrichtenseite m\u00f6chte etwa neue Nachrichten dem Nutzer direkt pr\u00e4sentieren. Das kann HTML nicht abbilden. Sobald der Webserver die Antwort gesendet hat, l\u00e4sst sich diese nicht mehr ver\u00e4ndern &#8211; bis der Nutzer einem Link folgt oder per Hand neu l\u00e4dt. <\/p>\n<p>Der Browser interpretiert das HTML, l\u00e4dt CSS sowie JavaScript und stellt die komplette Seite mithilfe dieser Bausteine dar. Zus\u00e4tzlich kann der Webserver aber auch andere Dateien per HTTP ausliefern, wie z.B. Bilder oder Videos. Diese kann man mit HTML ebenfalls einbetten, sodass ein Bild vom Webserver geladen und an einer bestimmten Stelle dargestellt wird.<\/p>\n<h2 class=\"wp-block-heading\">Statische und dynamische Webseiten: Was ist das? Worin unterscheiden sie sich?<\/h2>\n<p>Die ersten Internetseiten waren statisch. Das bedeutet: Jeder Besucher bekam die gleiche HTML-Seite. Heutige Anspr\u00fcche erf\u00fcllt das oft nicht mehr. Mehr M\u00f6glichkeiten bieten dynamisch generierte Inhalte: F\u00fcr jeden Seitenaufruf wird auf dem Server Programmcode ausgef\u00fchrt, der unterschiedliches HTML erzeugen kann und damit sowohl Inhalte als auch Aussehen der Seite anhand verschiedener Bedingungen anpasst &#8211; beispielsweise bestimmte Dinge ein- oder ausblenden, wenn ein Nutzer angemeldet ist. Dies kann mit verschiedenen Programmiersprachen durchgef\u00fchrt werden, eine der bekanntesten ist PHP. Die grunds\u00e4tzliche Funktionsweise ist dabei immer gleich: Der Webserver liefert z.B. eine PHP-Datei nicht direkt aus, sondern f\u00fchrt den Programmcode aus. Dieser Programmcode enth\u00e4lt eine Logik, die HTML erzeugt. Dieses HTML kann jedoch bei jedem Aufruf anders aussehen. Ein Beispiel w\u00e4re, wenn der Programmcode das aktuelle Datum mit der Uhrzeit ausgibt. Dies w\u00fcrde sich sek\u00fcndlich \u00e4ndern, dadurch sieht der generierte HTML-Inhalt jedes mal anders aus.<\/p>\n<figure class=\"wp-block-image size-large\"><a href=\"https:\/\/u-labs.de\/portal\/wp-content\/uploads\/2021\/09\/vlcsnap-2021-09-12-23h16m17s302.png\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"576\" src=\"https:\/\/u-labs.de\/portal\/wp-content\/uploads\/2021\/09\/vlcsnap-2021-09-12-23h16m17s302-1024x576.png\" alt=\"\" class=\"wp-image-7473\" srcset=\"https:\/\/u-labs.de\/portal\/wp-content\/uploads\/2021\/09\/vlcsnap-2021-09-12-23h16m17s302-1024x576.png 1024w, https:\/\/u-labs.de\/portal\/wp-content\/uploads\/2021\/09\/vlcsnap-2021-09-12-23h16m17s302-300x169.png 300w, https:\/\/u-labs.de\/portal\/wp-content\/uploads\/2021\/09\/vlcsnap-2021-09-12-23h16m17s302-768x432.png 768w, https:\/\/u-labs.de\/portal\/wp-content\/uploads\/2021\/09\/vlcsnap-2021-09-12-23h16m17s302-1536x864.png 1536w, https:\/\/u-labs.de\/portal\/wp-content\/uploads\/2021\/09\/vlcsnap-2021-09-12-23h16m17s302-2048x1152.png 2048w, https:\/\/u-labs.de\/portal\/wp-content\/uploads\/2021\/09\/vlcsnap-2021-09-12-23h16m17s302-70x39.png 70w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/a><\/figure>\n<p>Welche Vorteile bringt uns das? Eine ganze Reihe:<\/p>\n<ul class=\"wp-block-list\">\n<li>Wir k\u00f6nnen Daten aus verschiedenen Datenbanken beziehen oder speichern. Dies k\u00f6nnten z.B. Beitr\u00e4ge eines Blogs sein oder andere Inhalte<\/li>\n<li>Das Aussehen l\u00e4sst sich mit Vorlagen einheitlich gestalten und einfach ver\u00e4ndern: Layout und Inhalt werden getrennt<\/li>\n<li>Auf dem Raspberry Pi besonders interessant: Es lassen sich Daten ausgeben oder darstellen, die von Sensoren oder anderen angeschlossenen Ger\u00e4ten bezogen wurden. Ist beispielsweise ein Temperatursensor angeschlossen, kann man sich dessen Messwerte anzeigen lassen. Und zwar auch auf anderen Ger\u00e4ten, da sich eine Webseite nahezu \u00fcberall \u00f6ffnen l\u00e4sst &#8211; egal ob Computer, Laptop, Tablet oder Smartphone<\/li>\n<li>Funktionen wie z.B. Benutzeranmeldung\/Registrierung mit entsprechenden Berechtigungen (angemeldete Benutzer k\u00f6nnen etwa Blogbeitr\u00e4ge erstellen) lassen sich realisieren, die sich mit rein statischen HTML-Seiten nicht umsetzen lassen<\/li>\n<\/ul>\n<p>Dies <strong>kann<\/strong> man selbst programmieren, etwa zu Lernzwecken &#8211; muss es aber nicht. Denn es gibt auch viele fertige Systeme, die bestimmte Funktionen erf\u00fcllen. Ein Content Management System (CMS) bietet sich etwa f\u00fcr Webseiten oder Blogs an. Eines der bekanntesten ist WordPress. Damit kann man eine komplette Webseite oder auch Blogs ohne Programmierkenntnisse erstellen. WordPress basiert auf PHP und kann daher genutzt werden, wenn ein Webserver mit PHP eingerichtet ist.<\/p>\n<h2 class=\"wp-block-heading\">Welche Programmiersprachen kann man f\u00fcr dynamische Webseiten nutzen?<\/h2>\n<p>PHP ist die mit Abstand am meisten genutzte Skriptsprache f\u00fcr dynamisch generierte Internetseiten und Webanwendungen &#8211; sie kam in rund 79% der Top 10 Millionen Seiten zum Einsatz, bei denen sich ermitteln lie\u00df, welche Technologie sie verwenden:<\/p>\n<figure class=\"wp-block-image size-full\"><a href=\"https:\/\/u-labs.de\/portal\/wp-content\/uploads\/2021\/09\/grafik-3.png\"><img loading=\"lazy\" decoding=\"async\" width=\"482\" height=\"302\" src=\"https:\/\/u-labs.de\/portal\/wp-content\/uploads\/2021\/09\/grafik-3.png\" alt=\"\" class=\"wp-image-7468\" srcset=\"https:\/\/u-labs.de\/portal\/wp-content\/uploads\/2021\/09\/grafik-3.png 482w, https:\/\/u-labs.de\/portal\/wp-content\/uploads\/2021\/09\/grafik-3-300x188.png 300w, https:\/\/u-labs.de\/portal\/wp-content\/uploads\/2021\/09\/grafik-3-70x44.png 70w\" sizes=\"auto, (max-width: 482px) 100vw, 482px\" \/><\/a><\/figure>\n<p>Es gibt aber auch einige Alternativen. Obwohl ASP.NET, Ruby, Java, JavaScript und Python vergleichsweise wenig Verbreitung genie\u00dfen, kann man mit ihnen grunds\u00e4tzlich eben so dynamische Webseiten erstellen. Gerade im Bereich von Webanwendungen (die komplexer sind als reine Webseiten) sind diese tendenziell verbreiteter. Grunds\u00e4tzlich l\u00e4sst sich theoretisch nahezu jede Sprache nutzen. Sprachen mit einer gewissen Verbreitung haben den Vorteil vieler Ressourcen durch eine gro\u00dfe Community bieten &#8211; etwa Lernmaterialien und verf\u00fcgbaren Bibliotheken, um effizienter arbeiten zu k\u00f6nnen.<\/p>\n<h2 class=\"wp-block-heading\">Was soll ich benutzen?<\/h2>\n<p>Statische Seiten k\u00f6nnen f\u00fcr eine einfache Internetseite ausreichen, wenn diese sich nicht gro\u00dfartig ver\u00e4ndern soll. Beispielsweise zur reinen Bereitstellung von Blogartikeln, ohne Login oder andere Interaktionsm\u00f6glichkeiten. Das h\u00e4ndische Erstellen von HTML-Seiten ist f\u00fcr Einsteiger ein sinnvoller erster Schritt um zu lernen &#8211; in der Praxis ist dies jedoch sehr unflexibel, vor allem in der Pflege. Hier empfiehlt sich ein CMS, welches HTML-Seiten generieren kann.<\/p>\n<figure class=\"wp-block-image size-large\"><a href=\"https:\/\/u-labs.de\/portal\/wp-content\/uploads\/2021\/09\/vlcsnap-2021-09-12-23h16m41s828.png\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"576\" src=\"https:\/\/u-labs.de\/portal\/wp-content\/uploads\/2021\/09\/vlcsnap-2021-09-12-23h16m41s828-1024x576.png\" alt=\"\" class=\"wp-image-7474\" srcset=\"https:\/\/u-labs.de\/portal\/wp-content\/uploads\/2021\/09\/vlcsnap-2021-09-12-23h16m41s828-1024x576.png 1024w, https:\/\/u-labs.de\/portal\/wp-content\/uploads\/2021\/09\/vlcsnap-2021-09-12-23h16m41s828-300x169.png 300w, https:\/\/u-labs.de\/portal\/wp-content\/uploads\/2021\/09\/vlcsnap-2021-09-12-23h16m41s828-768x432.png 768w, https:\/\/u-labs.de\/portal\/wp-content\/uploads\/2021\/09\/vlcsnap-2021-09-12-23h16m41s828-1536x864.png 1536w, https:\/\/u-labs.de\/portal\/wp-content\/uploads\/2021\/09\/vlcsnap-2021-09-12-23h16m41s828-2048x1152.png 2048w, https:\/\/u-labs.de\/portal\/wp-content\/uploads\/2021\/09\/vlcsnap-2021-09-12-23h16m41s828-70x39.png 70w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/a><\/figure>\n<p>Beim Arbeiten mit dem Raspberry Pi wird man mit statischen Seiten schnell an Grenzen sto\u00dfen. Sp\u00e4testens wenn man z.B. mit Sensordaten arbeiten m\u00f6chte. PHP wird aufgrund seines einfachen Einstiegs oft f\u00fcr Anf\u00e4nger empfohlen, bietet gegen\u00fcber ASP.NET\/Java beispielsweise eine schwache Typisierung. Jede dieser Technologien hat ihre eigenen Vor- und Nachteile, die den Rahmen dieses Beitrages sprengen w\u00fcrden. <\/p>\n<p>Als Anf\u00e4nger halte ich dies f\u00fcr sekund\u00e4r. Wichtig ist, dass man grundlegende Konzepte lernt. Bei einer einzigen Sprache wird man heutzutage ohnehin kaum bleiben, was dar\u00fcber hinaus den Horizont sch\u00e4rft. Wie soll man auch das beste Werkzeug f\u00fcr eine Aufgabe finden, wenn man nur eine einzige Sprache in der Praxis kennt? Wer z.B. nur PHP-Erfahrung besitzt, kennt starke Typisierung nicht. Ein reiner Java oder C# Entwickler dagegen kann schwache Typisierung nicht einsch\u00e4tzen.<\/p>\n<p>Auch wenn PHP seine Schw\u00e4chen hat, ist es kein Fehler, sich mit dieser Sprache zu besch\u00e4ftigen. Solltest du dir &#8211; aus welchen Gr\u00fcnden auch immer &#8211; zun\u00e4chst eine andere Sprache anschauen m\u00f6chten, ist dies ebenfalls in Ordnung. Mit einem gewissen Bereich an Grundlagen wirst du dich in jeder Sprache besch\u00e4ftigen.<\/p>\n<h2 class=\"wp-block-heading\">Warum bietet sich der Raspberry Pi f\u00fcr das Betreiben einer Homepage an?<\/h2>\n<figure class=\"wp-block-image size-large\"><a href=\"https:\/\/u-labs.de\/portal\/wp-content\/uploads\/2021\/09\/vlcsnap-2021-09-12-23h17m01s694.png\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"576\" src=\"https:\/\/u-labs.de\/portal\/wp-content\/uploads\/2021\/09\/vlcsnap-2021-09-12-23h17m01s694-1024x576.png\" alt=\"\" class=\"wp-image-7475\" srcset=\"https:\/\/u-labs.de\/portal\/wp-content\/uploads\/2021\/09\/vlcsnap-2021-09-12-23h17m01s694-1024x576.png 1024w, https:\/\/u-labs.de\/portal\/wp-content\/uploads\/2021\/09\/vlcsnap-2021-09-12-23h17m01s694-300x169.png 300w, https:\/\/u-labs.de\/portal\/wp-content\/uploads\/2021\/09\/vlcsnap-2021-09-12-23h17m01s694-768x432.png 768w, https:\/\/u-labs.de\/portal\/wp-content\/uploads\/2021\/09\/vlcsnap-2021-09-12-23h17m01s694-1536x864.png 1536w, https:\/\/u-labs.de\/portal\/wp-content\/uploads\/2021\/09\/vlcsnap-2021-09-12-23h17m01s694-2048x1152.png 2048w, https:\/\/u-labs.de\/portal\/wp-content\/uploads\/2021\/09\/vlcsnap-2021-09-12-23h17m01s694-70x39.png 70w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/a><\/figure>\n<p>Wie Anfangs erw\u00e4hnt, ben\u00f6tigt jede Internetseite einen Server, der 24\/7 l\u00e4uft &#8211; sonst ist sie nicht erreichbar. Daf\u00fcr kann man einen kommerziellen Hoster w\u00e4hlen. Kostenfreie Anbieter bieten jedoch oft nicht die beste Leistung. Auch bei kostenpflichtigen Hostern gibt es Einschr\u00e4nkungen, je nach Anwendungszweck und Bedarf. F\u00fcr eine private Homepage reicht der Pi leistungstechnisch oft v\u00f6llig aus. Aufgrund seines geringen Strombedarfes ist er eine gute M\u00f6glichkeit, um flexibel als Mini-Server zu dienen.<\/p>\n<p>Dar\u00fcber hinaus bietet er weitreichende M\u00f6glichkeiten: Beispielsweise kann er Sensordaten auslesen und auf einer Homepage darstellen. Au\u00dferdem lassen sich zus\u00e4tzliche Anwendungen darauf betreiben. Neben der eigenen Webseite k\u00f6nnte man etwa eine kleine private Cloud hosten. Dies w\u00fcrde in \u00f6ffentlichen Clouds zus\u00e4tzliche Kosten verursachen und man besitzt nicht die Datenhoheit. Ausl\u00e4ndische Anbieter bieten oft zudem ein deutlich geringeres Datenschutzniveau, vor allem in unsicheren Drittstaaten wie den USA.<\/p>\n<p>Auch wenn der Pi viel kann, ist er kein Allheilmittel. F\u00fcr besonders umfangreiche Seiten mit vielen Besuchern ist er m\u00f6glicherweise zu schwach. Ein Internetanschluss mit einer gewissen Uploadbandbreite ist ebenfalls notwendig. Wer in einem sehr schlecht ausgebauten Gebiet wohnt, hat diese M\u00f6glichkeit ggf. gar nicht und muss zu einem externen Hoster greifen. Dies ist im Einzelfall zu pr\u00fcfen und h\u00e4ngt zudem von euren Anforderungen ab. F\u00fcr eine einfache textbasierte Homepage sind die Anforderungen geringer, wie wenn dort z.B. hochaufl\u00f6sende Bilder bereitgestellt werden.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Um eine Internetseite zu betreiben, muss diese gehostet werden. Das hei\u00dft: Die Seite liegt auf einem Server, der entsprechend eingerichtet wurde, um die gew\u00fcnschte Seite \u00fcbers Internet bereitzustellen. Hierf\u00fcr kommt das HTTP-Protokoll zum Einsatz, das seit Jahrzehnten die Grundlage f\u00fcr das Internet wie wir es heute kennen bildet. Informationen und Funktionen lassen sich damit \u00fcberall &#8230;<\/p>\n","protected":false},"author":5,"featured_media":7476,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[671],"tags":[936,935,934,937],"class_list":["post-7467","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-raspberry-pi","tag-hosting","tag-internetseite","tag-webseite","tag-webserver"],"_links":{"self":[{"href":"https:\/\/u-labs.de\/portal\/wp-json\/wp\/v2\/posts\/7467","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=7467"}],"version-history":[{"count":5,"href":"https:\/\/u-labs.de\/portal\/wp-json\/wp\/v2\/posts\/7467\/revisions"}],"predecessor-version":[{"id":9834,"href":"https:\/\/u-labs.de\/portal\/wp-json\/wp\/v2\/posts\/7467\/revisions\/9834"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/u-labs.de\/portal\/wp-json\/wp\/v2\/media\/7476"}],"wp:attachment":[{"href":"https:\/\/u-labs.de\/portal\/wp-json\/wp\/v2\/media?parent=7467"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/u-labs.de\/portal\/wp-json\/wp\/v2\/categories?post=7467"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/u-labs.de\/portal\/wp-json\/wp\/v2\/tags?post=7467"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}