- Tue 03 September 2024
- Self-Hosted
- #server, #portable, #learning, #education, #rpi, #raspberry-pi, #linux, #open-source, #gl.inet, #python, #nginx
That's right! I've been build a portable network and server system. It's all built into an ammo can. It's set up so that I can drag around all kinds of services with me, and I can easily set up my own WiFi network for 4-H users to access.
Many of the locations I visit to support 4-H's hands-on-learning don't offer great networks, and in some cases, the lesson(s) warrant use of some technology or service that requires accounts and special access. That puts all sorts of undue challenges on me and others to put things together beforehand and waste some valuable time getting things working.
A few years ago (yes, it's been that long), I had an idea to put a few Raspberry Pi's and a little network switch in an ammo can so that I could pack the whole thing around and use it for different programming/hacking exercises with 4-H youth. That quickly evolved into what I now call the Port-A-Server. My portable network and server infrastructure in a box!
This thing comes packed. Here's the BOM (discounting fasteners and cabling, of course).
Quantity | Device |
---|---|
2 | Raspberry Pi 3B+ |
2 | Raspberry Pi 4B+ |
1 | Raspberry Pi CM4 in a Dual NIC Enclosure |
1 | ZimaBoard x86 Single Board Computer |
1 | gl.iNet Travel Router |
3 | Small 1Gbps Network Switches |
The whole thing runs off a single power supply which means ONE CABLE, and it's even got a couple power ports on the side. Just a few months ago, I even ported through some ports to access the HDMI outputs from a couple of the crucial devices, and USB for a bunch of things. With that gl.iNet router, I'm able to use its USB port to connect to my cellphone to use cellular tethering. That means that in spots where WiFi isn't available, but cellular is, I'm set!
Now, this is all pretty slick, but what's a metal box full of computers without some kind of applications that they can be used for? Good question! So how about we talk about the applications that are running on this system.
For starters, I'm running the venerable PiHole for network-wide advertisement blocking, and some small allowance of security. In addition to that, I'm using NGINX alongside the gl.iNet router to provide convenient hostname access to the various applications. The CorePi device provides PiHole and NGINX services.
Beyond the networking applications, I also use a new Python-backed app that I've been building; WordWall. WordWall is a pretty simple little application which drives a collaborative word cloud application that I can use for some of the trainings I provide. As a matter of fact, I need to share more about that training in a separate post.
Someday... Someday...
Now, for a portable network, I really need some simple little file-sharing tool. So I've got that too! I'm using
miniserve a simple little CLI application that I wrapped in a small systemd
unit file. That unit file helps make sure that the file system gets cleared before the application gets started, and
afterwards too. That makes it so any shared files are temporary only.
[Unit]
Description=todo
I'm also going to be setting up a couple typing-games as little applications that some of the 4-H kids can play. I keep hearing that kids aren't building great typing skills on their own. So... I aim to do what little I can to help work that out.
Lastly, I'm also planning to set up a little self-hosted Kahoot alternative to use with quiz games for internet-deprived classrooms. That application is ClassQuiz, it's a pretty neat Python-backed application in its own right. I really can't wait to start using it for some of my activities. I haven't fully wrapped up deploying this application. It's going to require some SSL certificate management, but I need to figure some of that out. Hopefully I'll be back to write more about that... later.
But this leaves me to question how I'm going to keep track of all my configuration files. Hmm... Well, I think that
calls for git
, more specifically... Gitea That ought to make my version control for these
little applications pretty slick-n-easy.