podman, postgres, valkey, and nginx are shared services deployed once per host. Declaring them in meta/main.yml re-ran them on every service deploy, adding significant time to targeted runs. Playbooks now list shared services first (tagged 'infra') and every role entry carries a group tag plus its own name, so '--tags <role>' deploys just that role. Roles still fail fast when a shared service is missing (password asserts, postgresql tasks). Prerequisites are documented in role READMEs. CLAUDE.md updated to reflect the new convention.
1.4 KiB
Immich Role
This Ansible role deploys Immich - a high performance self-hosted photo and video management solution - using Podman with k8s files.
Prerequisites
The podman, postgres, valkey, and nginx roles must have been applied to the host first (they are shared services, intentionally not declared in meta/main.yml to keep immich deploys fast). Order them before immich in the playbook for fresh installs.
Role Variables
See defaults/main.yml for all available variables and their default values.
Required Passwords
Both passwords must be set in your inventory (min 12 characters):
immich_postgres_password- PostgreSQL database passwordimmich_valkey_password- Valkey/Redis password
External Libraries
Mount host paths read-only into the server container via immich_external_libraries,
then add the in-container mount_path in the Immich UI
(Administration → External Libraries). The {{ ansible_user }} running the rootless
pod must have read access on the host path.
Troubleshooting
Valkey ACL Issues
Test Immich user credentials:
valkey-cli
AUTH immich <immich_valkey_password>
SELECT 0
PING
# Should return PONG
# Try a restricted command (should fail)
FLUSHDB
# Should return: (error) NOPERM
Going further: Immich GitHub Discussion #19727