Project

General

Profile

Conventions » History » Version 1

Redmine Admin, 10/25/2026 04:15 PM

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