ifneq (,$(wildcard ./.env)) include .env export endif COMPOSE_PROJECT_NAME ?= hub PROFILES ?= mqtt core COMPOSE_FILES = -f docker-compose.yml -f docker-compose.dev.yml VOLUMES = $(COMPOSE_PROJECT_NAME)_data $(COMPOSE_PROJECT_NAME)_mqtt_data \ $(COMPOSE_PROJECT_NAME)_observer_data .PHONY: build up down logs backup restore build: docker compose $(COMPOSE_FILES) --profile all build --no-cache up: docker compose $(COMPOSE_FILES) $(foreach p,$(PROFILES),--profile $(p)) up -d --force-recreate down: docker compose $(COMPOSE_FILES) --profile all down --remove-orphans logs: docker compose $(COMPOSE_FILES) --profile all logs -f backup: @mkdir -p backup @for vol in $(VOLUMES); do \ echo "Backing up $$vol..."; \ docker run --rm -v $$vol:/data -v $(PWD)/backup:/backup \ alpine tar czf /backup/$$vol-$$(date +%Y%m%d-%H%M%S).tar.gz -C / data; \ done @echo "Backups saved to $(PWD)/backup/" restore: @if [ -z "$(FILE)" ]; then echo "Usage: make restore FILE=backup/"; exit 1; fi @vol=$$(basename $(FILE) | sed 's/-[0-9]\{8\}-[0-9]\{6\}\.tar\.gz//'); \ echo "Restoring $$vol from $(FILE)..."; \ docker run --rm -v $$vol:/data -v $(PWD)/backup:/backup \ alpine sh -c "cd / && tar xzf /backup/$$(basename $(FILE))"