Why Immich Is Worth the Setup Time
Google Photos quietly became indispensable for millions of people, then Google ended unlimited free storage in 2021. Immich, an open-source self-hosted photo and video management platform, fills that gap with a near-identical interface, mobile apps, facial recognition, and album sharing – running entirely on hardware you control.

What You Need Before You Start
Immich runs inside Docker containers, so the first requirement is a machine with Docker and Docker Compose installed. This can be a home server, a Raspberry Pi 4 or 5 with at least 4GB of RAM, a NAS device that supports Docker, or a virtual machine. If you are already running a hypervisor at home, a dedicated VM works well – the same approach used when setting up Proxmox VE for virtual machine management applies here. The host machine should run Linux, though Immich technically works on macOS and Windows with Docker Desktop.
Storage planning matters more than most guides acknowledge. Immich stores your original files untouched, then generates thumbnails and machine learning assets separately. A library with 100,000 photos can easily consume 200GB to 400GB depending on resolution and video content. Point Immich at a dedicated external drive, a NAS mount, or a large secondary disk rather than your system drive. You will configure the exact path in a single environment variable, so changing it later is possible but requires migrating data manually.
The machine learning features – facial recognition, CLIP-based smart search, and object tagging – run inside a separate container. On lower-powered hardware like a Raspberry Pi, this container is optional and can be disabled entirely. On a modern desktop CPU or a machine with an NVIDIA GPU, it works well and makes the smart search feature genuinely useful. Disabling machine learning does not affect core upload and browsing functionality.
Confirm you have Docker Engine installed by running docker –version and docker compose version in a terminal. Immich requires Docker Compose v2 or later – the plugin version, not the older standalone docker-compose binary. Most current Linux distributions install the correct version via the official Docker repository. If you are running Ubuntu, the official Docker documentation gives clear installation steps that take under five minutes.
Installing and Configuring Immich
Create a dedicated directory for the installation, something like /opt/immich or a folder in your home directory. Immich provides an official docker-compose.yml and a .env template file, both available on the project’s GitHub releases page. Download both files into that directory. The compose file pulls several containers: the main Immich server, a microservices worker, the machine learning container, PostgreSQL with the pgvecto.rs extension for vector search, and Redis. You do not need to configure any of these individually – the compose file wires them together automatically.
Open the .env file in a text editor. There are only a handful of variables you need to set before first launch. Set UPLOAD_LOCATION to the full path where you want photos stored, for example /mnt/photos/immich. Set DB_PASSWORD to a strong unique password – this secures the PostgreSQL instance. Set IMMICH_VERSION to the latest release tag found on the GitHub releases page, such as v1.111.0. The TZ variable sets your timezone and affects how timestamps display in the UI. That is genuinely the entire required configuration before the first boot.
Run docker compose up -d from inside your Immich directory. Docker will pull all images on the first run, which takes a few minutes depending on your internet connection. Once all containers show as healthy with docker compose ps, open a browser and navigate to http://YOUR_SERVER_IP:2283. You will land on an onboarding screen asking you to create an admin account. Use a real password here – if you later expose Immich externally, this is the account that controls everything.

After creating the admin account, the web interface opens immediately. The layout mirrors Google Photos closely: a timeline view, albums, a people section populated by facial recognition, and a search bar that accepts natural language queries like “beach sunset” or “birthday cake.” Upload your first batch of photos either through the web interface or by using the iOS and Android apps, which support automatic background sync exactly like Google Photos. The mobile apps are available on both major app stores under the name “Immich.”
The external library feature deserves special attention for anyone with an existing photo archive on a NAS or external drive. Rather than uploading everything through the app and duplicating your storage, you can point Immich at an existing folder on the host machine by mounting it in the compose file and configuring an external library in Settings. Immich will scan the folder, index the files, and make them browsable without moving or copying anything. Changes to the folder are picked up on the next scheduled scan, which you can trigger manually or set on a cron-style timer inside the admin panel.
Hardening and Accessing Immich Remotely
Running Immich only on your local network is fine for home use, but mobile backup requires the app to reach your server from outside. The standard approach is placing Immich behind a reverse proxy – Nginx Proxy Manager, Caddy, or Traefik all work – and exposing it on a domain with a valid TLS certificate. Cloudflare Tunnels are an alternative that avoids opening any ports on your router. Whichever method you choose, do not expose the default port 2283 directly to the internet without TLS. The Immich documentation includes specific proxy configuration snippets for each major reverse proxy, and they matter: without the right headers and body size limits, large video uploads will silently fail.

Backups for Immich itself need a separate plan. The upload folder you specified is the most important thing to back up – that is your actual photos. The PostgreSQL database holds all metadata, albums, facial recognition tags, and shared links, and it must be backed up separately using docker exec to run pg_dump or by using a scheduled backup container. Losing the database and restoring only the upload folder means losing all your organizational work, even though the raw files survive. A weekly automated dump of the database to the same destination as your photo backups is the minimum reasonable setup.
Frequently Asked Questions
Does Immich require a powerful server to run?
Core photo browsing and upload work on a Raspberry Pi 4. Machine learning features like facial recognition can be disabled on low-powered hardware.
Can I use Immich with photos already stored on a NAS?
Yes. Immich supports external libraries, letting you index an existing folder without copying or moving any files.
Is Immich safe to expose to the internet?
It can be, but only behind a reverse proxy with TLS enabled. Never expose port 2283 directly without encryption.





