Introduction

Where did I come from?

The asonix.dog network has gone through a lot of changes since it was first established. This post will cover a bit of history and then talk about the current setup.

Middleschool

My friend Josh got me interested in programming. He, my friend John, and I decided to try learning python. Josh was the most successful, followed by me, and then John. Somewhere in that mix, Josh mentioned this thing called "Ubuntu" to me. He said "It's better for programming" and "Look at this thing called Emacs," so I installed Ubuntu on my hand-me-down Dell Latitude D610, opened the Software Center, said "why can't I download an exe?" And promptly re-installed Windows XP.

Highschool

I had my first experience hosting a server. It was a minecraft server that I ran on my computer so my friends and I could play together. At the time, I spun up a small blog about the server on blogger and posted custom minecraft skins to deviantart. Since then, the minecraft server died, the blog was left to rot (and may be gone now, but I'm not sure), and the deviantart page was abandoned.

Sometime later, my friend Kay introduced me to this thing called elementary OS. She showed me a website with a countdown timer on it and told me I should look into it. A few days later, elementary OS 0.2 Luna released and I installed it on my Asus U56E alongside Windows 7 (or maybe 8 or 10). Six months later I installed Arch Linux.

Even later, I took a Web Technologies class (it was terrible). In this class, I tried to teach myself JavaScript, and ended up implementing an i3wm-lookalike interface in a web browser, with a terminal, text editor, photo viewer, and settings appliation. This project ended up getting hosted on the school's godaddy account for about a year. In the process, I wrote a single php file to handle media uploads.

Somewhere in that time frame, I ended up with two Raspberry Pi version 1 model Bs that I was hoping to use to host a minecraft server, but they were far too weak and I didn't do anything with them.

College

In College, I got deeper into linux, and deeper into hosting. For my classes, there were a few times I interacted with Linux. My programming courses mostly used linux servers to build our homework assignments, and the calculus labs ran OpenSUSE on the desktop machines. I also set up a DNS server on Arch Linux Arm on one of my Raspberry Pis and gave the devices on my network hostnames. I don't quite remember what else I had running. The Raspberry Pi 1s were not powerful enough to do much other than DNS. I do remember playing around a bit with OpenMPI, distcc, self-signed SSL certs, and Samba.

Not long after, I decided I needed a proper backup solution. Instead of building a file server that I would mount with NFS or Samba, I opted to put Nextcloud on a Raspberry Pi 3 I picked up at a hackathon. I learned how to set up a PHP server with Nginx in front by following the Arch Wiki and soon had a working sync solution that not only backed up my computers to a USB hard drive over any internet connection, but also synced the files between my computers on Windows and Linux.

The summer after my freshman year, I got an internship at a company in Austin called Spiceworks in their DevOps department. There, I met some really smart engineers, and learned Ruby on Rails (I was more of the DevOps' pet developer than an actual DevOps engineer). That summer, Spiceworks tried foregoing the cost of buying all the interns Macbooks by giving each intern an Ubuntu machine. Having some experience with Linux already, I promptly removed some necessary networking packages with a misplaced apt-get autoremove and had to get my laptop reflashed. This was around the time when Evolve OS was in beta, and the Budgie Desktop was looking tempting. Over the course of that summer, I hopped from Unity to MATE, and then built Budgie from source and used that as my desktop.

Detour

The next bit requires some more context. I had been an avid user of tumblr since 2011, and as the years went by, the platform kept getting worse. Some hilarious bugs were the ability to delete the disabled tag on a button to re-activate a feature that tumblr had "deactivated," but more than that, it got bogged down with Ads and Sponsored Posts, and with the Yahoo Acquisition, got worse, and then with the Verizon Acquisition, got nearly unusable. I was looking for an escape hatch, and found a project called PillowFort.io. Since I had picked up a bit of Ruby on Rails at Spiceworks, and I knew that was the technology PillowFort was using, I sent them a message asking if they needed any help. I think I got a response back, but it ended up going nowhere.

Enter Mastodon

Around this time, I discovered a project called Mastodon. It was a new micro-blogging platform that was both Open Source and Federated. This idea greatly appealed to me, since I saw the poor management of Tumblr as the reason for it's decline. I quickly found an instance that looked interesting to me called mastodon.unixcorn.xyz (no longer in service). After I joined, I realized that even though it was themed after Unix and Unicorns, it wasn't for me. Everybody on that instance spoke French.

After that, I hopped around from server to server, trying to find a community I would enjoy participating in. Finally, I settled on one, good-dragon.com (no longer in service). After a bit of time, I though to myself "I've worked on Ruby on Rails apps. I could host this myself." So I did.

Back on track

So I set up a mastodon server on my local network and made my first post on my server hosted at 192.168.6.10. This was running on a Raspberry Pi 2 b that I had been given. with a hard drive plugged in over USB. A few days after setting up mastodon, I made a post detailing my setup with a screenshot showing htop running on each of my devices.

Within two days of setting up mastodon, I learned that a single rasbperry pi is not enough to run a full mastodon instance. Specifically, mastodon is made of 3 programs, and 2 of them can take up more than 500 Megabytes each, which is an issue if you only have 1 Gigabyte of memory. Five days after I had set up mastodon I was already experimenting with running part of it on another machine. The next day, I was saved from dropping my database by btrfs snapshots after a DNS issue had me chasing my tail rebuilding my entire network. Nine days after I installed mastodon, I moved part of mastodon to another device for real this time.

Today

Since then, the network has grown and services have shifted. When I started hosting, every device I owned was running Arch Linux or Arch Linux Arm. Today, I'm running a mix of Ubuntu 18.04, Raspbian Buster, Raspbian Stretch, elementary OS (on my laptop), and Solus (on my desktop). I currently have 13 single-board computers online, and ten of them are actually doing something important.

Currently in use:

  • Two Raspberry Pi 4 model Bs (2GB SKU) running Raspbian Buster
  • Three Raspberry Pi 3 model Bs running Ubuntu 18.04
  • A Raspberry Pi 3 model A+ running Raspbian Stretch
  • Four Rock64 version 2s running Ubuntu 18.04
  • Three Raspberry Pi 2 model Bs running Ubuntu 18.04

And here's how they're being used

  • synapse on a Raspberry Pi 4
  • plume on a Raspberry Pi 4
  • postgres on a Rock64
  • mastodon on two Rock64s and a Raspberry Pi 2
  • nextcloud and a DNS over HTTPS server on a Rock64
  • A couple projects I built in Rust on a Raspberry Pi 3
  • PiHole on a Raspberry Pi 3
  • gitea on a Raspberry Pi 2

The reason I'm using low-power hardware like this is because I want to show that it is possible to run something yourself for cheap. I made a post not too long ago detailing the total cost to host a small mastodon instance, which comes out to be around a $100 one-time payment. Of all the servers I run, though, Mastodon is by far the "heaviest." Any of these other services could be run for cheaper, and a single device could possibly run more than one of these simultaneously.

I also want to be able to help others who are interested in hosting something but don't have much experience. Getting things set up properly is hard, especially if you've never done it before. If anyone has questions about how any of this works, I'd love to try to answer them. Reply to my post here, ping me on the fediverse at @asonix@asonix.dog, message me on matrix at asonix:asonix.dog send me an email at asonix@asonix.dog.