From 9a60d4b0b95766604a1912a698649f09d27f9f64 Mon Sep 17 00:00:00 2001 From: Bastian de Byl Date: Tue, 17 Dec 2024 21:52:04 -0500 Subject: [PATCH] noticket - migrate from photoprism to immich --- .../podman/files/hass/configuration.yaml | 2 +- .../podman/tasks/containers/home/hass.yml | 26 ++-- .../podman/tasks/containers/home/photos.yml | 128 +++++++++++------- ansible/roles/podman/tasks/main.yml | 6 +- ansible/vars/vault.yml | Bin 13142 -> 13337 bytes 5 files changed, 99 insertions(+), 63 deletions(-) diff --git a/ansible/roles/podman/files/hass/configuration.yaml b/ansible/roles/podman/files/hass/configuration.yaml index 59cf67a..91de589 100644 --- a/ansible/roles/podman/files/hass/configuration.yaml +++ b/ansible/roles/podman/files/hass/configuration.yaml @@ -10,7 +10,7 @@ http: trusted_proxies: - 127.0.0.1 - 10.0.0.0/8 - - 10.0.2.100 + - 192.168.1.0/24 homeassistant: time_zone: America/New_York diff --git a/ansible/roles/podman/tasks/containers/home/hass.yml b/ansible/roles/podman/tasks/containers/home/hass.yml index 24a4957..401df37 100644 --- a/ansible/roles/podman/tasks/containers/home/hass.yml +++ b/ansible/roles/podman/tasks/containers/home/hass.yml @@ -12,19 +12,19 @@ - "{{ hass_path }}/media" - "{{ hass_path }}/config" -# - name: copy configuration and automations -# become: true -# ansible.builtin.copy: -# backup: true -# src: "files/hass/{{ item }}" -# dest: "{{ hass_path }}/config/{{ item }}" -# owner: "{{ podman_user }}" -# group: "{{ podman_user }}" -# mode: 0644 -# notify: restorecon podman -# loop: -# - configuration.yaml -# - automations.yaml +- name: copy configuration and automations + become: true + ansible.builtin.copy: + backup: true + src: "files/hass/{{ item }}" + dest: "{{ hass_path }}/config/{{ item }}" + owner: "{{ podman_user }}" + group: "{{ podman_user }}" + mode: 0644 + notify: restorecon podman + loop: + - configuration.yaml + # - automations.yaml - name: flush handlers ansible.builtin.meta: flush_handlers diff --git a/ansible/roles/podman/tasks/containers/home/photos.yml b/ansible/roles/podman/tasks/containers/home/photos.yml index ff0f406..3059968 100644 --- a/ansible/roles/podman/tasks/containers/home/photos.yml +++ b/ansible/roles/podman/tasks/containers/home/photos.yml @@ -9,8 +9,10 @@ mode: 0755 notify: restorecon podman loop: - - "{{ photos_path }}/mysql" + - "{{ photos_path }}/psql" + - "{{ photos_path }}/mlcache" - "{{ photos_path }}/storage" + - "{{ photos_path }}/immich" - name: flush handlers ansible.builtin.meta: flush_handlers @@ -24,84 +26,116 @@ opts: "username=photos,password={{ photos_cifs_pass }},uid={{ podman_subuid.stdout }},gid={{ podman_subuid.stdout }}" state: mounted +- name: mount immich cifs + become: true + ansible.posix.mount: + src: "{{ immich_cifs_src }}" + path: "{{ photos_path }}/immich" + fstype: cifs + opts: "username=photos,password={{ photos_cifs_pass }},uid={{ podman_subuid.stdout }},gid={{ podman_subuid.stdout }}" + state: mounted + - import_tasks: podman/podman-check.yml vars: - container_name: photos-db - container_image: "{{ db_image }}" + container_name: immich_machine_learning + container_image: "{{ ml_image }}" -- name: create photos-db container +- name: create immich-ml container become: true become_user: "{{ podman_user }}" containers.podman.podman_container: - name: photos-db + name: immich_machine_learning + image: "{{ ml_image }}" + restart_policy: on-failure:3 + log_driver: journald + network: + - shared + volumes: + - "{{ photos_path }}/mlcache:/cache" + +- name: create systemd startup job for immich_machine_learning + include_tasks: podman/systemd-generate.yml + vars: + container_name: immich_machine_learning + +- import_tasks: podman/podman-check.yml + vars: + container_name: immich_redis + container_image: "{{ redis_image }}" + +- name: create immich-redis container + become: true + become_user: "{{ podman_user }}" + containers.podman.podman_container: + name: immich_redis + image: "{{ redis_image }}" + restart_policy: on-failure:3 + log_driver: journald + network: + - shared + +- name: create systemd startup job for immich_redis + include_tasks: podman/systemd-generate.yml + vars: + container_name: immich_redis + +- import_tasks: podman/podman-check.yml + vars: + container_name: immich_postgres + container_image: "{{ db_image }}" + +- name: create immich-db container + become: true + become_user: "{{ podman_user }}" + containers.podman.podman_container: + name: immich_postgres image: "{{ db_image }}" restart_policy: on-failure:3 log_driver: journald network: - shared env: - MARIADB_AUTO_UPGRADE: "1" - MYSQL_ROOT_PASSWORD: "{{ photos_db_root_pass }}" - MYSQL_DATABASE: photos - MYSQL_USER: photos - MYSQL_PASSWORD: "{{ photos_db_pass }}" + POSTGRES_DATABASE: photos + POSTGRES_USER: photos + POSTGRES_PASSWORD: "{{ photos_db_pass }}" + POSTGRES_INITDB_ARGS: "--data-checksums" volumes: - - "{{ photos_path }}/mysql:/var/lib/mysql" + - "{{ photos_path }}/psql:/var/lib/postgresql/data" -- name: create systemd startup job for photos-db +- name: create systemd startup job for immich_postgres include_tasks: podman/systemd-generate.yml vars: - container_name: photos-db + container_name: immich_postgres - import_tasks: podman/podman-check.yml vars: - container_name: photos + container_name: immich_server container_image: "{{ image }}" -- name: create photos container +- name: create immich container become: true become_user: "{{ podman_user }}" containers.podman.podman_container: - name: photos + name: immich_server image: "{{ image }}" restart_policy: on-failure:3 log_driver: journald network: - shared env: - PHOTOPRISM_ADMIN_PASSWORD: "{{ photos_user_pass }}" - PHOTOPRISM_AUTH_MODE: "password" - PHOTOPRISM_SITE_URL: "https://photos.bdebyl.net/" - PHOTOPRISM_ORIGINALS_LIMIT: 5000 - PHOTOPRISM_HTTP_COMPRESSION: "gzip" - PHOTOPRISM_LOG_LEVEL: "info" - PHOTOPRISM_READONLY: "false" - PHOTOPRISM_EXPERIMENTAL: "false" - PHOTOPRISM_DISABLE_CHOWN: "false" - PHOTOPRISM_DISABLE_WEBDAV: "false" - PHOTOPRISM_DISABLE_SETTINGS: "false" - PHOTOPRISM_DISABLE_TENSORFLOW: "false" - PHOTOPRISM_DISABLE_FACES: "false" - PHOTOPRISM_DISABLE_CLASSIFICATION: "false" - PHOTOPRISM_DISABLE_RAW: "false" - PHOTOPRISM_RAW_PRESETS: "false" - PHOTOPRISM_JPEG_QUALITY: 85 - PHOTOPRISM_DETECT_NSFW: "false" - PHOTOPRISM_UPLOAD_NSFW: "true" - PHOTOPRISM_DATABASE_DRIVER: "mysql" - PHOTOPRISM_DATABASE_SERVER: "photos-db:3306" - PHOTOPRISM_DATABASE_NAME: "photos" - PHOTOPRISM_DATABASE_USER: "photos" - PHOTOPRISM_DATABASE_PASSWORD: "{{ photos_db_pass }}" - PHOTOPRISM_SITE_CAPTION: "AI-Powered Photos App" - PHOTOPRISM_SITE_DESCRIPTION: "" - PHOTOPRISM_SITE_AUTHOR: "Bastian D." + REDIS_HOSTNAME: immich_redis + DB_HOSTNAME: immich_postgres + DB_DATABASE_NAME: photos + DB_USERNAME: photos + DB_PASSWORD: "{{ photos_db_pass }}" + IMMICH_PORT: 8088 volumes: - - "{{ photos_path }}/storage:/photoprism/" + - "{{ photos_path }}/storage:/mnt/media/originals" + - "{{ photos_path }}/immich:/usr/src/app/upload" ports: - - "8088:2342" + - "8088:8088" -- name: create systemd startup job for photos +- name: create systemd startup job for immich_server include_tasks: podman/systemd-generate.yml vars: - container_name: photos + container_name: immich_server diff --git a/ansible/roles/podman/tasks/main.yml b/ansible/roles/podman/tasks/main.yml index 33072ac..0fb5979 100644 --- a/ansible/roles/podman/tasks/main.yml +++ b/ansible/roles/podman/tasks/main.yml @@ -46,8 +46,10 @@ - import_tasks: containers/home/photos.yml vars: - db_image: docker.io/library/mariadb:10.8 - image: docker.io/photoprism/photoprism:240915-ce + db_image: docker.io/tensorchord/pgvecto-rs:pg14-v0.2.0@sha256:90724186f0a3517cf6914295b5ab410db9ce23190a2d9d0b9dd6463e3fa298f0 + ml_image: ghcr.io/immich-app/immich-machine-learning:v1.123.0 + redis_image: docker.io/redis:6.2-alpine@sha256:eaba718fecd1196d88533de7ba49bf903ad33664a92debb24660a922ecd9cac8 + image: ghcr.io/immich-app/immich-server:v1.123.0 tags: photos - import_tasks: containers/home/cloud.yml diff --git a/ansible/vars/vault.yml b/ansible/vars/vault.yml index b152d30036c1dbded4b526ec809408cd48a8ce92..08406fe191ba7d8c3fb4670316159598fe00f387 100644 GIT binary patch literal 13337 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 literal 13142 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