From a255be8069e32605bb62f09c4cdd6da94bebec41 Mon Sep 17 00:00:00 2001 From: "laurent.deleers@gmail.com" Date: Sat, 7 Feb 2026 21:42:27 +0100 Subject: [PATCH] autocomit --- Makefile | 217 +++++++++++++++++++++++++++++++++++++++++++++ docker-compose.yml | 47 +++++----- 2 files changed, 241 insertions(+), 23 deletions(-) create mode 100644 Makefile diff --git a/Makefile b/Makefile new file mode 100644 index 0000000..ad3fd6c --- /dev/null +++ b/Makefile @@ -0,0 +1,217 @@ +# 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)$(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')" diff --git a/docker-compose.yml b/docker-compose.yml index 2d6e98d..0f90578 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -1,6 +1,5 @@ -version: '3.8' - services: + # PostgreSQL Database (separate container) postgres: image: postgres:16-alpine container_name: ldpv2-postgres @@ -19,44 +18,46 @@ services: interval: 10s timeout: 5s retries: 5 + restart: unless-stopped - backend: + # Unified Application Container (Frontend + Backend + Nginx) + app: build: - context: ./backend + context: . dockerfile: Dockerfile - container_name: ldpv2-backend + container_name: ldpv2-app depends_on: postgres: condition: service_healthy environment: + # Database configuration DB_HOST: postgres DB_USERNAME: ldpv2_user DB_PASSWORD: ldpv2_password - JWT_SECRET: your-secret-key-change-in-production-minimum-512-bits-for-hs512-algorithm - networks: - - ldpv2-network - healthcheck: - test: ["CMD", "wget", "--quiet", "--tries=1", "--spider", "/api/actuator/health"] - interval: 30s - timeout: 10s - retries: 3 - start_period: 60s - - app: - build: - context: . - dockerfile: Dockerfile.app - container_name: ldpv2-app - depends_on: - backend: - condition: service_healthy + # JWT configuration + JWT_SECRET: ${JWT_SECRET:-your-secret-key-change-in-production-minimum-512-bits-for-hs512-algorithm} + # Java options + JAVA_OPTS: "-Xms256m -Xmx512m" ports: - "80:80" networks: - ldpv2-network + healthcheck: + test: ["CMD", "wget", "--quiet", "--tries=1", "--spider", "http://localhost:80/"] + interval: 30s + timeout: 10s + retries: 3 + start_period: 90s + restart: unless-stopped + # Optional: Mount logs directory for easier debugging + volumes: + - app_logs:/var/log/supervisor volumes: postgres_data: + driver: local + app_logs: + driver: local networks: ldpv2-network: