cmc-sales/Makefile
2025-08-08 11:22:06 +10:00

190 lines
6.6 KiB
Makefile

# 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-ubuntu.yml up -d
@echo "Staging environment started"
@echo "Access at: https://staging.cmc.springupsoftware.com"
staging-down:
docker compose -f docker-compose.caddy-staging-ubuntu.yml down
staging-logs:
docker compose -f docker-compose.caddy-staging-ubuntu.yml logs -f
restart-staging:
@echo "Restarting staging environment..."
docker compose -f docker-compose.caddy-staging-ubuntu.yml down
docker compose -f docker-compose.caddy-staging-ubuntu.yml build --no-cache
docker compose -f docker-compose.caddy-staging-ubuntu.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-ubuntu.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-ubuntu.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"