diff --git a/apps/immich/config.json b/apps/immich/config.json index 3551ce113f..d85712a7cd 100644 --- a/apps/immich/config.json +++ b/apps/immich/config.json @@ -5,8 +5,9 @@ "exposable": true, "port": 8128, "id": "immich", - "tipi_version": 104, + "tipi_version": 105, "version": "1.115.0", + "min_tipi_version": "3.6.2", "categories": ["data", "photography"], "description": "Photo and video backup solution directly from your mobile phone.", "short_desc": "Photo and video backup solution directly from your mobile phone.", @@ -34,6 +35,7 @@ } ], "supported_architectures": ["arm64", "amd64"], + "dynamic_config": true, "created_at": 1691943801422, - "updated_at": 1726211612000 + "updated_at": 1727005741000 } diff --git a/apps/immich/docker-compose.json b/apps/immich/docker-compose.json new file mode 100644 index 0000000000..39b434136f --- /dev/null +++ b/apps/immich/docker-compose.json @@ -0,0 +1,89 @@ +{ + "$schema": "../compose-schema.json", + "services": [ + { + "name": "immich", + "image": "ghcr.io/immich-app/immich-server:v1.115.0", + "volumes": [ + { + "hostPath": "${ROOT_FOLDER_HOST}/media/data/images/immich", + "containerPath": "/usr/src/app/upload" + } + ], + "environment": { + "NODE_ENV": "production", + "DB_HOSTNAME": "immich-db", + "DB_USERNAME": "tipi", + "DB_PASSWORD": "${DB_PASSWORD}", + "ENABLE_MAPBOX": "false", + "DB_DATABASE_NAME": "immich", + "REDIS_HOSTNAME": "immich-redis", + "JWT_SECRET": "${JWT_SECRET}" + }, + "dependsOn": [ + "immich-redis", + "immich-db" + ], + "internalPort": 3001, + "isMain": true + }, + { + "name": "immich-machine-learning", + "image": "ghcr.io/immich-app/immich-machine-learning:v1.115.0", + "volumes": [ + { + "hostPath": "${ROOT_FOLDER_HOST}/media/data/images/immich", + "containerPath": "/usr/src/app/upload" + }, + { + "hostPath": "${APP_DATA_DIR}/data/immich-ml-cache", + "containerPath": "/cache" + } + ], + "environment": { + "NODE_ENV": "production", + "DB_HOSTNAME": "immich-db", + "DB_USERNAME": "tipi", + "DB_PASSWORD": "${DB_PASSWORD}", + "DB_NAME": "immich", + "DB_DATABASE_NAME": "immich" + }, + "dependsOn": [ + "immich-db" + ] + }, + { + "name": "immich-redis", + "image": "redis:6.2", + "healthCheck": { + "test": "redis-cli ping || exit 1", + "interval": "30s", + "timeout": "1m", + "retries": 5 + } + }, + { + "name": "immich-db", + "image": "tensorchord/pgvecto-rs:pg14-v0.2.0@sha256:90724186f0a3517cf6914295b5ab410db9ce23190a2d9d0b9dd6463e3fa298f0", + "environment": { + "POSTGRES_PASSWORD": "${DB_PASSWORD}", + "POSTGRES_USER": "tipi", + "POSTGRES_DB": "immich", + "PG_DATA": "/var/lib/postgresql/data" + }, + "volumes": [ + { + "hostPath": "${APP_DATA_DIR}/data/db", + "containerPath": "/var/lib/postgresql/data" + } + ], + "healthCheck": { + "test": "pg_isready --dbname='${DB_DATABASE_NAME}' || 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", + "startInterval": "30s", + "startPeriod": "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"] + } + ] +} \ No newline at end of file