Conventions » History » Version 3
Redmine Admin, 10/31/2026 07:01 PM
deploy-publish.sh
| 1 | 3 | Redmine Admin | *Chapter 0 of the dmz-web documentation · headings are numbered like the cheat sheets · index: [[Wiki]]* |
|---|---|---|---|
| 2 | |||
| 3 | 2 | Redmine Admin | Host: `dmz-web` (Rocky Linux 10.2). Everything runs **rootless** under user |
| 4 | `websvcmaster` (no sudo) as Quadlet units in `~/.config/containers/systemd/`. |
||
| 5 | Design rule: **shared-nothing** — every service gets its own network, DB |
||
| 6 | container, app container and volumes; the only thing joined to all of them is |
||
| 7 | 1 | Redmine Admin | Nginx Proxy Manager. |
| 8 | |||
| 9 | 2 | Redmine Admin | |
| 10 | 1 | Redmine Admin | Naming inversion to remember: containers are `db-<name>`, secrets are `<name>-db-…`. |
| 11 | 2 | Redmine Admin | |
| 12 | 1 | Redmine Admin | |
| 13 | 3 | Redmine Admin | ## 0. Shell setup (every session) |
| 14 | 1 | Redmine Admin | |
| 15 | 2 | Redmine Admin | `sudo -iu websvcmaster` doesn't run PAM session setup, so `systemctl --user` |
| 16 | 1 | Redmine Admin | fails with "Failed to connect to user scope bus" until: |
| 17 | |||
| 18 | 2 | Redmine Admin | ```bash |
| 19 | 1 | Redmine Admin | export XDG_RUNTIME_DIR=/run/user/$(id -u) |
| 20 | export DBUS_SESSION_BUS_ADDRESS=unix:path=$XDG_RUNTIME_DIR/bus |
||
| 21 | systemctl --user show-environment >/dev/null && echo OK |
||
| 22 | ``` |
||
| 23 | |||
| 24 | 2 | Redmine Admin | Lingering must be on (`loginctl show-user websvcmaster | grep Linger`, as root). |
| 25 | 1 | Redmine Admin | No write access to system `/tmp` — use `~/tmp`. |
| 26 | |||
| 27 | Where things live: |
||
| 28 | |||
| 29 | 2 | Redmine Admin | ```bash |
| 30 | 1 | Redmine Admin | ~/.config/containers/systemd/ # live Quadlet units (the "pod config") |
| 31 | ~/deploy/ # add-wordpress-site.sh, check-sites.sh |
||
| 32 | ~/deploy/quadlet/ # generated unit templates (source of truth, cp'd into the dir above) |
||
| 33 | ~/.local/share/containers/storage/volumes/<vol>/_data/ # named volume contents |
||
| 34 | ~/.local/share/containers/storage/secrets/filedriver/ # secret store |
||
| 35 | ~/redmine_data/ # Redmine bind mounts (config, plugins, images, assets) |
||
| 36 | /srv/git/ # bare git repos (root-owned, read-only into Redmine) |
||
| 37 | ``` |
||
| 38 | |||
| 39 | |||
| 40 | 2 | Redmine Admin | --- |
| 41 | _Source: `dmz-web-podman-cheatsheet.md` v1.1.1 in the `dmz-web-deploy` repo ([[Releases]]). Edit the wiki and the repo copy together._ |