# ────────────────────────────────────────────────────────────── # BanGUI — Project Makefile # # Compatible with both Docker Compose and Podman Compose. # Auto-detects which compose binary is available. # # Usage: # make up — start the debug stack # make down — stop the debug stack # make build — (re)build the backend image without starting # make clean — stop, remove all containers, volumes, and local images # make logs — tail logs for all debug services # make restart — restart the debug stack # make dev-ban-test — one-command smoke test of the ban pipeline # ────────────────────────────────────────────────────────────── COMPOSE_FILE := Docker/compose.debug.yml # Compose project name (matches `name:` in compose.debug.yml). PROJECT := bangui-dev # All named volumes declared in compose.debug.yml. # Compose prefixes them with the project name. DEV_VOLUMES := \ $(PROJECT)_bangui-dev-data \ $(PROJECT)_frontend-node-modules \ $(PROJECT)_fail2ban-dev-config \ $(PROJECT)_fail2ban-dev-run # Locally-built images (compose project name + service name). # Public images (fail2ban, node) are intentionally excluded. DEV_IMAGES := \ $(PROJECT)_backend # Detect available compose binary. COMPOSE := $(shell command -v podman-compose 2>/dev/null \ || echo "podman compose") # Detect available container runtime (podman or docker). RUNTIME := $(shell command -v podman 2>/dev/null || echo "docker") .PHONY: up down build restart logs clean dev-ban-test ## Start the debug stack (detached). ## Ensures log stub files exist so fail2ban can open them on first start. up: @mkdir -p Docker/logs @touch Docker/logs/auth.log $(COMPOSE) -f $(COMPOSE_FILE) up -d ## Stop the debug stack. down: $(COMPOSE) -f $(COMPOSE_FILE) down ## (Re)build the backend image without starting containers. build: $(COMPOSE) -f $(COMPOSE_FILE) build ## Restart the debug stack. restart: down up ## Tail logs for all debug services. logs: $(COMPOSE) -f $(COMPOSE_FILE) logs -f ## Stop containers, remove ALL debug volumes and locally-built images. ## The next 'make up' will rebuild images from scratch and start fresh. clean: $(COMPOSE) -f $(COMPOSE_FILE) down --remove-orphans $(RUNTIME) volume rm $(DEV_VOLUMES) 2>/dev/null || true $(RUNTIME) rmi $(DEV_IMAGES) 2>/dev/null || true @echo "All debug volumes and local images removed. Run 'make up' to rebuild and start fresh." ## One-command smoke test for the ban pipeline: ## 1. Start fail2ban, 2. write failure lines, 3. check ban status. dev-ban-test: $(COMPOSE) -f $(COMPOSE_FILE) up -d fail2ban sleep 5 bash Docker/simulate_failed_logins.sh sleep 3 bash Docker/check_ban_status.sh