feat: Complete Docker deployment environment for PyGuardian v2.1.0
Some checks reported errors
continuous-integration/drone/push Build encountered an error
Some checks reported errors
continuous-integration/drone/push Build encountered an error
🐳 DOCKER DEPLOYMENT INFRASTRUCTURE: ## New Docker Files: - deployment/docker/Dockerfile.optimized - Multi-stage optimized builds - docker-compose.prod.yml - Production cluster deployment - docker-compose.dev.yml - Development environment - deploy-docker.sh - One-command deployment script - Makefile.docker - Advanced management commands - .env.docker - Environment configuration template - DOCKER_DEPLOYMENT.md - Complete deployment guide ## Container Images: - pyguardian:controller - Cluster management (200MB) - pyguardian:agent - Security monitoring (180MB) - pyguardian:standalone - All-in-one deployment (220MB) - pyguardian:development - Dev tools + Jupyter (350MB) ## Deployment Modes: - Standalone: Single container with all features - Cluster: Controller + scalable agents with JWT auth - Production: Enterprise deployment with monitoring - Development: Hot reload + debugging tools ## Key Features: ✅ Multi-stage Docker builds for optimization ✅ Privileged containers for system monitoring ✅ Host networking for firewall integration ✅ Volume persistence for data/logs/config ✅ Health checks and auto-restart ✅ Prometheus monitoring integration ✅ SSL/TLS support with custom certificates ✅ Automated backup and restore ✅ CI/CD ready builds ## Quick Commands: ./deploy-docker.sh standalone # Quick start ./deploy-docker.sh cluster --scale 3 # Production cluster make -f Makefile.docker prod-up # Advanced management make -f Makefile.docker health # Health checks Ready for enterprise Docker deployment! 🚀
This commit is contained in:
273
.history/Makefile_20251126042405.docker
Normal file
273
.history/Makefile_20251126042405.docker
Normal file
@@ -0,0 +1,273 @@
|
||||
################################################################################
|
||||
# PyGuardian Docker Management Makefile
|
||||
# Provides convenient commands for Docker deployment and management
|
||||
################################################################################
|
||||
|
||||
# Default variables
|
||||
DOCKER_COMPOSE_PROD := docker-compose -f docker-compose.prod.yml
|
||||
DOCKER_COMPOSE_DEV := docker-compose -f docker-compose.dev.yml
|
||||
IMAGE_TAG := pyguardian:2.1.0
|
||||
ENV_FILE := .env
|
||||
|
||||
# Colors for output
|
||||
GREEN := \033[32m
|
||||
YELLOW := \033[33m
|
||||
RED := \033[31m
|
||||
NC := \033[0m
|
||||
|
||||
# Help target
|
||||
.PHONY: help
|
||||
help: ## Show this help message
|
||||
@echo "PyGuardian Docker Management Commands:"
|
||||
@echo ""
|
||||
@awk 'BEGIN {FS = ":.*##"} /^[a-zA-Z_-]+:.*##/ {printf " $(GREEN)%-20s$(NC) %s\n", $$1, $$2}' $(MAKEFILE_LIST)
|
||||
|
||||
# =============================================================================
|
||||
# ENVIRONMENT SETUP
|
||||
# =============================================================================
|
||||
|
||||
.PHONY: setup-env
|
||||
setup-env: ## Setup environment files
|
||||
@echo "$(YELLOW)Setting up environment configuration...$(NC)"
|
||||
@if [ ! -f $(ENV_FILE) ]; then \
|
||||
cp .env.docker $(ENV_FILE); \
|
||||
echo "$(GREEN)Created $(ENV_FILE) from template$(NC)"; \
|
||||
echo "$(YELLOW)Please edit $(ENV_FILE) with your configuration$(NC)"; \
|
||||
else \
|
||||
echo "$(YELLOW)$(ENV_FILE) already exists$(NC)"; \
|
||||
fi
|
||||
|
||||
.PHONY: setup-dirs
|
||||
setup-dirs: ## Create necessary directories
|
||||
@echo "$(YELLOW)Creating directory structure...$(NC)"
|
||||
@mkdir -p /opt/pyguardian/{controller,agent1,agent2}/{data,logs,config}
|
||||
@mkdir -p deployment/monitoring
|
||||
@echo "$(GREEN)Directory structure created$(NC)"
|
||||
|
||||
.PHONY: generate-secrets
|
||||
generate-secrets: ## Generate secure secrets
|
||||
@echo "$(YELLOW)Generating secure secrets...$(NC)"
|
||||
@echo "CLUSTER_SECRET=$(shell openssl rand -hex 32)"
|
||||
@echo "JWT_SECRET=$(shell openssl rand -hex 32)"
|
||||
@echo "$(GREEN)Add these secrets to your $(ENV_FILE) file$(NC)"
|
||||
|
||||
# =============================================================================
|
||||
# BUILD TARGETS
|
||||
# =============================================================================
|
||||
|
||||
.PHONY: build-all
|
||||
build-all: ## Build all Docker images
|
||||
@echo "$(YELLOW)Building all PyGuardian images...$(NC)"
|
||||
docker build -f deployment/docker/Dockerfile.optimized --target controller -t pyguardian:controller .
|
||||
docker build -f deployment/docker/Dockerfile.optimized --target agent -t pyguardian:agent .
|
||||
docker build -f deployment/docker/Dockerfile.optimized --target standalone -t pyguardian:standalone .
|
||||
docker build -f deployment/docker/Dockerfile.optimized --target development -t pyguardian:development .
|
||||
@echo "$(GREEN)All images built successfully$(NC)"
|
||||
|
||||
.PHONY: build-prod
|
||||
build-prod: ## Build production images
|
||||
@echo "$(YELLOW)Building production images...$(NC)"
|
||||
$(DOCKER_COMPOSE_PROD) build
|
||||
@echo "$(GREEN)Production images built$(NC)"
|
||||
|
||||
.PHONY: build-dev
|
||||
build-dev: ## Build development images
|
||||
@echo "$(YELLOW)Building development images...$(NC)"
|
||||
$(DOCKER_COMPOSE_DEV) build
|
||||
@echo "$(GREEN)Development images built$(NC)"
|
||||
|
||||
# =============================================================================
|
||||
# PRODUCTION DEPLOYMENT
|
||||
# =============================================================================
|
||||
|
||||
.PHONY: prod-up
|
||||
prod-up: setup-env setup-dirs ## Start production environment
|
||||
@echo "$(YELLOW)Starting PyGuardian production environment...$(NC)"
|
||||
$(DOCKER_COMPOSE_PROD) --env-file $(ENV_FILE) up -d
|
||||
@echo "$(GREEN)Production environment started$(NC)"
|
||||
@echo "API available at: https://localhost:8443"
|
||||
|
||||
.PHONY: prod-down
|
||||
prod-down: ## Stop production environment
|
||||
@echo "$(YELLOW)Stopping production environment...$(NC)"
|
||||
$(DOCKER_COMPOSE_PROD) down
|
||||
@echo "$(GREEN)Production environment stopped$(NC)"
|
||||
|
||||
.PHONY: prod-restart
|
||||
prod-restart: prod-down prod-up ## Restart production environment
|
||||
|
||||
.PHONY: prod-logs
|
||||
prod-logs: ## View production logs
|
||||
$(DOCKER_COMPOSE_PROD) logs -f
|
||||
|
||||
.PHONY: prod-status
|
||||
prod-status: ## Check production status
|
||||
@echo "$(YELLOW)Production Environment Status:$(NC)"
|
||||
$(DOCKER_COMPOSE_PROD) ps
|
||||
@echo ""
|
||||
@echo "$(YELLOW)Health Status:$(NC)"
|
||||
@docker ps --format "table {{.Names}}\t{{.Status}}" | grep pyguardian
|
||||
|
||||
# =============================================================================
|
||||
# DEVELOPMENT DEPLOYMENT
|
||||
# =============================================================================
|
||||
|
||||
.PHONY: dev-up
|
||||
dev-up: setup-env ## Start development environment
|
||||
@echo "$(YELLOW)Starting PyGuardian development environment...$(NC)"
|
||||
$(DOCKER_COMPOSE_DEV) --env-file $(ENV_FILE) up -d
|
||||
@echo "$(GREEN)Development environment started$(NC)"
|
||||
@echo "API available at: http://localhost:8443"
|
||||
@echo "Jupyter Lab at: http://localhost:8888"
|
||||
|
||||
.PHONY: dev-down
|
||||
dev-down: ## Stop development environment
|
||||
@echo "$(YELLOW)Stopping development environment...$(NC)"
|
||||
$(DOCKER_COMPOSE_DEV) down
|
||||
@echo "$(GREEN)Development environment stopped$(NC)"
|
||||
|
||||
.PHONY: dev-restart
|
||||
dev-restart: dev-down dev-up ## Restart development environment
|
||||
|
||||
.PHONY: dev-logs
|
||||
dev-logs: ## View development logs
|
||||
$(DOCKER_COMPOSE_DEV) logs -f pyguardian-dev
|
||||
|
||||
.PHONY: dev-shell
|
||||
dev-shell: ## Access development container shell
|
||||
docker exec -it pyguardian-dev bash
|
||||
|
||||
# =============================================================================
|
||||
# CLUSTER MANAGEMENT
|
||||
# =============================================================================
|
||||
|
||||
.PHONY: cluster-up
|
||||
cluster-up: setup-env setup-dirs ## Start full cluster (controller + agents)
|
||||
@echo "$(YELLOW)Starting PyGuardian cluster...$(NC)"
|
||||
$(DOCKER_COMPOSE_PROD) --env-file $(ENV_FILE) up -d
|
||||
@echo "$(GREEN)Cluster started$(NC)"
|
||||
|
||||
.PHONY: cluster-scale
|
||||
cluster-scale: ## Scale agents (usage: make cluster-scale AGENTS=3)
|
||||
@echo "$(YELLOW)Scaling cluster to $(or $(AGENTS),2) agents...$(NC)"
|
||||
$(DOCKER_COMPOSE_PROD) --env-file $(ENV_FILE) up -d --scale pyguardian-agent-1=$(or $(AGENTS),2)
|
||||
|
||||
.PHONY: cluster-status
|
||||
cluster-status: ## Check cluster status
|
||||
@echo "$(YELLOW)Cluster Status:$(NC)"
|
||||
$(DOCKER_COMPOSE_PROD) ps
|
||||
@echo ""
|
||||
@echo "$(YELLOW)Agent Connections:$(NC)"
|
||||
@docker exec pyguardian-controller python3 -c "import requests; print(requests.get('http://localhost:8443/api/agents').json())" 2>/dev/null || echo "Controller not ready"
|
||||
|
||||
# =============================================================================
|
||||
# MONITORING
|
||||
# =============================================================================
|
||||
|
||||
.PHONY: monitoring-up
|
||||
monitoring-up: ## Start with monitoring stack
|
||||
@echo "$(YELLOW)Starting PyGuardian with monitoring...$(NC)"
|
||||
$(DOCKER_COMPOSE_PROD) --env-file $(ENV_FILE) --profile monitoring up -d
|
||||
|
||||
.PHONY: monitoring-status
|
||||
monitoring-status: ## Check monitoring status
|
||||
@echo "$(YELLOW)Monitoring Status:$(NC)"
|
||||
@echo "Prometheus: http://localhost:9090"
|
||||
@curl -s http://localhost:9090/-/healthy && echo "✅ Prometheus healthy" || echo "❌ Prometheus unhealthy"
|
||||
|
||||
# =============================================================================
|
||||
# MAINTENANCE
|
||||
# =============================================================================
|
||||
|
||||
.PHONY: backup
|
||||
backup: ## Create backup of data
|
||||
@echo "$(YELLOW)Creating backup...$(NC)"
|
||||
@timestamp=$$(date +%Y%m%d_%H%M%S); \
|
||||
docker run --rm -v pyguardian_controller_data:/source -v $(PWD)/backups:/backup alpine \
|
||||
tar czf /backup/pyguardian_backup_$$timestamp.tar.gz -C /source .
|
||||
@echo "$(GREEN)Backup created in ./backups/$(NC)"
|
||||
|
||||
.PHONY: restore
|
||||
restore: ## Restore from backup (usage: make restore BACKUP=filename)
|
||||
@if [ -z "$(BACKUP)" ]; then \
|
||||
echo "$(RED)Usage: make restore BACKUP=filename$(NC)"; \
|
||||
exit 1; \
|
||||
fi
|
||||
@echo "$(YELLOW)Restoring from $(BACKUP)...$(NC)"
|
||||
@docker run --rm -v $(PWD)/backups:/backup -v pyguardian_controller_data:/target alpine \
|
||||
tar xzf /backup/$(BACKUP) -C /target
|
||||
@echo "$(GREEN)Restore completed$(NC)"
|
||||
|
||||
.PHONY: clean
|
||||
clean: ## Clean up containers and images
|
||||
@echo "$(YELLOW)Cleaning up Docker resources...$(NC)"
|
||||
$(DOCKER_COMPOSE_PROD) down --volumes --remove-orphans
|
||||
$(DOCKER_COMPOSE_DEV) down --volumes --remove-orphans
|
||||
docker image prune -f
|
||||
@echo "$(GREEN)Cleanup completed$(NC)"
|
||||
|
||||
.PHONY: clean-all
|
||||
clean-all: clean ## Complete cleanup including data volumes
|
||||
@echo "$(RED)WARNING: This will delete ALL PyGuardian data!$(NC)"
|
||||
@read -p "Are you sure? [y/N]: " confirm && [ "$$confirm" = "y" ] || exit 1
|
||||
docker volume prune -f
|
||||
docker system prune -f
|
||||
@echo "$(GREEN)Complete cleanup finished$(NC)"
|
||||
|
||||
# =============================================================================
|
||||
# TESTING
|
||||
# =============================================================================
|
||||
|
||||
.PHONY: test
|
||||
test: ## Run tests in container
|
||||
@echo "$(YELLOW)Running PyGuardian tests...$(NC)"
|
||||
docker run --rm -v $(PWD)/src:/opt/pyguardian/src -v $(PWD)/tests:/opt/pyguardian/tests \
|
||||
pyguardian:development python3 -m pytest tests/ -v
|
||||
|
||||
.PHONY: test-build
|
||||
test-build: ## Test Docker builds
|
||||
@echo "$(YELLOW)Testing Docker builds...$(NC)"
|
||||
docker build -f deployment/docker/Dockerfile.optimized --target controller -t pyguardian:test-controller .
|
||||
docker build -f deployment/docker/Dockerfile.optimized --target agent -t pyguardian:test-agent .
|
||||
docker run --rm pyguardian:test-controller python3 -c "print('✅ Controller image working')"
|
||||
docker run --rm pyguardian:test-agent python3 -c "print('✅ Agent image working')"
|
||||
docker rmi pyguardian:test-controller pyguardian:test-agent
|
||||
@echo "$(GREEN)Docker builds test passed$(NC)"
|
||||
|
||||
# =============================================================================
|
||||
# INFORMATION
|
||||
# =============================================================================
|
||||
|
||||
.PHONY: info
|
||||
info: ## Show system information
|
||||
@echo "$(YELLOW)PyGuardian Docker Environment Information:$(NC)"
|
||||
@echo "Docker version: $$(docker --version)"
|
||||
@echo "Docker Compose version: $$(docker-compose --version)"
|
||||
@echo "Available images:"
|
||||
@docker images | grep pyguardian || echo "No PyGuardian images found"
|
||||
@echo ""
|
||||
@echo "Running containers:"
|
||||
@docker ps --format "table {{.Names}}\t{{.Image}}\t{{.Status}}" | grep pyguardian || echo "No PyGuardian containers running"
|
||||
|
||||
.PHONY: health
|
||||
health: ## Check health of all services
|
||||
@echo "$(YELLOW)Health Check Results:$(NC)"
|
||||
@for container in $$(docker ps --format "{{.Names}}" | grep pyguardian); do \
|
||||
echo -n "$$container: "; \
|
||||
if docker exec $$container sh -c 'exit 0' 2>/dev/null; then \
|
||||
echo "$(GREEN)✅ Running$(NC)"; \
|
||||
else \
|
||||
echo "$(RED)❌ Failed$(NC)"; \
|
||||
fi; \
|
||||
done
|
||||
|
||||
# =============================================================================
|
||||
# SHORTCUTS
|
||||
# =============================================================================
|
||||
|
||||
.PHONY: up down restart logs status
|
||||
up: prod-up ## Alias for prod-up
|
||||
down: prod-down ## Alias for prod-down
|
||||
restart: prod-restart ## Alias for prod-restart
|
||||
logs: prod-logs ## Alias for prod-logs
|
||||
status: prod-status ## Alias for prod-status
|
||||
Reference in New Issue
Block a user