autocomit
This commit is contained in:
@@ -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)<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')"
|
||||
+24
-23
@@ -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:
|
||||
|
||||
Reference in New Issue
Block a user