Series: Part 1: choosing and creating the server · Part 2: hardening and configuring it · Part 3: migrating data and cutting over
I recently moved a small production API from one VPS provider to Hetzner Cloud.
The stack is ordinary: a Rust web server, PostgreSQL, Valkey (the open-source
Redis fork), and Caddy as the TLS-terminating reverse proxy, all under Docker
Compose. Encrypted blobs live in S3-compatible object storage, which doesn't
move at all.
These posts are both the record of what I did and a tutorial. Each step comes
with the command , what it does , and why it works that way , because
most migration guides give the commands and skip the reasons, and the reasons
are what you need when something goes wrong.…