Project

General

Profile

Actions

Conventions » History » Revision 2

« Previous | Revision 2/3 (diff) | Next »
Redmine Admin, 10/26/2026 02:24 AM
deploy-publish.sh


Host: dmz-web (Rocky Linux 10.2). Everything runs rootless under user
websvcmaster (no sudo) as Quadlet units in ~/.config/containers/systemd/.
Design rule: shared-nothing — every service gets its own network, DB
container, app container and volumes; the only thing joined to all of them is
Nginx Proxy Manager.

Naming inversion to remember: containers are db-<name>, secrets are <name>-db-….

Shell setup (every session)

sudo -iu websvcmaster doesn't run PAM session setup, so systemctl --user
fails with "Failed to connect to user scope bus" until:

export XDG_RUNTIME_DIR=/run/user/$(id -u)
export DBUS_SESSION_BUS_ADDRESS=unix:path=$XDG_RUNTIME_DIR/bus
systemctl --user show-environment >/dev/null && echo OK

Lingering must be on (loginctl show-user websvcmaster | grep Linger, as root).
No write access to system /tmp — use ~/tmp.

Where things live:

~/.config/containers/systemd/          # live Quadlet units (the "pod config")
~/deploy/                              # add-wordpress-site.sh, check-sites.sh
~/deploy/quadlet/                      # generated unit templates (source of truth, cp'd into the dir above)
~/.local/share/containers/storage/volumes/<vol>/_data/   # named volume contents
~/.local/share/containers/storage/secrets/filedriver/    # secret store
~/redmine_data/                        # Redmine bind mounts (config, plugins, images, assets)
/srv/git/                              # bare git repos (root-owned, read-only into Redmine)

Source: dmz-web-podman-cheatsheet.md v1.1.1 in the dmz-web-deploy repo (Releases). Edit the wiki and the repo copy together.

Updated by Redmine Admin 11 days ago · 3 revisions