#!/bin/bash # Script to deploy the app locally using Docker Desktop + Kubernetes # Set default region (optional but kept for consistency) if [ -z "$REGION" ]; then export REGION="local" echo "No region specified. Using default region: $REGION" else echo "Deploying to region: $REGION" fi # Build Docker image echo "Building Docker image..." docker build -t antonin193/simple-web-app:latest . # Push to Docker Hub (optional for local, but kept if needed across machines) echo "Pushing image to Docker Hub..." docker push antonin193/simple-web-app:latest # Create Kubernetes Namespace echo "Creating namespace..." kubectl apply -f namespace.yaml # Create PersistentVolume and PersistentVolumeClaim echo "Creating persistent storage..." kubectl apply -f persistent-storage.yaml # Wait briefly for resources to be established sleep 2 # Deploy PostgreSQL first echo "Creating PostgreSQL Deployment and Service..." kubectl apply -f postgres-deployment.yaml kubectl apply -f postgres-service.yaml # Wait for PostgreSQL to be ready echo "Waiting for PostgreSQL to be ready..." kubectl wait --for=condition=ready pod -l app=postgres -n my-app --timeout=120s # Deploy application echo "Creating Deployment..." kubectl apply -f deployment.yaml echo "Creating StatefulSet..." kubectl apply -f statefulset.yaml echo "Creating Service..." kubectl apply -f service.yaml # Wait for LoadBalancer IP (Docker Desktop uses host network so it's usually localhost) echo "Waiting for LoadBalancer to obtain an external IP (or localhost for Docker Desktop)..." external_ip="" attempt=0 max_attempts=4 while [ -z "$external_ip" ] && [ $attempt -lt $max_attempts ]; do sleep 10 attempt=$((attempt+1)) external_ip=$(kubectl get svc web-app-service -n my-app --template="{{range .status.loadBalancer.ingress}}{{.ip}}{{end}}" 2>/dev/null) if [ -z "$external_ip" ]; then echo "Waiting for external IP... Attempt $attempt of $max_attempts" fi done # Fallback to localhost if no external IP is found (common in Docker Desktop) if [ -z "$external_ip" ]; then external_ip="localhost" echo "" echo "==========================================================" echo "Could not get external IP from LoadBalancer. Defaulting to localhost." echo "You can try accessing your app at: http://localhost:80" echo "Or check service status manually with:" echo "kubectl get svc web-app-service -n my-app" echo "==========================================================" else echo "" echo "==========================================================" echo "Application deployed successfully!" echo "You can try accessing your app at: http://localhost:80" echo "==========================================================" fi