Set Up Immich on AlmaLinux 10 with Docker

By Anurag Singh

Updated on Jul 08, 2025

Set Up Immich on AlmaLinux 10 with Docker

Learn how to set up a private photo management system using Immich on AlmaLinux 10 with Docker and Nginx.

Managing personal photos in the digital age is about more than storage—it's about privacy, speed, and convenience. With Immich, we get a self-hosted photo and video management system with AI-powered features like facial recognition, automatic categorization, and blazing-fast browsing. In this guide, we’ll show how to deploy Immich on AlmaLinux 10 using Docker, and securely expose it using Nginx and HTTPS with a custom domain.

What is Immich?

Immich is a modern, self-hosted photo and video backup solution designed to be a private alternative to Google Photos. Built with performance in mind, Immich uses AI-powered features like facial recognition, object detection, and location clustering to help us organize and search our media. It supports automatic mobile uploads, timeline views, and multi-user access—all while keeping our data fully under our control, on our own server.

Let’s build our private, modern alternative to Google Photos—step by step.

Prerequisites

Before we begin, let’s ensure we have the following in place:

Set Up Immich on AlmaLinux 10 with Docker and Nginx – Private Photo Gallery

Step 1: Update AlmaLinux 10 System

Before installing anything, we’ll make sure our system is up to date.

sudo dnf update -y
sudo dnf install -y epel-release

This ensures we have access to all the necessary packages and dependencies.

Step 2: Install Docker and Docker Compose

Docker is required to containerize the Immich application and its services.

Install Docker:

sudo dnf config-manager --add-repo=https://download.docker.com/linux/centos/docker-ce.repo
sudo dnf install -y docker-ce docker-ce-cli containerd.io

Enable and start Docker:

sudo systemctl enable --now docker

Install Docker Compose (latest release):

sudo curl -L "https://github.com/docker/compose/releases/latest/download/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
sudo chmod +x /usr/local/bin/docker-compose

Verify installation:

docker -v
docker-compose -v

Step 3: Create a Directory for Immich

Let’s organize the project files for Immich in one place.

mkdir -p ~/immich-docker && cd ~/immich-docker

Step 4: Clone the Immich Docker Setup

We’ll pull the official Docker configuration from GitHub:

wget -O docker-compose.yml https://github.com/immich-app/immich/releases/latest/download/docker-compose.yml

Pull the official .env example file:

wget -O .env https://github.com/immich-app/immich/releases/latest/download/example.env

Edit the .env file to modify default ports, upload locations, or database password:

nano .env

We recommend setting:

UPLOAD_LOCATION → e.g., /mnt/immich_uploads
IMMICH_SERVER_PORT → default 2283, can be changed
DB_PASSWORD → use a strong password

Save with CTRL+O, Enter, and exit with CTRL+X.

Step 5: Start Immich via Docker Compose

Spin up all the containers:

docker compose up -d

To confirm services are running:

docker ps

We should see containers for Immich server, Redis, PostgreSQL, machine learning, and image proxy.

Note: You need to wait for few minutes. It take few minutes to get start all containers.

Step 6: Install Nginx and Certbot on AlmaLinux 10

First, install Nginx and Certbot (via EPEL):

sudo dnf install -y nginx
sudo systemctl enable --now nginx
 

Create a new configuration file for your domain (replace photos.yourdomain.com with your actual domain):

sudo nano /etc/nginx/conf.d/immich.conf

Paste the following:

server {
    listen 80;
    server_name photos.yourdomain.com;

    location / {
        proxy_pass http://localhost:2283;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;
        client_max_body_size 200M;  # increase if uploading large videos
    }
}

Save and exit. Then test the Nginx config:

sudo nginx -t

If all is OK, reload Nginx:

sudo systemctl reload nginx

Step 7: Configure Firewall and SELinux

Allow web traffic:

sudo firewall-cmd --permanent --add-service=http
sudo firewall-cmd --permanent --add-service=https
sudo firewall-cmd --reload

By default, SELinux blocks Nginx from acting as a proxy. We must allow it explicitly:

sudo setsebool -P httpd_can_network_connect 1

Step 8: Install Certbot

sudo dnf install -y certbot python3-certbot-nginx

Obtain SSL Certificate with Certbot. Run this command to get a free SSL certificate:

sudo certbot --nginx -d photos.yourdomain.com

Let’s Encrypt certificates expire every 90 days. Certbot sets up automatic renewal, but we can test it with:

sudo certbot renew --dry-run

This ensures our Immich deployment stays secure without manual intervention.

Final Immich Access (with HTTPS)

After setup, Immich is now available at:

https://photos.yourdomain.com

welcome to immich hostmycode

Enjoy secure, private, and full-featured photo management from any device.

Final Thoughts

By setting up Immich on AlmaLinux 10 using Docker, we gain full control of our personal or family photo storage, away from big tech platforms. We also get modern features like face recognition and automatic syncing—without sacrificing our privacy.

Whether you're a developer, photographer, or a privacy-conscious user, hosting Immich is a step toward digital independence. Bookmark this guide, share it with friends, and revisit it as we scale or fine-tune our photo archive.