Why I self host?
- Own your own data - I would rather my data (notes/photos/videos etc.) be stored on devices I own, and if not that, then use client-side encryption (e.g. for cloud backups)
- Interest - The Self Hosting community is a very vibrant and expansive area. There are constantly new approaches and apps to try out
- Education - I have learnt a huge amount about areas of technology I would otherwise not know anything about from self hosting
What I self host
All of the below is managed with docker-compose, and my files for this are all in the repo github.com/jmc265/personal-cloud.
In order of most impactful to my daily life to least impactful:
- Syncthing (compose.yml) - Keep files on 2 or more devices in sync, including Linux, Mac, Windows and Android. This app has been so stable and reliable for many years for me. It is truly a set-and-forget type deal. I use it for syncing photos on my phone to my home server, as well as syncing my notes between all my devices.
- PhotoPrism (compose.yml) - An excellent photo (and video) gallery with maps, face detection, RAW support and lots more. Constantly having features added to it. A brilliant Google Photos replacement.
- Plex (compose.yml) - For video viewing in the home and away from it
- Flame (compose.yml) - Current start page. Looks beautiful from the start and has some amount of customisation in the GUI. The most important feature for me though is the ability to add items to the start page through using Docker labels. It keeps all the configuration inside my compose.yml files.
- Samba (compose.yml) - Used for sharing files from my server over the local network. I am using docker image
dperson/samba
which I find to be generally stable, although a bit finicky with working out username/password combos. - Home Assistant (compose.yml) - A home automation hub for connecting together a disparate set of providers and devices. After a lot of time setting it all up, it silently runs, controlling my house's various "smart" devices. We only notice it when it doesn't work, which is the best review for such a setup
- Node-RED (compose.yml) - I have used Node-RED for many years as I love the low-code functionally-reactive style nature of the flows you can write. It currently only runs a couple of flows as I have migrated most of my home automation setup to Home Assistant (but I do sometimes miss the powerful things you can do in this tool).
- Motioneye (compose.yml) - Does motion detection for me on my IP camera watching the front of our house
- Healthchecks (compose.yml) - All my cron jobs are monitored with healthchecks to make sure that if they fail for whatever reason, I get a notification. As it is vital that I get a notification if anything on my server is wrong, I host this on a separate server hosted in GCP.
- Uptime Kuma (compose.yml) - Pings (via HTTP and DNS) various services and devices to make sure they are up (and alerts when they go down). I actually host this twice on 2 different servers:
- Pluto (VM server on GCP) - Keeps an eye on jeeb.uk and Jupiter 👇
- Jupiter (Home server) - Keeps an eye on Pluto ☝️
- Scrutiny (compose.yml) - For keeping an eye on my external and internal harddrives (via SMART)
- Traefik Proxy (compose.yml) - I was previously using SWAG for my reverse proxies needs, however I love the way traefik does the configuration (with labels on the docker containers). When using Docker compose, this means the config for the reverse proxies lives alongside the config for the container which I find incredibly useful
- Scanservjs (compose.yml) - The server is plugged into the USB port of the scanner/printer I have and this little tool provides a web UI for accessing the scanning functionality. It is only so far down my list of useful services because I don't actually find myself scanning things in so often!
- Watchtower (compose.yml) - Silently runs to keep the running Docker images up-to-date.
- Netdata (compose.yml) - It is described as a "high fidelity infrastructure monitoring" tool, and it certainly collects/exposes a very large amount of data about the server it is running on. It is in fact quite overwhelming, and I might look to replace it with something that is easier to read.
- Portainer (compose.yml) - I installed Portainer as a way to better visualise and manage the various docker containers and "stacks" (compose files) that I was creating. However, I have found that I never really use it, and instead just revert to the CLI.
How I self host
Hardware
- Intel NUC7JYB with additional RAM (8GB) running Ubuntu
- 1TB Western Digital and 2TB Toshiba hard drives
Cloud
- Azure
- Storage Account for backup
- DNS & CDN for jeeb.uk
- GCP
e2-micro
VM to host health-checking
- Backblaze B2 Cloud Storage for secondary backup
Future
To look into self hosting in the future:
- Apprise API to centralise notifications to my mobile (compose.yml (inprogress))
- Consider moving from Telegram to Gotify for notifications on my phone
- Adguard Home to protect privacy at home
- ThemePark usage on already existing services
- Nextcloud for docs/photos at home (compose.yml)
- Mastadon for a small, family and friends social network
- Tiny tiny RSS
- Vault warden if I trust myself enough to do that...
- Some form of document management
- n8n as an alternative to NodeRed
- Cockpit for server info and admin
- Some form of SSO for all the services
- Spacedrive - Universal File Manager. To try once it is out of beta
- TrueNAS OS for the base of the system. Looks like lots of great plugins as well as advanced options.
- humhub private social network
- Crontab-ui for management of scheduled jobs on the host
- Changedetection on websites
- unami self hosting analytics for my sites
- In the process of choosing a flat file blog
- The Ever-Expanding Home Server