--- # mozimo deployment — rootless Podman + Quadlet, on the host named emily. # # The layout follows the convention already in place on that host (see the # caddy / tandoor / postgres playbooks that manage its other services): # # ~/.config/containers/systemd/ Quadlet units, generated into user services # ~/podman-data// each service's data # ~/podman-data/caddy/conf/Caddyfile the shared Caddy config; every service # appends its own block to it # # Nothing here needs root: podman runs as the ssh user, the units are user # services, and the shared Caddy is already a user service on that host. registry: registry.tanshu.com username: ta-registry password: ff28a01f00c0f39315d94cd9dcb1e554968dba25676a8ea5f2be34e96a9a099f title: mozimo tag: latest # The unprivileged user that owns the containers. `ansible_user` on emily is # the same account, so no become is involved anywhere in this play. podman_user: tanshu # `id -u tanshu` on emily. Pinned rather than read from facts because the # play-level environment (XDG_RUNTIME_DIR) is templated before facts exist; # the upload role asserts the two still agree. podman_uid: 1001 xdg_runtime_dir: "/run/user/{{ podman_uid }}" podman_data: "/home/{{ podman_user }}/podman-data" quadlet_dir: "/home/{{ podman_user }}/.config/containers/systemd" # mozimo's data root: PocketBase database and files, the Shopify token cache, # and the runtime .env that the unit reads. host_directory: "{{ podman_data }}/{{ title }}" # image tag: deploy.sh passes -e image_tag=; "tag" is the fallback # when running the playbook by hand — rollback = -e image_tag= image: "{{ registry }}/{{ title }}:{{ image_tag | default(tag) }}" app_container: "{{ title }}" # apex is the canonical origin and serves the app; www 301-redirects to it apex_host: "mozimo.in" www_host: "www.mozimo.in" www_port: 3000 cms_host: "cms.mozimo.in" cms_port: 8090 # mozimo gets its own podman network, and registers itself with the shared # Caddy through a drop-in rather than by editing Caddy's unit. network_name: "{{ title }}_net" network_quadlet: "{{ title }}" # The shared Caddy on emily. Each service owns a block in its Caddyfile # (blockinfile markers) and a drop-in that adds its network to Caddy. caddy_container: caddy caddy_service: caddy caddyfile_path: "{{ podman_data }}/caddy/conf/Caddyfile" caddy_dropin_dir: "{{ quadlet_dir }}/caddy.container.d" caddy_dropin_file: "50-{{ title }}.conf" # self-hosted first-party analytics (Vince) — script/events proxied at # /stats/* on the apex host, dashboard published on stats_host vince_container: vince vince_port: 8000 vince_admin_name: admin # change this before first deploy — it (re)sets the dashboard login vince_admin_password: "ChangeMe-Vince-2025!" vince_site_domain: mozimo.in vince_directory: "{{ podman_data }}/vince" stats_host: stats.mozimo.in