How To Install Immich on Fedora 43

Privacy matters. In an era where cloud storage providers have access to your most personal moments, self-hosting your photo library offers complete control over your data. Immich emerges as a powerful, open-source alternative to Google Photos, delivering enterprise-grade features without sacrificing your privacy or requiring expensive subscriptions. This comprehensive guide walks you through installing Immich on Fedora 43, transforming your server into a private photo management powerhouse.
Fedora 43 provides an excellent foundation for hosting Immich, combining cutting-edge technology with robust security features. Whether you’re managing thousands of family photos or building a complete media archive, this tutorial covers everything from initial system preparation to mobile app configuration. By the end, you’ll have a fully functional, self-hosted photo management solution that rivals commercial alternatives.
Understanding Immich
Immich stands out as a high-performance, self-hosted photo and video management platform designed for privacy-conscious users. Unlike traditional cloud services, every photo, video, and piece of metadata remains under your complete control.
Core Features and Capabilities
The platform delivers an impressive feature set that competes directly with Google Photos. Facial recognition powered by machine learning automatically identifies and clusters faces across your entire library. The timeline view presents your memories chronologically, while the “memories” feature resurfaces photos from previous years, creating those nostalgic moments you’d expect from premium services.
Map-based navigation lets you explore photos by location, utilizing GPS metadata embedded in your images. Partner sharing enables you to create shared libraries with family members, while the duplicate detection system prevents storage waste. Support for RAW formats, Live Photos, and motion photos ensures professional photographers and casual users alike find everything they need.
Mobile applications for both iOS and Android provide seamless backup functionality. The auto-upload feature mirrors Google Photos’ convenience, automatically backing up new photos whenever you open the app. Advanced search capabilities leverage CLIP-based machine learning, allowing natural language queries like “beach sunset” or “birthday cake” to find relevant photos instantly.
Prerequisites and System Requirements
Before diving into installation, ensure your system meets the necessary requirements for optimal Immich performance.
Hardware Specifications
A minimum of 4GB RAM allows Immich to function, though 6GB or more delivers noticeably smoother performance, especially during initial photo processing. The machine learning features benefit from at least 2 CPU cores, with 4 cores recommended for larger libraries exceeding 10,000 photos.
Storage requirements depend entirely on your photo collection size. Plan for at least 20% more space than your current library to accommodate thumbnails, metadata, and future growth. A 1TB photo library might require 1.2TB of available storage.
Software Dependencies
Fedora 43 should be freshly updated before installation. Root or sudo privileges are essential for installing system packages and managing services. Basic command-line familiarity helps troubleshoot issues, though this guide provides complete commands.
Internet connectivity during setup enables package downloads and Docker image pulls. For remote access, consider configuring a domain name or dynamic DNS service, though this remains optional for initial setup.
Pre-Installation Verification
Update your system packages first. This ensures compatibility and security:
sudo dnf upgrade --refresh -y
Verify your Fedora version matches the expected release:
cat /etc/fedora-release
Check available disk space to confirm sufficient room for your photo library:
df -h
These preliminary checks prevent issues during installation and ensure smooth deployment.
Installing Docker Engine on Fedora 43
Docker serves as the foundation for Immich, containerizing all required services for simplified deployment and management.
Removing Conflicting Packages
Older Docker versions or Podman conflicts can cause installation issues. Remove any existing installations:
sudo dnf remove docker docker-client docker-client-latest docker-common docker-latest docker-latest-logrotate docker-logrotate docker-engine podman runc
This command ensures a clean slate for the official Docker installation.
Adding Docker’s Official Repository
Install the dnf-plugins-core package to enable repository management:
sudo dnf install dnf-plugins-core -y
Add Docker’s official Fedora repository:
sudo dnf config-manager --add-repo https://download.docker.com/linux/fedora/docker-ce.repo
This repository provides the latest stable Docker releases optimized for Fedora.
Installing Docker Components
Install Docker Engine along with its associated packages:
sudo dnf install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin -y
The docker-ce package contains the core Docker engine, while docker-ce-cli provides the command-line interface. The containerd.io package handles container runtime, and docker-compose-plugin enables Docker Compose functionality.
Configuring Docker Service
Start the Docker daemon:
sudo systemctl start docker
Enable Docker to start automatically on system boot:
sudo systemctl enable docker
Verify the installation succeeded:
sudo docker --version
You should see output displaying the Docker version, confirming successful installation.
Managing User Permissions
Add your user account to the docker group to run Docker commands without sudo:
sudo usermod -aG docker $USER
Log out and log back in for group membership changes to take effect. Alternatively, activate the changes immediately:
newgrp docker
Test Docker functionality without sudo:
docker run hello-world
This command downloads a test image and runs a simple container. Success confirms proper configuration.
Setting Up Docker Compose
Docker Compose orchestrates multiple containers as a unified application, essential for Immich’s multi-service architecture.
Install the Docker Compose plugin via Fedora’s package manager:
sudo dnf install docker-compose-plugin -y
Verify the installation:
docker compose version
Note that Fedora 43 uses the newer “docker compose” (v2) syntax rather than the legacy “docker-compose” command. The plugin-based approach integrates directly with Docker, providing better performance and compatibility.
Creating the Directory Structure
Organized directory structure simplifies management and backups.
Create a dedicated directory for Immich:
mkdir -p ~/immich-app
cd ~/immich-app
Alternatively, use a system-wide location:
sudo mkdir -p /opt/immich
cd /opt/immich
Create subdirectories for persistent data:
mkdir -p ./library
mkdir -p ./postgres
The library directory stores uploaded photos, while postgres contains database files. These directories persist data across container restarts and updates.
Downloading Immich Configuration Files
Immich provides official Docker Compose configurations that simplify deployment.
Download the docker-compose.yml file:
wget -O docker-compose.yml https://github.com/immich-app/immich/releases/latest/download/docker-compose.yml
Download the environment variable template:
wget -O .env https://github.com/immich-app/immich/releases/latest/download/example.env
Verify successful downloads:
ls -la
You should see both docker-compose.yml and .env files in your directory.
The docker-compose.yml file defines four primary services: immich_server (the main application), immich_machine_learning (AI features), immich_postgres (database), and immich_redis (caching). These services work together to deliver full Immich functionality.
Configuring Environment Variables
The .env file contains critical configuration parameters that customize your Immich installation.
Open the environment file with your preferred text editor:
nano .env
Essential Configuration Parameters
Locate the UPLOAD_LOCATION variable and set it to your photo storage path:
UPLOAD_LOCATION=/home/yourusername/immich-app/library
Replace “yourusername” with your actual username. Use absolute paths, not relative references. The directory must exist and have proper permissions.
Generate a secure database password:
openssl rand -base64 32
Copy the generated password and set it in your .env file:
DB_PASSWORD=your_generated_password_here
Never use simple passwords for database security. Strong passwords prevent unauthorized access.
Optional Configuration Settings
Set your timezone for accurate timestamps:
TZ=America/New_York
Replace with your local timezone from the IANA timezone database.
The default PostgreSQL configuration typically works well:
DB_DATABASE_NAME=immich
DB_USERNAME=postgres
Only modify these if you have specific requirements.
Save the file (Ctrl+X, then Y, then Enter in nano) and verify your changes:
cat .env | grep -v '^#' | grep -v '^$'
This command displays only active configuration lines, excluding comments and blank lines.
Deploying Immich with Docker Compose
With configuration complete, deploy the Immich services.
Pull the required Docker images:
docker compose pull
This downloads all necessary container images from Docker Hub. Depending on your internet speed, this may take several minutes. The images total approximately 2-3GB.
Start all Immich services in detached mode:
docker compose up -d
The -d flag runs containers in the background, freeing your terminal for other tasks. Initial startup takes 2-3 minutes as databases initialize and services connect.
Monitor the deployment progress:
docker compose logs -f
Press Ctrl+C to exit log viewing. Look for messages indicating successful service startup. The machine learning service may take longer to initialize as it downloads AI models.
Verify all containers are running:
docker compose ps
All services should show “Up” status. If any service shows “Exited” or “Restarting,” investigate the logs for that specific service:
docker compose logs immich_server
Replace “immich_server” with the problematic service name.
Configuring Firewall Access
Fedora’s firewalld requires explicit port permissions for external access.
Open port 2283 for Immich web interface:
sudo firewall-cmd --permanent --add-port=2283/tcp
Reload firewall rules to apply changes:
sudo firewall-cmd --reload
Verify the rule was added:
sudo firewall-cmd --list-ports
Port 2283 should appear in the output.
For production deployments, consider placing Immich behind a reverse proxy like Nginx or Caddy. This enables HTTPS encryption and allows using standard ports (80/443). The reverse proxy configuration falls outside this tutorial’s scope but significantly improves security.
Initial Immich Setup and Configuration
Access your new Immich installation through a web browser.
Navigate to:
http://your-server-ip:2283
Replace “your-server-ip” with your Fedora server’s IP address. For local testing, use:
http://localhost:2283
Creating Your Administrator Account
The first account created automatically receives administrator privileges. Enter a valid email address (used for login, not verification) and a strong password meeting Immich’s complexity requirements.
Click “Sign Up” to create your account. You’ll immediately log in to the main dashboard.

