diff --git a/ansible/roles/podman/defaults/main.yml b/ansible/roles/podman/defaults/main.yml index 19ae532..7b10013 100644 --- a/ansible/roles/podman/defaults/main.yml +++ b/ansible/roles/podman/defaults/main.yml @@ -11,6 +11,7 @@ hass_path: "{{ podman_volumes }}/hass" # nginx_path: removed - nginx no longer used nosql_path: "{{ podman_volumes }}/nosql" partkeepr_path: "{{ podman_volumes }}/partkeepr" +partsy_path: "{{ podman_volumes }}/partsy" photos_path: "{{ podman_volumes }}/photos" pihole_path: "{{ podman_volumes }}/pihole" sshpass_cron_path: "{{ podman_volumes }}/sshpass_cron" diff --git a/ansible/roles/podman/tasks/containers/home/partkeepr.yml b/ansible/roles/podman/tasks/containers/home/partkeepr.yml index 7f751d7..a2b28ce 100644 --- a/ansible/roles/podman/tasks/containers/home/partkeepr.yml +++ b/ansible/roles/podman/tasks/containers/home/partkeepr.yml @@ -1,66 +1,59 @@ --- -- name: create required partkeepr volumes +# PartKeepr has been replaced by Partsy +# This playbook removes PartKeepr containers and services +# Keeping MySQL data volume for historical reference only + +- name: stop and remove partkeepr container + become: true + become_user: "{{ podman_user }}" + containers.podman.podman_container: + name: partkeepr + state: absent + +- name: stop and remove partkeepr-db container + become: true + become_user: "{{ podman_user }}" + containers.podman.podman_container: + name: partkeepr-db + state: absent + +- name: remove systemd service for partkeepr + become: true + ansible.builtin.systemd: + name: "podman-partkeepr.service" + state: stopped + enabled: false + daemon_reload: true + ignore_errors: true + +- name: remove systemd service for partkeepr-db + become: true + ansible.builtin.systemd: + name: "podman-partkeepr-db.service" + state: stopped + enabled: false + daemon_reload: true + ignore_errors: true + +- name: remove systemd service files for partkeepr become: true ansible.builtin.file: path: "{{ item }}" + state: absent + loop: + - "/etc/systemd/system/podman-partkeepr.service" + - "/etc/systemd/system/podman-partkeepr-db.service" + notify: systemd daemon-reload + +- name: preserve partkeepr mysql data volume for history + become: true + ansible.builtin.file: + path: "{{ partkeepr_path }}/mysql" state: directory owner: "{{ podman_subuid.stdout }}" group: "{{ podman_user }}" mode: 0755 notify: restorecon podman - loop: - - "{{ partkeepr_path }}/mysql" - name: flush handlers ansible.builtin.meta: flush_handlers - -- import_tasks: podman/podman-check.yml - vars: - container_name: partkeepr-db - container_image: "{{ db_image }}" - -- name: create partkeepr-db container - become: true - become_user: "{{ podman_user }}" - containers.podman.podman_container: - name: partkeepr-db - image: "{{ db_image }}" - restart_policy: on-failure:3 - log_driver: journald - network: - - shared - env: - MYSQL_RANDOM_ROOT_PASSWORD: "yes" - MYSQL_DATABASE: partkeepr - MYSQL_USER: partkeepr - MYSQL_PASSWORD: "{{ partkeepr_mysql_password }}" - volumes: - - "{{ partkeepr_path }}/mysql:/var/lib/mysql" - -- name: create systemd startup job for partkeepr-db - include_tasks: podman/systemd-generate.yml - vars: - container_name: partkeepr-db - -- import_tasks: podman/podman-check.yml - vars: - container_name: partkeepr - container_image: "{{ image }}" - -- name: create partkeepr container - become: true - become_user: "{{ podman_user }}" - containers.podman.podman_container: - name: partkeepr - image: "{{ image }}" - restart_policy: on-failure:3 - log_driver: journald - network: - - shared - ports: - - "8081:80" - -- name: create systemd startup job for partkeepr - include_tasks: podman/systemd-generate.yml - vars: - container_name: partkeepr diff --git a/ansible/roles/podman/tasks/containers/home/partsy.yml b/ansible/roles/podman/tasks/containers/home/partsy.yml new file mode 100644 index 0000000..87b3cb1 --- /dev/null +++ b/ansible/roles/podman/tasks/containers/home/partsy.yml @@ -0,0 +1,49 @@ +--- +- name: create partsy host directory volumes + become: true + ansible.builtin.file: + path: "{{ item }}" + state: directory + owner: "{{ podman_subuid.stdout }}" + group: "{{ podman_user }}" + mode: 0777 + notify: restorecon podman + loop: + - "{{ partsy_path }}/data" + - "{{ partsy_path }}/backups" + +- name: flush handlers + ansible.builtin.meta: flush_handlers + +- import_tasks: podman/podman-check.yml + vars: + container_name: partsy + container_image: "{{ image }}" + +- name: create partsy container + become: true + become_user: "{{ podman_user }}" + containers.podman.podman_container: + name: partsy + image: "{{ image }}" + restart_policy: on-failure:3 + log_driver: journald + network: + - shared + env: + PARTSY_MODE: development + PARTSY_DATA_DIR: /data + PARTSY_BACKUP_DIR: /backups + PARTSY_PORT: "8080" + PARTSY_STATIC_DIR: /app/static + LOG_LEVEL: info + volumes: + - "{{ partsy_path }}/data:/data" + - "{{ partsy_path }}/backups:/backups" + ports: + - "8081:8080" + +- name: create systemd startup job for partsy + include_tasks: podman/systemd-generate.yml + vars: + container_name: partsy diff --git a/ansible/roles/podman/tasks/main.yml b/ansible/roles/podman/tasks/main.yml index 5fdd99f..ba537a5 100644 --- a/ansible/roles/podman/tasks/main.yml +++ b/ansible/roles/podman/tasks/main.yml @@ -40,18 +40,23 @@ image: docker.io/bdebyl/partkeepr:0.1.10 tags: partkeepr +- import_tasks: containers/home/partsy.yml + vars: + image: localhost/partsy:b8e4e92-dirty + tags: partsy + - import_tasks: containers/skudak/wiki.yml vars: db_image: docker.io/library/mysql:5.7.21 - image: docker.io/solidnerd/bookstack:25.5 + image: docker.io/solidnerd/bookstack:25.7 tags: skudak, skudak-wiki - import_tasks: containers/home/photos.yml vars: db_image: docker.io/tensorchord/pgvecto-rs:pg14-v0.2.0@sha256:90724186f0a3517cf6914295b5ab410db9ce23190a2d9d0b9dd6463e3fa298f0 - ml_image: ghcr.io/immich-app/immich-machine-learning:v1.142.1 + ml_image: ghcr.io/immich-app/immich-machine-learning:v2.1.0 redis_image: docker.io/redis:6.2-alpine@sha256:eaba718fecd1196d88533de7ba49bf903ad33664a92debb24660a922ecd9cac8 - image: ghcr.io/immich-app/immich-server:v1.142.1 + image: ghcr.io/immich-app/immich-server:v2.1.0 tags: photos - import_tasks: containers/home/cloud.yml @@ -68,10 +73,15 @@ - import_tasks: containers/debyltech/fulfillr.yml vars: - image: "{{ aws_ecr_endpoint }}/fulfillr:20250916.1905" + image: "{{ aws_ecr_endpoint }}/fulfillr:20251003.1533" tags: debyltech, fulfillr - import_tasks: containers/home/nosql.yml vars: image: docker.io/redis:7.2.1-alpine - tags: nosql \ No newline at end of file + tags: nosql + +- import_tasks: containers/home/gregtime.yml + vars: + image: docker.io/library/greg-time-bot:1.0.1 + tags: gregtime \ No newline at end of file diff --git a/ansible/roles/podman/templates/caddy/Caddyfile.j2 b/ansible/roles/podman/templates/caddy/Caddyfile.j2 index 7190247..f7534f0 100644 --- a/ansible/roles/podman/templates/caddy/Caddyfile.j2 +++ b/ansible/roles/podman/templates/caddy/Caddyfile.j2 @@ -73,16 +73,6 @@ } } -# Parts/PartKeepr - {{ parts_server_name }} -{{ parts_server_name }} { - import common_headers - reverse_proxy localhost:8081 - - log { - output file /var/log/caddy/parts.log - format json - } -} # Wiki/BookStack - {{ bookstack_server_name }} {{ bookstack_server_name }} { @@ -128,12 +118,27 @@ # Home server - {{ home_server_name }} {{ home_server_name }} { {{ ip_restricted_site() }} - + handle @local { respond "Home Server Access OK" 200 } } +# Parts/Partsy - {{ parts_server_name }} +{{ parts_server_name }} { +{{ ip_restricted_site() }} + + handle @local { + import common_headers + reverse_proxy localhost:8081 + } + + log { + output file /var/log/caddy/parts.log + format json + } +} + # ============================================================================ # COMPLEX CONFIGURATIONS # ============================================================================