ENV ?= dev export ENVIRONMENT = $(ENV) # DB_PASSWORD/DB_ROOT_PASSWORD are stripped from what Compose loads — they # only flow through secrets/ now, and Compose warns "variable not set" on # any $-shaped value in --env-file even when nothing consumes it. Rewritten # fresh on every `make` invocation, so it can't drift from .env.$(ENV). # chmod 600 (not the 644 elsewhere in deploy/ — those get read by containers # under a different UID; this one is only ever read by the `docker compose` # CLI on the host, as $(ENV) invokes it, so there's no reason it needs to be # world-readable) — and every target below removes it on the way out via a # shell EXIT trap (same idiom deploy.sh/backup.sh already use for their own # temp files), not a `; rm -f ...` tacked onto the end of the command. A # real Ctrl+C on a long-running target (`logs -f`, an interactive `shell`) # sends SIGINT to the recipe's whole foreground process group, which # terminates a plain `cmd; rm -f ...` chain before the `;` ever runs — the # EXIT trap fires regardless of *how* the shell exits (falls through, errors, # or is killed by a signal), and doesn't touch $? either, so the underlying # command's real exit code still propagates to `make`. COMPOSE_ENV_FILE := .env.$(ENV).compose $(shell grep -Ev '^(DB_PASSWORD|DB_ROOT_PASSWORD)=' .env.$(ENV) > $(COMPOSE_ENV_FILE) 2>/dev/null; chmod 600 $(COMPOSE_ENV_FILE) 2>/dev/null) COMPOSE = docker compose -p bookstore-$(ENV) -f docker-compose.yml -f docker-compose.$(ENV).yml --env-file $(COMPOSE_ENV_FILE) CLEANUP = trap 'rm -f $(COMPOSE_ENV_FILE)' EXIT; .PHONY: up down ps logs shell wp deploy backup up: $(CLEANUP) $(COMPOSE) up -d --build down: $(CLEANUP) $(COMPOSE) down ps: $(CLEANUP) $(COMPOSE) ps logs: $(CLEANUP) $(COMPOSE) logs -f # add -u root yourself for one-off root debugging (installing a package, etc.) shell: $(CLEANUP) $(COMPOSE) exec -u www-data wordpress bash # make wp ENV=staging ARGS="plugin list" wp: $(CLEANUP) $(COMPOSE) exec -u www-data wordpress wp $(ARGS) deploy: $(CLEANUP) ./deploy/deploy.sh $(ENV) backup: $(CLEANUP) ./deploy/backup.sh $(ENV)