← All posts
6 min readDashCaddy Team

Self-Host Your Photo Library: Immich in 10 Minutes

self-host immichself hosted photo backupgoogle photos alternativeimmich dockerphoto library

Your photos are the one cloud subscription you will pay for forever, and the one library that only grows. Every year you add more, the backup gets bigger, and the cost that felt trivial at the start quietly compounds. Moving that library onto a machine you own ends the meter. Immich is the self-hosted photo and video app that makes it practical, and with DashCaddy it deploys with one click.

What Immich is

Immich is a self-hosted photo and video library: automatic backup from your phone camera roll, a searchable timeline, albums, and sharing, with features such as object and face recognition running on machine learning. Its own project describes it as a Google Photos alternative, and DashCaddy lists it in the Photos category of the app catalog. It is not a thin file browser. It indexes your library, generates thumbnails, and gives you the timeline and albums you expect from a hosted service.

Why photos are the hardest thing to leave a cloud for

Passwords can be exported in a file you carry around. Photos cannot. The library grows monotonically, it usually runs to tens or hundreds of gigabytes, and it is tied to a mobile app that has spent years syncing in the background without you thinking about it. Leaving means re-uploading everything, retraining your family's habits, and trusting that the new place will not lose a decade of images. That friction is the whole reason the subscription model works. Self-hosting removes the friction, but it also moves the responsibility to you, which is why the backup section below matters more than the install section.

Doing the storage maths honestly

The number that matters is the free space you need at the destination, not the size of the upload. Two rules of thumb:

  • Estimate the library size by multiplying your photo count by an average file size. Phone photos commonly land in the 3 to 5 MB range; assume the higher end so you are not surprised.
  • Then plan for at least double that figure in free space, plus a second copy elsewhere.

The doubling is not padding. Immich keeps the original as you uploaded it plus generated derivatives such as thumbnails and transcoded video, and any import or migration temporarily holds both source and destination. Running a photo server on a disk that is already 90 percent full is how people corrupt libraries. If your library is 200 GB, do not point Immich at a 250 GB disk. Point it at something with room to grow, because the library will keep growing.

Prerequisites

  • A domain for HTTPS, because the mobile app wants a real TLS origin and you will be reaching this from your phone over cellular. A hostname like photos.example.com resolving to your server is enough.
  • A Linux host with Docker, with ports 80 and 443 reachable.
  • Storage with headroom, per the maths above.
  • A decision about the second copy. Decide where the off-machine backup goes before you upload anything you cannot replace.

Install DashCaddy on that host:

curl -fsSL https://get.dashcaddy.net | bash

Deploy Immich

From the dashboard:

  1. Sign in and open the App Selector.
  2. Pick Immich from the Photos category.
  3. Accept the suggested subdomain (photos) and port (2283), or change them.
  4. Click Deploy.

DashCaddy pulls the ghcr.io/immich-app/immich-server:latest image, provisions the database and cache dependencies Immich needs, creates the persistent volumes at /opt/immich/upload and /opt/immich/library, writes the Caddy route, creates the DNS record, and requests the certificate. It waits for the container's health check at /api/server-info/ping before it reports the service as Running.

Via the API, it is the same single call:

curl -X POST https://your-dashboard/api/v1/apps/deploy \
  -H "X-API-Key: $DASHCADDY_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"appId":"immich","config":{"subdomain":"photos","port":2283}}'

The response comes back synchronously with success, containerId, url, message, and setupInstructions.

Point your phone at your own server

Create your admin account in the web UI, then install the Immich mobile app on iOS or Android. On the login screen, set the server URL to your own https://photos.example.com instead of the hosted default. Log in and enable automatic backup for the camera roll. From then on, new photos upload over your network to your hardware, and the first sync will pull up the existing back-catalogue. If you want to reach the server outside your home network without opening it to the world, the remote access guide covers the options.

The warning that matters

Immich is under very active development, and this is the one thing its own documentation is loudest about. The project warns users to keep their own backups and to read the release notes before every upgrade, because breaking changes do happen between versions. Take that seriously. DashCaddy does not auto-update your containers, so upgrading is a deliberate action: pull the new image and restart the container yourself. Read the release notes before you do, and confirm your backup is current first. The Immich install guide repeats the same caution, and the troubleshooting guide covers what to do if an upgrade goes wrong.

Hardware notes, kept short

Immich will run on a modest machine. Machine learning features such as face recognition are the hungry part: they want more RAM and CPU, and they are much faster on a GPU. If your hardware is small, you can run Immich without those features and still get the timeline, albums, and automatic backup, which is the core of the product. Start there and add horsepower only if you find you miss the smart features.

What about the photos already in your current cloud

Do not delete anything until the new library is populated and verified. Before you start, use your current provider's bulk-download tool to export your entire library, then upload it to your Immich instance, either through the web UI in batches or by placing files directly in the library path. Confirm the photos and their dates are showing in the timeline, and only then cancel the subscription. Keep the old account read-only for a while if you can, as cheap insurance.

FAQ

Do I have to stop using my current photo app?

No, but you should not run two sources of truth forever. The clean path is to export your existing library, import it into Immich, verify it, and then stop adding to the old one.

How much storage do I need?

Roughly your library size times two or more, in free space, plus a separate copy on another machine or drive. Plan for it to keep growing.

Will Immich lose my photos on an update?

Not if you follow the project's advice: keep your own backups and read the release notes before each upgrade. That is the honest answer, and it is exactly why the backup step comes before the install step.

Immich is one of 78 one-click templates in the catalog, and it deploys the same way you have read here. The software is free and open source; if you want the premium platform features, they are described on the pricing page. Start with what DashCaddy is if you are new, or see the wider self-hosted app catalog guide for what to run next.