Raspberry Pi Server

In dieser Dokumentation liefere ich, aus Sicherheitsgründen, oberflächlichen Einblick in die Einrichtung meines Raspberry Pi als Server.  

Diese Website wird auf einem Raspberry Pi 3 B+ innerhalb eines Docker Containers gehostet. Ursprünglich hatte ich das Projekt mit Ubuntu Server 21.04 als OS begonnen. Jedoch zeigte sich schnell, dass die Stabilität des Systems nicht meiner Vorstellung entsprach. Aus diesem Grund entschied ich mich für Raspbian Lite als Basis. Nachdem nun die SD-Karte des Raspberry Pi mit dem aktuellen Image bestückt wurde, konnte es an die Konfiguration gehen. 

Zunächst wurde der Kernel und die Firmware des Pis aktualisiert und schließlich sichergestellt, dass ausreichend RAM zur Verfügung steht indem der Arbeitsspeicher, welcher der GPU zur Verfügung gestellt wird, auf das Minimum von 16 MB limitiert wurde. Schließlich soll der Zugriff auf den Pi nur noch via SSH erfolgen. Apropos SSH, dies wurde schließlich ebenfalls konfiguriert. So wurde nicht nur der Port geändert, sondern auch ein Keypair erstellt.  

Damit ist sichergestellt, dass unberechtigte Zugriffsversuche im Keim erstickt werden. Auch wenn vorerst nur die Ports 80 und 443 an den Pi weitergeleitet werden, so besteht später noch die Möglichkeit auch den SSH Port von außerhalb meines Heimnetzes erreichbar zu machen. Da ich zur Zeit aber überwiegend im Homeoffice bin ist das zum jetzigen Zeitpunkt irrelevant. Des Weiteren wird der Zugriff via SSH durch die nachfolgenden Arbeiten nahezu obsolet. 

Zunächst muss erstmal die Basis des Projekts geschaffen werden. Docker. Da ich in der Vergangenheit bereits Erfahrungen mit der Containervirtualisierung mittels Docker sammeln konnte, bot es sich an diese Kenntnisse anzuwenden und auszubauen. Nicht nur, dass die Containervirtualisierung an sich überaus komfortabel ist, so schafft sie auch einen zusätzlichen Grad an Sicherheit. Also musste nun erstmal Docker installiert werden.  

Nach der Installation und dem Start des daemon, folgte der erste Container. Portainer. Eine Applikation zur Administration, Konfiguration, Deployment in einer übersichtlichen aber umfangreichen Web GUI. Dazu wurde einfach im Docker CLI ein Volume angelegt in dem unsere Konfigurationen persistiert werden und schließlich der Container deployed. 

Nun konnte ich mich, nach anlegen eines Nutzers, erstmal mit dem Web GUI von Portainer vertraut machen. Bisher hatte ich mit Docker nur im CLI gearbeitet und kannte Portainer bis dato nicht. Es hätte vieles in der Vergangenheit deutlich vereinfacht und beschleunigt, wäre es mir vorher bereits bekannt gewesen.  

Nun konnte ich mich an das Deployment weiterer Container machen. Dazu habe ich mir in Portainer verschiedenste Custom Templates mit angepassten Docker-Compose Dateien angelegt. Da ich neben einer eigenen Internetpräsenz auch einen Cloudspeicher hosten wollte und dies so ressourcenschonend wie möglich gelöst werden sollte, habe ich ein MariaDB Container von yobasystems als Datenbank genutzt. Dieser Container ist für die ARM Architektur der Raspberrys angepasst. Darauf sollte nun ein Nextcloud Container zugreifen. Beides habe ich in Portainer als Container Stack hinterlegt und kann dadurch schnell und unkompliziert deployed und auch wieder verworfen werden. Die Datenbank schreibt ihre Daten dabei in ein Dockervolume, ebenso wie die Konfiguration der Nextcloud Applikation in einem Dockervolume gesichert werden, wodurch die Persistenz gewährleistet wird. 

Der nächste Stack sollte schließlich ein Nginx Proxy Manager beinhalten, um http Anfragen an den Raspberry Pi entsprechend der URL an den entsprechenden Container weiterzuleiten und SSL Zertifikate zu verwalten. Dafür wurde wieder oben erwähnte Datenbank verwendet. Auch dieser Stack liegt in Portainer bereit und kann von dort aus bequem administriert werden. 

Nun konnte ich mich an Wordpress machen. Auch hier kam erneut oben erwähnter Datenbank Container zum Einsatz. Nachdem auch dieser Container im Nginx Proxy Manager eingebunden und mit einem SSL Zertifikat versehen wurde, konnte die Gestaltung der Seite übernommen werden. 

Abschließend habe ich die Containerlandschaft noch um einige administrative Applikationen erweitert. Ein Watchtower Container überwacht die Container, prüft einmal wöchentlich ob eine neue Version der verwendeten Containerimages zur Verfügung steht und benachrichtigt mich dann per Mail. Die dynamische IP des Hosts wird ebenfalls, durch einen separaten Container, automatisiert an den Domanindienst gemeldet. Ein RPi-Monitor Container erlaubt das Monitoring der Ressourcen des Raspberry Pi. Und zu guter Letzt liefert ein Heimdall Container ein Dashboard zu allen GUIs.