
Should I self-host Google One?
Immich is the best software in this index and $24/yr is the worst reason to run it. A photos server wants real RAM, real storage and real backups — run Immich for ownership and privacy, not to save two dollars a month.
The math (nothing hidden, including your time)
| Google One (Basic (100 GB)) | $1.99/mo |
| VPS share + storage | −$4.00/mo |
| Your maintenance: 30 min/mo at $20/h | −$10.00/mo |
| Net saving | $-12.01/mo |
| Setup: 60 min measured (one-time) | $20.00 |
| Break-even | never |
| Markup Index (price ÷ real self-host cost) | 0.1× |
Price: source, checked 2026-08-05. Inputs are stored in git; every number above is derived, never hand-written.
What you lose
- Google's durability — your photos now live on disks you must 3-2-1 yourself, and 'backup of the backup' is on you
- Storage math: the Immich box + offsite copy costs more than $1.99/mo forever
What you're paying Google One for
- photo/video backup from phones
- ML search & faces
- shared albums
- 100GB of durable storage

Ranked alternatives
Your camera roll uploads itself to a server you own, and search still finds the dog on the beach.
Files, calendars and contacts on hardware you control, with the desktop and mobile clients pointed at it instead of somebody else's cloud.
Hardware
Runs comfortably on a real VPS (2 GB+).
The tested compose file (our evidence, CI-booted)
# Immich — self-hosted photos with ML search (tested against Google One's job list; see the
# verdict for why $24/yr is not the reason to run it — ownership is).
# Images are ghcr.io-hosted: boot-verified by the CI runner. Upstream images ship healthchecks.
services:
immich-server:
image: ghcr.io/immich-app/immich-server:release
container_name: immich-server
restart: unless-stopped
depends_on:
immich-db:
condition: service_healthy
immich-redis:
condition: service_healthy
environment: &immich-env
DB_HOSTNAME: immich-db
DB_USERNAME: immich
DB_PASSWORD: immich
DB_DATABASE_NAME: immich
REDIS_HOSTNAME: immich-redis
ports:
- "2283:2283"
volumes:
- immich-upload:/data
immich-machine-learning:
image: ghcr.io/immich-app/immich-machine-learning:release
container_name: immich-ml
restart: unless-stopped
environment: *immich-env
volumes:
- immich-ml-cache:/cache
immich-redis:
image: valkey/valkey:8-alpine
restart: unless-stopped
healthcheck:
test: ["CMD-SHELL", "valkey-cli ping | grep PONG"]
interval: 5s
timeout: 5s
retries: 12
immich-db:
image: ghcr.io/immich-app/postgres:16-vectorchord0.4.3
restart: unless-stopped
environment:
POSTGRES_USER: immich
POSTGRES_PASSWORD: immich
POSTGRES_DB: immich
volumes:
- immich-pg:/var/lib/postgresql/data
healthcheck:
test: ["CMD-SHELL", "pg_isready -U immich"]
interval: 5s
timeout: 5s
retries: 12
volumes:
immich-upload:
immich-ml-cache:
immich-pg:
Want a guided install instead? caniselfhostit.com/google-one 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 60 min · AI assistant: claude-code (allowed & stated)
What broke
- Images are ghcr.io-hosted — this pair's compose boot is verified by the CI runner
- Immich requires its own pgvector-patched Postgres image; a vanilla postgres:16 will not do
Full timed log
# Timed setup log: Google One → immich **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 | ~20 min | | Boot in our verification environment blocked (ghcr.io-only images, model download, or the microVM's ipv6.disable=1 kernel) — **compose boot is certified by the CI runner** (`compose-check` gate, per-PR + weekly) | — | | Endpoint-level workflow check (login/health/API serve) + re-run from clean volumes | ~20 min | | **Total: ~60 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 - Images are ghcr.io-hosted — this pair's compose boot is verified by the CI runner - Immich requires its own pgvector-patched Postgres image; a vanilla postgres:16 will not do ## Verdict-relevant notes - At the 2TB tier ($9.99/mo) with an existing NAS, the math flips hard toward YES — this verdict prices the 100GB tier most people actually pay.
Verdict history
- 2026-08-10: unscored → NOT_REALLY — Initial verdict: Immich is the best software in this index and $24/yr is the worst reason to run it. A photos server wants real RAM, real storage and real backups.
