My home server and self hosting applications

DALL-E: 15th century drawing of a server rack in living room

Hardware

  • Raspberry Pi 3 Model B

  • Asus RT-AX58U

  • Huawei HG8145V5 (provided by my ISP)

  • Personal desktop PC

I'm using a Raspberry Pi for my main server. This thing is small but powerful. Also I have my desktop PC with a few services running on it which are more resource intensive.

My main access to the internet is through my ISP provided ONT device using fiber connection. I'm currently using it only as a modem and I have my own router connected to it.

Neatly tucked server stack

Software

I'm running everything in docker containers. This whole thing started as a practical tutorial for me to learn Docker and networking. I have a single docker compose stack on raspberry pi, and another stack on my PC.

Here's a list of software I have running on my Raspberry PI:

I chose AdGuard for my network wide ad blocking over PiHole because I had all kind of issues trying to run PiHole from a container. AdGuard worked on a first try. I think whatever you choose it's going to work fine. I still need to setup forcing all DNS requests through Raspberry to get rid of YouTube ads on my TV.

I have a growing collection of smart devices and I'm using HASS as my hub for all of them.

These 2 services are running in host network mode. For rest of the services I have created internal docker network.

I'm using Traefik as my reverse proxy. There are a lot of options in this space including Nginx and Caddy, which are all valid, but this was my choice since I wanted to try something new. I really like the web GUI that it provides and also you can configure pretty much everything you need via docker labels.

Portainer is excellent choice for a quick overview of all your containers. It's simple to setup and easy to use. I have 2 environments configured, one for my Raspberry and one for my desktop PC.

Portainer environments

I'm using Wireguard as my VPN. WG Easy makes managing VPN clients easy with a simple web GUI. It really lives up to it's name.

This is really cool small application. It's using web sockets to communicate and send files to everyone on the network that has the app opened. It's similar to Apple Airdrop.

This is my media center of choice. It's running on my desktop PC since it's the place where I usually have all my media. Also on desktop PC I can enable GPU access for docker containers which allows me to enable hardware acceleration for transcoding in Jellyfin. With that setup I can easily stream 4K/HEVC videos without any stutters.

I'm using this to notify me when any of the services go down. This includes my personal webpage and analytics. I have it setup to send notifications via email using SMTP2GO as my SMTP provider.

I'm using cockpit project for managing and status checking of my Raspberry server.

Network

First step in network configuration is to setup static IP for server on your local network. Every router software is different but that option should be somewhere in DHCP/LAN settings. In my case I have ASUS router with a custom firmware called Asuswrt-Merlin.

Next I used port forwarding to open a port for my VPN access.

I want to access my services with nice looking URLs instead of using IP:Port, and for that you need a domain name. I have already got one as you can probably tell. I switched from Namecheap advanced DNS setup to Cloudflare DNS. In there I have a setup for wildcard A record which points to my LAN server IP.

A record example setupSo now, with properly configured reverse proxy, I can access my service by visiting myservice.lan.karlomikus.com.

Also while I'm in DNS configuration I have added additional A record for my VPN access that points to my public IP. Since I don't want to pay for static public IP, I have made a PHP script that checks if my current public IP is the same as the one configured in DNS. Another option is to use a free DDNS service like DuckDNS.

Stuff I'm not sold on yet

These are services which I'm not sure I will continue to use after initial testing.

I think this is excellent application, but I don't have a lot of documents. The ones I frequently need I have in my OneDrive, and for the rest I don't really care. I think this is great application to install if you plan to digitize all of your paper trail, but for mine needs it's overkill.

This is inventory management software for your house. I think it takes a lot of time and self discipline to use this to full potential. I got far with documenting everything I had in my fridge/bathroom/pantry but it's a lot of mental overhead, and I don't see myself using it consistently in future.

Stuff I want to try

These are services that I still didn't setup properly, but in future I would want to try them out.

Nextcloud - Personal cloud service. I'm currently using OneDrive for my cloud storage, but in future I would like to setup Nextcloud instance. The issue is that I first need to setup server backups and I'm worried about availability. Most of the service currently running are not critical, and I can live without them, this one needs to be more stable and always available.

Vaultwarden - I'm currently using 1Password, for personal and work needs. But I would like to switch to BitWarden to save money by paying one service fewer.

Torrent management - I'm currently manually handle all my torrent "stuff". I would like to setup Sonarr/Radarr/Bazarr/QBittorrent stack to handle all that automatically.

Backup solution - I still need to setup backups for all my server side data. The idea is to take snapshots and upload them to some cloud storage.

Monitoring setup - I also want to setup some monitoring dashboard using Grafana/Prometheus.

Dashboard - This is low priority, but a homepage with a list of all my services would be nice. For now, bookmark folder named "Local" works fine.

Authentik - SSO Solution for all my services.

Summary

I learned a lot of stuff trying to setup all this. I have a better understanding in managing docker containers, configuring a reverse proxy and a lot of networking stuff and how it's all connected.

I think, the most used features from all of this are: using HASS to warmup/cooldown my home before I get to it, and using Jellyfin to stream media on my TV.

You can check my docker compose setup in my github repo.

Find me on