This commit is contained in:
msnie
2024-07-27 21:38:55 +02:00
parent 84eb64b918
commit c737b459ae
2 changed files with 354 additions and 257 deletions
+114 -90
View File
@@ -1,107 +1,131 @@
###################################################################################
# Database
###################################################################################
# NOTE: The following four database variables support Docker secrets by adding a *_FILE suffix to the variable name
# See the docker-compose documentation on secrets for additional details: https://docs.docker.com/compose/compose-file/compose-file-v3/#secrets
DB_HOSTNAME=immich_postgres
DB_USERNAME=postgres
# 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=/srv/immich/uploads
# The location where your database files are stored
DB_DATA_LOCATION=/srv/immich/pgdata
# To set a timezone, uncomment the next line and change Etc/UTC to a TZ identifier from this list: https://en.wikipedia.org/wiki/List_of_tz_database_time_zones#List
# TZ=Etc/UTC
# 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=postgres_kaf9asfjkas8asfhjasf333
# The values below this line do not need to be changed
###################################################################################
DB_USERNAME=postgres
DB_DATABASE_NAME=immich
# Optional Database settings:
# DB_PORT=5432
###################################################################################
# Redis
###################################################################################
REDIS_HOSTNAME=immich_redis
# REDIS_URL will be used to pass custom options to ioredis.
# Example for Sentinel
# {"sentinels":[{"host":"redis-sentinel-node-0","port":26379},{"host":"redis-sentinel-node-1","port":26379},{"host":"redis-sentinel-node-2","port":26379}],"name":"redis-sentinel"}
# REDIS_URL=ioredis://eyJzZW50aW5lbHMiOlt7Imhvc3QiOiJyZWRpcy1zZW50aW5lbDEiLCJwb3J0IjoyNjM3OX0seyJob3N0IjoicmVkaXMtc2VudGluZWwyIiwicG9ydCI6MjYzNzl9XSwibmFtZSI6Im15bWFzdGVyIn0=
# Optional Redis settings:
# Note: these parameters are not automatically passed to the Redis Container
# to do so, please edit the docker-compose.yml file as well. Redis is not configured
# via environment variables, only redis.conf or the command line
# REDIS_PORT=6379
# REDIS_DBINDEX=0
# REDIS_USERNAME=
# REDIS_PASSWORD=
# REDIS_SOCKET=
###################################################################################
# Upload File Location
#
# This is the location where uploaded files are stored.
###################################################################################
UPLOAD_LOCATION=/srv/immich/uploads
###################################################################################
# Typesense
###################################################################################
TYPESENSE_API_KEY=a897scf-ac8c3aghjfghafwfgr44k-567cvhdf3odjkfg
# TYPESENSE_ENABLED=false
# TYPESENSE_URL uses base64 encoding for the nodes json.
# Example JSON that was used:
# [
# { 'host': 'typesense-1.example.net', 'port': '443', 'protocol': 'https' },
# { 'host': 'typesense-2.example.net', 'port': '443', 'protocol': 'https' },
# { 'host': 'typesense-3.example.net', 'port': '443', 'protocol': 'https' },
# ]
# TYPESENSE_URL=ha://WwogICAgeyAnaG9zdCc6ICd0eXBlc2Vuc2UtMS5leGFtcGxlLm5ldCcsICdwb3J0JzogJzQ0MycsICdwcm90b2NvbCc6ICdodHRwcycgfSwKICAgIHsgJ2hvc3QnOiAndHlwZXNlbnNlLTIuZXhhbXBsZS5uZXQnLCAncG9ydCc6ICc0NDMnLCAncHJvdG9jb2wnOiAnaHR0cHMnIH0sCiAgICB7ICdob3N0JzogJ3R5cGVzZW5zZS0zLmV4YW1wbGUubmV0JywgJ3BvcnQnOiAnNDQzJywgJ3Byb3RvY29sJzogJ2h0dHBzJyB9LApd
###################################################################################
# Reverse Geocoding
#
# Reverse geocoding is done locally which has a small impact on memory usage
# This memory usage can be altered by changing the REVERSE_GEOCODING_PRECISION variable
# This ranges from 0-3 with 3 being the most precise
# 3 - Cities > 500 population: ~200MB RAM
# 2 - Cities > 1000 population: ~150MB RAM
# 1 - Cities > 5000 population: ~80MB RAM
# 0 - Cities > 15000 population: ~40MB RAM
####################################################################################
# DISABLE_REVERSE_GEOCODING=false
# REVERSE_GEOCODING_PRECISION=3
# ###################################################################################
# WEB - Optional
#
# Custom message on the login page, should be written in HTML form.
# For example:
# PUBLIC_LOGIN_PAGE_MESSAGE="This is a demo instance of Immich.<br><br>Email: <i>demo@demo.de</i><br>Password: <i>demo</i>"
# # Database
# ###################################################################################
PUBLIC_LOGIN_PAGE_MESSAGE=Look
# # NOTE: The following four database variables support Docker secrets by adding a *_FILE suffix to the variable name
# # See the docker-compose documentation on secrets for additional details: https://docs.docker.com/compose/compose-file/compose-file-v3/#secrets
# DB_HOSTNAME=immich_postgres
# DB_USERNAME=postgres
# DB_PASSWORD=postgres_kaf9asfjkas8asfhjasf333
# DB_DATABASE_NAME=immich
# # Optional Database settings:
# # DB_PORT=5432
# ###################################################################################
# Alternative Service Addresses - Optional
#
# This is an advanced feature for users who may be running their immich services on different hosts.
# It will not change which address or port that services bind to within their containers, but it will change where other services look for their peers.
# Note: immich-microservices is bound to 3002, but no references are made
# # Redis
# ###################################################################################
IMMICH_WEB_URL=http://immich-web:3000
IMMICH_SERVER_URL=http://immich-server:3001
IMMICH_MACHINE_LEARNING_URL=http://immich-machine-learning:3003
# REDIS_HOSTNAME=immich_redis
# # REDIS_URL will be used to pass custom options to ioredis.
# # Example for Sentinel
# # {"sentinels":[{"host":"redis-sentinel-node-0","port":26379},{"host":"redis-sentinel-node-1","port":26379},{"host":"redis-sentinel-node-2","port":26379}],"name":"redis-sentinel"}
# # REDIS_URL=ioredis://eyJzZW50aW5lbHMiOlt7Imhvc3QiOiJyZWRpcy1zZW50aW5lbDEiLCJwb3J0IjoyNjM3OX0seyJob3N0IjoicmVkaXMtc2VudGluZWwyIiwicG9ydCI6MjYzNzl9XSwibmFtZSI6Im15bWFzdGVyIn0=
# # Optional Redis settings:
# # Note: these parameters are not automatically passed to the Redis Container
# # to do so, please edit the docker-compose.yml file as well. Redis is not configured
# # via environment variables, only redis.conf or the command line
# # REDIS_PORT=6379
# # REDIS_DBINDEX=0
# # REDIS_USERNAME=
# # REDIS_PASSWORD=
# # REDIS_SOCKET=
# ###################################################################################
# Alternative API's External Address - Optional
#
# This is an advanced feature used to control the public server endpoint returned to clients during Well-known discovery.
# You should only use this if you want mobile apps to access the immich API over a custom URL. Do not include trailing slash.
# NOTE: At this time, the web app will not be affected by this setting and will continue to use the relative path: /api
# Examples: http://localhost:3001, http://immich-api.example.com, etc
# # Upload File Location
# #
# # This is the location where uploaded files are stored.
# ###################################################################################
IMMICH_API_URL_EXTERNAL=https://imm.knast.cc
# UPLOAD_LOCATION=/srv/immich/uploads
# ###################################################################################
# # Typesense
# ###################################################################################
# TYPESENSE_API_KEY=a897scf-ac8c3aghjfghafwfgr44k-567cvhdf3odjkfg
# # TYPESENSE_ENABLED=false
# # TYPESENSE_URL uses base64 encoding for the nodes json.
# # Example JSON that was used:
# # [
# # { 'host': 'typesense-1.example.net', 'port': '443', 'protocol': 'https' },
# # { 'host': 'typesense-2.example.net', 'port': '443', 'protocol': 'https' },
# # { 'host': 'typesense-3.example.net', 'port': '443', 'protocol': 'https' },
# # ]
# # TYPESENSE_URL=ha://WwogICAgeyAnaG9zdCc6ICd0eXBlc2Vuc2UtMS5leGFtcGxlLm5ldCcsICdwb3J0JzogJzQ0MycsICdwcm90b2NvbCc6ICdodHRwcycgfSwKICAgIHsgJ2hvc3QnOiAndHlwZXNlbnNlLTIuZXhhbXBsZS5uZXQnLCAncG9ydCc6ICc0NDMnLCAncHJvdG9jb2wnOiAnaHR0cHMnIH0sCiAgICB7ICdob3N0JzogJ3R5cGVzZW5zZS0zLmV4YW1wbGUubmV0JywgJ3BvcnQnOiAnNDQzJywgJ3Byb3RvY29sJzogJ2h0dHBzJyB9LApd
# ###################################################################################
# # Reverse Geocoding
# #
# # Reverse geocoding is done locally which has a small impact on memory usage
# # This memory usage can be altered by changing the REVERSE_GEOCODING_PRECISION variable
# # This ranges from 0-3 with 3 being the most precise
# # 3 - Cities > 500 population: ~200MB RAM
# # 2 - Cities > 1000 population: ~150MB RAM
# # 1 - Cities > 5000 population: ~80MB RAM
# # 0 - Cities > 15000 population: ~40MB RAM
# ####################################################################################
# # DISABLE_REVERSE_GEOCODING=false
# # REVERSE_GEOCODING_PRECISION=3
# ####################################################################################
# # WEB - Optional
# #
# # Custom message on the login page, should be written in HTML form.
# # For example:
# # PUBLIC_LOGIN_PAGE_MESSAGE="This is a demo instance of Immich.<br><br>Email: <i>demo@demo.de</i><br>Password: <i>demo</i>"
# ####################################################################################
# PUBLIC_LOGIN_PAGE_MESSAGE=Look
# ####################################################################################
# # Alternative Service Addresses - Optional
# #
# # This is an advanced feature for users who may be running their immich services on different hosts.
# # It will not change which address or port that services bind to within their containers, but it will change where other services look for their peers.
# # Note: immich-microservices is bound to 3002, but no references are made
# ####################################################################################
# IMMICH_WEB_URL=http://immich-web:3000
# IMMICH_SERVER_URL=http://immich-server:3001
# IMMICH_MACHINE_LEARNING_URL=http://immich-machine-learning:3003
# ####################################################################################
# # Alternative API's External Address - Optional
# #
# # This is an advanced feature used to control the public server endpoint returned to clients during Well-known discovery.
# # You should only use this if you want mobile apps to access the immich API over a custom URL. Do not include trailing slash.
# # NOTE: At this time, the web app will not be affected by this setting and will continue to use the relative path: /api
# # Examples: http://localhost:3001, http://immich-api.example.com, etc
# ####################################################################################
# IMMICH_API_URL_EXTERNAL=https://imm.knast.cc
+236 -163
View File
@@ -1,188 +1,261 @@
version: "3.8"
#
# WARNING: Make sure to use the docker-compose.yml of the current release:
#
# https://github.com/immich-app/immich/releases/latest/download/docker-compose.yml
#
# The compose file on main may not be compatible with the latest release.
#
# name: immich
services:
immich-server:
container_name: immich_server
image: ghcr.io/immich-app/immich-server:${IMMICH_VERSION:-release}
# extends:
# 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
ports:
- 2283:3001
depends_on:
- redis
- database
restart: always
immich-machine-learning:
container_name: immich_machine_learning
# 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
redis:
container_name: immich_redis
image: docker.io/redis:6.2-alpine@sha256:e3b17ba9479deec4b7d1eeec1548a253acc5374d68d3b27937fcfe4df8d18c7e
healthcheck:
test: redis-cli ping || exit 1
restart: always
database:
container_name: immich_postgres
image: docker.io/tensorchord/pgvecto-rs:pg14-v0.2.0@sha256:90724186f0a3517cf6914295b5ab410db9ce23190a2d9d0b9dd6463e3fa298f0
environment:
POSTGRES_PASSWORD: ${DB_PASSWORD}
POSTGRES_USER: ${DB_USERNAME}
POSTGRES_DB: ${DB_DATABASE_NAME}
POSTGRES_INITDB_ARGS: '--data-checksums'
volumes:
- ${DB_DATA_LOCATION}:/var/lib/postgresql/data
healthcheck:
test: pg_isready --dbname='${DB_DATABASE_NAME}' --username='${DB_USERNAME}' || exit 1; Chksum="$$(psql --dbname='${DB_DATABASE_NAME}' --username='${DB_USERNAME}' --tuples-only --no-align --command='SELECT COALESCE(SUM(checksum_failures), 0) FROM pg_stat_database')"; echo "checksum failure count is $$Chksum"; [ "$$Chksum" = '0' ] || exit 1
interval: 5m
start_interval: 30s
start_period: 5m
command: ["postgres", "-c" ,"shared_preload_libraries=vectors.so", "-c", 'search_path="$$user", public, vectors', "-c", "logging_collector=on", "-c", "max_wal_size=2GB", "-c", "shared_buffers=512MB", "-c", "wal_compression=on"]
restart: always
volumes:
model-cache:
# # services:
# # immich-server:
# # networks:
# # - traefik
# # container_name: immich_server
# # image: ghcr.io/immich-app/immich-server:latest
# # entrypoint: ["/bin/sh", "./start-server.sh"]
# # volumes:
# # - ${UPLOAD_LOCATION}:/usr/src/app/upload
# # env_file:
# # - .env
# # depends_on:
# # - redis
# # - database
# # - typesense
# # restart: always
# # immich-microservices:
# # networks:
# # - traefik
# # container_name: immich_microservices
# # image: ghcr.io/immich-app/immich-server:latest
# # entrypoint: ["/bin/sh", "./start-microservices.sh"]
# # volumes:
# # - ${UPLOAD_LOCATION}:/usr/src/app/upload
# # env_file:
# # - .env
# # depends_on:
# # - redis
# # - database
# # - typesense
# # restart: always
# # immich-machine-learning:
# # networks:
# # - traefik
# # container_name: immich_machine_learning
# # image: ghcr.io/immich-app/immich-machine-learning:latest
# # volumes:
# # - ${UPLOAD_LOCATION}:/usr/src/app/upload
# # - /srv/immich/model-cache:/cache
# # env_file:
# # - .env
# # restart: always
# # immich-web:
# # networks:
# # - traefik
# # container_name: immich_web
# # image: ghcr.io/immich-app/immich-web:latest
# # entrypoint: ["/bin/sh", "./entrypoint.sh"]
# # env_file:
# # - .env
# # restart: always
# # labels:
# # - traefik.enable=true
# # - "traefik.http.routers.imm.entrypoints=websecure"
# # - "traefik.http.routers.imm.rule=Host(`imm.$DOMAIN_NAME`)"
# # - "traefik.http.routers.imm.tls.certresolver=letsencr"
# # # - "traefik.http.services.imm.loadbalancer.server.port=32400"
# # typesense:
# # networks:
# # - traefik
# # container_name: immich_typesense
# # image: typesense/typesense:0.24.0
# # environment:
# # - TYPESENSE_API_KEY=${TYPESENSE_API_KEY}
# # - TYPESENSE_DATA_DIR=/data
# # logging:
# # driver: none
# # volumes:
# # - /srv/immich/tsdata:/data
# # restart: always
# # redis:
# # container_name: immich_redis
# # image: redis:6.2
# # networks:
# # - traefik
# # restart: always
# # database:
# # networks:
# # - traefik
# # container_name: immich_postgres
# # image: postgres:14
# # env_file:
# # - .env
# # environment:
# # POSTGRES_PASSWORD: ${DB_PASSWORD}
# # POSTGRES_USER: ${DB_USERNAME}
# # POSTGRES_DB: ${DB_DATABASE_NAME}
# # PG_DATA: /var/lib/postgresql/data
# # volumes:
# # - /srv/immich/pgdata:/var/lib/postgresql/data
# # restart: always
# # immich-proxy:
# # networks:
# # - traefik
# # container_name: immich_proxy
# # image: ghcr.io/immich-app/immich-proxy:release
# # environment:
# # # Make sure these values get passed through from the env file
# # - IMMICH_SERVER_URL
# # - IMMICH_WEB_URL
# # ports:
# # - 2283:8080
# # logging:
# # driver: none
# # depends_on:
# # - immich-server
# # restart: always
# services:
# immich-server:
# immich:
# image: ghcr.io/imagegenius/immich:latest
# container_name: immich
# networks:
# - traefik
# container_name: immich_server
# image: ghcr.io/immich-app/immich-server:latest
# entrypoint: ["/bin/sh", "./start-server.sh"]
# volumes:
# - ${UPLOAD_LOCATION}:/usr/src/app/upload
# env_file:
# - .env
# depends_on:
# - redis
# - database
# - typesense
# restart: always
# immich-microservices:
# networks:
# - traefik
# container_name: immich_microservices
# image: ghcr.io/immich-app/immich-server:latest
# entrypoint: ["/bin/sh", "./start-microservices.sh"]
# volumes:
# - ${UPLOAD_LOCATION}:/usr/src/app/upload
# env_file:
# - .env
# depends_on:
# - redis
# - database
# - typesense
# restart: always
# immich-machine-learning:
# networks:
# - traefik
# container_name: immich_machine_learning
# image: ghcr.io/immich-app/immich-machine-learning:latest
# volumes:
# - ${UPLOAD_LOCATION}:/usr/src/app/upload
# - /srv/immich/model-cache:/cache
# env_file:
# - .env
# restart: always
# immich-web:
# networks:
# - traefik
# container_name: immich_web
# image: ghcr.io/immich-app/immich-web:latest
# entrypoint: ["/bin/sh", "./entrypoint.sh"]
# env_file:
# - .env
# restart: always
# labels:
# - traefik.enable=true
# - "traefik.http.routers.imm.entrypoints=websecure"
# - "traefik.http.routers.imm.rule=Host(`imm.$DOMAIN_NAME`)"
# - "traefik.http.routers.imm.tls.certresolver=letsencr"
# # - "traefik.http.services.imm.loadbalancer.server.port=32400"
# typesense:
# networks:
# - traefik
# container_name: immich_typesense
# image: typesense/typesense:0.24.0
# - "traefik.http.services.imm.loadbalancer.server.port=7878"
# environment:
# - TYPESENSE_API_KEY=${TYPESENSE_API_KEY}
# - TYPESENSE_DATA_DIR=/data
# logging:
# driver: none
# - PUID=1000
# - PGID=1000
# - TZ=Etc/UTC
# - DB_HOSTNAME=database
# - DB_USERNAME=postgres
# - DB_PASSWORD=a897scf-ac8c3aghjfghafwfgr44k-567cvhdf3odjkfg
# - DB_DATABASE_NAME=immich
# - REDIS_HOSTNAME=redis
# # - DB_PORT=5432 #optional
# # - REDIS_PORT=6379 #optional
# # - REDIS_PASSWORD= #optional
# # - MACHINE_LEARNING_HOST=0.0.0.0 #optional
# # - MACHINE_LEARNING_PORT=3003 #optional
# # - MACHINE_LEARNING_WORKERS=1 #optional
# # - MACHINE_LEARNING_WORKER_TIMEOUT=120 #optional
# volumes:
# - /srv/immich/tsdata:/data
# restart: always
# - /srv/immich/config:/config
# - /srv/immich/uploads:/photos
# # - path_to_libraries:/libraries #optional
# ports:
# - 7878:8080
# restart: unless-stopped
# # This container requires an external application to be run separately.
# # By default, ports for the databases are opened, be careful when deploying it
# # Redis:
# redis:
# container_name: immich_redis
# image: redis:6.2
# networks:
# - traefik
# restart: always
# image: redis
# ports:
# - 6379:6379
# container_name: redis
# # PostgreSQL 14:
# database:
# image: tensorchord/pgvecto-rs:pg14-v0.2.0
# ports:
# - 5432:5432
# container_name: database
# networks:
# - traefik
# container_name: immich_postgres
# image: postgres:14
# env_file:
# - .env
# environment:
# POSTGRES_PASSWORD: ${DB_PASSWORD}
# POSTGRES_USER: ${DB_USERNAME}
# POSTGRES_DB: ${DB_DATABASE_NAME}
# PG_DATA: /var/lib/postgresql/data
# POSTGRES_USER: postgres
# POSTGRES_PASSWORD: a897scf-ac8c3aghjfghafwfgr44k-567cvhdf3odjkfg
# POSTGRES_DB: immich
# volumes:
# - /srv/immich/pgdata:/var/lib/postgresql/data
# restart: always
# immich-proxy:
# # volumes:
# # pgdata:
# # model-cache:
# # tsdata:
# networks:
# - traefik
# container_name: immich_proxy
# image: ghcr.io/immich-app/immich-proxy:release
# environment:
# # Make sure these values get passed through from the env file
# - IMMICH_SERVER_URL
# - IMMICH_WEB_URL
# ports:
# - 2283:8080
# logging:
# driver: none
# depends_on:
# - immich-server
# restart: always
services:
immich:
image: ghcr.io/imagegenius/immich:latest
container_name: immich
networks:
- traefik
labels:
- traefik.enable=true
- "traefik.http.routers.imm.entrypoints=websecure"
- "traefik.http.routers.imm.rule=Host(`imm.$DOMAIN_NAME`)"
- "traefik.http.routers.imm.tls.certresolver=letsencr"
- "traefik.http.services.imm.loadbalancer.server.port=7878"
environment:
- PUID=1000
- PGID=1000
- TZ=Etc/UTC
- DB_HOSTNAME=database
- DB_USERNAME=postgres
- DB_PASSWORD=a897scf-ac8c3aghjfghafwfgr44k-567cvhdf3odjkfg
- DB_DATABASE_NAME=immich
- REDIS_HOSTNAME=redis
# - DB_PORT=5432 #optional
# - REDIS_PORT=6379 #optional
# - REDIS_PASSWORD= #optional
# - MACHINE_LEARNING_HOST=0.0.0.0 #optional
# - MACHINE_LEARNING_PORT=3003 #optional
# - MACHINE_LEARNING_WORKERS=1 #optional
# - MACHINE_LEARNING_WORKER_TIMEOUT=120 #optional
volumes:
- /srv/immich/config:/config
- /srv/immich/uploads:/photos
# - path_to_libraries:/libraries #optional
ports:
- 7878:8080
restart: unless-stopped
# This container requires an external application to be run separately.
# By default, ports for the databases are opened, be careful when deploying it
# Redis:
redis:
networks:
- traefik
image: redis
ports:
- 6379:6379
container_name: redis
# PostgreSQL 14:
database:
image: tensorchord/pgvecto-rs:pg14-v0.2.0
ports:
- 5432:5432
container_name: database
networks:
- traefik
environment:
POSTGRES_USER: postgres
POSTGRES_PASSWORD: a897scf-ac8c3aghjfghafwfgr44k-567cvhdf3odjkfg
POSTGRES_DB: immich
volumes:
- /srv/immich/pgdata:/var/lib/postgresql/data
# volumes:
# pgdata:
# model-cache:
# tsdata:
networks:
traefik:
external: true
# traefik:
# external: true