files-docs
Dropbox logo

Should I self-host Dropbox?

KINDAworth it if…

Nextcloud replaces Dropbox and half your Google account — and it's a platform that wants attention. Worth it if you're storing terabytes or serving a family; at 2TB-lite prices with honest maintenance minutes, the math says keep paying.

The math (nothing hidden, including your time)

Dropbox (Plus)$11.99/mo
VPS share + storage−$4.50/mo
Your maintenance: 45 min/mo at $20/h−$15.00/mo
Net saving$-7.51/mo
Setup: 90 min measured (one-time)$30.00
Break-evennever
Markup Index (price ÷ real self-host cost)0.6×

Price: source, checked 2026-08-05. Inputs are stored in git; every number above is derived, never hand-written.

What you lose

  • Dropbox's sync engine reliability — Nextcloud sync is good, not legendary
  • Zero-thought durability: your files are now on disks you own and must back up
  • Some maintenance months are 5 minutes; upgrade months are not

What you're paying Dropbox for

  • file sync across devices
  • sharing links
  • mobile photo backup
  • version history
  • collaborative docs (with apps)
Nextcloud running from the boot-verified compose file
Nextcloud, running from the compose file on this page — screenshot from our verified instance, not marketing material.

Ranked alternatives

Files, calendars and contacts on hardware you control, with the desktop and mobile clients pointed at it instead of somebody else's cloud.

nextcloud/server · ★ 36,384 · last commit 0d ago · AGPL-3.0

Hardware

Runs comfortably on a real VPS (2 GB+).

The tested compose file (our evidence, CI-booted)

# Nextcloud — files + sync + sharing (replaces Dropbox). Apache image + postgres; add a
# reverse proxy with TLS in production. The verdict math is honest about maintenance:
# Nextcloud is a platform, and platforms want attention.
services:
  nextcloud:
    image: nextcloud:stable-apache
    container_name: nextcloud
    restart: unless-stopped
    depends_on:
      nextcloud-db:
        condition: service_healthy
    environment:
      POSTGRES_HOST: nextcloud-db
      POSTGRES_USER: nextcloud
      POSTGRES_PASSWORD: nextcloud
      POSTGRES_DB: nextcloud
      NEXTCLOUD_ADMIN_USER: admin
      NEXTCLOUD_ADMIN_PASSWORD: changeme-now # throwaway test value
      NEXTCLOUD_TRUSTED_DOMAINS: localhost
    ports:
      - "8085:80"
    volumes:
      - nextcloud-data:/var/www/html
    healthcheck:
      test: ["CMD-SHELL", "curl -sf http://localhost/status.php | grep -q '\"installed\":true' || exit 1"]
      interval: 10s
      timeout: 10s
      retries: 36
      start_period: 60s

  nextcloud-db:
    image: postgres:16-alpine
    restart: unless-stopped
    environment:
      POSTGRES_USER: nextcloud
      POSTGRES_PASSWORD: nextcloud
      POSTGRES_DB: nextcloud
    volumes:
      - nextcloud-pg:/var/lib/postgresql/data
    healthcheck:
      test: ["CMD-SHELL", "pg_isready -U nextcloud"]
      interval: 5s
      timeout: 5s
      retries: 12

volumes:
  nextcloud-data:
  nextcloud-pg:

Want a guided install instead? caniselfhostit.com/dropbox has AI-agent prompts that assume a bare machine — that's their half of the stool, and it's good.

Verification

Protocol v1 · verified by zernonia on 2026-08-10 · setup measured at 90 min · AI assistant: claude-code (allowed & stated)

What broke

  • First boot takes a minute+ to install before status.php goes green — healthcheck needs the long start_period
  • Trusted-domain config bites the moment you access it from a non-localhost hostname
Full timed log
# Timed setup log: Dropbox → nextcloud

**Protocol:** v1 · **Verified by:** zernonia · **Date:** 2026-08-10
**Assistant:** claude-code · **Environment:** containerized runner, 2 vCPU class, Docker 29.3 / Compose v5.1

## Timeline

| Step | Time |
|---|---|
| Read upstream docs, draft compose with healthcheck | ~30 min |
| **Boot: all services healthy in 122 s (measured, `compose up --wait`)** | — |
| Endpoint-level workflow check (login/health/API serve) + re-run from clean volumes | ~30 min |
| **Total: ~90 min** | |

Boot and endpoint checks are machine-verified; `setup_min` is the wall-clock total for this
session including authoring, diagnosis and re-runs. Endpoint-level ≠ full human UI workflow —
dispute anything that doesn't reproduce (CONTRIBUTING.md).

## What broke

- First boot takes a minute+ to install before status.php goes green — healthcheck needs the long start_period
- Trusted-domain config bites the moment you access it from a non-localhost hostname

## Verdict-relevant notes

- The per-TB math flips fast: at 2TB+ of family photos the storage line dominates and self-host wins big. The KINDA is doing a lot of honest work here.

Verdict history

  • 2026-08-10: unscored → KINDA — Initial verdict: Nextcloud replaces Dropbox and half your Google account.