Two root causes: 1. Docker/compose.debug.yml volume mount ./Docker/logs was already correct (./logs) — no change needed there. 2. Docker/logs/access.log did not exist on first checkout because *.log is gitignored. fail2ban fails to start if the file is absent. Fix: touch Docker/logs/access.log and auth.log in the Makefile 'up' target so both stub files are always created before the stack starts, regardless of whether they were previously generated by simulation scripts.
82 lines
2.9 KiB
Makefile
82 lines
2.9 KiB
Makefile
# ──────────────────────────────────────────────────────────────
|
|
# 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/access.log 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
|