# Building a Self-Hosted Photo Library That Survives Real Life

A self-hosted photo library offers more than freedom from subscription fees: it keeps original files, metadata, and backups under your control. My setup runs Immich on a small home server with mirrored storage, while phones upload over Wi-Fi through the mobile app. The interface provides a familiar timeline, albums, maps, face recognition, and search without requiring the family to learn a new file-management workflow.

## Storage and Deployment

The application runs in Docker Compose, but the photo archive lives outside the container filesystem. Originals are stored on a dedicated ZFS dataset, and the database uses a separate dataset tuned for smaller, frequently updated files. This separation makes upgrades safer and prevents an accidental container removal from deleting the library.

```yaml
services:
  immich-server:
    image: ghcr.io/immich-app/immich-server:release
    volumes:
      - /tank/photos:/usr/src/app/upload
    env_file: .env
    restart: unless-stopped
```

## Imports, Metadata, and Performance

Existing folders were imported gradually instead of copied into one giant upload job. Before each batch, I normalized timestamps and verified that sidecar files remained beside their matching images. Hardware acceleration for thumbnail generation and video transcoding reduced the initial processing time substantially, although machine-learning indexing still took several days for a large collection.

## Backups Are the Real Project

Mirrored disks protect against a drive failure, but they are not backups. Nightly snapshots provide quick recovery from accidental deletion, while an encrypted backup is pushed to off-site object storage each week. I also export the PostgreSQL database separately and test restores quarterly; a backup dashboard is reassuring, but successfully rebuilding the library on another machine is the only meaningful verification.

## Operating It Long Term

The maintenance burden is modest but persistent. I pin application versions, read release notes before upgrades, monitor free space, and keep at least one previous container image available for rollback. With those habits, the system feels less like a fragile hobby project and more like a private household service: convenient enough for daily use, transparent about where the files live, and recoverable when hardware or software eventually fails.