Redmine » History » Version 3
Redmine Admin, 10/31/2026 07:01 PM
deploy-publish.sh
| 1 | 3 | Redmine Admin | *Chapter 3 of the dmz-web documentation · headings are numbered like the cheat sheets · index: [[Wiki]]* |
|---|---|---|---|
| 2 | |||
| 3 | 2 | Redmine Admin | Containers `site-redmine` (Redmine 6, Puma on :3000) + `db-redmine` |
| 4 | 1 | Redmine Admin | (PostgreSQL) on `net-redmine`. NPM forwards to `site-redmine:3000`. |
| 5 | |||
| 6 | 2 | Redmine Admin | Persistence: `files` is a named volume; **config, plugins, public/images, |
| 7 | public/assets/plugin_assets are host bind mounts under `~/redmine_data/`** |
||
| 8 | (added after a container recreate wiped a `podman cp`'d plugin). Anything |
||
| 9 | dropped into the container with `podman cp` outside those paths does NOT |
||
| 10 | 1 | Redmine Admin | survive a recreate. |
| 11 | |||
| 12 | 2 | Redmine Admin | ```bash |
| 13 | 1 | Redmine Admin | # reload Puma after changing a plugin / View Customize / logo (no restart needed) |
| 14 | podman kill -s USR2 site-redmine |
||
| 15 | |||
| 16 | # Rails console / rake inside the container |
||
| 17 | podman exec -it site-redmine bundle exec rails console -e production |
||
| 18 | podman exec -it site-redmine bundle exec rake redmine:plugins:migrate RAILS_ENV=production |
||
| 19 | |||
| 20 | # PostgreSQL |
||
| 21 | podman exec -it db-redmine psql -U redmine redmine |
||
| 22 | podman exec db-redmine pg_dump -U redmine redmine > ~/tmp/redmine-$(date +%F).sql |
||
| 23 | ``` |
||
| 24 | |||
| 25 | 2 | Redmine Admin | Mail: no SMTP AUTH (M365 Security Defaults stay on) — Exchange Online |
| 26 | IP-based inbound connector relay, port 25 to the tenant MX endpoint |
||
| 27 | (`mdsdefense-com.mail.protection.outlook.com`), STARTTLS, no credentials, |
||
| 28 | sender `sysadmin@mdsdefense.com`. Redmine's settings: |
||
| 29 | `grep -nE 'address|port|domain|starttls' ~/redmine_data/config/configuration.yml`. |
||
| 30 | Why no password is needed: Exchange Online only accepts mail from IP addresses |
||
| 31 | it has been told about (the IP-based connector), and this host's public egress IP |
||
| 32 | is on that list. Every other container on this host leaves through the same IP, |
||
| 33 | so it can use the same relay the same way (Snipe-IT, below). The one exception is |
||
| 34 | a container on a network with `Internal=true`: it has no internet access at all, |
||
| 35 | so it cannot reach the relay. |
||
| 36 | 1 | Redmine Admin | |
| 37 | 2 | Redmine Admin | Git repositories and the commit/push procedure: [[Git Workflow]]. |
| 38 | 1 | Redmine Admin | |
| 39 | |||
| 40 | --- |
||
| 41 | 2 | Redmine Admin | _Source: `dmz-web-podman-cheatsheet.md` v1.2 in the `dmz-web-deploy` repo ([[Releases]]). Edit the wiki and the repo copy together._ |