Raspberry Pi 5 som hemserver – en teknisk genomgång

Raspberry Pi 5 som hemserver – en teknisk genomgång
Arkitektur för serverns konfiguration

Publicerad på blogg.thomasbjork.net


Sedan ett tag tillbaka driver jag en Raspberry Pi 5 som hemserver under namnet rasp5. Det är en kompakt men kraftfull maskin som hanterar allt från smart hemautomatisering till webbapplikationer och databaser. I det här inlägget beskriver jag hur servern är konfigurerad, vilka applikationer som körs och hur jag har tänkt kring säkerheten.


Hårdvara och operativsystem

Servern är en Raspberry Pi 5 med Ubuntu 25.10 som operativsystem. Nätverksanslutningen går via Wi-Fi och servern har den lokala IP-adressen 192.168.1.10. Trots att det är en liten enhet klarar den utan problem att köra flera tjänster parallellt.


Arkitektur och extern åtkomst

All extern trafik till servern går via en Cloudflare Tunnel (cloudflared). Det betyder att rasp5 inte har några öppna portar mot internet – all inkommande trafik tunnlas säkert via Cloudflare. Det ger flera fördelar:

  • Serverns riktiga IP-adress exponeras aldrig.
  • Ingen portvidarebefordran behövs i routern.
  • DDoS-skydd och WAF ingår via Cloudflare.

Nginx fungerar som intern reverse proxy och hanterar routing till de olika applikationerna. Nginx är konfigurerad att läsa besökarens riktiga IP-adress via headern CF-Connecting-IP, så att loggarna visar faktiska klient-IP:n istället för Cloudflares tunnel-IP.

Domänen som används är thomasbjork.net.


Säkerhet

Säkerhet är en prioritet och systemet är byggt med flera lager av skydd.

SSH

Inloggning via SSH tillåter endast nyckelbaserad autentisering. Lösenordsinloggning och root-inloggning är inaktiverade.

Brandvägg (ufw)

UFW (Uncomplicated Firewall) används med deny all som standardregel. Portar öppnas enbart vid specifika behov, och oftast begränsade till de lokala utvecklingsmaskinerna (192.168.1.11 och 192.168.1.12).

Nginx – Catch-all och säkerhetshuvuden

Nginx är konfigurerad med en catch-all som returnerar statuskod 444 (ingen respons) för okända domäner. Det förhindrar att servern syns vid portscanning eller namnlösning mot fel domän.

Följande säkerhetshuvuden skickas alltid:

  • Strict-Transport-Security – tvingar HTTPS
  • X-Frame-Options – skyddar mot clickjacking
  • X-Content-Type-Options – förhindrar MIME-sniffing

Fail2Ban

Fail2Ban är aktivt med filter för SSH, Nginx och PostgreSQL. Det blockerar automatiskt IP-adresser som uppvisar misstänkt beteende som upprepade misslyckade inloggningar.

Rate Limiting

Zonen mylimit (10 req/s) appliceras på alla publika endpoints i Nginx för att skydda mot automatiserade angrepp.

Certifikathantering

Certifikathanteringen är centraliserad till Cloudflare (Origin TLS). Lokala certifikat i Nginx finns kvar som arv men fasas successivt ut.


Applikationer

ChargeMaster

Den mest avancerade applikationen på servern. ChargeMaster styr laddningen av elbilen och hanterar husets värmepump baserat på elpriser, solproduktion och andra parametrar.

  • Plattform: .NET 10, Blazor Server
  • Port: 5104
  • Databaser: PostgreSQL och InfluxDB
  • Systemd-tjänst: chargemaster-dotnet.service
  • Extern URL: https://thomasbjork.net/ChargeMaster

Applikationen kommunicerar med en separat Python-tjänst, ChargeMaster.VW, som hanterar kommunikation med bilen via biblioteket CarConnectivity. Den Python-tjänsten körs på port 5211 och är inte exponerad externt.

Ghost (blogg)

Den här bloggen du läser just nu drivs av Ghost, installerat enligt den officiella installationsguiden. Data lagras i en MySQL-databas.

  • Extern URL: https://blogg.thomasbjork.net

BlazorRasp5

En enkel demonstrationsapplikation i Blazor som visar hur .NET-applikationer installeras och körs på rasp5. Kommer att tas bort när rutinerna är etablerade.

  • Extern URL: https://thomasbjork.net/BlazorRasp5

Databaser

Servern kör två relationsdatabaser och en tidsserie-databas:

Databas Version Används av
PostgreSQL 17 Installerad via Ubuntu-pakethanterare ChargeMaster
MySQL Installerad via Ubuntu-pakethanterare Ghost
InfluxDB Installerad via InfluxData repo ChargeMaster (energidata)

Övrig infrastruktur

Mosquitto (MQTT)

En MQTT-broker som samlar in temperaturdata från nätverksanslutna Shelly-termometrar. ChargeMaster konsumerar denna data för att optimera värmepumpens styrning.

Logghantering

.NET-applikationerna loggar till stdout/stderr som fångas av systemd/journald. Loggar roteras via logrotate och lagras under /var/log/.

Backup

Backup sköts på två nivåer:

  • Fullständig systembackup körs efter större ändringar.
  • Daglig databasbackup (PostgreSQL och MySQL) via crontab. Backuperna skickas krypterat till Cloudflare R2 och raderas automatiskt efter 7 dagar.

Sammanfattning

Rasp5 är ett kompakt men välfungerande system som klarar att hantera verkliga produktionslaster. Arkitekturvalet med Cloudflare Tunnel eliminerar behovet av öppna portar och ger ett starkt säkerhetslager utan komplicerad konfiguration. Kombinationen av Nginx, Fail2Ban, UFW och nyckelbaserad SSH ger ett system med försvar på flera nivåer (defense in depth).

Framöver planerar jag att fortsätta utveckla ChargeMaster och dokumentera den resan här på bloggen.


Thomas Björk – thomasbjork.net