diff --git a/config/ansible/tasks/servers/server.yml b/config/ansible/tasks/servers/server.yml index 8217bd4..301c63f 100644 --- a/config/ansible/tasks/servers/server.yml +++ b/config/ansible/tasks/servers/server.yml @@ -14,4 +14,5 @@ vars: hoarder_enabled: true golink_enabled: true + immich_enabled: false when: ansible_hostname == "mennos-cloud-server" diff --git a/config/ansible/tasks/servers/services/immich/docker-compose.yml.j2 b/config/ansible/tasks/servers/services/immich/docker-compose.yml.j2 new file mode 100644 index 0000000..91e4094 --- /dev/null +++ b/config/ansible/tasks/servers/services/immich/docker-compose.yml.j2 @@ -0,0 +1,76 @@ +name: immich +services: + server: + image: ghcr.io/immich-app/immich-server:${IMMICH_VERSION:-release} + volumes: + - {{ immich_data_dir }}/upload:/usr/src/app/upload + - /etc/localtime:/etc/localtime:ro + env_file: + - .env + ports: + - '2283:2283' + depends_on: + - redis + - database + environment: + - PUID=1000 + - PGID=1000 + restart: unless-stopped + healthcheck: + disable: false + + machine-learning: + image: ghcr.io/immich-app/immich-machine-learning:${IMMICH_VERSION:-release} + volumes: + - model-cache:/cache + env_file: + - .env + restart: unless-stopped + healthcheck: + disable: false + + redis: + container_name: immich_redis + image: docker.io/redis:6.2-alpine@sha256:2ba50e1ac3a0ea17b736ce9db2b0a9f6f8b85d4c27d5f5accc6a416d8f42c6d5 + healthcheck: + test: redis-cli ping || exit 1 + restart: unless-stopped + + database: + container_name: immich_postgres + image: docker.io/tensorchord/pgvecto-rs:pg14-v0.2.0@sha256:90724186f0a3517cf6914295b5ab410db9ce23190a2d9d0b9dd6463e3fa298f0 + environment: + PUID: 1000 + PGID: 1000 + POSTGRES_PASSWORD: ${DB_PASSWORD} + POSTGRES_USER: ${DB_USERNAME} + POSTGRES_DB: ${DB_DATABASE_NAME} + POSTGRES_INITDB_ARGS: '--data-checksums' + 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 + - {{ immich_data_dir }}/db:/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: unless-stopped + +volumes: + model-cache: diff --git a/config/ansible/tasks/servers/services/immich/dotenv.j2 b/config/ansible/tasks/servers/services/immich/dotenv.j2 new file mode 100644 index 0000000..8bf2afb --- /dev/null +++ b/config/ansible/tasks/servers/services/immich/dotenv.j2 @@ -0,0 +1,10 @@ +# You can find documentation for all the supported env variables at https://immich.app/docs/install/environment-variables +# 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=Europe/Amsterdam + +# The Immich version to use. You can pin this to a specific version like "v1.71.0" +IMMICH_VERSION=release + +DB_USERNAME=postgres +DB_PASSWORD=postgres +DB_DATABASE_NAME=immich diff --git a/config/ansible/tasks/servers/services/immich/immich.yml b/config/ansible/tasks/servers/services/immich/immich.yml new file mode 100644 index 0000000..2311d08 --- /dev/null +++ b/config/ansible/tasks/servers/services/immich/immich.yml @@ -0,0 +1,36 @@ +- name: Deploy Immich service + block: + - name: Set Immich data directory + ansible.builtin.set_fact: + immich_data_dir: "/mnt/storage-box/services/immich" + + - name: Set Immich service directory + ansible.builtin.set_fact: + immich_service_dir: "{{ ansible_env.HOME }}/services/immich" + + - name: Create Immich directories + ansible.builtin.file: + path: "{{ item }}" + state: directory + mode: "0755" + loop: + - "{{ immich_data_dir }}" + - "{{ immich_service_dir }}" + + - name: Deploy Immich docker-compose.yml + ansible.builtin.template: + src: docker-compose.yml.j2 + dest: "{{ immich_service_dir }}/docker-compose.yml" + mode: "0644" + register: immich_compose + + - name: Deploy Immich .env + ansible.builtin.template: + src: dotenv.j2 + dest: "{{ immich_service_dir }}/.env" + mode: "0644" + register: immich_compose + + - name: Start Immich service + ansible.builtin.command: docker compose -f "{{ immich_service_dir }}/docker-compose.yml" up -d + when: immich_compose.changed diff --git a/config/ansible/tasks/servers/services/services.yml b/config/ansible/tasks/servers/services/services.yml index 3db07ca..44b90ac 100644 --- a/config/ansible/tasks/servers/services/services.yml +++ b/config/ansible/tasks/servers/services/services.yml @@ -6,3 +6,6 @@ - name: Include hoarder tasks ansible.builtin.include_tasks: hoarder/hoarder.yml when: hoarder_enabled|bool + - name: Include immich tasks + ansible.builtin.include_tasks: immich/immich.yml + when: immich_enabled|bool \ No newline at end of file