Open playbook
How to build your own private mini AI data center
The real plan, with the real bill of materials and real planning prices. Nothing here is gated, because the hard part was never which disks to buy.
How do you build a private AI data center?
Start with storage, not compute. Buy enterprise SATA disks in an external enclosure, because those specific disks migrate into a rack-mounted storage server later and nothing is stranded. Then build one GPU compute node and one 24-bay storage node, put an S3-compatible object service on top of ZFS, and connect them with a fabric fast enough that storage never starves the GPU. Everything after that is addition rather than replacement.
Four principles hold it together: own your storage behind an S3-compatible API rather than just owning disks, future-proof that storage because the namespace outlives every machine, extend the rack so NVMe and inference end up co-located with the object store and search runs end to end locally, and start small so every phase reuses the last instead of replacing it.
Four principles, and everything else follows
These are the reason the build order looks the way it does. Each one explains why the next purchase is the right one, and together they are the argument for starting with disks rather than with a GPU.
- 01
Own your storage, and own it as S3
Owning the bytes is only half of it. Owning them behind a standard object API is what makes them useful.
Disks you control with no standard interface in front of them is a NAS: your data, reachable only by whatever happens to mount it. An S3-compatible API in front of the same disks makes the corpus addressable by every tool, SDK and pipeline that already speaks S3, including ones that have nothing to do with us. The API is the contract, and it is the part worth insisting on, because it is what stops ownership turning into lock-in of a different shape.
- 02
Future-proof the storage before anything else
The namespace outlives every machine it has ever been served from.
Accelerators are superseded, interconnects change generation, servers get replaced. None of that matters if the data does not live inside any of them. Pick the interface that survives the move (SATA disks migrate from a desktop enclosure into a rack chassis), keep an independent copy so the migration is never a single-copy event, and address everything as s3:// objects from the first day rather than as paths on a machine you will not own in three years.
- 03
Extend the rack so compute comes to the data
The endgame is NVMe and inference sitting beside the object store, so search over your own storage runs end to end without leaving the rack.
Storage alone still sends every read somewhere else to be understood. The reason to extend into a rack is co-location: a fast local NVMe tier and an accelerator in the same cabinet as the object pool, so extraction, embedding, indexing, retrieval and inference all happen next to the bytes. That is what turns owned storage into an end-to-end system, where a query against your own object storage returns a timestamp inside a video rather than a filename, and no part of answering it crossed a network you pay for.
- 04
Start small, extend, never re-architect
Every phase should reuse the last one, which is a constraint on what you buy first.
The first purchase is four disks and an enclosure, and it is useful the day it lands. The second is a rack that adopts those same disks. After that, throughput is a compute pod, capacity is more disks or a shelf, shared multi-node access is a parallel filesystem tier, and bandwidth is a fabric generation. Because the object namespace never changes, none of those is a migration, and a rack that fills up is answered by another rack rather than by starting over.
Phase 0: Now
Buy the final storage chassis now, not a stand-in
- Storage-01 itself: the same 24-bay hot-swap rack-mount server, with ECC, BMC/IPMI, an HBA and redundant power, that lives in the eventual rack. Not a desktop enclosure that gets replaced.
- It sits on a shelf beside the Mac Studio, reached over ordinary 1/10 GbE, until the cabinet is bought. Then it slides in as-is.
- Populated with 4 × 24 TB enterprise SATA for 96 TB raw, expanding toward 8 and then 12 drives in the same chassis.
- ZFS and the S3-compatible object service stand up immediately, so the canonical s3:// namespace is real from day one rather than created during a later migration.
- An independent backup from day one, because a single copy is a single copy whatever it is sitting in.
Outcome: Useful capacity immediately, on the exact hardware that becomes permanent. Nothing bought at this phase is ever replaced, only added to.
| Component | Why it is on the list | Planning range |
|---|---|---|
| Storage Pod 01: 4U 24-bayHot-swap server with ECC, BMC, HBA/backplane, redundant PSU; the literal chassis that later slides into the rack, bought now instead of a throwaway enclosure | Makes durable storage independent from compute from day one; never gets replaced | $4,000-$8,000 before disks |
| Seagate Exos X24 24 TB SATA HDDEnterprise 3.5-inch SATA disk | Populate Storage-01 from day one; drives never migrate because the chassis never changes | $350-$500 each |
| ZFS + S3-compatible object serviceDurable implementation + stable object API | Canonical `s3://` namespace live from day one, not created during a later migration | $0+ software |
| Independent backupSeparate NAS/disks/cloud copy | Avoid a single-copy event | Workload dependent |
Why SATA specifically. It is the one decision in Phase 0 that matters later. SATA disks drop straight into a rack-mounted 24-bay chassis, so the drives you buy to sit beside a workstation today become the first population of the object pool rather than surplus. Buy the interface that survives the move, and buy the independent backup at the same time so the eventual migration is never a single-copy event.
Phase 1: V1 rack
A self-contained multimodal AI appliance
- Compute-01: RTX PRO 6000 Blackwell 96 GB, Threadripper PRO 9975WX, 512 GB ECC, mirrored boot, model and scratch NVMe.
- Storage-01: 24-bay hot-swap server starting around 12 × 20-24 TB enterprise SATA.
- Durable data exposed through an S3-compatible object API; local NVMe is cache and scratch, never the source of truth.
- The full local Mixpeek stack, Ray, vector services and video extraction, plus vLLM, SGLang and TensorRT-LLM for serving.
- 100 GbE-ready internal fabric, an isolated management network, BMC/IPMI and a local break-glass console.
Outcome: Private large-scale ingestion, multimodal inference and model training in one 27-32U cabinet.
| Component | Why it is on the list | Planning range |
|---|---|---|
| 27-32U enclosed vertical rackFull-depth, lockable, wheeled, high-airflow cabinet | Clean movable mini data center | $1,000-$2,500 |
| Compute Pod 01: 4U chassisFull-depth GPU chassis; server airflow/serviceability preferred | Replaceable AI compute unit | $700-$2,000 |
| RTX PRO 6000 Blackwell 96 GB96 GB ECC NVIDIA accelerator; Server Edition preferred in qualified server | Large coding/VLM/video inference, Mixpeek extraction, training/fine-tuning | $13,000-$15,000 |
| Threadripper PRO 9975WX32C/64T, high PCIe capacity | FFmpeg, Ray CPU workers, preprocessing, tokenization, DBs, GPU feeding | $4,000-$5,000 |
| ASUS Pro WS WRX90E-SAGE SEECC RDIMM, PCIe 5.0, dual 10GbE, AST2600 BMC/IPMI | Expansion + RAM bandwidth + remote recovery | $1,200-$1,500 |
| 512 GB ECC DDR5 RDIMMRegistered ECC memory | Dataset staging, Ray, dataloaders, CPU offload, training | $1,500-$3,000 |
| 2 × 2 TB mirrored boot NVMeRedundant system volume | Ubuntu, configs, critical service state | $300-$600 |
| 8 TB model/dataset NVMeFast reusable local tier | Weights, HF cache, tokenized/hot datasets | $700-$1,500 |
| 4-8 TB high-endurance scratch NVMeSeparate high-write tier | Frames/audio, checkpoints, optimizer state, temp tensors | $500-$1,500 |
| 1600 W+ PSU / OEM redundant PSUGPU-capable power | Stable compute power with headroom | $500-$1,000 |
| Cooling/fansTR5/server cooling, front-to-back airflow | Sustained 24/7 operation | $250-$700 |
| + 8 × 20-24 TB enterprise SATA HDDsGrows the pool already running since NOW, to ~12 drives total | Canonical media, Mixpeek objects, datasets, artifacts | $2,800-$4,000 |
| 100 GbE ConnectX-class NICsHigh-speed node adapters | Keep storage traffic from starving GPUs | $500-$2,000/node |
| 100 GbE managed data switchInternal high-speed fabric | Compute ↔ storage and future shared tier | $1,500-$5,000 |
| Management switch/VLANSeparate OOB network | BMC/IPMI, UPS, switches, controllers, sensors | $200-$750 |
| Kubernetes control nodeSmall dedicated x86 host | Keeps orchestration independent of GPU workers | $300-$800 |
| Local consoleSmall monitor + keyboard/mouse + shelf | Break-glass install/BIOS/network recovery | $150-$500 |
| Rack PDU + UPSMetered power + short ride-through | Clean power and graceful shutdown | $1,500-$4,000 |
| Rails/optics/DAC/SAS/power/sparesIntegration hardware | Repeatable, serviceable installation | $500-$1,500 |
| Tailscale access planeSecure overlay for clients/admin | Mac/amux and engineers reach services without rack depending on Mac | Service dependent |
Phase 2: Horizontal scale
More nodes, one logical pool
- Compute-02/03/N join as Kubernetes and Ray workers under the GPU Operator and KubeRay.
- Lustre arrives only when multiple workers genuinely need the same active working set. S3 stays the durable truth.
- The fabric moves 100 GbE → 200/400 GbE RDMA, with a distinct compute fabric where model parallelism warrants it.
- Storage-02/N or dense shelves take capacity from hundreds of TB toward petabytes.
Outcome: Compute, storage and bandwidth scale independently of each other.
| Component | Why it is on the list | Planning range |
|---|---|---|
| Lustre shared hot tierParallel POSIX filesystem over fast/RDMA fabric | Shared training/video working set; avoids node-local data dependency | $5,000-$25,000+ |
| Compute Pod 02Second GPU worker node | Horizontal throughput + distributed training | Future node pricing |
| Kubernetes + GPU Operator + KubeRayCluster scheduling/distributed execution | One logical resource pool | $0+ software |
Phase 3: Frontier and off-grid
Nothing built in V1 is invalidated
- Future NVIDIA-qualified RTX PRO, MGX, HGX or DGX nodes join the existing cluster.
- Dense storage shelves scale the object pool without touching compute.
- An optional off-grid power module: solar, a 48 V LiFePO4 bank, hybrid inverter and generator, with energy-aware scheduling.
- Satellite WAN plus the secure overlay keeps the site reachable without depending on local infrastructure.
Outcome: A private AI cluster where newer accelerator nodes join without changing the object namespace.
| Component | Why it is on the list | Planning range |
|---|---|---|
| 200/400 GbE or InfiniBand compute fabricTightly coupled inter-node network | Distributed training / giant model parallelism | $10Ks+ |
| Dense Seagate-class JBOD/storage shelf60-106-drive expansion | Hundreds of TB → PB-scale object storage | $50K-$150K+ |
| Starlink + secure accessRemote WAN | Cabin connectivity | Hardware + service |
| 48 V LiFePO4 bankLarge-format battery storage | Overnight/low-solar operation | ~$20K-$35K+ V1 scale |
| PNW solar arrayGround array; planning target ~25-30 kW for year-round V1 resilience | Generate rack energy + recharge batteries | ~$15K-$40K+ installed |
| Hybrid inverter + generatorAC conversion/charging + long-dark-period backup | Resilient off-grid operation | $8K-$25K+ |
How the disks move between phases
PHASE 0: NOW
Mac Studio
│ 1/10GbE
▼
Storage-01 (final chassis, pre-rack)
S3 / ZFS: live from day one
├── 24TB
├── 24TB
├── 24TB
└── 24TB
= 96TB raw
PHASE 1: V1
Storage-01 (same unit, no migration)
slides into rack as-is
│ + drives toward 12×20-24TB
▼
Storage-01
S3 / ZFS
12×20-24TB
│
├──────── Compute-01
│ 96GB GPU
│
└──────── Mixpeek
PHASE 2: SCALE
Kubernetes / Ray
│
100→400GbE fabric
┌─────────────┼─────────────┐
▼ ▼ ▼
Compute-01 Compute-02 Storage-01
│ │ │
└─────── Lustre V2 ─────────┘
shared hot data
PHASE 3: PB / FRONTIER
Compute-01 Compute-02 MGX/HGX/DGX future
| /
└── high-speed fabric ──┐
▼
Storage cluster
S3 + Lustre
│
dense JBOD shelves
hundreds TB → PBsConsolidated bill of materials
Planning ranges, not quotes. Hardware pricing, availability and qualification status all move. Validate the seller, the warranty, the qualification status and the interface before buying.
| Phase | Component | Extends to | Planning range |
|---|---|---|---|
| NOW | Storage Pod 01: 4U 24-bay | Populate 24 bays over time; Storage-02/N; dense JBOD later | $4,000-$8,000 before disks |
| NOW | Seagate Exos X24 24 TB SATA HDD | 4 drives = 96 TB raw now; fill toward 24 bays over time, same chassis through V1 | $350-$500 each |
| NOW | ZFS + S3-compatible object service | Backend can become distributed object storage | $0+ software |
| NOW | Independent backup | Grows with corpus | Workload dependent |
| V1 | 27-32U enclosed vertical rack | Add pods until full; duplicate rack later | $1,000-$2,500 |
| V1 | Compute Pod 01: 4U chassis | GPU #2 vertically; Compute-02/N horizontally | $700-$2,000 |
| V1 | RTX PRO 6000 Blackwell 96 GB | Second 96 GB GPU; future RTX PRO/MGX/HGX/DGX nodes | $13,000-$15,000 |
| V1 | Threadripper PRO 9975WX | Add CPU/GPU nodes; higher-core node if measured need | $4,000-$5,000 |
| V1 | ASUS Pro WS WRX90E-SAGE SE | Reserve x16 for GPU #2 and ConnectX NIC | $1,200-$1,500 |
| V1 | 512 GB ECC DDR5 RDIMM | Scale toward ~2 TB; each node adds RAM | $1,500-$3,000 |
| V1 | 2 × 2 TB mirrored boot NVMe | Larger mirror/dedicated management storage later | $300-$600 |
| V1 | 8 TB model/dataset NVMe | Add/larger enterprise NVMe per node | $700-$1,500 |
| V1 | 4-8 TB high-endurance scratch NVMe | Add NVMe; shared hot data moves to Lustre at V2 | $500-$1,500 |
| V1 | 1600 W+ PSU / OEM redundant PSU | GPU #2 where envelope permits | $500-$1,000 |
| V1 | Cooling/fans | OEM/liquid cooling for dense future accelerators | $250-$700 |
| V1 | + 8 × 20-24 TB enterprise SATA HDDs | ~240-288 TB raw at ~12 drives; ~480-576 TB with all 24 bays full; then PB shelves | $2,800-$4,000 |
| V1 | 100 GbE ConnectX-class NICs | 100 → 200/400 GbE RDMA | $500-$2,000/node |
| V1 | 100 GbE managed data switch | Upgrade to 200/400G; split fabrics later | $1,500-$5,000 |
| V1 | Management switch/VLAN | Add all future nodes/racks | $200-$750 |
| V1 | Kubernetes control node | 1 → 3 HA controllers | $300-$800 |
| V1 | Local console | Rack KVM later | $150-$500 |
| V1 | Rack PDU + UPS | Larger/redundant UPS as load grows | $1,500-$4,000 |
| V1 | Rails/optics/DAC/SAS/power/spares | Standardize for future pods | $500-$1,500 |
| V1 | Tailscale access plane | Add users/sites; substitute approved on-prem solution for true air-gap | Service dependent |
| V2 | Lustre shared hot tier | Add MDS/OSS/OST capacity | $5,000-$25,000+ |
| V2 | Compute Pod 02 | Compute-03/N | Future node pricing |
| V2 | Kubernetes + GPU Operator + KubeRay | Add workers horizontally | $0+ software |
| FUTURE | 200/400 GbE or InfiniBand compute fabric | Future HGX/DGX/MGX nodes | $10Ks+ |
| FUTURE | Dense Seagate-class JBOD/storage shelf | Add shelves independently of compute | $50K-$150K+ |
| OFF-GRID | Starlink + secure access | Backup WAN | Hardware + service |
| OFF-GRID | 48 V LiFePO4 bank | Add modules from measured kWh/day | ~$20K-$35K+ V1 scale |
| OFF-GRID | PNW solar array | Expand from measured load/site yield | ~$15K-$40K+ installed |
| OFF-GRID | Hybrid inverter + generator | Parallel/larger equipment as compute grows | $8K-$25K+ |
33 components across five phases. Phase 0 alone is roughly $5.4K-$10K before backup and is useful the day it arrives.
The software you will run on it
All open or freely available, all running locally. This is the layer where the work actually is, which is why the hardware plan above can be published without hesitation.
- Mixpeek local stack
- Ray / KubeRay
- Kubernetes
- NVIDIA GPU Operator
- vLLM
- SGLang
- TensorRT-LLM
- NeMo
- Megatron
- PyTorch
- Hugging Face
- Qdrant
- S3-compatible object service
- ZFS
- Lustre (V2)
- Prometheus / Grafana-class observability
Want this built and operated for you instead?
The plan above is genuinely everything, and building it is still a procurement project, an assembly project and an operational commitment. The alternative is to sponsor the build and have Mixpeek deploy it as a Mixpeek Appliance: the same plan, specified, assembled and optionally operated for you. You own the hardware either way.
It is fully S3-compatible, with no code change. Whichever route you take, the object endpoint speaks the S3 API, so anything already talking to S3 points at a new endpoint URL and keeps working.