Why Google Photos Keeps Your Data but Not Your Trust
Google Photos is genuinely excellent – until you read the fine print. Your images train machine learning models, your storage is capped unless you pay a monthly fee, and Google can change the terms whenever it feels like it. For anyone who has watched a free tier quietly shrink over the years, the appeal of owning your own photo library outright is hard to ignore. Immich offers that ownership: a self-hosted photo and video backup platform that runs on your hardware, under your control, with no subscription attached to it.
Immich replicates most of what makes Google Photos addictive – automatic mobile backup, facial recognition, map-based browsing, album sharing, and a clean web interface – without the trade-off of handing your memories to a corporation. It is actively developed, ships updates regularly, and has a mobile app for both iOS and Android. This guide walks through a complete self-hosted setup using Docker, which is the fastest and most reliable path to a working install.

What You Need Before You Start
The minimum hardware requirement is modest: a Linux server with at least 4GB of RAM, though 8GB is more comfortable once the machine learning features kick in. A Raspberry Pi 4 can technically run Immich, but expect sluggish face detection. A small home server, an old desktop repurposed as a NAS, or a cheap VPS all work well. You will also need Docker and Docker Compose installed on that machine. If you are using Ubuntu or Debian, installing Docker through the official convenience script takes less than two minutes. Storage is the bigger consideration – plan for roughly 1.5 to 2 times your current photo library size to account for thumbnails and transcoded video.
On the networking side, decide early whether you want Immich accessible only on your local network or reachable from the internet. Local-only is simpler and requires no additional configuration. Remote access requires either a VPN like Tailscale or WireGuard pointed at your home network, or a reverse proxy with a domain name and SSL certificate. If you want the reverse proxy route, the setup process for Traefik as a self-hosted reverse proxy with SSL covers exactly that configuration and pairs directly with Immich’s Docker stack.
Installing Immich with Docker Compose
Start by creating a dedicated directory for the project. Run mkdir ~/immich-app && cd ~/immich-app in your terminal. From there, download the official Docker Compose file and its accompanying environment file directly from the Immich GitHub repository. The project maintains a stable release branch, so pulling the latest tagged version rather than the development branch avoids broken builds. Two files are all you need: docker-compose.yml and .env.
Open the .env file and set four values before anything else. UPLOAD_LOCATION should point to the directory on your server where photos will be stored – pick a path on your largest drive. DB_PASSWORD needs to be a strong unique password; Immich generates one in the template but replacing it with something custom is good practice. IMMICH_VERSION should match the latest stable release tag listed on the GitHub releases page. The fourth variable, DB_DATA_LOCATION, sets where PostgreSQL stores its database files and can stay at the default unless you have a specific partition in mind.
With the environment file saved, run docker compose up -d from the project directory. Docker will pull six container images: the main Immich server, the machine learning container, PostgreSQL, Redis, and a couple of supporting services. The first pull takes several minutes depending on your connection speed. Once all containers show a status of “healthy” in docker compose ps, the web interface is live at http://your-server-ip:2283.
Navigate to that address in a browser and you will land on the first-run setup screen. Create an admin account with an email and password – this becomes the primary account for managing users and settings. Immich supports multiple user accounts, which is useful if you want separate libraries for different household members without mixing their photos together. After account creation, you are inside the dashboard and ready to start importing photos.

Migrating Your Existing Photo Library
Immich handles two main import paths: uploading through the web interface and using the CLI bulk importer. For small libraries under a few thousand photos, the web uploader works fine. For anything larger, the CLI tool is the right approach. The Immich CLI is available as an npm package and runs on most operating systems. Install it with npm install -g @immich/cli, then authenticate it against your server using immich login http://your-server-ip:2283 your-email@example.com followed by your password.
To import a local folder, run immich upload –recursive /path/to/your/photos. The CLI will scan the directory tree, skip files that already exist on the server based on content hash, and upload everything else in parallel. If you are migrating from Google Photos specifically, start by using Google Takeout to download your library as a zip archive. Extract it, then point the CLI at the extracted folder. Immich reads EXIF metadata from files, so dates and GPS coordinates carry over correctly as long as Google’s export kept them intact – which it usually does for photos taken on modern smartphones.
Setting Up Mobile Backup
Download the Immich app from the App Store or Google Play, open it, and enter your server address. If you are on a local network, use the local IP and port. If you have set up remote access through a domain, use that URL instead. Log in with your account credentials, then navigate to the backup settings screen. You will see options to back up photos only, videos only, or both, along with album selection if you want to exclude certain folders like screenshots or downloaded images.
Background backup on iOS is subject to Apple’s standard background app refresh restrictions, which means the app needs to be opened periodically to trigger uploads unless you configure a background sync schedule. Android behaves more reliably for automatic background backup. Both platforms support backup over Wi-Fi only, which prevents unexpected mobile data charges if you have a large library. Once backup is enabled and the first sync completes, new photos taken on the device will upload automatically whenever the conditions you set are met.
Immich also includes a feature called “Memories,” which surfaces photos from the same date in previous years – the same nostalgic function Google Photos offers. The machine learning container handles face clustering and object recognition locally, meaning no image data ever leaves your server. Face recognition does require indexing time after the initial upload: a library of several thousand photos can take an hour or more on modest hardware before faces start appearing in the People view. The indexing runs in the background and does not block access to the rest of the app while it processes.

Keeping Immich Updated
Immich updates frequently – sometimes multiple releases in a single month – and the project explicitly warns users against running outdated versions due to ongoing database schema changes. Updating is straightforward with Docker Compose. From your project directory, run docker compose pull to fetch the latest images, then docker compose up -d to restart the stack with the new versions. The update process typically completes in under five minutes and preserves all existing data.
One practical consideration worth planning for from the start is backups of the Immich data itself. Self-hosting means you are responsible for redundancy. The two directories that matter are the UPLOAD_LOCATION folder containing your raw photo files and the DB_DATA_LOCATION folder containing the PostgreSQL database. Back both up to a separate drive or offsite location on a schedule. Losing the upload folder means losing your photos. Losing only the database means losing metadata like albums and face tags, but the raw files survive – Immich can re-index them, though the organizational work would need to be redone from scratch.
The project roadmap has included video transcoding improvements, better external library support for photos stored outside the main upload folder, and expanded sharing features. External library support in particular addresses a common frustration: the ability to point Immich at an existing folder structure on a NAS without physically moving or duplicating files into its managed directory.





