Moving a one-person SaaS from a home server to a real VPS

A running a paid AI/tech newsletter SaaS off a home server finished migrating it to an actual VPS this week, eliminating the where any home internet hiccup took the whole service down. The coding itself was straightforward; the real obstacles were mundane issues.

The target MySQL version wasn't available in the vendor's official apt repository for the Ubuntu release in use, so a different version had to be substituted and manually verified for . A newly built also had a wrong field name in its response-parsing logic — a bug that mocked tests never caught, and only surfaced once tested against a real API token.

The migration itself was staged: the new server was built and tested in isolation while the old server kept handling live traffic, and cutover only happened after the full pipeline was verified end-to-end. The timing was also coordinated around subscribers' scheduled newsletter sends, so no one got a duplicate or missed digest.

Key points

  • Migrated off a home server to a VPS because home internet outages created a for the whole service
  • Target MySQL version wasn't in the Ubuntu vendor's apt repo, requiring a substitute version and manual checks
  • A wrong field name in parsing was missed by mocked tests and only found when tested with a real API token
  • Used a : built and tested the new server in isolation while the old one kept serving live traffic
  • Timed the cutover around subscribers' scheduled sends to avoid duplicate or missed newsletters
Read original