Files
Containr/templates/immich.md
T
2026-04-10 12:02:36 +02:00

5.2 KiB

Immich Photo & Video Backup Template

Overview

Immich is a self-hosted photo and video backup solution directly from your mobile phone.

Quick Start

# Create docker-compose.yml with the content below
docker-compose up -d

Docker Compose

version: '3.8'

name: immich

services:
  immich-server:
    container_name: immich_server
    image: ghcr.io/immich-app/immich-server:release
    volumes:
      - ./upload:/usr/src/app/upload
      - /etc/localtime:/etc/localtime:ro
    environment:
      REDIS_HOSTNAME: immich-redis
      DB_HOSTNAME: immich-postgres
      DB_USERNAME: immich
      DB_PASSWORD: immich
      DB_DATABASE_NAME: immich
      TYPESENSE_API_KEY: replace-with-typesense-api-key
    ports:
      - "2283:2283"
    depends_on:
      - immich-redis
      - immich-postgres
      - immich-typesense
    restart: always
    networks:
      - immich-network

  immich-machine-learning:
    container_name: immich_machine_learning
    image: ghcr.io/immich-app/immich-machine-learning:release
    volumes:
      - model-cache:/cache
    environment:
      REDIS_HOSTNAME: immich-redis
      DB_HOSTNAME: immich-postgres
      DB_USERNAME: immich
      DB_PASSWORD: immich
      DB_DATABASE_NAME: immich
      TYPESENSE_API_KEY: replace-with-typesense-api-key
    restart: always
    networks:
      - immich-network

  immich-redis:
    image: redis:7-alpine
    container_name: immich-redis
    restart: always
    networks:
      - immich-network

  immich-postgres:
    image: postgres:15-alpine
    container_name: immich-postgres
    restart: always
    environment:
      POSTGRES_DB: immich
      POSTGRES_USER: immich
      POSTGRES_PASSWORD: immich
    volumes:
      - immich-postgres-data:/var/lib/postgresql/data
    networks:
      - immich-network

  immich-typesense:
    image: typesense/typesense:0.24.0
    container_name: immich-typesense
    restart: always
    environment:
      TYPESENSE_API_KEY: replace-with-typesense-api-key
      TYPESENSE_DATA_DIR: /data
    volumes:
      - immich-typesense-data:/data
    networks:
      - immich-network

volumes:
  immich-postgres-data:
  immich-typesense-data:
  model-cache:

networks:
  immich-network:
    driver: bridge

Environment Variables

  • REDIS_HOSTNAME: Redis service name
  • DB_HOSTNAME: PostgreSQL service name
  • DB_USERNAME: Database username
  • DB_PASSWORD: Database password
  • DB_DATABASE_NAME: Database name
  • TYPESENSE_API_KEY: API key for search functionality

Setup Guide

  1. Generate Typesense API Key:

    openssl rand -base64 32
    
  2. Create Directories:

    mkdir -p upload
    mkdir -p immich-data
    
  3. Deploy:

    docker-compose up -d
    
  4. Access: Open http://localhost:2283

  5. Initial Setup:

    • Create admin account
    • Set up library path
    • Configure mobile app

Mobile App Setup

  1. Download App: Install Immich mobile app (iOS/Android)
  2. Server URL: http://your-server-ip:2283
  3. Login: Use admin credentials
  4. Backup Settings: Enable auto-backup for photos/videos

Directory Structure

immich/
├── upload/
│   ├── library/
│   │   ├── 2024/
│   │   │   ├── 01-January/
│   │   │   └── 02-February/
│   │   └── 2023/
│   ├── encoded-video/
│   ├── thumbs/
│   └── profile/
├── immich-data/
└── docker-compose.yml

Storage Requirements

  • Photos: ~5MB per photo (varies by quality)
  • Videos: ~100MB per minute (1080p)
  • Database: ~100MB for 10k photos
  • Cache: ~10% of library size

Performance Optimization

# For large libraries (>100k photos)
environment:
  - IMMICH_TELEMETRY_ON=false
  - LOG_LEVEL=verbose

# Resource limits
deploy:
  resources:
    limits:
      memory: 4G
      cpus: '2.0'
    reservations:
      memory: 2G
      cpus: '1.0'

Reverse Proxy (Traefik)

labels:
  - "traefik.enable=true"
  - "traefik.http.routers.immich.rule=Host(`photos.yourdomain.com`)"
  - "traefik.http.routers.immich.tls=true"
  - "traefik.http.routers.immich.tls.certresolver=letsencrypt"
  - "traefik.http.services.immich.loadbalancer.server.port=3001"

Backup Strategy

# Backup entire Immich data
docker run --rm -v immich-postgres-data:/data -v $(pwd):/backup alpine tar czf /backup/immich-db.tar.gz -C /data .
tar czf immich-upload.tar.gz upload/

# Restore database
docker run --rm -v immich-postgres-data:/data -v $(pwd):/backup alpine tar xzf /backup/immich-db.tar.gz -C /data

Maintenance

# Check logs
docker-compose logs -f immich-server

# Restart services
docker-compose restart

# Update images
docker-compose pull && docker-compose up -d

# Clean up unused images
docker image prune -f

Monitoring

  • Health Check: Auto-restart on failure
  • Storage: Monitor disk space usage
  • Performance: Check CPU/memory during uploads
  • Backup: Regular database and file backups

Security

  • Change default passwords
  • Use HTTPS in production
  • Regular updates
  • Network access control
  • Backup encryption

Troubleshooting

  • Upload failures: Check disk space and permissions
  • Slow performance: Verify system resources
  • Mobile sync: Check network connectivity
  • Database issues: Review PostgreSQL logs