Infrastructure Review

DigitalOcean hosting · BLR1 region

Staging live · smoke tests passed Updated 30 Jun 2026

Management summary · Q3 2026 KPI

Consolidating 4 App Platform apps onto one shared droplet cuts hosting spend by 58%

All four Next.js applications move from DigitalOcean App Platform to a single 8 vCPU / 16 GiB droplet in the same region (BLR1), fronted by Caddy and Docker Compose. App Platform stays live in parallel until each app is verified — cutover is a DNS change per app, with instant rollback.

Apps hosting today

$345/mo

App Platform, 4 apps + egress IP

Apps hosting after

$115/mo

Droplet $96 + weekly backups $19.20

Monthly saving

−$229.80

−58% on app compute

Annualised saving

~$2,758/yr

Before ops-time considerations

Total monthly infrastructure, by phase (includes unchanged cPanel droplet, $48/mo)

Today$393.00 / mo
Migration overlap (1–2 months, both stacks live)$508.20 / mo
Steady state (after App Platform decommission)$163.20 / mo
App Platform New shared droplet cPanel droplet (unchanged)

01 · Architecture

From four managed apps to one owned stack

Databases and storage are untouched — Supabase, Shopify, Cloudinary and R2 stay exactly where they are. Only the compute layer changes.

Today — App Platform

$345/mo
Cloudflare DNS APP PLATFORM · BLR1 · 4 SEPARATE BILLS autotraders 4 vCPU / 16 GB · $196 japanpartsbd 1 vCPU / 4 GB · $49 asianimportsltd 1 vCPU / 2 GB · $25 elf-bangladesh 2 vCPU / 4 GB · $50 + $25 IP External services (unchanged) Supabase · Shopify · Cloudinary · R2 Managed deploys · isolated per app · higher unit cost
Target

After — Shared droplet

$115.20/mo
Cloudflare DNS Reserved IP 168.144.1.40 DROPLET · BLR1 · 8 vCPU / 16 GiB · ONE BILL Caddy — HTTPS, routes by hostname autotraders :3000 japanparts :3001 asianimports :3002 elf :3003 Docker Compose · per-container memory limits Deploys: GitHub Actions → GHCR → pull & restart Same external services — no data migration Supabase · Shopify · Cloudinary · R2
What changes App Platform (today) Shared droplet (target)
Monthly app compute$345 — isolated per app$115.20 — shared
Compute26 GiB RAM summed across 4 bills; autotraders alone has 4 dedicated vCPU8 shared vCPU / 16 GiB pooled across all 4 apps
Deploys, SSL, scalingFully managed by DigitalOceanSelf-managed: Docker, Caddy, GitHub Actions
elf dedicated egress IP+$25/mo add-onDroplet reserved IP — no extra fee
RollbackDO deployment historyImage tags + DNS revert (App Platform kept live during soak)
Ops burdenLowMedium — in-house or contractor

02 · Cost analysis

Where the money goes today, and after

Current App Platform spend, per app

AppInstance$/mo
autotraders4 dedicated vCPU / 16 GiB196.00
elf-bangladesh2 shared vCPU / 4 GiB50.00
japanpartsbd1 dedicated vCPU / 4 GiB49.00
asianimportsltd1 shared vCPU / 2 GiB25.00
elf egress IPDedicated IP add-on25.00
Subtotal345.00

One app drives 57% of the bill

autotraders' dedicated 4-vCPU instance is the single biggest line item consolidation removes.

Droplet sizing options evaluated (incl. 20% weekly backups)

OptionSpec$/mo
Budget OOM risk4 vCPU / 8 GiB57.60
Recommended ✓Basic 8 vCPU / 16 GiB · 320 GiB disk · 6 TB transfer115.20
Dedicated CPUGeneral Purpose 8 vCPU / 16 GiB151.20
More RAM8 vCPU / 32 GiB230.40

The 8 GiB option saves the most but is not recommended — four Next.js apps are likely to run out of memory under load. Builds run on GitHub Actions (within the free tier), never on the droplet.

Any option beats $345/mo

Even the most generous sizing (32 GiB) is a third cheaper than today's App Platform subtotal.

Total infrastructure by phase

Overlap is temporary insurance: both stacks run in parallel for 1–2 months (≈ $173 extra for a 6-week overlap), then spend settles at $163.20/mo.

All figures USD, DigitalOcean list prices

Payback on the overlap period is under one month

A 6-week parallel run costs roughly $173 extra; steady-state savings of $229.80/mo recover that in the first month after decommission.

−58% app compute

03 · Migration status & cutover plan

Staging is already live — production cutover is a DNS change

Completed

  • ✓Droplet provisioned in BLR1 with firewall, backups, Docker
  • ✓All 4 environment configs exported and corrected (URLs, debug flags)
  • ✓All 4 apps containerised and running behind Caddy
  • ✓Internal smoke tests: all 4 backends returning HTTP 200
  • ✓8 build/runtime issues found and fixed during first deploy

Remaining

  • →Add staging DNS records in Cloudflare; verify public HTTPS
  • →3–7 day soak on subdomains, comparing against App Platform
  • →GitHub Actions CI/CD (build in cloud, droplet only pulls images)
  • →Phased production DNS cutover, one app at a time
  • →Decommission App Platform after 7–14 day production soak

Cutover order — lowest risk first

Each step is reversible by reverting a single DNS record. App Platform keeps serving each app until its cutover is verified.

STEP 1

elf

New subdomain added — no existing traffic at risk

STEP 2

asianimports

New subdomain added — no existing traffic at risk

STEP 3

japanparts.com.bd

Production domain + Shopify webhook update

STEP 4

autotraderbd.com

Highest traffic; Cloudflare cache purge + bypass rules for admin/auth paths

Key risks and how they're covered

RiskMitigation
Downtime during cutoverParallel run, low DNS TTL, one app at a time, instant DNS rollback
Out-of-memory during buildsImages built on GitHub Actions, never on the droplet
One app destabilising othersPer-container memory limits in Docker Compose
Stale/cached private pages (prior incident)Cloudflare cache purge + bypass rules on admin, auth and dashboard paths at cutover
Shopify webhooks breakingWebhook URLs updated before the japanparts cutover
Secret exposureRuntime secrets live only on the droplet (chmod 600); exposed token flagged for rotation

Out of scope in all scenarios: the existing cPanel/WHM droplet (Singapore, $48/mo) is untouched, and external services — Supabase, Cloudflare, Cloudinary, R2, Shopify — are unchanged either way.