Wiki » History » Version 5
Redmine Admin, 10/31/2026 07:01 PM
deploy-publish.sh
| 1 | 1 | Redmine Admin | Rocky Linux 10.2 DMZ host (`dmz-web`) running every public web service of MDS as **rootless Podman Quadlet** units under `websvcmaster`, behind **Nginx Proxy Manager** (Let's Encrypt). Shared-nothing: each service has its own network, database, app container and volumes. |
|---|---|---|---|
| 2 | |||
| 3 | 2 | Redmine Admin | | Stack | Network | App container | DB container | DB engine | Public name | |
| 4 | |------------|-----------------|------------------|---------------|-------------|---------------------------| |
||
| 5 | | NPM | all `net-*` | `nginx-proxy-manager` | — | — | host :81/:444 (UI :8181) | |
||
| 6 | | WordPress | `net-<name>` | `site-<name>` | `db-<name>` | MariaDB 11 | `<domain>` (e.g. www./staging.mdsdefense.com) | |
||
| 7 | | Redmine | `net-redmine` | `site-redmine` | `db-redmine` | PostgreSQL | `<redmine-domain>` | |
||
| 8 | | Snipe-IT | `net-snipeit` | `site-snipeit` | `db-snipeit` | MariaDB 11 | `assets.mdsdefense.com` | |
||
| 9 | 4 | Redmine Admin | | PF | `net-pf`, `net-pf-db` (Internal) | `site-pf` | `db-pf` | TimescaleDB (PG 16) | `pf.sibernet.com.tr` | |
| 10 | 1 | Redmine Admin | |
| 11 | Naming inversion to remember: containers are `db-<name>`, secrets are `<name>-db-…`. |
||
| 12 | |||
| 13 | ## Pages |
||
| 14 | |||
| 15 | 5 | Redmine Admin | Every heading in these pages and in the cheat sheets carries its number — chapter, section, subsection (**3**, **3.1**, **3.1.7**) — and references use it: "§3.1.7" is the same place in the wiki page, in the cheat sheet and in a cross-reference. |
| 16 | |||
| 17 | | Chapter | Page | What is in it | |
||
| 18 | |---|---|---| |
||
| 19 | | 0 | [[Conventions]] | shell setup, where things live, naming | |
||
| 20 | | 1 | [[NPM]] | reverse proxy, Let's Encrypt, joining a site's network, access lists | |
||
| 21 | | 2 | [[WordPress]] | add-wordpress-site.sh, volumes, MariaDB access, staging → production | |
||
| 22 | | 3 | [[Redmine]] | PostgreSQL, bind mounts, Puma reload, mail relay | |
||
| 23 | | 3.1 | [[Git Workflow]] | bare repos under /srv/git, who runs what, `deploy-commit.sh` (3.1.6), `deploy-publish.sh` (3.1.7), recovery (3.1.8) | |
||
| 24 | | 4 | [[Snipe-IT]] | APP_KEY, proxy env, pre-flight (4.1), mail (4.2), upgrades (4.3) | |
||
| 25 | | 5 | [[Operations]] | services, inspecting, env vars, secrets, trailing-newline fix, database engines and upgrades (5.6) | |
||
| 26 | | 6 | [[Health Check]] | check-sites.sh and the --resolve :444 trick; before go-live checklist (6.1) | |
||
| 27 | | 7 | [[Troubleshooting]] | what is up / defined, bringing a site back, 502 triage, boot persistence, reboot checklist | |
||
| 28 | | 8 | [[PF]] | portfolio stack: install (8.1), app code (8.2), operations (8.3: new version 8.3.1, backup 8.3.3), troubleshooting (8.4), using the application (8.5: splits 8.5.5) | |
||
| 29 | | 9 | [[Releases]] | version history of the cheat sheet (9.1) and scripts (9.2) | |
||
| 30 | 2 | Redmine Admin | |
| 31 | 1 | Redmine Admin | ## Repository |
| 32 | |||
| 33 | 4 | Redmine Admin | `dmz-web-deploy` (Repository tab) = the host's `~/deploy`: bootstrap/setup scripts, `add-wordpress-site.sh`, `redmine-install.sh`, `check-sites.sh`, `pf-install.sh`, `root-bin/deploy-commit.sh` and `root-bin/deploy-publish.sh`, `quadlet/*` units, and the single-file versions of this wiki: `dmz-web-podman-cheatsheet.md` (host) and `pf-mgmt-cheatsheet.md` (PF). Secrets are never in the repo; they live only in the Podman secret store. |
| 34 | 1 | Redmine Admin | |
| 35 | ## Working rules |
||
| 36 | |||
| 37 | 3 | Redmine Admin | * Change a unit in the repo working copy (`~/deploy/quadlet/`), commit with `deploy-commit.sh`, then `cp` to `~/.config/containers/systemd/` and `daemon-reload` — never edit the live copy only. |
| 38 | * Every change to a running service gets an issue here (Maintenance / Update-Upgrade); the permanent outcome goes to the relevant wiki page, the step-by-step log stays in the issue. |
||
| 39 | * New secrets: `printf '%s' … | podman secret create` — no trailing newline. |