Skip to main content

New Server Infrastructure

Β· 6 min read

We have spun up a new virtual server (VPS) dedicated for FMD project use. The publicly hosted server fmd.nulide.de has been migrated to this new VPS.

This is another step in the direction of "institutionalising" FMD as a project, providing better service, and reducing bus factor.

This post explains the new server setup that we built for FMD.

Looking back​

Nulide started FMD (originally called FindMyDevice) back in 2020. Initially, the only transport mode was SMS. In 2021, Nulide started to work on FMD Server as an additional transport mode.

Nulide hosted his personal FMD Server instance at https://fmd.nulide.de, and opened it up to the world. It became the default, public instance that people can use. In the FMD Android app, users get the choice between using this default instance or hosting their own.

However, this setup has two disadvantages:

  1. It runs on the same Virtual Private Server (VPS) as Nulide's other self-hosted services.
  2. Nulide is the only one with SSH access to this VPS.

As FMD grew and became more popular, and as I joined as a maintainer, it became clear that it would be beneficial to move the "official" public FMD Server instance to a dedicated server and a dedicated domain name.

A separate server has the advantage that:

  1. Keeps Nulide's private services separate from the public FMD Server instance. The public instance has thousands of active users.
  2. Gives other FMD maintainers SSH access (currently Nulide and me). If something breaks (a TLS certificate expires...), there is a higher chance that one of the maintainers is available and can respond.

Getting a dedicated VPS​

Therefore, we now rent a VPS. It's a VPS G1000 G11, is hosted by Netcup in NΓΌrnberg, Germany πŸ‡©πŸ‡ͺ, and costs roughly 7 € per month. It has 4 cores, 8 GB RAM, and 256 GB SSD. Right now, this is a tiny bit overpowered. But I prefer to have some room to grow, and not need to migrate everything to a new VPS in one year. Additionally, this allows us to run multiple services on it (see below).

The server is provisioned using Ansible. Of course, the deployment scripts (playbooks) are open source.

Getting a domain​

Apart from renting a VPS, we also needed a domain for the FMD project. After some brainstorming and discussion, we settled on fmd-foss.org. This was back in April 2025.

Having a domain not only allows us to have this website with a blog and documentation, it also allows us to host other services under subdomains, thus making it clear that they belong to the FMD project.

We also registered some adjacent domains, like fmdfoss.org and fmd-foss.com. We don't use these domains, but we want to prevent others from registering and abusing them. In total, we currently pay roughly 5 € per month for domains. With more budget, we may expand to register more domains that are "too similar" to our production domain.

New services​

Equipped with a domain and a server, we were ready to go and start hosting.

fmd.nulide.de ➞ server.fmd-foss.org​

First of all, we have migrated the publicly hosted server fmd.nulide.de from Nulide's private VPS to our new VPS.

This involved some downtime, as we had to shut down FMD Server on the old VPS, copy the database to the new VPS, and start FMD Server on the new VPS.

As a result, the hosted public server is now reachable under https://server.fmd-foss.org. This is the recommended domain going forward. https://fmd.nulide.de still exists continues to work for the time being. We will update all references to fmd.nulide.de and point them to server.fmd-foss.org. A future app update for FMD Android will automatically and permanently update the domain for existing users in their app settings.

At some point, Nulide may reuse the fmd.nulide.de domain for a private FMD Server that is locked down with a registration token. If and when this happens we will announce it. Our current plan is to keep https://fmd.nulide.de at least until 2026-05-01 (~6 months), maybe longer.

server-beta.fmd-foss.org​

Additionally, we deployed a second FMD Server instance to https://server-beta.fmd-foss.org. As the subdomain suggests, this instance is dedicated to testing upcoming versions of FMD Server.

The beta instance is public and you are welcome to help us test new versions! To register an account, you need to enter the registration token "unstable". This is to prevent accidental sign-ups, and to have a "confirmation" that users understand that this is not a production instance.

In the future, we would like to release an "FMD Android Beta" app that you can install in parallel with the normal FMD Android app. Then you can have two fully separate environments on your phone (separate apps connected to separate servers). Hopefully, this will make it easier for normal-but-enthusiastic users to test upcoming FMD releases.

warning

We will treat the beta instance with less caution than the production instance. Beta updates may break things. We may need to roll back or wipe the database. Do not use the beta instance for anything important. Be prepared to loose and re-register your beta account.

packages.fmd-foss.org​

The last important service that we deployed on the new VPS is https://packages.fmd-foss.org. Eventually, this site will host all release artifacts for FMD.

Currently, it only hosts the compiled FMD Server binaries. In the future, we plan to sign and publish APKs for FMD Android. The ultimate goal is to host an F-Droid repo at https://packages.fmd-foss.org/fdroid. This will make it faster to distribute app updates, which is especially relevant for an "FMD Android Beta" app.