Files
ldpv2/Makefile
T
2026-02-07 21:42:27 +01:00

218 lines
7.3 KiB
Makefile

# LDPv2 - Makefile for Container Management
# Quick commands for building, running, and managing the unified container
.PHONY: help build up down restart logs clean test backup
# Default target
.DEFAULT_GOAL := help
# Colors for output
GREEN := \033[0;32m
YELLOW := \033[0;33m
RED := \033[0;31m
NC := \033[0m # No Color
##@ General
help: ## Display this help message
@echo "$(GREEN)LDPv2 - Docker Management Commands$(NC)"
@echo ""
@awk 'BEGIN {FS = ":.*##"; printf "Usage: make $(YELLOW)<target>$(NC)\n"} /^[a-zA-Z_-]+:.*?##/ { printf " $(YELLOW)%-15s$(NC) %s\n", $$1, $$2 } /^##@/ { printf "\n$(GREEN)%s$(NC)\n", substr($$0, 5) } ' $(MAKEFILE_LIST)
##@ Development
build: ## Build all containers
@echo "$(GREEN)Building containers...$(NC)"
docker-compose build
build-no-cache: ## Build all containers without cache
@echo "$(GREEN)Building containers (no cache)...$(NC)"
docker-compose build --no-cache
up: ## Start all containers
@echo "$(GREEN)Starting containers...$(NC)"
docker-compose up
up-build: ## Build and start all containers
@echo "$(GREEN)Building and starting containers...$(NC)"
docker-compose up --build
up-d: ## Start all containers in background
@echo "$(GREEN)Starting containers in background...$(NC)"
docker-compose up -d
down: ## Stop and remove all containers
@echo "$(YELLOW)Stopping containers...$(NC)"
docker-compose down
down-v: ## Stop containers and remove volumes (WARNING: deletes database!)
@echo "$(RED)Stopping containers and removing volumes...$(NC)"
@read -p "This will delete the database. Are you sure? [y/N] " -n 1 -r; \
echo; \
if [[ $$REPLY =~ ^[Yy]$$ ]]; then \
docker-compose down -v; \
fi
restart: ## Restart all containers
@echo "$(YELLOW)Restarting containers...$(NC)"
docker-compose restart
restart-app: ## Restart only the app container
@echo "$(YELLOW)Restarting app container...$(NC)"
docker-compose restart app
##@ Logs and Monitoring
logs: ## Show logs from all containers
docker-compose logs -f
logs-app: ## Show logs from app container only
docker-compose logs -f app
logs-postgres: ## Show logs from postgres container only
docker-compose logs -f postgres
logs-backend: ## Show backend application logs
@echo "$(GREEN)Showing backend logs (Ctrl+C to exit)...$(NC)"
docker exec ldpv2-app tail -f /var/log/supervisor/backend.log
logs-nginx: ## Show nginx logs
@echo "$(GREEN)Showing nginx logs (Ctrl+C to exit)...$(NC)"
docker exec ldpv2-app tail -f /var/log/supervisor/nginx.log
status: ## Show status of all services
@echo "$(GREEN)Container Status:$(NC)"
@docker ps --filter "name=ldpv2" --format "table {{.Names}}\t{{.Status}}\t{{.Ports}}"
@echo ""
@echo "$(GREEN)Process Status (in app container):$(NC)"
@docker exec ldpv2-app supervisorctl status || echo "$(RED)App container not running$(NC)"
health: ## Check health of all containers
@echo "$(GREEN)Health Check:$(NC)"
@docker inspect ldpv2-app --format='App Container: {{.State.Health.Status}}' 2>/dev/null || echo "$(RED)App container not running$(NC)"
@docker inspect ldpv2-postgres --format='Database: {{.State.Health.Status}}' 2>/dev/null || echo "$(RED)Database container not running$(NC)"
##@ Database
db-shell: ## Connect to PostgreSQL shell
@echo "$(GREEN)Connecting to database (use \q to exit)...$(NC)"
docker exec -it ldpv2-postgres psql -U ldpv2_user -d ldpv2
db-backup: ## Backup database to backup.sql
@echo "$(GREEN)Backing up database...$(NC)"
docker exec ldpv2-postgres pg_dump -U ldpv2_user ldpv2 > backup_$(shell date +%Y%m%d_%H%M%S).sql
@echo "$(GREEN)Backup complete!$(NC)"
db-restore: ## Restore database from backup.sql
@if [ ! -f backup.sql ]; then \
echo "$(RED)Error: backup.sql not found$(NC)"; \
exit 1; \
fi
@echo "$(YELLOW)Restoring database...$(NC)"
docker exec -i ldpv2-postgres psql -U ldpv2_user ldpv2 < backup.sql
@echo "$(GREEN)Restore complete!$(NC)"
##@ Testing and Debugging
shell-app: ## Open shell in app container
@echo "$(GREEN)Opening shell in app container...$(NC)"
docker exec -it ldpv2-app /bin/sh
shell-db: ## Open shell in database container
@echo "$(GREEN)Opening shell in database container...$(NC)"
docker exec -it ldpv2-postgres /bin/sh
test-backend: ## Test backend health endpoint
@echo "$(GREEN)Testing backend health...$(NC)"
@curl -s http://localhost/api/actuator/health | jq . || echo "$(RED)Backend not responding$(NC)"
test-api: ## Test API with sample request
@echo "$(GREEN)Testing API (login)...$(NC)"
@curl -s -X POST http://localhost/api/auth/login \
-H "Content-Type: application/json" \
-d '{"username":"admin","password":"admin123"}' | jq . || echo "$(RED)API test failed$(NC)"
test-nginx: ## Test nginx configuration
@echo "$(GREEN)Testing nginx configuration...$(NC)"
docker exec ldpv2-app nginx -t
##@ Maintenance
clean: ## Remove all stopped containers and unused images
@echo "$(YELLOW)Cleaning up...$(NC)"
docker-compose down
docker system prune -f
@echo "$(GREEN)Cleanup complete!$(NC)"
clean-all: ## Remove everything including volumes (WARNING: deletes database!)
@echo "$(RED)This will remove all containers, images, and volumes$(NC)"
@read -p "Are you sure? [y/N] " -n 1 -r; \
echo; \
if [[ $$REPLY =~ ^[Yy]$$ ]]; then \
docker-compose down -v; \
docker system prune -af; \
echo "$(GREEN)Full cleanup complete!$(NC)"; \
fi
reset: ## Complete reset (rebuild everything)
@echo "$(YELLOW)Resetting everything...$(NC)"
$(MAKE) down
$(MAKE) build-no-cache
$(MAKE) up-d
@echo "$(GREEN)Reset complete!$(NC)"
##@ Production
prod-deploy: ## Deploy for production (builds and starts in background)
@echo "$(GREEN)Deploying for production...$(NC)"
docker-compose -f docker-compose.yml -f docker-compose.prod.yml up --build -d
@echo "$(GREEN)Production deployment complete!$(NC)"
prod-logs: ## Show production logs
docker-compose -f docker-compose.yml -f docker-compose.prod.yml logs -f
prod-down: ## Stop production deployment
docker-compose -f docker-compose.yml -f docker-compose.prod.yml down
##@ Quick Actions
quick-start: up-build ## Quick start (build and run in foreground)
quick-restart: ## Quick restart (useful after code changes)
$(MAKE) down
$(MAKE) up-build
reload-backend: ## Reload backend without full restart
@echo "$(YELLOW)Reloading backend...$(NC)"
docker exec ldpv2-app supervisorctl restart backend
@echo "$(GREEN)Backend reloaded!$(NC)"
reload-nginx: ## Reload nginx configuration
@echo "$(YELLOW)Reloading nginx...$(NC)"
docker exec ldpv2-app nginx -s reload
@echo "$(GREEN)Nginx reloaded!$(NC)"
##@ Information
info: ## Show container information
@echo "$(GREEN)=== LDPv2 Container Information ===$(NC)"
@echo ""
@echo "$(YELLOW)Access Points:$(NC)"
@echo " Frontend: http://localhost"
@echo " API Docs: http://localhost/api/swagger-ui/index.html"
@echo " Health: http://localhost/api/actuator/health"
@echo ""
@echo "$(YELLOW)Default Credentials:$(NC)"
@echo " Username: admin"
@echo " Password: admin123"
@echo ""
@echo "$(YELLOW)Container Status:$(NC)"
@$(MAKE) status
version: ## Show version information
@echo "$(GREEN)LDPv2 Version Information$(NC)"
@echo "Docker: $$(docker --version)"
@echo "Docker Compose: $$(docker-compose --version)"
@echo "Java (in container): $$(docker exec ldpv2-app java -version 2>&1 | head -n 1 || echo 'Not running')"
@echo "Node (build): $$(node --version 2>/dev/null || echo 'Not available')"