5528769211
Made the host-stacks bind-mount path configurable via DOCKGE_HOST_STACKS_ROOT (default /opt/docker, unchanged for the existing five hosts). Override on corviduo-dev to /home/vh/docker because that host's /opt/ is owned by deploy:deploy (Worldtree team) and vh lacks passwordless sudo for the fleet-standard path — same reasoning as the beszel + dozzle agent placement earlier today. Deployed to corviduo-dev. Reachable at http://10.250.50.152:5001 (first probe 200 — Docker's port-mapping route through iptables worked without firewall changes, unlike beszel's network_mode: host). Scoped to PFI-managed stacks only (/home/vh/docker/compose/) — does NOT see /opt/worldtree*/ deployments. Keeps the management boundary clean: dockge can restart/recreate PFI's beszel+dozzle+itself but not the Worldtree-team-owned containers.
73 lines
2.2 KiB
Markdown
73 lines
2.2 KiB
Markdown
# dockge
|
|
|
|
Per-host [Dockge](https://dockge.kuma.pet/) — a lightweight web UI for
|
|
managing the host's docker compose stacks. Runs one instance on every
|
|
Docker host in the fleet.
|
|
|
|
Default stacks root is `/opt/docker/compose/` (fleet convention).
|
|
Hosts where `/opt/docker/` isn't writable by the deploying user
|
|
override `DOCKGE_HOST_STACKS_ROOT` in their `.env` — corviduo-dev
|
|
sets it to `/home/vh/docker` (vh lacks passwordless sudo on the
|
|
worldtree-team-managed host; see `servers/corviduo-dev/README.md`).
|
|
|
|
## Layout
|
|
|
|
- `compose.yaml` — canonical, same file pushed to every host
|
|
- `.env.example` — per-host tunables; `DOCKGE_HOST_LABEL` + `DOCKGE_HOST_IP` vary
|
|
|
|
## Homepage
|
|
|
|
Labeled `homepage.group=Service Networking` so all five Dockge instances
|
|
collapse into the toolchain group on the dashboard, each card pointing
|
|
at its own host's web UI.
|
|
|
|
## Deploy
|
|
|
|
```bash
|
|
cp stacks/dockge/compose.yaml stacks-mirror/<host>/dockge/
|
|
scripts/deploy-stack.sh <host> dockge --compose
|
|
ssh -t <host> 'cd /opt/docker/compose/dockge && sudo docker compose up -d --force-recreate'
|
|
```
|
|
|
|
The `.env` with the correct `DOCKGE_HOST_LABEL` / `DOCKGE_HOST_IP` must
|
|
exist on the host before the deploy — otherwise the homepage labels will
|
|
render with empty substitutions. Initial seed per host:
|
|
|
|
```bash
|
|
# ana-docker
|
|
ssh -t ana-docker 'sudo tee /opt/docker/compose/dockge/.env > /dev/null <<EOF
|
|
DOCKGE_HOST_LABEL=ana-docker
|
|
DOCKGE_HOST_IP=10.250.50.70
|
|
EOF'
|
|
|
|
# ana-ml2
|
|
ssh -t ana-ml2 'sudo tee /opt/docker/compose/dockge/.env > /dev/null <<EOF
|
|
DOCKGE_HOST_LABEL=ana-ml2
|
|
DOCKGE_HOST_IP=10.250.50.54
|
|
EOF'
|
|
|
|
# nh3-docker
|
|
ssh -t nh3-docker 'sudo tee /opt/docker/compose/dockge/.env > /dev/null <<EOF
|
|
DOCKGE_HOST_LABEL=nh3-docker
|
|
DOCKGE_HOST_IP=10.100.50.40
|
|
EOF'
|
|
|
|
# esh-docker-vm
|
|
ssh -t esh-docker-vm 'sudo tee /opt/docker/compose/dockge/.env > /dev/null <<EOF
|
|
DOCKGE_HOST_LABEL=esh-docker-vm
|
|
DOCKGE_HOST_IP=10.0.50.45
|
|
EOF'
|
|
|
|
# vm-esh-nas
|
|
ssh -t vm-esh-nas 'sudo tee /opt/docker/compose/dockge/.env > /dev/null <<EOF
|
|
DOCKGE_HOST_LABEL=vm-esh-nas
|
|
DOCKGE_HOST_IP=10.0.50.154
|
|
EOF'
|
|
```
|
|
|
|
## Authoritative vs mirror
|
|
|
|
Per-host `.env` lives on the server and is gitignored.
|
|
`compose.yaml` is authoritative in `stacks/dockge/` and gets promoted
|
|
into `stacks-mirror/<host>/dockge/` before each deploy.
|