# 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.
