$6.
One droplet, running a whole AI stack.
THE PROJECT
EnggFeed
Two flows: what happens on a page view, and what happens every night.
User
browser / API call
FastAPI app
handler + service
Cache lookup
Redis → Postgres on miss
Claude + OpenAI
only if summary is stale
Postgres
write result, respond
1
2
3
4
GitHub Actions
daily cron trigger
FastAPI app
/ingest endpoint
Claude + OpenAI
tags, prerequisites, embeddings
Postgres
insert blog + tags + prereqs
1
2
3
Phoenix
traces every LLM call, automatically
Request flow: per page view
Ingest flow: daily cron
SIGNED IN
What it looks like, logged in
Local environment, real ingested data. Auth isn't set up on the demo server.
ELI5
CPU, RAM, storage, in one breath
The three numbers everything else on this deck comes back to.
CPU
How fast it can think
RAM
How much it can hold in its head, right now
Storage
How much it remembers after it sleeps
docker stats
on the actual EnggFeed containers, live.
WHAT'S ACTUALLY RUNNING
Core vs. supporting components
CONTAINER
PURPOSE
ROLE
LOCAL IDLE, OF 7.4GB
app
FastAPI backend
Core
206.8 MiB
postgresql
Blog + embeddings store
Core
34.17 MiB
redis
cache
Core
5.945 MiB
phoenix
LLM tracing
Support
245.9 MiB
pgadmin
Postgres admin GUI
Support
72.91 MiB
redisinsight
Redis admin GUI
Support
177.4 MiB
Local = this laptop. Server = the redeployed droplet, idle. Server figures = RAM + swap, because docker stats alone only shows RAM-resident memory, understating phoenix (23 MiB resident, 345 MiB actually swapped) and pgadmin. DB issue blocked the loaded capture there.
LOCAL LOADED, OF 7.4GB
SERVER MEM (RAM+SWAP)
161.4 MiB
86.8 MiB
30.28 MiB
49.1 MiB
4.391 MiB
3.20 MiB
245.9 MiB
367.7 MiB
239.8 MiB
391.2 MiB
123.3 MiB
27.6 MiB
Core total
246.9 MiB
196.1 MiB
139.1 MiB
Support total
496.2 MiB
609.0 MiB
786.5 MiB
BACKUP (IF ASKED)
Where the swap numbers came from
1. docker stats (server, idle)
Shows RAM used by each running container.
2. free -h (current)
Shows total RAM and swap used on the whole server, right now.
3. Scan every process for VmSwap
This returns list of PIDs, with how much swap memory each one is using.
for pid in $(ps -eo pid=); do swap=$(awk '/VmSwap/{print $2}' /proc/$pid/status); [ "$swap" ] && echo "$swap $(ps -p $pid -o comm=)"; done | sort -rn
4. docker top, per container
Docker command lists container name corresponding to the PIDs.
for id in $(docker ps -q); do echo $(docker inspect --format '{{.Name}}' $id); docker top "$id" -o pid,comm; done
5. Cross-referenced both lists
As a final step, mapped docker container name to SWAP used, instead of PID.
6. docker stats (RAM) + VmSwap (swap)
Added RAM (docker stats) + swap (VmSwap) = memory used per container, a slight underestimate, see note below.
Note: VmSwap only counts memory a process keeps to itself. It misses shared memory (like Postgres's internal cache), so the real swap usage could be a bit higher than shown here.
WHAT IT COST
The DigitalOcean bill
$6 / month
1 vCPU · 1GB RAM · 25GB SSD · 1TB transfer
$3.28 (June)
EnggFeed's own droplet, prorated partial month, pre-GST
1GB RAM wasn't quite enough for 6 services running together, so added swap to keep it from hanging.
Before swap: 934Mi/961Mi used, 26Mi available → After swap: 812Mi/961Mi used, 149Mi available (163Mi in swap).
EnggFeed's droplet ran alone: no managed DB, no managed cache, everything self-hosted in Docker.
(June account total was $7.74: that's this droplet + a second, unrelated project's droplet + $1.18 GST.)
DO VS AWS
Same box, AWS-shaped
DigitalOcean
Basic droplet�1 vCPU · 1GB RAM�25GB SSD + 1TB transfer bundled��$6.00 / month flat
AWS: MINIMAL (same specs as DO)
t2.micro · 1 vCPU · 1GB RAM · 25GB gp3 SSD + 100GB transfer free�$9.05 + $2.28 = $11.33 / month
AWS: RIGHT-SIZED (no swap needed)
t3.small · 2 vCPU · 2GB RAM · 25GB gp3 SSD + 100GB transfer free�$16.35 + $2.28 = $18.63 / month
gp3 = AWS's general-purpose SSD, EBS's default volume type. Transfer isn't apples-to-apples either: DO bundles 1,000GB free per droplet; AWS gives only 100GB free per whole account, then $0.09/GB beyond that. "Right-sized" avoids the swap issue at ~1.6× the minimal cost.
EnggFeed
DO vs AWS: an AI side project's cost story
Thank you.
REFERENCES
Where the numbers came from
DigitalOcean droplet pricing ($6/mo, 1 vCPU, 1GB RAM, 25GB SSD)
AWS EC2 + EBS pricing (t2.micro, t3.micro, t3.small, gp3 storage, data transfer)
calculator.aws (official) · cross-checked against aws-pricing.com
EC2 root volume requirement (Nitro instances need EBS, no instance store)
AWS Free Tier structure ($200 credit / 6 months, not the old per-service model)
Linux VmSwap accounting limitations (misses shared memory)