Configuring Initial Settings
Navigate to Administration Settings (gear icon) to configure core functionality. The Storage Template setting determines how Immich organizes uploaded photos in your library directory. The default template works well for most users, organizing by year and month.
Enable machine learning features for facial recognition and smart search. The default CLIP model provides excellent performance on CPU-only systems, though GPU acceleration improves processing speed for large libraries.
Configure thumbnail generation quality based on your preferences. Higher quality thumbnails consume more storage but provide better preview experiences.
Installing and Configuring Mobile Applications
Mobile apps transform Immich into a true Google Photos replacement, enabling automatic photo backup from your smartphone.
Download the Immich mobile app from the Apple App Store (iOS) or Google Play Store (Android). Both apps offer identical core functionality.
Connecting to Your Server
Open the app and enter your server URL:
http://your-server-ip:2283
For secure connections, use HTTPS if you’ve configured a reverse proxy with SSL certificates. Self-signed certificates require accepting security warnings on mobile devices.
Enter your email and password created during web setup. The app connects to your Immich server and displays your (currently empty) library.
Enabling Automatic Backup
Navigate to the Backup settings within the mobile app. Enable “Background Backup” to automatically upload new photos. Configure backup to occur only on WiFi to avoid mobile data charges.
Select which albums or folders to back up. Many users exclude screenshots or temporary photos from automatic backup. The selective backup feature provides granular control over what uploads.
Configure battery optimization settings on Android to prevent the system from limiting Immich’s background activity. iOS typically handles background uploads without additional configuration.
Addressing SELinux Permission Challenges
Fedora’s SELinux security module sometimes prevents Docker from accessing mounted volumes, a common issue when deploying Immich.
Identifying SELinux Issues
If Immich fails to access your upload directory, check for SELinux denials:
sudo ausearch -m avc -ts recent
Permission denied errors in Docker logs often indicate SELinux blocking volume access.
Applying Correct SELinux Context
Set the appropriate SELinux context for your Immich directories:
sudo chcon -Rt svirt_sandbox_file_t ~/immich-app/library
sudo chcon -Rt svirt_sandbox_file_t ~/immich-app/postgres
This command grants Docker containers permission to read and write these directories while maintaining SELinux protection.
For persistent SELinux policies, use semanage:
sudo semanage fcontext -a -t svirt_sandbox_file_t "~/immich-app/library(/.*)?"
sudo restorecon -Rv ~/immich-app/library
Alternative Volume Mounting Options
Docker Compose supports the :Z suffix for automatic SELinux labeling:
volumes:
- /path/to/library:/usr/src/app/upload:Z
Add :Z to volume definitions in docker-compose.yml, then recreate containers:
docker compose up -d --force-recreate
This approach automatically applies correct SELinux contexts without manual intervention.
Post-Installation Optimization
Fine-tuning your installation ensures long-term reliability and performance.
Implementing Backup Strategies
Database backups protect against data loss. Create a simple backup script:
#!/bin/bash
docker compose exec -T immich_postgres pg_dump -U postgres immich > backup_$(date +%Y%m%d).sql
Save this script and schedule it with cron:
crontab -e
Add a line to run daily backups at 2 AM:
0 2 * * * /path/to/backup-script.sh
Don’t forget to back up your photo library directory and .env file. Consider using rsync or dedicated backup solutions for comprehensive protection.
Monitoring System Resources
Watch resource usage to identify potential bottlenecks:
docker stats
This command displays real-time CPU, memory, and network statistics for all containers. The machine learning service typically consumes the most resources during photo processing.
Updating Immich
Regular updates provide security patches and new features. The update process is straightforward:
cd ~/immich-app
docker compose pull
docker compose up -d
Docker Compose automatically recreates containers with updated images while preserving your data. Always review the changelog before updating to identify potential breaking changes.
Troubleshooting Common Issues
Despite careful configuration, occasional issues may arise.
Container Startup Failures
If containers fail to start, examine service-specific logs:
docker compose logs immich_postgres
Database initialization errors often stem from incorrect environment variables. Verify DB_PASSWORD matches across your .env file.
Port conflicts prevent services from binding to their assigned ports. Check if port 2283 is already in use:
sudo ss -tlnp | grep 2283
If another process occupies the port, either stop that service or modify Immich’s port in docker-compose.yml.
Mobile App Connection Problems
Connection failures typically involve incorrect server URLs. Ensure your URL includes the protocol (http:// or https://) and correct port number. Firewalls on your server or network might block mobile device access.
Test connectivity from your mobile device’s browser before troubleshooting the app. If the web interface loads in the browser, the app should connect successfully.
Machine Learning Performance
CPU-based machine learning works adequately for most users, processing photos at 1-2 seconds per image. Large libraries may require patience during initial facial recognition.
The default CLIP model balances quality and performance. Alternative models offer different trade-offs between speed and accuracy. Experiment with models in the Administration settings to find optimal configuration for your hardware.
Database Connection Errors
PostgreSQL connection failures often indicate the database container isn’t ready when the application starts. Wait 2-3 minutes for full initialization, then check container status:
docker compose ps immich_postgres
If the database repeatedly crashes, examine its logs for specific error messages:
docker compose logs immich_postgres
Insufficient disk space, corrupted data files, or incorrect permissions commonly cause database failures.
Congratulations! You have successfully installed Immich. Thanks for using this tutorial for installing Immich self-hosted on Fedora 43 Linux system. For additional help or useful information, we recommend you check the official Immich website.