DOCKER_REGISTRY ?=
IMAGE_NAME ?= trustformers-serve
VERSION ?= latest
DOCKERFILE ?= Dockerfile.optimized
RUST_VERSION ?= 1.75
COMPOSE_FILE ?= docker-compose.yml
DEV_PROFILE ?= development
DEBUG_PROFILE ?= debug
TEST_PROFILE ?= testing
MONITOR_PROFILE ?= monitoring
BUILD_SCRIPT = ./scripts/docker-build.sh
.PHONY: help build dev debug test production all clean scan push pull logs status stop down restart
.DEFAULT_GOAL := help
help:
@echo "TrustformeRS Serve Docker Operations"
@echo ""
@echo "Usage: make [TARGET] [VARIABLES]"
@echo ""
@echo "Targets:"
@grep -E '^[a-zA-Z_-]+:.*?## .*$$' $(MAKEFILE_LIST) | sort | awk 'BEGIN {FS = ":.*?## "}; {printf " \033[36m%-20s\033[0m %s\n", $$1, $$2}'
@echo ""
@echo "Variables:"
@echo " VERSION Image version tag (default: latest)"
@echo " DOCKER_REGISTRY Docker registry prefix"
@echo " IMAGE_NAME Docker image name (default: trustformers-serve)"
@echo " DOCKERFILE Dockerfile to use (default: Dockerfile.optimized)"
@echo ""
@echo "Examples:"
@echo " make build VERSION=v1.0.0"
@echo " make dev"
@echo " make push DOCKER_REGISTRY=docker.io/myorg"
build:
$(BUILD_SCRIPT) production -t $(VERSION)
build-dev:
$(BUILD_SCRIPT) development -t $(VERSION)
build-debug:
$(BUILD_SCRIPT) debug -t $(VERSION)
build-test:
$(BUILD_SCRIPT) testing -t $(VERSION)
build-all:
$(BUILD_SCRIPT) all -t $(VERSION)
build-multi-arch:
$(BUILD_SCRIPT) multi-arch -t $(VERSION)
build-security:
$(BUILD_SCRIPT) security -t $(VERSION)
production: build
dev: build-dev
debug: build-debug
test: build-test
all: build-all
security: build-security
up:
docker-compose -f $(COMPOSE_FILE) up -d
up-dev:
docker-compose -f $(COMPOSE_FILE) --profile $(DEV_PROFILE) up -d
up-debug:
docker-compose -f $(COMPOSE_FILE) --profile $(DEBUG_PROFILE) up -d
up-test:
docker-compose -f $(COMPOSE_FILE) --profile $(TEST_PROFILE) up
up-monitor:
docker-compose -f $(COMPOSE_FILE) --profile $(MONITOR_PROFILE) up -d
up-all:
docker-compose -f $(COMPOSE_FILE) --profile $(DEV_PROFILE) --profile $(MONITOR_PROFILE) up -d
down:
docker-compose -f $(COMPOSE_FILE) down
stop:
docker-compose -f $(COMPOSE_FILE) stop
restart:
docker-compose -f $(COMPOSE_FILE) restart
status:
docker-compose -f $(COMPOSE_FILE) ps
logs:
docker-compose -f $(COMPOSE_FILE) logs -f
logs-app:
docker-compose -f $(COMPOSE_FILE) logs -f trustformers-serve
logs-dev:
docker-compose -f $(COMPOSE_FILE) logs -f trustformers-dev
push:
$(BUILD_SCRIPT) push -t $(VERSION)
pull:
docker-compose -f $(COMPOSE_FILE) pull
scan:
$(BUILD_SCRIPT) scan -t $(VERSION)
clean:
$(BUILD_SCRIPT) clean
clean-all:
docker-compose -f $(COMPOSE_FILE) down -v --remove-orphans
docker system prune -a -f
docker volume prune -f
db-migrate:
docker-compose -f $(COMPOSE_FILE) exec postgres psql -U user -d trustformers -f /docker-entrypoint-initdb.d/init.sql
db-backup:
mkdir -p backups
docker-compose -f $(COMPOSE_FILE) exec postgres pg_dump -U user trustformers > backups/backup_$(shell date +%Y%m%d_%H%M%S).sql
db-restore:
@if [ -z "$(BACKUP_FILE)" ]; then echo "Please specify BACKUP_FILE=path/to/backup.sql"; exit 1; fi
docker-compose -f $(COMPOSE_FILE) exec -T postgres psql -U user -d trustformers < $(BACKUP_FILE)
health:
@echo "Checking health of services..."
@docker-compose -f $(COMPOSE_FILE) ps --format "table {{.Service}}\t{{.Status}}\t{{.Ports}}"
@echo ""
@echo "Application health:"
@curl -s http://localhost:8080/health | jq . || echo "Application not responding"
health-dev:
@curl -s http://localhost:8081/health | jq . || echo "Development application not responding"
load-test:
docker run --rm --network host \
-v $(PWD)/examples:/examples:ro \
loadimpact/k6:latest run /examples/load_test_config.json
benchmark:
cargo bench --all-features
format:
cargo fmt --all
lint:
cargo clippy --all-targets --all-features -- -D warnings
test-local:
cargo test --all-features
watch:
cargo watch -x "run --release"
docs:
cargo doc --open --all-features
init:
@echo "Initializing TrustformeRS Serve..."
@mkdir -p models config logs backups
@chmod +x scripts/*.sh
@echo "Setup complete!"
quick-dev: init build-dev up-dev
deploy: build push
ci: clean build-all test scan
info:
@echo "Docker Info:"
@docker info --format "Version: {{.ServerVersion}}"
@echo ""
@echo "Images:"
@docker images $(IMAGE_NAME)* --format "table {{.Repository}}\t{{.Tag}}\t{{.Size}}\t{{.CreatedSince}}"
@echo ""
@echo "Containers:"
@docker ps -a --filter "ancestor=$(IMAGE_NAME)" --format "table {{.Names}}\t{{.Status}}\t{{.Ports}}"
setup-prod:
@echo "Creating production environment..."
@cp docker-compose.yml docker-compose.prod.yml
@echo "Production setup complete"
setup-dev:
@echo "Creating development environment..."
@cp docker-compose.yml docker-compose.dev.yml
@echo "Development setup complete"
monitor:
@echo "Starting monitoring stack..."
$(MAKE) up-monitor
@echo "Monitoring available at:"
@echo " Grafana: http://localhost:3000 (admin/admin)"
@echo " Prometheus: http://localhost:9090"
@echo " Jaeger: http://localhost:16686"
backup:
@echo "Creating backup..."
@mkdir -p backups/$(shell date +%Y%m%d_%H%M%S)
$(MAKE) db-backup
docker run --rm -v trustformers-serve_models:/data -v $(PWD)/backups:/backup alpine tar czf /backup/models_$(shell date +%Y%m%d_%H%M%S).tar.gz -C /data .
@echo "Backup complete"
restore:
@if [ -z "$(BACKUP_DATE)" ]; then echo "Please specify BACKUP_DATE=YYYYMMDD_HHMMSS"; exit 1; fi
$(MAKE) db-restore BACKUP_FILE=backups/backup_$(BACKUP_DATE).sql
docker run --rm -v trustformers-serve_models:/data -v $(PWD)/backups:/backup alpine tar xzf /backup/models_$(BACKUP_DATE).tar.gz -C /data
optimize:
@echo "Running optimizations..."
docker system prune -f
@echo "Optimization complete"