Immich - Self-hosted Google Photos
Immich is a self-hosted Google Photos app for Android, iOS and web. Immich is better than Photoprism as it has native mobile apps and can sync to the backend natively.
Immich is hosted behind Traefik using native authentication, without Google OAuth2. Geolocation works for all photos. Face recognition, machine learning, etc do yet not work.
Android App
Android app supports background and foreground data sync, library support, sharing, etc.
Backend Deployment
After deployment do not change the hosted URL (eg. photos.example.com or immich.example.com).
File: docker-compose.yaml
# Filename: docker-compose.yaml
# Download the latest docker-compose and .env from
# https://github.com/immich-app/immich/releases/latest/download/docker-compose.yml
# https://github.com/immich-app/immich/releases/latest/download/example.env
#
# Deploy behind traefik
#
name: immich-example-com
services:
immich-server:
container_name: immich_server.example.com
image: ghcr.io/immich-app/immich-server:${IMMICH_VERSION:-release}
volumes:
- ${UPLOAD_LOCATION}:/usr/src/app/upload
- /etc/localtime:/etc/localtime:ro
env_file:
- .env
depends_on:
- redis
- database
restart: always
labels:
- com.centurylinklabs.watchtower.enable=true
- traefik.enable=true
- traefik.http.routers.immich.rule=Host(`immich.example.com`) || Host(`photos.example.com`)
- traefik.http.routers.immich.tls=true
- traefik.http.routers.immich.tls.certresolver=lets-encrypt
immich-microservices:
container_name: immich_microservices.example.com
image: ghcr.io/immich-app/immich-server:${IMMICH_VERSION:-release}
# extends: # uncomment this section for hardware acceleration - see https://immich.app/docs/features/hardware-transcoding
# file: hwaccel.transcoding.yml
# service: cpu # set to one of [nvenc, quicksync, rkmpp, vaapi, vaapi-wsl] for accelerated transcoding
volumes:
- ${UPLOAD_LOCATION}:/usr/src/app/upload
- /etc/localtime:/etc/localtime:ro
env_file:
- .env
depends_on:
- redis
- database
restart: always
labels:
- com.centurylinklabs.watchtower.enable=true
immich-machine-learning:
container_name: immich_machine_learning.example.com
# For hardware acceleration, add one of -[armnn, cuda, openvino] to the image tag.
# Example tag: ${IMMICH_VERSION:-release}-cuda
image: ghcr.io/immich-app/immich-machine-learning:${IMMICH_VERSION:-release}
# extends: # uncomment this section for hardware acceleration - see https://immich.app/docs/features/ml-hardware-acceleration
# file: hwaccel.ml.yml
# service: cpu # set to one of [armnn, cuda, openvino, openvino-wsl] for accelerated inference - use the `-wsl` version for WSL2 where applicable
volumes:
- ./model-cache:/cache
env_file:
- .env
restart: always
labels:
- com.centurylinklabs.watchtower.enable=true
redis:
container_name: immich_redis.example.com
image: registry.hub.docker.com/library/redis:6.2-alpine@sha256:84882e87b54734154586e5f8abd4dce69fe7311315e2fc6d67c29614c8de2672
restart: always
labels:
- com.centurylinklabs.watchtower.enable=true
database:
container_name: immich_postgres.example.com
image: registry.hub.docker.com/tensorchord/pgvecto-rs:pg14-v0.2.0@sha256:90724186f0a3517cf6914295b5ab410db9ce23190a2d9d0b9dd6463e3fa298f0
environment:
POSTGRES_PASSWORD: ${DB_PASSWORD}
POSTGRES_USER: ${DB_USERNAME}
POSTGRES_DB: ${DB_DATABASE_NAME}
volumes:
- ${DB_DATA_LOCATION}:/var/lib/postgresql/data
restart: always
labels:
- com.centurylinklabs.watchtower.enable=trueFile: .env
# You can find documentation for all the supported env variables at https://immich.app/docs/install/environment-variables
# The location where your uploaded files are stored
UPLOAD_LOCATION=./data-library
# The location where your database files are stored
DB_DATA_LOCATION=./data-postgres
# The Immich version to use. You can pin this to a specific version like "v1.71.0"
IMMICH_VERSION=release
# Connection secret for postgres. You should change it to a random password
DB_PASSWORD=d41d8cd24f88b204e9765998ecf8427e
# The values below this line do not need to be changed
###################################################################################
DB_USERNAME=postgres
DB_DATABASE_NAME=immichPending Config
#TODO Google OAuth2. #TODO Face recognition. #TODO Machine learning without CPU or GPU support.