Table of Contents
Home Network
I have far too many computers on my home network, so I decided to start making some of them more useful and see which ones I can make redundant. I have 16 servers, plus a development rig, a laptop, and two Windows machines. The two Windows machines exist because there is some software I have to run on Windows (and doesn't run properly under Wine, Mono or dotnet). One machine is using W10 (and can't be upgraded), so I'm gradually migrating stuff from that to the W11 machine.
For those of you that can count (most of you, I'm sure), that's 20 computers. One of these is a conventional desktop (the W10 machine), one a laptop, five are bricks and the rest (14) are Raspberry Pi's - one of which is a PiZero2, one is Pi3 and the rest are Pi4b.
Ubuntu Server
One of the RPI4b's has 8Gb of memory and has never been fully utilised, so I decided to install Ubuntu Server on it. This was simply a matter of copying the installation ISO to an SSD and plugging it into the Pi's USB port and booting (with no SD card in the SD card port).
I had envisaged two primary uses for this machine, a GIT upstream repository host and an intranet server. I already have a machine that is hosting a wiki farm, which is an intranet host of sorts, so I decided to relocate the wiki farm at a later date. It's working, let's not break it yet!
GIT Hosting
I have a number of projects hosted on GitHub, and like the web interface it provides. It is possible to download the hosting package and have your own local repository hosting, but rather than use the GitHub software, I decided to give ForgeJo a whirl.
GitHub spawned a fork called Gitea, which in turned spawned a new fork - ForgeJo. The software was a breeze to install and was ready for use after a tiny amount of configuration. I have a number of git repositories on my development machine, and only a few of them go upstream to github. I created an empty repo on ForgeJo, and followed the instruction to upload an existing local git repo. It all feels so familiar because of the github inheritance.
Intranet Web Hosts
First off, I created a home page for the intranet, from which I can launch pages to access various services available on my network.
I have Webmin running on all my machines except the two Windows machines, the development rig and the laptop. I created a web host which provides a launch page for each instance of Webmin. Webmin is an administrative package provided via a web interface, so you can edit/create cron jobs, update software packages, reboot the machine etc.
I also made a host for my diary system. I have a filofax where I keep all my appointments, but who wants to lug one of those around everywhere they go? I can access my diary system through my phone (because I have a VPN tunnel into my home network), and I always take my phone with me. I can add new entries on the fly, and checking the diary shows a months worth of entries at a time. Much more useful. It took me just a few days to develop, and I've been tinkering with it since to make it even easier to use.
I added a link to the Snapcast host control on my whole-home music system.
Mongodb
Mongo is a NoSQL database system, specifically it is a document-based database, where each record is a document file. Records contain fields, but crucially only the _id field is required, so all other fields are optional. Further, those fields don't have a predefined type so field x could be a string in one record and a floating point value in another.
I installed the database on one of my bricks, so applications such as my diary - which is installed on the RPI4 - can fetch data from the brick. The brick has much faster access to the storage (SSD) than the RPI, and in any case is a much more powerful machine.
Summary
My music system plays throughout my home, with the speakers in each room synchronised so there is no audible delay noticeable when moving from one room to another. It's also been leveraged as an alarm clock, automatically switching off all speakers except my bedroom before playing the 'Alarm' playlist. Thanks to the VPN, I can stream music to my phone, and even control the speaker in home remotely.
My diary system builds on top of this, since it is available through the VPN.
The ForgeJo system provides an automatic backup of local repositories, and through the VPN allows access to my repos from anywhere. When a project achieves maturity, it can be upstreamed to GitHub using any of several methods, and that would provide off-site backups - nobody wants to lose everything in a fire!
I can now easily access administrative consoles for all my computers even when I'm outside the home, and all are safely protected behind hardware and software firewalls, with access only granted through the VPN.
Discussion