I found the Radicale documentation [1] sufficient for setup, and it really hasn't needed much in the way of maintenance. I also enabled the awesome Git integration so that every client-side contact/vCard change becomes a server-side git commit to my contacts repo. Now my birthday greeting script can just "git pull" to get the latest contact data.