Raspberry Pi 5 som hemserver – en teknisk genomgång
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 HTTPSX-Frame-Options– skyddar mot clickjackingX-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