Raspberry Pi Heim Server
9. Aug. 2024 (vor 4 Monaten)
6 Minuten Lesezeit •
Nachdem ich meinen eigenen Linux-Server bekommen hatte, wollte ich einen Server für mein Zuhause haben. Ich wollte einen Raspberry Pi verwenden, weil er günstig ist, einfach einzurichten und eine Menge Software unterstützt, die ich nutzen kann. Außerdem wollte ich Docker verwenden, weil ich es bevorzuge, meine Software in Containern zu betreiben. In diesem Blogpost erkläre ich, wie ich meinen Raspberry Pi eingerichtet habe und wie ich ihn nutze.
Inhaltsverzeichnis
Spezifikationen
- Raspberry Pi 5 mit 8 GB RAM
- SanDisk Ultra microSDHC 128GB 140MB/s A1
- Raspberry Pi 27W USB-C-Power Adapter schwarz EU
- Argon ONE V3 M.2 NVME PCIE Gehäuse SDSQUA4-128G-GN6MN
Insgesamt: ** ~150€**
Setup
Vorbereitung
- Lade den Raspberry Pi Imager herunter
- Wähle das neueste Raspberry Pi OS Image (full)
- Konfiguriere das Image
- Hostname:
raspberrypi
- Username/Password: ...
- Wifi SSID/Password: ...
- Timezone: Europe/Berlin
- Keyboard layout: de
- SSH: Enabled (Optional: Füge deinen öffentlichen Schlüssel hinzu)
- Flashe das Image auf die SD-Karte
Installation
Das Argon ONE Gehäuse hatte ein Problem, bei dem der Startknopf nicht funktionierte. Die Power-Jumper (die 1/2- vs. die 2/3-Verbindung, die das Einschaltverhalten steuert) hatten ein Problem, bei dem nur die 2/3-Verbindung funktionierte.
-
Gehäuse und SD-Karte mit dem Raspberry Pi zusammenbauen
-
Hochfahren
-
Teste mit ssh und mit einem Display
-
Update das System
sudo apt update -y
sudo apt upgrade -y
# If required, reboot
sudo reboot
Konfiguration
Für die anfängliche Konfiguration habe ich ein paar grundlegende Dinge eingerichtet: Git, Neovim, Docker und NodeJS.
sudo apt install git curl wget gcc neovim
git config --global credential.helper store
git clone https://github.com/alex289/astronvim_config.git ~/.config/nvim
# Install NodeJS
curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.7/install.sh | bash
export NVM_DIR="$HOME/.nvm"
[ -s "$NVM_DIR/nvm.sh" ] && \. "$NVM_DIR/nvm.sh"
[ -s "$NVM_DIR/bash_completion" ] && \. "$NVM_DIR/bash_completion"
nvm install node
# Add Dockers official GPG key:
sudo apt-get update
sudo apt-get install ca-certificates curl
sudo install -m 0755 -d /etc/apt/keyrings
sudo curl -fsSL https://download.docker.com/linux/debian/gpg -o /etc/apt/keyrings/docker.asc
sudo chmod a+r /etc/apt/keyrings/docker.asc
# Add the repository to Apt sources:
# VERSION_CODENAME should be sth like bookworm
echo \
"deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.asc] https://download.docker.com/linux/debian \
$(. /etc/os-release && echo "bookworm") stable" | \
sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
sudo apt-get update
sudo apt-get install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
Statische IP
Eine wichtige Sache ist es, eine statische IP für den Raspberry Pi festzulegen. Das ist wichtig, weil ich den AdGuard Home DNS-Server verwenden möchte, um meine Domains aufzulösen und Werbung zu blockieren.
Ein Problem, auf das ich gestoßen bin, war, dass mein Router keinen DHCP-Server hatte, um IPs zu vergeben. Glücklicherweise gibt es mehrere Lösungen:
- AdGuard Home als DHCP-Server verwenden
- Eine statische IP direkt auf dem Raspberry Pi selbst einstellen
Software
AdGuard Home
Eines der beliebtesten Projekte für den Einsatz auf einem Raspberry Pi ist AdGuard Home, ein DNS-Server, der zur Blockierung von Werbung und zur Auflösung von Domains verwendet werden kann. Ich habe auch überlegt, Pi-hole zu verwenden, aber die Benutzeroberfläche und die Konfiguration von AdGuard haben mich überzeugt.
Hier habe ich bewusst auf Docker verzichtet, weil ich wollte, dass AdGuard näher am Betriebssystem und der Hardware läuft, um die Leistung zu verbessern. Ich denke nicht, dass das einen großen Unterschied macht, aber da es keinen Nachteil gibt, habe ich hier die Standardinstallation verwendet.
cd
# Get the arm version of the pi
cat /proc/cpuinfo
# Replace armv6 with the ARM version that is best supported by your Pi
wget 'https://static.adguard.com/adguardhome/release/AdGuardHome_linux_armv6.tar.gz'
tar -f AdGuardHome_linux_armv6.tar.gz -x -v
cd ./AdGuardHome/
sudo ./AdGuardHome -s install
# AdGuardHome -s status
Glances
Glances ist ein Überwachungstool, das ein UI, dass einem alle Hardware- und Software-Informationen des Systems anzeigt. Ich wollte einfach etwas Leichtgewichtiges und Einfaches, das mir einfach den aktuellen Status meines Systems anzeigt. Es bietet wirklich alle Informationen, die ich brauche, und hat eine übersichtliche Benutzeroberfläche.
Home Assistant
Einer meiner Kindheitsträume war es, ein Hausautomatisierungssystem zu haben. Home Assistant ist ein großartiges Projekt, mit dem man alle möglichen Geräte steuern kann. Da ich bereits einen Smart-TV hatte, konnte ich mich schon mal daran gewöhnen, bevor ich mir alle möglichen IoT-Geräte zulege. Eine coole Sache dabei ist, dass es eine Integration für AdGuard Home gibt, mit der ich verschiedene Dinge steuern kann.
Ich weiß, dass es empfohlen wird, das Home Assistant-Betriebssystem zu verwenden, aber da ich auch andere Dinge nutzen möchte, habe ich mich für Docker entschieden. Vielleicht werde ich mir in Zukunft einen weiteren Raspberry Pi zulegen und mein Homelab auf zwei Server aufteilen.
services:
homeassistant:
container_name: homeassistant
image: 'ghcr.io/home-assistant/home-assistant:stable'
volumes:
- ./home-assistant-data:/config
- /etc/localtime:/etc/localtime:ro
- /run/dbus:/run/dbus:ro
restart: unless-stopped
privileged: true
network_mode: host
Zigbee2mqtt
Viele Smart-Home-Geräte funktionieren nur mit Zigbee, einer Spezifikation für eine Reihe von Kommunikationsprotokollen auf hoher Ebene. Um Zigbee-Geräte nutzen zu können, benötigt man einen Zigbee-Router wie den SLZB-06. In Kombination mit einem Zigbee2mqtt-Adapter kann man die Zigbee-Geräte mit Home Assistant verwenden.
services:
mqtt:
container_name: mqtt
image: eclipse-mosquitto:2.0
restart: unless-stopped
volumes:
- './mosquitto-data:/mosquitto'
ports:
- '1883:1883'
- '9001:9001'
command: 'mosquitto -c /mosquitto-no-auth.conf'
zigbee2mqtt:
container_name: zigbee2mqtt
image: koenkk/zigbee2mqtt
restart: unless-stopped
volumes:
- ./zigbee2mqtt-data:/app/data
- /run/udev:/run/udev:ro
ports:
- 8080:8080
environment:
- TZ=Europe/Berlin
permit_join: true
mqtt:
base_topic: zigbee2mqtt
server: mqtt://mqtt
serial:
# Replace the ip address with your SLZB-06 ip
port: tcp://192.168.1.12:6638
frontend:
port: 8080
advanced:
network_key: GENERATE
Tailscale
In meinem letzten Beitrag habe ich bereits darüber geschrieben, wie ich Tailscale verwende, um mich mit meinem Server zu verbinden. Der Vollständigkeit halber habe ich es auch auf meinem Raspberry Pi installiert.
curl -fsSL https://tailscale.com/install.sh | sh
sudo tailscale up
Ein Vorteil davon ist, dass mein Ubuntu-Server jetzt über Tailscale auf meinen Raspberry Pi zugreifen kann. Das bedeutet, dass ich meinen Reverse-Proxy so konfigurieren kann, dass er einen Tunnel für Home Assistant darstellt, sodass ich auch außerhalb meines lokalen Netzwerks darauf zugreifen kann.
MagicMirror
Das Coolste, was man meiner Meinung nach in seinem Zuhause haben kann, ist ein MagicMirror. Wenn Freunde dich besuchen und an einem Spiegel einen Kalender, eine Uhr und das Wetter sehen, macht das echt Eindruck. Außerdem ist es nützlich, die wichtigsten Informationen an einem Ort zu haben, an dem man sowieso vorbeikommt.
cd
git clone https://github.com/MagicMirrorOrg/MagicMirror
cd MagicMirror/
npm run install-mm
# If no existing config
cp config/config.js.sample config/config.js
# Setup ICloud calendar sync
# https://forum.magicmirror.builders/topic/5327/sync-private-icloud-calendar-with-magicmirror?page=1&lang=de
# If on the Raspberry Pi
npm start
# Via SSH
DISPLAY=:0 nohup npm start &
Module
Hier ist eine Liste aller Module, die ich benutze:
- Alert: Zeigt Warnmeldungen an, wenn etwas passiert.
- Update notification: Zeigt eine Benachrichtigung an, wenn ein neues Update verfügbar ist.
- Clock: Zeigt die aktuelle Uhrzeit an lol.
- Calendar: Zeigt meine iCloud-Kalenderereignisse an.
- Compliments: Wer mag keine Komplimente?
- Weather: Zeigt das aktuelle Wetter und die Vorhersage an.
- News: Nutzt RSS-Feeds von Nachrichtenquellen an, um die neuesten Nachrichten zu zeigen.
- DailyPokemon: Zeigt jeden Tag ein Pokémon mit seinen Werten an und wechselt täglich.
- OnSpotify: Zeigt das derzeit auf Spotify gespielte Lied mit Albumcover, Künstler und Songtitel an. (Mit einem Touchscreen kann man es sogar steuern)
Fazit
Zusammenfassend hatte ich viel Spaß dabei, meinen Raspberry Pi einzurichten, und ich bin sehr zufrieden mit dem Ergebnis. Ich bin gespannt, was ich in Zukunft damit machen werde.
Wenn du Fragen oder Vorschläge hast, kannst du mich gerne kontaktieren. Vielen Dank fürs Lesen!