fix(dev-deploy): seed geoip onto a named volume
`docker restart galaxy-dev-backend` failed with "not a directory"
after every dev-deploy workflow run. Root cause: the compose file
bind-mounted the geoip database via a relative path
(`../../pkg/geoip/test-data/test-data/GeoIP2-Country-Test.mmdb`).
When the Gitea runner invoked `docker compose up`, the path
resolved against the runner's ephemeral workspace under
`/home/runner/.cache/act/<hash>/hostexecutor/...`. The bind source
baked into the running container therefore pointed at that
ephemeral path; the runner deleted the workspace once the workflow
finished, and any later `docker restart` could not remount.
Replace the bind with a named volume `galaxy-dev-geoip-data`,
seeded at deploy time:
- `tools/dev-deploy/docker-compose.yml`: mount
`galaxy-dev-geoip-data:/var/lib/galaxy:ro` instead of a relative
bind. Declare the volume in the top-level `volumes:` block.
- `.gitea/workflows/dev-deploy.yaml`: new `Seed geoip volume` step
(placed right after the existing UI-volume seed) copies the
fixture from `pkg/geoip/test-data/test-data/` into the named
volume via an ephemeral alpine container, the same pattern UI
seeding already uses.
- `tools/dev-deploy/Makefile`: new `seed-geoip` target performs
the same copy from the persistent checkout. `up` and `rebuild`
now depend on it, so a hand-run `make -C tools/dev-deploy up`
populates the volume without operator action.
- `tools/dev-deploy/README.md`: updated the make-targets table to
list `seed-geoip`.
- `tools/dev-deploy/KNOWN-ISSUES.md`: the entry for the restart
failure is downgraded to a "fixed" postmortem; the symptom,
cause, and where the fix lives are kept for future reference.
Verification on the dev host (this branch checked out):
$ make -C tools/dev-deploy up # populates the volume, brings stack healthy
$ docker restart galaxy-dev-backend # used to error "not a directory"
$ until [ "$(docker inspect -f '{{.State.Health.Status}}' galaxy-dev-backend)" = "healthy" ]; do sleep 2; done
$ echo "ok" # backend up 6s, healthy
The pre-existing sandbox engine `galaxy-game-80f3ce86-...` survived
both `make up` and `docker restart` untouched.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -1,4 +1,4 @@
|
||||
.PHONY: help up down rebuild logs status clean-data health psql build-engine seed-ui
|
||||
.PHONY: help up down rebuild logs status clean-data health psql build-engine seed-ui seed-geoip
|
||||
|
||||
.DEFAULT_GOAL := help
|
||||
|
||||
@@ -18,10 +18,11 @@ COMPOSE := docker compose
|
||||
|
||||
help:
|
||||
@echo "Long-lived Galaxy dev environment (https://*.galaxy.lan):"
|
||||
@echo " make up Build images, ensure engine image, bring stack up"
|
||||
@echo " make up Build images, ensure engine image, seed geoip, bring stack up"
|
||||
@echo " make rebuild Force rebuild of backend / gateway images and bring up"
|
||||
@echo " make build-engine Build $(ENGINE_IMAGE) from game/Dockerfile (no-op if present)"
|
||||
@echo " make seed-ui Build ui/frontend and load into galaxy-dev-ui-dist volume"
|
||||
@echo " make seed-geoip Copy GeoIP fixture into galaxy-dev-geoip-data volume"
|
||||
@echo " make down Stop containers, keep named volumes"
|
||||
@echo " make logs Tail all logs"
|
||||
@echo " make status docker compose ps"
|
||||
@@ -35,11 +36,11 @@ help:
|
||||
@echo " - host Caddy proxying *.galaxy.lan into that network"
|
||||
@echo " - game-state dir: $(GALAXY_DEV_GAME_STATE_DIR) (auto-created)"
|
||||
|
||||
up: build-engine
|
||||
up: build-engine seed-geoip
|
||||
mkdir -p "$(GALAXY_DEV_GAME_STATE_DIR)"
|
||||
$(COMPOSE) up -d --wait
|
||||
|
||||
rebuild: build-engine
|
||||
rebuild: build-engine seed-geoip
|
||||
$(COMPOSE) build --no-cache galaxy-backend galaxy-api
|
||||
mkdir -p "$(GALAXY_DEV_GAME_STATE_DIR)"
|
||||
$(COMPOSE) up -d --wait
|
||||
@@ -52,6 +53,19 @@ build-engine:
|
||||
docker build -t $(ENGINE_IMAGE) -f $(REPO_ROOT)/game/Dockerfile $(REPO_ROOT); \
|
||||
fi
|
||||
|
||||
# Copy the GeoIP fixture into a named volume the backend mounts as
|
||||
# /var/lib/galaxy. Using a volume avoids a bind-mount that would
|
||||
# resolve against an ephemeral workspace path when compose is driven
|
||||
# from the Gitea runner (see tools/dev-deploy/KNOWN-ISSUES.md for the
|
||||
# breakage that bind-mounts caused on `docker restart`).
|
||||
seed-geoip:
|
||||
@echo "seeding GeoIP fixture into galaxy-dev-geoip-data…"
|
||||
docker volume create galaxy-dev-geoip-data >/dev/null
|
||||
docker run --rm \
|
||||
-v galaxy-dev-geoip-data:/dst \
|
||||
-v $(REPO_ROOT)/pkg/geoip/test-data/test-data:/src:ro \
|
||||
alpine sh -c 'cp /src/GeoIP2-Country-Test.mmdb /dst/geoip.mmdb'
|
||||
|
||||
# Build the UI frontend and load the resulting build/ directory into
|
||||
# the named volume Caddy serves from. Used by the dev-deploy workflow
|
||||
# and by anyone bringing the stack up by hand.
|
||||
|
||||
Reference in New Issue
Block a user