Your phone's camera roll is probably 40 GB of kids, dogs, receipts, and screenshots you'll never delete. Google Photos makes that easy to live with — until you read another privacy policy update, hit a storage cap, or realize every face in your family album is training someone else's model.
Immich is the self-hosted answer that's actually good enough to use daily. Over 100k GitHub stars isn't hype; it's a lot of people who wanted Google Photos' smooth mobile backup and timeline UI without shipping their life to a US cloud. You run it on your own server. Your photos stay on your disks.
What it actually does
Immich is a photo and video library with native mobile apps for iOS and Android. Install the app, point it at your server, and it backs up new shots in the background — same rhythm as Google Photos, but the destination is a URL you control.
The web interface feels familiar: timeline, albums, search, shared links, partner sharing. Upload a batch from a wedding and Immich generates thumbnails, extracts metadata, and queues machine-learning jobs in the background. Face grouping clusters Aunt Linda across twenty years of Christmas photos. Object and scene search (CLIP embeddings) lets you type "beach" or "birthday cake" and get results that aren't just filename matches.
It's not a raw folder sync tool. There's a proper database behind it — users, permissions, albums, face clusters, search vectors — plus Redis (actually Valkey in current stacks) for job queues so thumbnail and ML work doesn't block uploads.
Why self-host your photo library?
You own the originals. No surprise account closures, no "we're changing the free tier," no wondering what happens to 15 years of family photos if you stop paying. The files live on storage you provision. Back them up like anything else that matters.
Privacy by default. Vacation photos, medical paperwork you snapped for reference, kids at the park — that's personal data. Self-hosting doesn't magically make you compliant with every law, but it gives Canadian families and small businesses a clear story: the library runs on infrastructure you choose, including Canadian VPS or dedicated hardware if data residency matters to you.
Cost at scale. Cloud photo tiers get expensive when multiple family members shoot in HEIC and 4K video. A few terabytes on a VPS with attached storage, or a dedicated box with big disks, often beats subscription math once libraries grow past the "free" bucket.
It keeps getting better. Immich is actively developed — mobile apps, ML features, and migration tools improve fast. You're not betting on a stagnant side project.
What running it takes
Docker Compose is the supported path. The official stack pulls several containers: immich-server (API + processing), machine learning for faces and search, PostgreSQL with vector extensions for embeddings, and Valkey for queues. Pin to the release image tag in production — don't track main on a box your family relies on.
RAM: Immich's docs ask for 6 GB for a smooth experience, especially during uploads and first-time ML scans. You can run on 4 GB with machine learning disabled, but you lose a lot of what makes it feel like Google Photos. Postgres alone wants headroom; if you set Docker memory limits, give the database at least 2 GB.
Storage: Budget roughly 1.5× your current library size — originals plus generated thumbnails and previews. The Postgres data directory should sit on local SSD; Immich explicitly warns against NFS or network shares for the database because PostgreSQL locking gets ugly fast. Photo files themselves can live on a larger volume or NAS mount — just keep the DB local.
CPU: Day-to-day browsing is light. The pain is the first import: thousands of photos means thumbnail generation and face detection jobs stacked in Redis. More cores help that initial crawl finish before you lose patience.
Put HTTPS in front with a reverse proxy, set strong database passwords in .env, and don't expose Postgres or Valkey to the internet. Mobile backup over plain HTTP is a non-starter anyway. For remote access, Tailscale or a VPN beats leaving the upload port wide open without thought.
Back up two things: the Postgres database (metadata, faces, albums) and the upload directory (actual media). Restoring files without the DB gives you orphaned JPEGs; restoring the DB without files gives you broken thumbnails everywhere.
Who it's for (and who should wait)
Good fit: families replacing Google Photos or iCloud, photographers who want client delivery without Dropbox fees, anyone with a large personal archive and a tolerance for occasional Docker maintenance.
Maybe wait: if you need pixel-perfect parity with Google Photos on day one — Immich is close, not identical. Some edge cases (live photos behaviour, exotic video codecs) still surprise people. If you're not willing to update containers and read release notes every few months, managed cloud storage is less work.
Hosting it in Canada
We run Docker stacks on Canadian VPS and dedicated servers for clients who want Immich (or Nextcloud, or both) with TLS, backups, and someone to call when a disk fills up at 11 p.m. Photo libraries are disk-hungry — we'll size storage honestly instead of putting you on a plan that runs out of space after the first full phone backup.
Tell us how many users and roughly how many GB you're migrating. We'll talk RAM, SSD for Postgres, and where the big volume should live.