Skip to main content

Ansible Role ivly on Galaxy

Table of Contents

Version 0.1.0 (“Featherweight”) of the Ansible role head1328.ivly is now on Ansible Galaxy . It deploys the full ivly invoicing stack as rootless Podman Quadlets on Raspberry Pi OS / Debian Trixie.

head1328/ansible-ivly

An Ansible role that deploys the ivly invoicing stack on Raspberry Pi OS (Debian 13 / Trixie) using containers.

Jinja
0
0

What It Does
#

The role brings the entire ivly stack to a Pi as rootless containers using Podman + systemd Quadlets:

  • CouchDB as the document store
  • ivly-api (Go) - backend API
  • ivly-backoffice (SvelteKit SPA via nginx) - web frontend
  • ivly-printer (Go + TeX Live) - PDF rendering from LaTeX
  • ivly-validation (Java) - XRechnung / ZUGFeRD / Factur-X validation
  • Caddy as the reverse proxy

All components talk to each other on a shared Podman network. Image tags are pinned to 0.1.0 by default; ivly_autoupdate_enabled switches on podman-auto-update when running floating tags.

Topology
#

The reference setup assumes two Pis:

HostHardwareRoleRequired?
ivlyPi 4/5runs the ivly stackyes
ollamaPi 5 + AI HAT+ 2runs Ollama via head1328.hailooptional

Without a dedicated Ollama host, ivly_ollama_url can point at any reachable Ollama-compatible endpoint - or the LLM-related variables can simply be omitted, and ivly works without LLM-backed assistance features.

TLS and Networking
#

  • Caddy with automatic Let’s Encrypt (ivly_caddy_domain), or
  • internal Caddy CA for internal domains (ivly_caddy_tls_internal)
  • optional iptables PREROUTING redirects for privileged ports < 1024 (rootless Podman cannot bind those directly)

Installation
#

ansible-galaxy role install head1328.ivly

The role builds on head1328.podman .

License
#

AGPL-3.0-or-later.

Acknowledgments
#

  • ivly - open-source invoicing stack (XRechnung / ZUGFeRD / Factur-X)
  • Podman - daemonless container runtime
  • Caddy - reverse proxy with automatic TLS
  • CouchDB - document-oriented database
  • Ansible Galaxy - role registry

Found this helpful?
Consider supporting via: