11 - Aug - 2026

I built the Google Photos alternative I actually control

For years, I used Google Photos to back up and view my photos and videos. However, the more I used it, the more aware I became that I was saving all my memories to a single destination. I wanted the reassurance that came with knowing exactly where my files were stored and having complete control over them, and thankfully, Immich provided the perfect solution.

This impressive self-hosted photo management platform runs in Docker, and I wrote about it previously as an example of what to use. Here, I’ll go through the steps of what to do to build your own photo library. I used Mac Terminal to run commands, but the same basic process works with Linux Terminal or Windows Terminal, or with PowerShell on Windows.

First, get Docker ready

Install Docker Desktop before touching the terminal

The first thing you must do is install Docker Desktop, as Immich uses this to package all the necessary components into separate containers. Linux users can install Docker Engine and the Docker Compose plugin, while Windows users can use Docker Desktop, with WSL 2 also supported.

As soon as Docker is up and running, you don’t need to focus much on its interface, as the terminal window is where most of the magic happens. This is where you will run the commands that tell Docker what to do. It may sound a little complicated at first, but essentially, Docker provides a controlled environment in which Immich and its supporting services can run without having to manually configure each component.

Create your Immich project

Use the terminal to create a home for Immich

The Immich container inside Docker.

Now we can start building the server. The first step is to open Terminal and create an Immich directory:

mkdir ~/immich-app
cd ~/immich-app

The first command creates a folder called immich-app in your home directory. The second moves Terminal into that folder. This is essential, as it keeps everything Immich-related neatly in one place.

Next, get Terminal to download the two configuration files Immich needs:

curl -L -o docker-compose.yml https://github.com/immich-app/immich/releases/latest/download/docker-compose.yml
curl -L -o .env https://github.com/immich-app/immich/releases/latest/download/example.env

Immich uses a Docker Compose file and an environment file. The first specifies which containers to create and how to configure them. The .env file contains settings that tell those containers where your photos and database should be stored. So, rather than downloading a single application, we give Docker instructions for how to assemble it.

Edit the environment file

Tell Immich where to store your photos

Docker builds and starts the services.

This is the part where you start to take back control of your photo library. Start by opening the .env file in a text editor. Among its settings, you’ll find:

UPLOAD_LOCATION=./library

DB_DATA_LOCATION=./postgres

UPLOAD_LOCATION determines where Immich stores your uploaded photos and other media, while DB_DATA_LOCATION determines where its PostgreSQL database is stored. Immich recommends keeping your database on local storage rather than on a shared network.

This file also includes a database password. You should change this to your own unique password, using only letters and numbers. You can also set your time zone here if you want Immich to use a time zone other than UTC. Importantly, before Immich even starts, you have already decided where your data should live, instead of uploading it all to someone else’s cloud.

Start Immich with Docker

Let Docker build the server for you

Terminal confirms Docker services are healthy.

Once the configuration is saved, return to Terminal and make sure you’re still inside the immich-app directory. Then run:

docker compose up -d

This is the command that makes everything happen. Docker reads the docker-compose.yml file, downloads the required Immich images, creates the containers, connects the services together, and starts them. The -d part means Docker runs everything in the background, so you can close Terminal without stopping Immich from running.

Immich separates several different jobs into services using containers. These include the main Immich server, database, Redis, and machine-learning components, among others. Docker then ensures they work smoothly together, without you lifting a finger.

Use docker compose ps to check everything is running. Once everything is working as intended, the Docker installation has done its job, and the terminal becomes much less mysterious. You’re simply sending a handful of commands to make Docker do what you want it to do.

Open your new photo library

Finish the setup in your browser and view on any device

Now comes the fun part. Immich has a fantastic interface that includes most of the features you’ll find in Google Photos, such as timeline views, albums, multiple sharing options, facial recognition, and geographic data. With the containers running, open a browser and go to:

http://localhost:2283

If Immich is running on another computer on your network, replace localhost with that computer’s IP address. This way, you can view your library on multiple devices around the home. Things really start to feel like Google Photos when you download the Immich mobile app and connect it to your Immich server, which lets you configure automatic photo backups from your phone.

Now your photos are no longer being stored on Google’s servers. They are safely in the location you selected when configuring Docker within your self-hosted setup.

Creating a self-hosted Immich photo library was easier than expected

Immich itself is both familiar and simple to use. The intimidating part of this process was familiarizing myself with the tools that work in the background. Once Docker is installed, the terminal commands are surprisingly straightforward: create a folder, download Immich’s configuration, specify where your data belongs, and run a single Docker Compose command.

These few steps are enough to turn any old Mac, PC, or Linux machine into a personal photo server. And while it may not be as automated and feature-rich as Google Photos, controlling your own hardware and storage means you ultimately control what happens to your photos.

Leave a Reply

Your email address will not be published. Required fields are marked *