From 258c204163d00428ff155071a44215aeac63a84b Mon Sep 17 00:00:00 2001 From: Aykhan Shahsuvarov Date: Sat, 9 Aug 2025 13:26:23 +0000 Subject: [PATCH] Add immich --- caddy/.env.example | 6 +++ caddy/Caddyfile | 18 +++++++++ glance/assets/immich.png | Bin 0 -> 15114 bytes glance/config/home.yml | 3 ++ immich/.env.example | 12 ++++++ immich/.gitignore | 2 + immich/data/.gitkeep | 0 immich/docker-compose.yml | 80 ++++++++++++++++++++++++++++++++++++++ main.sh | 19 +++++++++ 9 files changed, 140 insertions(+) create mode 100644 glance/assets/immich.png create mode 100644 immich/.env.example create mode 100644 immich/.gitignore create mode 100644 immich/data/.gitkeep create mode 100644 immich/docker-compose.yml diff --git a/caddy/.env.example b/caddy/.env.example index c0a9fc3..dcd2dfb 100644 --- a/caddy/.env.example +++ b/caddy/.env.example @@ -40,3 +40,9 @@ GLANCE_KEY= GHOST_DOMAIN= GHOST_CRT= GHOST_KEY= + +############# Immich ############# +IMMICH_DOMAIN= +IMMICH_CRT= +IMMICH_KEY= + diff --git a/caddy/Caddyfile b/caddy/Caddyfile index b1b5d62..a1c13b0 100644 --- a/caddy/Caddyfile +++ b/caddy/Caddyfile @@ -153,6 +153,24 @@ } } +############## immich ############## +{$IMMICH_DOMAIN} { + tls /etc/ssl/custom/{$IMMICH_CRT} /etc/ssl/custom/{$IMMICH_KEY} + + request_body { + max_size 1024MB + } + + reverse_proxy http://immich_server:2283 { + header_up X-Real-IP {http.request.header.Cf-Connecting-Ip} + header_up X-Forwarded-For {http.request.header.Cf-Connecting-Ip} + header_up X-Country-Code {http.request.header.Cf-Ipcountry} + header_up X-Forwarded-Proto {http.request.scheme} + header_up Host {http.request.host} + header_up -CF-* + } +} + import Caddyfile.private diff --git a/glance/assets/immich.png b/glance/assets/immich.png new file mode 100644 index 0000000000000000000000000000000000000000..cbdc20bd5ea6b791cbf3782737de4c68dd76849f GIT binary patch literal 15114 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 literal 0 HcmV?d00001 diff --git a/glance/config/home.yml b/glance/config/home.yml index 3c291aa..c60c40e 100644 --- a/glance/config/home.yml +++ b/glance/config/home.yml @@ -32,6 +32,9 @@ - title: wg.aykhans.me url: https://wg.aykhans.me/ icon: /assets/wireguard.png + - title: photos.aykhans.me + url: https://photos.aykhans.me/ + icon: /assets/immich.png - title: aykhans.me url: https://aykhans.me/ icon: /assets/ghost.png diff --git a/immich/.env.example b/immich/.env.example new file mode 100644 index 0000000..00265a3 --- /dev/null +++ b/immich/.env.example @@ -0,0 +1,12 @@ +# The location where your uploaded files are stored +UPLOAD_LOCATION=./data/server + +# The location where your database files are stored. Network shares are not supported for the database +DB_DATA_LOCATION=./data/postgres + +DB_PASSWORD=postgres + +# The values below this line do not need to be changed +################################################################################### +DB_USERNAME=postgres +DB_DATABASE_NAME=immich \ No newline at end of file diff --git a/immich/.gitignore b/immich/.gitignore new file mode 100644 index 0000000..394be19 --- /dev/null +++ b/immich/.gitignore @@ -0,0 +1,2 @@ +/data/* +!.gitkeep diff --git a/immich/data/.gitkeep b/immich/data/.gitkeep new file mode 100644 index 0000000..e69de29 diff --git a/immich/docker-compose.yml b/immich/docker-compose.yml new file mode 100644 index 0000000..121bbeb --- /dev/null +++ b/immich/docker-compose.yml @@ -0,0 +1,80 @@ +networks: + immich: + external: false + caddy: + name: caddy + driver: bridge + external: true + +services: + immich-server: + container_name: immich_server + image: ghcr.io/immich-app/immich-server:release + volumes: + # Do not edit the next line. If you want to change the media storage location on your system, edit the value of UPLOAD_LOCATION in the .env file + - ${UPLOAD_LOCATION}:/data + - /etc/localtime:/etc/localtime:ro + env_file: + - .env + ports: + - "2283:2283" + depends_on: + - redis + - database + networks: + - immich + - caddy + deploy: + resources: + limits: + cpus: "1.5" + memory: 1G + restart: unless-stopped + healthcheck: + disable: false + + immich-machine-learning: + container_name: immich_machine_learning + image: ghcr.io/immich-app/immich-machine-learning:release + volumes: + - model-cache:/cache + env_file: + - .env + networks: + - immich + # deploy: + # resources: + # limits: + # cpus: "1" + # memory: 600M + restart: unless-stopped + healthcheck: + disable: false + + redis: + container_name: immich_redis + image: docker.io/valkey/valkey:8-bookworm@sha256:facc1d2c3462975c34e10fccb167bfa92b0e0dbd992fc282c29a61c3243afb11 + networks: + - immich + healthcheck: + test: redis-cli ping || exit 1 + restart: unless-stopped + + database: + container_name: immich_postgres + image: ghcr.io/immich-app/postgres:14-vectorchord0.4.3-pgvectors0.2.0@sha256:32324a2f41df5de9efe1af166b7008c3f55646f8d0e00d9550c16c9822366b4a + environment: + POSTGRES_PASSWORD: ${DB_PASSWORD} + POSTGRES_USER: ${DB_USERNAME} + POSTGRES_DB: ${DB_DATABASE_NAME} + POSTGRES_INITDB_ARGS: "--data-checksums" + networks: + - immich + volumes: + # Do not edit the next line. If you want to change the database storage location on your system, edit the value of DB_DATA_LOCATION in the .env file + - ${DB_DATA_LOCATION}:/var/lib/postgresql/data + shm_size: 128mb + restart: unless-stopped + +volumes: + model-cache: diff --git a/main.sh b/main.sh index 9b15a39..f778cce 100755 --- a/main.sh +++ b/main.sh @@ -61,6 +61,7 @@ generate_env_files() { cp --update=none ./caddy/.env.example ./caddy/.env cp --update=none ./glance/.env.example ./glance/.env cp --update=none ./ghost/.env.example ./ghost/.env + cp --update=none ./immich/.env.example ./immich/.env cp --update=none ./caddy/Caddyfile.private.example ./caddy/Caddyfile.private # cp --update=none ./slash/.env.example ./slash/.env # cp --update=none ./grafana/.env.example ./grafana/.env @@ -172,6 +173,15 @@ start_services() { exit 1 fi + echo "Starting immich..." + $DOCKER_COMPOSE_COMMAND -f ./immich/docker-compose.yml up -d + if [ $? -eq 0 ]; then + print_success "Immich started successfully." + else + print_error "failed to start Immich!" + exit 1 + fi + echo "Starting caddy..." $DOCKER_COMPOSE_COMMAND -f ./caddy/docker-compose.yml up -d if [ $? -eq 0 ]; then @@ -282,6 +292,15 @@ stop_services() { exit 1 fi + echo "Stopping immich..." + $DOCKER_COMPOSE_COMMAND -f ./immich/docker-compose.yml down + if [ $? -eq 0 ]; then + print_success "Immich stopped successfully." + else + print_error "failed to stop Immich!" + exit 1 + fi + echo "Stopping caddy..." $DOCKER_COMPOSE_COMMAND -f ./caddy/docker-compose.yml down if [ $? -eq 0 ]; then