Going European, one provider at a time

On this page

I've spent a considerable amount of time lately moving my personal and private projects over to European infrastructure and technology. Piece by piece, whenever I had the energy.

Part of it is simply that I like a good challenge. But for me, it's mostly about doing what we all should have done from the outset, which is to support European tech first and foremost. There's a lot of good stuff being built over here, and so far every switch has been an upgrade.

The way things are heading in the US is what finally got me off my butt. I have endless love for American people, and none of this is aimed at them. I'd just rather put my time and money into the European ecosystem.

It started on the desktop

A few weeks ago I moved from Fedora Workstation to openSUSE. It feels just like Fedora, but with an even sharper KDE, a snappier boot and a lovely community.

That kept me investing myself further.

Media: Wasabi to Bunny.net

My Pleroma instance used to keep its uploads in Wasabi. The bucket sat in Amsterdam, which feels European right up until you remember the company is in Boston. Where the data sits and whose laws the company answers to are two different questions.

So the media went to Bunny.net, which is Slovenian. Storage plus their CDN, and every image now comes out of dotmedia.b-cdn.net.

The S3 part was the fun one. Bunny has an S3-compatible API, but it's still a preview, and I had to email them to get it switched on for my account. Then the quirks:

  • It only works on new storage zones. You can't turn S3 on for a zone that already exists. You make a fresh zone with S3 ticked, or you don't get S3.

  • There are no separate keys. The access key is the storage zone's name and the secret is the zone password.

  • The endpoint is per region. Frankfurt is de-s3.storage.bunnycdn.com, Stockholm is se-s3, and so on. Point it at the wrong region and you just get Access Denied, nothing more helpful.

Moving the files was the easy bit. The annoying bit was Pleroma's database, which had the old Wasabi URL baked into every post, avatar and banner. That meant a careful find-and-replace across the whole thing, with a backup first.

GERTY

GERTY is my server. The name comes from Moon (2009), Duncan Jones' film where Sam Rockwell is the only person on a lunar mining base, nearing the end of a three-year contract. His only company is GERTY, the base's robot, who keeps everything running, talks through a little screen of smiley faces and quietly looks out for him. Seemed fitting for the box that keeps all my stuff running.

One tiny box doing everything

The Matrix side goes back to May 2021, when I set up chat.dotmavriq.life. The current GERTY has lived on Vultr in Stockholm since the summer of 2023, running Debian 12. Everything on it ran in Docker behind Traefik, and over the years it picked up more and more work:

  • Matrix, my chat server, home of a room called #Lawn.

  • Pleroma at social.dotmavriq.life, my corner of the fediverse, since 2025.

  • This website, plus LagomCMS, the CMS I wrote for it.

  • SPRAK, a little bot that posts my public Pleroma posts into #Lawn, since May.

  • Teal, one of my side projects, since June.

All of that on one CPU and two gigs of RAM. GERTY spent most of its life at 100%. I tuned Synapse's caches down to fit, slowed most of the health checks to once a minute, and set up a weekly prune of old remote Pleroma posts just to keep it breathing. The box was simply too small.

Moving day

Vultr is American, so GERTY had to move anyway. Last night it went to Hetzner, in Nuremberg, Germany. Four cores, eight gigs. And it runs openSUSE Leap 16 now instead of Debian, same family as my desktop.

I had actually staged a copy on Hetzner back in early September and then left it sitting for a month. By the time I came back, the live site and Teal had moved on several versions, so before anything else I diffed every config between the two boxes and brought the new one up to date.

A few things changed on the way over:

  • Postgres 12 to 17 for all three databases. Postgres 12 was long past end of life.

  • Traefik v2 to v3, which wanted its routers written a bit differently.

  • Cron jobs became systemd timers. openSUSE doesn't ship /etc/cron.d.

  • SELinux. openSUSE has it on, so files copied over from Debian needed their labels fixed.

  • SSH had a quirk. openSUSE keeps its defaults in /usr/etc, and a single file in /etc/ssh quietly replaces all of it. Took me a minute.

I also cleaned house. Matrix had been hoarding 74 rooms that nobody on my server was even in anymore, mostly old bridged IRC channels. They held over half of all the messages in the database. I purged every one of them, and the database came out at 11 GB instead of 18.

The cutover itself was the usual mix of "how is this taking so long" and "oh, that was it?". Dumping the Matrix database on old GERTY crawled along at under a megabyte a second. Copying the raw database files instead went at five to fourteen. Then on the new box, the dump took 40 seconds and the restore about a minute. All in, everything was down for about an hour.

The old GERTY is switched off but still there for a few days, just in case. Then it's gone.

Last one: the domain

What's left is the registrar. dotmavriq.life is at Name.com, which is American. Before the 24th I need to move it to a European registrar that actually sells .life domains.

Then I'm done. For now, anyway. C'est la vie.

dotmavriq.life

Scan to open the site on another device.