2.4 KiB · text History 4b6fe3b

Quadlet (podman + systemd)

Runs the :standalone image variant as systemd-managed podman containers. Works rootless or rootful; the %h paths below assume rootless.

Install

mkdir -p ~/.config/containers/systemd ~/ircd
cp deploy/standalone/quadlet/*.{network,volume,container} \
   ~/.config/containers/systemd/
cp deploy/standalone/quadlet/ircd.env.example ~/ircd/ircd.env
chmod 600 ~/ircd/ircd.env
$EDITOR ~/ircd/ircd.env    # fill in real values

# Quadlet generates systemd units from those files on the next daemon-reload.
systemctl --user daemon-reload
systemctl --user start ircd.service     # pulls postgres + ircd as deps
systemctl --user enable --now ircd.service

For rootful install, drop the files in /etc/containers/systemd/ and use systemctl (no --user) — also swap %h/ircd/ircd.env for /etc/ircd/ircd.env.

Files

File What it is
ircd.network Shared podman network for the containers
ircd-postgres.volume Persistent Postgres data
ircd-site-encrypt.volume Persistent ACME cert + private key
ircd-postgres.container Postgres 16 with healthcheck
ircd.container The IRC daemon (waits for postgres healthy)
ircd.env.example Sample environment file (copy + edit)

Operating

# View logs
journalctl --user -u ircd.service -f
journalctl --user -u ircd-postgres.service -f

# Restart after editing ircd.env
systemctl --user restart ircd.service

# Update to a newer image
podman pull registry.example.com/oh_my_ex_oh_ircd:standalone-master
systemctl --user restart ircd.service

Notes on ACME

The standalone image runs site_encrypt in-process, so:

  • Port 80 must be reachable from the public internet during the HTTP-01 challenge (so Let’s Encrypt can fetch http://$ACME_DOMAINS/.well-known/acme-challenge/...).
  • Certs and private keys live in the ircd-site-encrypt-db named volume. Back it up — losing it means re-issuing on next boot, which is rate-limited by Let’s Encrypt.
  • Renewals happen automatically while the unit is running; nothing to schedule externally.