From the Cloud to My Basement: Migrating DigitalOcean Projects to a Home Server

From the Cloud to My Basement: Migrating DigitalOcean Projects to a Home Server
Mon Sep 29 2025

How I pulled my sites off DigitalOcean and built a web stack I control — hardware, software, and all the bumps in between.

Why Leave the Cloud?

For years my projects lived comfortably on a DigitalOcean droplet. It was simple, affordable, and perfect for tinkering with Node.js apps and MongoDB databases. But eventually I started feeling boxed in. I wanted more horsepower, more control, and the freedom to experiment without watching the monthly invoice creep up. That itch pushed me toward a home server I could fully own.


Building the Hardware Foundation

I began by setting up a dedicated machine and installing Proxmox, which let me carve the hardware into separate virtual machines. One VM runs Ubuntu Server for my sites, another handles databases, and there’s still headroom left over for experiments down the road. Suddenly it felt less like “hosting a site” and more like running my own miniature datacenter.


Sticking With My Stack

I didn’t need to reinvent the wheel — my stack already worked. I re-deployed the same trio I’d used in the cloud:

  • Node.js + Express for the apps

  • MongoDB for data

  • PM2 to keep everything alive

PM2 was the unsung hero. It ensured my apps restarted if they crashed, let me manage multiple processes easily, and with a bit of systemd configuration, brought them back automatically after a reboot. Nginx handled the front door, routing requests to the right app and taking care of SSL.


The Pain Points Along the Way

This wasn’t a frictionless migration. A few of the bumps along the road:

  • SSL certificates: Let’s Encrypt didn’t always play nicely with my configs, and more than once I locked myself out with a bad Nginx setup.

  • PM2 auto-start: Getting it to hook into systemd properly took trial and error.

  • Networking gymnastics: Port forwarding, firewall rules, and making sure Cloudflare pointed to the right IP all demanded careful tuning.

Each “boss fight” was frustrating in the moment, but solving them gave me a deeper understanding of the whole stack.


The Payoff

Now the system hums along smoothly. Apps load faster than they ever did on the droplet, I can monitor resource usage directly, and I’m no longer tied to a plan in someone else’s cloud. More importantly, it feels personal. These aren’t just apps floating on anonymous hardware — they’re running on a server I built, tuned, and wrestled into shape. It’s part web development, part sysadmin crash course, and part retro-computing nostalgia.


Want to Try It? Here’s the Short Version

  1. Set up hardware — a modest PC or server with Proxmox.

  2. Spin up a VM — Ubuntu Server as your host OS.

  3. Install your stack — Node.js, Express, MongoDB, PM2.

  4. Configure Nginx + SSL — reverse proxy and Let’s Encrypt.

  5. Fix networking — port forwarding, firewall, Cloudflare for DNS.

  6. Make it reliable — auto-start with PM2 + systemd, test reboots, check logs.


 

This project gave me something I couldn’t get from the cloud: ownership. It’s a reminder that even in 2025, you can still build and run your own corner of the web from your basement — bumps, LEDs, cables, and all.

Astin.