# CMC Sales Deployment Makefile for Caddy setup .PHONY: help staging production backup-staging backup-production restart-staging restart-production status logs clean caddy-reload caddy-logs # Default target help: @echo "CMC Sales Deployment Commands (Caddy version)" @echo "" @echo "Environments:" @echo " staging Start staging environment" @echo " staging-down Stop staging environment" @echo " staging-logs Show staging logs" @echo " restart-staging Rebuild and restart staging" @echo "" @echo " production Start production environment" @echo " production-down Stop production environment" @echo " production-logs Show production logs" @echo " restart-production Rebuild and restart production" @echo "" @echo "Database:" @echo " backup-staging Backup staging database" @echo " backup-production Backup production database" @echo "" @echo "Caddy:" @echo " caddy-status Show Caddy service status" @echo " caddy-reload Reload Caddy configuration" @echo " caddy-logs Show Caddy logs" @echo " caddy-validate Validate Caddyfile" @echo "" @echo "Utility:" @echo " status Show all container status" @echo " clean Stop and remove all containers" @echo " setup-auth Setup basic authentication" # Staging environment staging: @echo "Starting staging environment..." docker compose -f docker-compose.caddy-staging.yml up -d @echo "Staging environment started" @echo "Access at: https://staging.cmc.springupsoftware.com" staging-down: docker compose -f docker-compose.caddy-staging.yml down staging-logs: docker compose -f docker-compose.caddy-staging.yml logs -f restart-staging: @echo "Restarting staging environment..." docker compose -f docker-compose.caddy-staging.yml down docker compose -f docker-compose.caddy-staging.yml build --no-cache docker compose -f docker-compose.caddy-staging.yml up -d @echo "Staging environment restarted" # Production environment production: @echo "Starting production environment..." docker compose -f docker-compose.caddy-production.yml up -d @echo "Production environment started" @echo "Access at: https://cmc.springupsoftware.com" production-down: @echo "WARNING: This will stop the production environment!" @read -p "Are you sure? (yes/no): " confirm && [ "$$confirm" = "yes" ] docker compose -f docker-compose.caddy-production.yml down production-logs: docker compose -f docker-compose.caddy-production.yml logs -f restart-production: @echo "WARNING: This will restart the production environment!" @read -p "Are you sure? (yes/no): " confirm && [ "$$confirm" = "yes" ] docker compose -f docker-compose.caddy-production.yml down docker compose -f docker-compose.caddy-production.yml build --no-cache docker compose -f docker-compose.caddy-production.yml up -d @echo "Production environment restarted" # Database backups backup-staging: @echo "Creating staging database backup..." ./scripts/backup-db.sh staging backup-production: @echo "Creating production database backup..." ./scripts/backup-db.sh production # Caddy management caddy-status: @echo "=== Caddy Status ===" sudo systemctl status caddy --no-pager caddy-reload: @echo "Reloading Caddy configuration..." sudo systemctl reload caddy @echo "Caddy reloaded successfully" caddy-logs: @echo "=== Caddy Logs ===" sudo journalctl -u caddy -f caddy-validate: @echo "Validating Caddyfile..." caddy validate --config Caddyfile @echo "Caddyfile is valid" # Setup authentication setup-auth: @echo "Setting up basic authentication..." ./scripts/setup-caddy-auth.sh # System status status: @echo "=== Container Status ===" docker ps --format "table {{.Names}}\t{{.Status}}\t{{.Ports}}" @echo "" @echo "=== Caddy Status ===" sudo systemctl is-active caddy || true @echo "" @echo "=== Port Usage ===" sudo netstat -tlnp | grep -E ":(80|443|8091|8092|8093|8094|3306|3307) " || true # Logs logs: @echo "Which logs? [staging/production/caddy]" @read env; \ case $$env in \ staging) docker compose -f docker-compose.caddy-staging.yml logs -f ;; \ production) docker compose -f docker-compose.caddy-production.yml logs -f ;; \ caddy) sudo journalctl -u caddy -f ;; \ *) echo "Invalid option" ;; \ esac # Cleanup clean: @echo "WARNING: This will stop and remove ALL CMC containers!" @read -p "Are you sure? (yes/no): " confirm && [ "$$confirm" = "yes" ] docker compose -f docker-compose.caddy-staging.yml down --volumes --remove-orphans docker compose -f docker-compose.caddy-production.yml down --volumes --remove-orphans docker system prune -f @echo "Cleanup completed" # Health checks health: @echo "=== Health Checks ===" @echo "Staging:" @curl -s -o /dev/null -w " HTTPS %{http_code}: https://staging.cmc.springupsoftware.com/health\n" https://staging.cmc.springupsoftware.com/health -u admin:password || echo " Staging not accessible (update with correct auth)" @curl -s -o /dev/null -w " Internal %{http_code}: http://localhost:8092/api/v1/health\n" http://localhost:8092/api/v1/health || echo " Staging Go not accessible" @echo "Production:" @curl -s -o /dev/null -w " HTTPS %{http_code}: https://cmc.springupsoftware.com/health\n" https://cmc.springupsoftware.com/health -u admin:password || echo " Production not accessible (update with correct auth)" @curl -s -o /dev/null -w " Internal %{http_code}: http://localhost:8094/api/v1/health\n" http://localhost:8094/api/v1/health || echo " Production Go not accessible" # Deploy to staging deploy-staging: @echo "Deploying to staging..." git pull origin main $(MAKE) restart-staging @echo "Staging deployment complete" # Deploy to production deploy-production: @echo "WARNING: This will deploy to PRODUCTION!" @echo "Make sure you have tested thoroughly in staging first." @read -p "Are you sure you want to deploy to production? (yes/no): " confirm && [ "$$confirm" = "yes" ] git pull origin main $(MAKE) backup-production $(MAKE) restart-production @echo "Production deployment complete" # First-time setup initial-setup: @echo "Running initial setup..." @echo "1. Installing Caddy..." sudo ./scripts/install-caddy.sh @echo "" @echo "2. Setting up authentication..." ./scripts/setup-caddy-auth.sh @echo "" @echo "3. Copying Caddyfile..." sudo cp Caddyfile /etc/caddy/Caddyfile @echo "" @echo "4. Starting Caddy..." sudo systemctl start caddy @echo "" @echo "5. Starting containers..." $(MAKE) staging $(MAKE) production @echo "" @echo "Initial setup complete!" @echo "Access staging at: https://staging.cmc.springupsoftware.com" @echo "Access production at: https://cmc.springupsoftware.com"