# MCPTesta Docker Compose Management # Modern Makefile for managing Docker environments .PHONY: help dev prod build clean logs status health restart shell test network caddy # Default target help: ## Show this help message @echo "MCPTesta Docker Compose Commands" @echo "================================" @awk 'BEGIN {FS = ":.*##"; printf "\nUsage:\n make \033[36m\033[0m\n"} /^[a-zA-Z_-]+:.*?##/ { printf " \033[36m%-15s\033[0m %s\n", $$1, $$2 } /^##@/ { printf "\n\033[1m%s\033[0m\n", substr($$0, 5) } ' $(MAKEFILE_LIST) ##@ Development Commands dev: ## Start development environment with hot reloading @echo "๐Ÿš€ Starting MCPTesta development environment..." @docker compose up --build --remove-orphans dev-detached: ## Start development environment in background @echo "๐Ÿš€ Starting MCPTesta development environment (detached)..." @docker compose up -d --build --remove-orphans dev-logs: ## Follow development logs @docker compose logs -f docs ##@ Production Commands prod: ## Start production environment @echo "๐Ÿญ Starting MCPTesta production environment..." @docker compose -f docker-compose.yml -f docker-compose.prod.yml up --build -d prod-logs: ## Follow production logs @docker compose -f docker-compose.yml -f docker-compose.prod.yml logs -f prod-build: ## Build production images @echo "๐Ÿ”จ Building production images..." @docker compose -f docker-compose.yml -f docker-compose.prod.yml build ##@ Management Commands build: ## Build development images @echo "๐Ÿ”จ Building development images..." @docker compose build rebuild: ## Rebuild images without cache @echo "๐Ÿ”จ Rebuilding images without cache..." @docker compose build --no-cache clean: ## Stop containers and remove volumes @echo "๐Ÿงน Cleaning up containers and volumes..." @docker compose down -v --remove-orphans @docker system prune -f deep-clean: ## Full cleanup including images and build cache @echo "๐Ÿงน Deep cleaning - removing images and build cache..." @docker compose down -v --remove-orphans --rmi all @docker system prune -af --volumes ##@ Monitoring Commands logs: ## Show all container logs @docker compose logs --tail=100 logs-live: ## Follow all container logs @docker compose logs -f status: ## Show container status @echo "๐Ÿ“Š Container Status:" @docker compose ps @echo "" @echo "๐ŸŒ Network Status:" @docker network ls | grep mcptesta health: ## Check container health @echo "๐Ÿฅ Health Check Status:" @docker compose ps --format "table {{.Name}}\t{{.Status}}\t{{.Health}}" restart: ## Restart all services @echo "๐Ÿ”„ Restarting services..." @docker compose restart ##@ Utility Commands shell: ## Access docs container shell @docker compose exec docs sh shell-root: ## Access docs container as root @docker compose exec --user root docs sh test: ## Run container tests @echo "๐Ÿงช Running container health tests..." @docker compose exec docs wget --spider -q http://localhost:4321/ && echo "โœ… Docs container healthy" || echo "โŒ Docs container unhealthy" ##@ Network Commands network: ## Show network information @echo "๐ŸŒ Docker Networks:" @docker network ls | grep -E "(caddy|mcptesta)" @echo "" @echo "๐Ÿ”— Container Network Details:" @docker compose exec docs ip route show caddy-network: ## Create caddy external network if it doesn't exist @echo "๐ŸŒ Ensuring caddy network exists..." @docker network create caddy 2>/dev/null || echo "โ„น๏ธ Caddy network already exists" ##@ Environment Commands env: ## Show current environment configuration @echo "โš™๏ธ Current Environment Configuration:" @echo "COMPOSE_PROJECT: $(shell grep COMPOSE_PROJECT .env | cut -d= -f2)" @echo "NODE_ENV: $(shell grep NODE_ENV .env | cut -d= -f2)" @echo "DOCS_DOMAIN: $(shell grep DOCS_DOMAIN .env | cut -d= -f2)" @echo "" @echo "๐Ÿ“„ Full .env file:" @cat .env env-dev: ## Switch to development environment @echo "๐Ÿ”ง Switching to development environment..." @sed -i 's/NODE_ENV=.*/NODE_ENV=development/' .env @echo "โœ… Environment set to development" env-prod: ## Switch to production environment @echo "๐Ÿ”ง Switching to production environment..." @sed -i 's/NODE_ENV=.*/NODE_ENV=production/' .env @echo "โœ… Environment set to production" ##@ Quick Start Commands validate: ## Validate complete Docker setup @echo "๐Ÿ” Validating MCPTesta Docker setup..." @./scripts/validate-setup.sh setup: caddy-network validate ## Initial setup - create networks and prepare environment @echo "๐ŸŽฏ Setting up MCPTesta Docker environment..." @echo "โœ… Setup complete! Run 'make dev' to start development" up: setup dev ## Complete setup and start development environment stop: ## Stop all containers @echo "โน๏ธ Stopping all containers..." @docker compose down ##@ Documentation Commands docs-build: ## Build documentation only @echo "๐Ÿ“š Building documentation..." @docker compose --profile build up docs-builder docs-preview: ## Preview production build locally @echo "๐Ÿ‘€ Previewing production documentation build..." @docker compose exec docs npm run preview ##@ Debugging Commands debug: ## Show debugging information @echo "๐Ÿ” MCPTesta Docker Debug Information" @echo "====================================" @echo "" @echo "๐Ÿ“ฆ Docker Version:" @docker version --format '{{.Server.Version}}' @echo "" @echo "๐Ÿณ Docker Compose Version:" @docker compose version --short @echo "" @echo "โš™๏ธ Environment:" @make env @echo "" @echo "๐Ÿ“Š Container Status:" @make status @echo "" @echo "๐ŸŒ Network Status:" @make network # Development helpers watch: ## Watch for changes and rebuild (requires inotify-tools) @echo "๐Ÿ‘€ Watching for changes..." @while inotifywait -r -e modify,create,delete ./docs/src; do \ echo "๐Ÿ”„ Changes detected, rebuilding..."; \ docker compose restart docs; \ done