Don't do it yourself
It seems impossible to avoid huge tech companies. They’ve become central parts of our lives. Google will help you find whatever you’re looking for. Amazon will ship it to your house right away. Meta will let you tell your friends all about it. It’s all very convenient, but it means we’re dependent on an increasingly small number of corporations for most things.
I’m not particularly worried about any of these companies shutting me out with no warning, but it’s possible. People get banned from social media platforms all the time. People lose their Gmail accounts, which have become keys to people’s online identities. And none of this addresses the idea that we’re supporting these companies financially, either directly or by putting all of our information on their platforms to feed to advertisers.
It makes sense to want to own some little corner of the internet for yourself. To put your own little web site up somewhere and say what you want, how you want, to whomever you want. That feels like what the internet used to be like back in the 90s. I regularly see people on Bluesky or some other platform talking about how we can reclaim some of the internet for ourselves, without being reliant on one of the few mega-corps.
But is that realistic?
I spent some time over the past few weeks giving it a whirl. Here’s what I did and what I learned.
Claiming some space
Let’s say you want to set up a website for yourself. Just a little blog that you can share with friends. There are a couple of ways to do that. A non-exhaustive list:
- Set up a blog on WordPress.com or some other similar platform. You’re not reliant on one of the big social media platforms, but Automattic has your data and could shut you down at any time. So it’s not a huge improvement over not having that space at all, if we’re specifically looking to divest ourselves from tech companies.
- Set up a newsletter-style blog on Substack, Medium, Ghost, or something like that. Again, you’re reliant on some other company for maintaining the site. You just supply content. So it’s easy, but it’s not exactly your own space.
- Set up a site on a platform like Kinsta, Netlify, or Vercel. You can use open source software for managing the site, like WordPress or Jekyll or something. You’re still paying for server space from someone, though. And a lot of these platforms don’t run their own servers, they act as interfaces to Amazon or Google servers. Not all of them, but a bunch. So you’d have to dig a bit to see who really hosts your data. It’s still not entirely yours.
- Rent server space directly from cloud provider. There are still lots of smaller local-ish hosting providers competing with Amazon and Google and Microsoft. They may not be as cost effective, and they rarely offer a free plan for your personal site.
- Do it all yourself. Run a small server out of your house and host your site there. Your ISP might not want you to do this, but if you assume the traffic to your site will be small, then you’re probably fine.
I wanted to own as much of my site as possible, so I went with the do-it-yourself option. There was a Raspberry Pi sitting in a drawer in my office, which seemed like the perfect candidate for a personal server.
The Raspberry Pi got reformatted and hooked up to my home network. I had migrated balevine.com
from WordPress to Jekyll a few months ago, so I only had to move the files to the Raspberry Pi and tell my domain registrar what my new IP address would be.
That’s where things got a little tricky. I use a small mesh network to get stable wifi throughout our apartment, which is connected to a router supplied by our ISP. To set my site up, I needed to set up port forwarding for the router to the mesh network, and then from the network to the Raspberry Pi. None of that was particularly difficult, but it was a bit of a pain to find all the settings on all of the devices and get it all working together. I also had to configure the Raspberry Pi to serve the static Jekyll site at the external address. Then I had to get the external IP address of the network to direct traffic to the Raspberry Pi. All told, the whole setup process took a couple of hours to go through. Now that I’ve done it, I could probably set the whole thing up in about 10 minutes. But reading through docs and switching between networks to get to the right configuration panels took some time.
However, my network has a dynamically set IP address (as I think most home networks do by default). Which means the IP address could change without warning or notice of any kind. Restarting the router will reset the address. Sometimes the ISP will just change it on me for what seems like no reason. If you’re using the internet like a normal person, you’d never notice and wouldn’t care. But if you want people outside your network to be able to access your address - for example, if you’re hosting a web site from your home network - you ideally want a static IP address. Failing that, you want to know when the address changes and to update your domain records with your domain registrar as soon as possible.
Over the holiday break I hacked on a little Bash script that solves this problem for me. I moved my domain record management to Cloudflare, which offers a nice API for this sort of thing. Then I wrote a script that periodically checks the external IP address of the network. If the IP has changed, the script updates the settings in Cloudflare and stores the new IP address for future reference. It’s not perfect, but it works for what I’m doing. This was then set up as a cron job that runs every 15 minutes, which means I’ll typically have no more than 15 minutes of downtime if and when the IP changes. It’s a little hobby site, so that seemed acceptable.
To finish it all up, I wrote some scripts to let me write new blog posts on my laptop and upload them to the site. They run a Jekyll build process and then use rsync
to copy the built site files to the Raspberry Pi. It has to work from within the network (if I’m at home) or from an external network (in case I’m at a coffee shop or something). That was another half hour of Bash scripting, which was a great way to avoid watching National Lampoon’s Christmas Vacation for a little while.
There we have it. A live web site, hosted on my own hardware and running through my home network. I could have used a third-party service to handle the dynamic IP changes, but I wanted to rely on as few external services as possible. The registrar is unavoidable, since you have to get the domain name somewhere, but otherwise I don’t want anyone to be able to shut me down. Except my ISP, I suppose.
What I learned
This shit sucks.
It’s absolutely possible to set up a server yourself and claim some of the vast internet space as your own. Divesting yourself from most of the big tech companies requires some technical know-how, but not a ton. Most of this stuff can be found online and nothing I did was new or innovative in any way. But I’ve been futzing with computers for decades, so my comfort and familiarity with this stuff is beyond that of the average person.
Should we expect people to learn about port forwarding and domain records and Bash scripting and all this other shit just to have a silly little website on the internet? And even after doing all that, I still have to pay someone a few bucks a month to keep my domain up. It’s unreasonable.
Of course people stick to Instagram and Facebook and Bluesky and Medium and Substack. Post all you want for free. Don’t worry about how the internet is held together. Most people won’t get shut down out of nowhere, and most people probably don’t know or care what the tech companies are doing with their money. There’s no ethical consumption under capitalism, after all.
Setting up your own local server is a pain in the ass that you should only do if you’re looking for another hobby. I’m glad I set up my server and that I have my site here instead of on WordPress or AWS or wherever. But ultimately I don’t think it matters. Most people can’t and won’t do that and will have to rely on some big tech company. We still rely on those companies for a bajillion other things, anyway.
That might sound defeatist. And maybe it is a little bit. I prefer to think of it as pragmatic.
Have a comment or a response to this post? Take it to Bluesky or LinkedIn.