Files
BanGUI/Makefile
Lukas 1c89454197 Add fail2ban dev test environment (Stage 0)
- Add bangui-sim filter (filter.d/bangui-sim.conf) matching the
  simulated authentication failure log format
- Add bangui-sim jail (jail.d/bangui-sim.conf) with maxretry=3,
  bantime=60s, findtime=120s, ignoreip safeguard, polling backend
- Mount Docker/logs/ into fail2ban container at /remotelogs/bangui
  in compose.debug.yml
- Add simulate_failed_logins.sh to write synthetic failure lines
- Add check_ban_status.sh with optional --unban flag
- Add dev-ban-test Makefile target for one-command smoke testing
- Write Docker/fail2ban-dev-config/README.md with setup and
  troubleshooting docs
- Update .gitignore to track custom config files while still
  excluding auto-generated linuxserver fail2ban files
2026-03-03 21:00:08 +01:00

79 lines
2.8 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).
up:
$(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