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:
- A AlmaLinux 10 dedicated server or KVM VPS.
- A basic programming knowledge.
- A domain name pointing to server IP.
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
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.