Case study 03 ยท Projects + managed MySQL
Thirteen droplets, thirteen meters.
Now two servers, 78% less.An 11-person digital studio in Germany hosted 12 client workloads the way most agencies do: one DigitalOcean droplet per client, weekly backups on each, plus two managed databases. Safe, tidy and about $390 a month. Two Selfhost.dev project servers and one managed MySQL now run the same portfolio for about $83, with per-client isolation kept at the container level.
- Team
- 11-person digital studio, 4 developers
- Portfolio
- 12 production workloads: WordPress, Next.js, Laravel
- Databases
- MySQL, Redis and one MongoDB, per site
- Region
- Germany; clients across the EU
- Trigger
- Margin review: hosting resale barely broke even
Client details are anonymized and normalized. Every price below is recomputed at public list rates and our own billed rates for August 2026, in the region named on each table, so you can check the math yourself.
Why they moved
A droplet per client is tidy.
It is also thirteen idle meters.
The one-droplet-per-client pattern exists for a good reason: isolation. One client's plugin meltdown cannot touch another client's store. But the price of VM-level isolation is that every client carries a whole box and the studio's monitoring told the real story: most droplets idled under 10 percent CPU almost all month.
The bill had a second layer nobody questioned for years: weekly backups at 20 percent of every droplet's price and two managed databases at $15 each holding a few hundred megabytes between them. When the studio re-priced hosting for its retainer clients, the resale margin had quietly gone to almost nothing.
The before table
What DigitalOcean was charging,
line by line.
DigitalOcean ยท monthly list prices
| Item | Detail | $ / mo |
|---|---|---|
| 5 small droplets | Basic, 1 vCPU / 2 GB each, brochure sites | $60.00 |
| 6 mid droplets | Basic, 2 vCPU / 4 GB each, WordPress and Node apps | $144.00 |
| 2 large droplets | Basic, 4 vCPU / 8 GB each, the Laravel app and busiest store | $96.00 |
| Weekly backups | 20 percent of droplet spend, all 13 | $60.00 |
| Managed MySQL | Basic, 1 GB RAM | $15.00 |
| Managed caching | Basic, 1 GB RAM (Redis-compatible) | $15.00 |
| Total | about $390 every month | $390.00 |
DigitalOcean public list prices, checked August 2026: Basic droplets at $12 (1 vCPU / 2 GB), $24 (2 vCPU / 4 GB) and $48 (4 vCPU / 8 GB) per month, weekly droplet backups at 20 percent of droplet cost, managed MySQL and managed caching from $15/mo each. Figures in USD.
The diagnosis
What was actually
driving the bill.
VM-per-client buys isolation with 13 sets of idle headroom. Containers buy the same day-to-day isolation with one set. The studio's workloads averaged single-digit CPU; consolidation was not a squeeze, it was deleting duplicate slack.
Backups priced as a percentage tax every idle box a second time: $60 a month to snapshot mostly-empty droplets. On a project server, each service and database is one item in one place to back up, not thirteen.
Two $15 managed stores held a few hundred MB. Inside a project, MySQL, Redis and MongoDB run as one-click databases on the server you already pay for, which prices small datasets at zero marginal cost. The one store that deserved real database ops got a proper managed instance.
The migration
The move,
as it actually went.
Projects deploy from GitHub with auto-detected build packs (Dockerfile and docker-compose included), so the move was mostly inventory and DNS. An engineer ran it with the studio, free.
Inventory, then group by weight
Ten light and mid workloads went to one Large server (8 vCPU / 16 GB / 160 GB). The Laravel app and the busiest store, the two workloads that actually use CPU, went to a Medium server (4 vCPU / 8 GB / 80 GB) so a spike there cannot brown out the brochure sites.
Repos in, databases one click, domains verified
Each site deploys from its GitHub repository with auto-deploy on push and PR preview environments for client review. Per-site MySQL and Redis and the one MongoDB, were added as one-click project databases. Custom domains verified with automatic HTTPS.
Drain droplet by droplet, then delete the meters
DNS moved site by site with the old droplets still running, metrics watched for a week, then 13 droplets and their 20 percent backup line were deleted. The flagship store's data moved to a managed MySQL in eu-central-1 (Frankfurt) with PITR and nightly backups.
The after table
The same portfolio on Selfhost.dev,
line by line.
Selfhost.dev ยท project servers (EU) + managed MySQL (eu-central-1) ยท billed rates
| Item | Detail | $ / mo |
|---|---|---|
| Project server, Large | 8 vCPU / 16 GB / 160 GB, ~10 sites and apps as services, $0.06/hr | $43.80 |
| Project server, Medium | 4 vCPU / 8 GB / 80 GB, the two heavy workloads + staging, $0.03/hr | $21.90 |
| Project databases | Per-site MySQL, Redis, MongoDB on those servers, one click | $0.00 |
| Managed MySQL | t4g.micro + 20 GB gp3, eu-central-1, PITR + nightly backups | $12.03 |
| Public IPv4 | Added at deploy, managed instance only | $4.93 |
| Total | about $83 every month | $82.66 |
Project servers are flat hourly rates run 24/7 here: $0.06/hr and $0.03/hr, dedicated single-tenant servers, these in Germany and Finland, location auto-assigned from the six we run. Databases inside a project run on the server you already pay for.
The managed MySQL is priced at our billed eu-central-1 rate, plus its public IPv4 at deploy, about $5/mo.
Outbound transfer excluded on both sides: DigitalOcean bundles a per-droplet allowance, Selfhost.dev meters egress pay-as-you-go; at this portfolio's tens of GB a month it adds single-digit dollars.
That is about $3,700 a year back across the portfolio.
Hosting went from a break-even pass-through back to a real line of margin on every retainer and from 13 boxes to patch down to 2.
Read before you copy this
Where this math
bends the other way.
Container isolation handles the daily failure modes and the verbatim promise holds: zero-trust architecture baked into every container. But a kernel-level incident or a full-server outage touches every site on that box. That is why the heavy pair got its own server and why a client who needs guaranteed dedicated capacity should simply get their own project server, from about $15 a month.
A project is a single dedicated server: you pick a size and there is no autoscaling and no location picker yet. Placement is auto-assigned across our six locations in Germany, Finland, the United States and Singapore and this studio's servers landed in the EU, next to its clients. A US-heavy portfolio is no longer stuck with that, though you still cannot pin a location on purpose today.
The flagship store kept a real managed MySQL, with PITR, nightly backups and failover, because losing an hour of orders costs more than $12 a month. Project databases are for the sites where a nightly snapshot is genuinely enough.
Want this table for your own bill?
Two clicks get you our verified numbers for your shape. Add your setup and a founder replies personally, usually within about two working days, with the same line-by-line format you just read.
Based on this page: ยท
On now or still deciding?
What's the bill you're looking at?
Roughly how much a month, all in?
Matched to RDS, we bill 3.0x less in ap-south-1 (Mumbai) and 2.1x less in us-east-1.
2 vCPU / 4 GB with 20 GB: $24.54/mo in Mumbai, $35.27/mo in us-east-1, against an estimated $73.75/mo on RDS.
See a real RDS bill, before and after →Neon meters compute hours and sleeps. We bill one fixed hourly rate and never sleep.
{price} Same number in a quiet month and a launch month.
Price your size →Two ways off the Supabase bill and you can keep the Supabase stack.
Self-host Supabase on a project server from about $0.02/hr or move just the database to a dedicated Postgres. {price}
How self-hosted Supabase works here →An enterprise client is moving production ClickHouse to us at up to 60% less.
Worked example: off ClickHouse Cloud Scale to always-on managed ClickHouse, $891.86 to $364.03 a month, 59%.
See the ClickHouse bill, before and after →A PaaS bills per service. A project server is one bill for everything on it.
Worked example: a studio consolidated client hosting onto project servers, $390.00 to $82.66 a month, 78%.
See that bill, before and after →A managed database for as low as $5 a month. Dedicated Postgres or MySQL on AWS, with restore, pooling and Multi-AZ failover when you want it.
{price} Postgres and MySQL price the same.
Price your size →A managed database for as low as $5 a month. Dedicated Postgres or MySQL on AWS, with restore, pooling and Multi-AZ failover when you want it.
{price}
Price your size →A managed database for as low as $5 a month. Dedicated Postgres or MySQL on AWS, with restore, pooling and Multi-AZ failover when you want it.
{price} Pay-as-you-go credits, top up from $5, no plan tiers.
Price your size →Most setups map onto two shapes: dedicated databases on AWS and a project server for everything else.
{price} Project servers from about $0.02/hr.
Price your size →Under $200 a month, the calculator beats a human reply. Price it there first.
What's it for?
Where do your users mostly sit?
Dedicated managed Postgres or MySQL, with point-in-time restore, pooling and Multi-AZ failover when you want it.
{region} If you need scale-to-zero or instant branching, Neon fits better than we do.
What managed Postgres includes →Managed ClickHouse for events at volume or TimescaleDB on managed Postgres for time-series next to your app data.
Worked example: off ClickHouse Cloud Scale, $891.86 to $364.03 a month, 59%. {region}
See the ClickHouse bill, before and after →pgvector on managed Postgres: one database instead of a second vendor.
{region} TimescaleDB is one click away on the same instance if you also have time-series.
When a dedicated vector DB is worth it →A project server from about $0.02/hr: push to GitHub and it deploys, several apps and their databases on one box.
Auto-deploy on push, PR previews, custom domains. The $5 welcome credit covers the start of it, no card and you can pause it to $0.
How Projects work →Project servers: many sites per server, one bill.
Worked example: a studio consolidated client hosting, $390.00 to $82.66 a month, 78%.
See that bill, before and after →Most things fit dedicated databases on AWS plus a project server for the apps.
{region}
See it in the live demo →What are you trying to do?
Which editor?
We migrate you, free, on every plan size.
An engineer runs it with you: match the instance, replicate or dump and restore, test the restore, cut over.
See one migration, step by step →The Supabase stack, one click, on a server of your own.
One click from the template, on a project server from about $0.02/hr. Nothing to build or wire up.
The Supabase deploy guide →Paste one config and your editor can run the whole backend.
Run it once, sign in when the browser opens and all 189 tools register.
An hourly instance you pause when done.
Restore a snapshot into a second instance, point staging at it, pause it when idle.
Price a small instance →Push to GitHub and it's live: auto-deploy, PR previews, custom domains.
A project server from about $0.02/hr runs several apps and their databases.
Deploy guides by framework →The one that matters most:
A managed database for as low as $5 a month. Project servers from about $0.02 an hour.
The smallest dedicated Postgres, a t4g.nano with 1 GB, is about $5.34 a month in ap-south-1 (Mumbai) and about $6.41 in us-east-1 and the $5 welcome credit covers its first days. Pay-as-you-go credits, top up from $5, no tiers.
Price your size →When production needs help, you talk to the engineers who run it and a founder reads every request.
Outages, restores, performance issues and migrations reach the people operating the platform. No response-time promise or uptime percentage we cannot prove.
How support and recovery work →Failover, point-in-time restore and backups cover the common ways a database fails.
Multi-AZ failover is a toggle on every engine, Postgres and MySQL add point-in-time restore and all engines get automated backups, live metrics and alerts.
The reliability and recovery details →We migrate you, free. An engineer plans and runs the move with you.
Match the instance, replicate or dump and restore, test the restore, cut over. Any plan size, no extra cost.
See one migration, step by step →Run it in your own AWS account with BYOC, in the region you need.
Encryption in transit and at rest on every managed instance. We do not hold SOC 2 or HIPAA today and we will say so before you spend an hour.
What we can and cannot certify →Fair enough. The live demo is the fastest way to see it.
Or claim $5 to start, no card needed.
Watch the live demo →Our founder
You've already sent us your setup from this browser. A founder will reply to it; no need to send it twice.
Got it. I'll reply to within two working days, from my own inbox.
Noted. One note when it changes, nothing else.
Methodology
-
DigitalOcean prices are their public monthly list prices, checked August 2026 and quoted per line above.
-
Selfhost.dev project servers are flat hourly SKUs (19 sizes from $0.02 to about $3.23/hr; this studio is on two of the cheapest); the managed MySQL is our billed eu-central-1 rate, reproducible in the pricing calculator. Figures in USD.
-
Sizing follows the industry rule of thumb that a well-run 8 vCPU / 16 GB box carries 20 to 40 low-traffic sites; this portfolio placed about 10 on it, deliberately conservative. See the DigitalOcean comparison for the managed-database side.
Frequently asked questions
How many client sites fit on one project server?
What keeps client sites isolated from each other?
Can WordPress, Laravel and Next.js really run side by side?
Where do the servers run and what about the managed database?
In short: an 11-person German web studio consolidated 13 DigitalOcean droplets (about $390 a month with the 20 percent backup charge and two managed databases) onto two Selfhost.dev project servers in our EU locations plus one managed MySQL in eu-central-1, totaling about $83 a month at August 2026 list rates, a 78 percent reduction. Per-client isolation moved from VM boundaries to containers, the two heavy workloads kept a separate server and the flagship store kept a managed MySQL with PITR. Project servers run in one of six locations, these in Germany and Finland and bill hourly against prepaid credits.