All Open Source / Local guides
Open Source / Local4 min read

Immich: build a photo library you control

A practical starting point for a private photo library: install Immich, connect your phone, organize a small collection and plan a recoverable backup.

By araNET Studio
Official Immich logo and the project’s published photo-library screenshot, showing desktop and mobile photo views.
Immich project screenshot · v1.112.1.
In this article

A home for the photos on your phone

Immich gives a self-hosted photo collection a timeline, albums and a mobile upload path. It is an interesting first server project because the result is personal and visible: take a photo, upload it and find it again from another device. The server, storage and upkeep are your responsibility.

Start with a small album you can afford to experiment with. Keep the original photos where they are while you learn the system. This guide follows the maintainers’ documentation reviewed on November 2, 2026; it is not a report of a new araNET deployment.

Choose the machine and storage

Use a 64-bit Linux host or full Linux virtual machine with Docker Engine and the Compose plugin installed. The current Immich requirements list a minimum of 6 GB RAM and two CPU cores, recommending 8 GB and four cores. Leave space for the originals, generated media and backups. On older x86 hardware, check the documented CPU instruction requirements as well.

Keep the database on a local filesystem with suitable permissions, preferably an SSD. A network share can hold some media arrangements, but it is not a supported location for the PostgreSQL database. On TrueNAS, use its current application documentation or a suitable Linux VM rather than pasting Linux host-install commands into the NAS shell.

Install with the official Compose files

First follow Docker’s installation instructions for your distribution, including the Compose plugin. These commands should both report a version:

bash
docker --version
docker compose version

Create a new directory. The download commands below write configuration files, so use a fresh folder rather than an existing Immich installation.

bash
mkdir immich-guide
cd immich-guide
curl -fL --output docker-compose.yml https://github.com/immich-app/immich/releases/latest/download/docker-compose.yml
curl -fL --output .env https://github.com/immich-app/immich/releases/latest/download/example.env

Review the downloaded files before starting them. In .env, set UPLOAD_LOCATION to the media directory you chose, keep DB_DATA_LOCATION on local storage and replace DB_PASSWORD with a long random alphanumeric secret. Set TZ for your location. Keep the release setting supplied by the current template for a fresh install; do not combine an old Compose file with an unrelated release.

For a same-machine trial, change the server’s port mapping in docker-compose.yml from 2283:2283 to 127.0.0.1:2283:2283. For a remote Linux host, use an SSH tunnel to reach that loopback port. This lets you finish setup before arranging phone access.

bash
docker compose up -d
docker compose ps

For a remote host, open this tunnel from your own computer using your server’s username and hostname, and leave it running:

bash
ssh -L 2283:127.0.0.1:2283 your-user@your-server

Open http://localhost:2283 on the machine running the browser connection and create the first administrator account. The post-install guide covers that initial setup. A container marked running alone does not confirm the photo workflow works.

Connect your phone and try one album

When you are ready for phone uploads, make Immich reachable through a trusted LAN address or authenticated private network. A phone’s localhost means the phone itself. Adjust the server binding and firewall for that private connection; do not add an internet router port-forward just to make the app connect.

Install the official Immich mobile app, enter your server address and sign in. Choose one small album for upload. Open the same account in the browser, find the uploaded items and open an original at full size. Then create an album and confirm that the intended account can see it.

Mobile backup is affected by phone permissions, connectivity and background scheduling. On iOS, background execution is controlled by the operating system. An enabled toggle does not mean every photo has already reached the server.

Back up the library and its records

A photo upload and a recovery plan solve different problems. Immich needs both the media files and database records to restore the collection correctly. A database dump stored on the same disk does not protect you from that disk failing.

Follow the backup and restore documentation to make an independent copy, then test a restore into an isolated installation. Open a few restored originals and check their albums before relying on the plan.

Keep it useful after the first upload

Before updating, read the upgrade notes, make a current backup and check whether the Compose template needs changes. Afterward, repeat the small test: sign in, upload, open an original and confirm the backup path. Record the version and storage locations somewhere outside the server.

Immich’s code is AGPL-3.0. The software being open source does not remove storage, electricity or maintenance costs. The worthwhile first milestone is a small collection you can find and recover.

Further reading

Read next

Explore the blog