#!/usr/bin/env bash # ============================================================================= # start-app.sh — Deploy all Kubernetes objects for the Task Manager # # Applies manifests in the correct dependency order: # 1. Namespace # 2. Secret + ConfigMap # 3. PersistentVolumes + PersistentVolumeClaims (inside StatefulSet file) # 4. StatefulSets (postgres, redis) # 5. Deployments (api, frontend, adminer) # 6. Services # # The script waits for the StatefulSets to be Ready before continuing so # the API does not fail its readiness probe immediately. # ============================================================================= set -euo pipefail SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" NS="taskmanager" echo "=============================================" echo " Starting Task Manager on Kubernetes..." echo "=============================================" echo "" echo "[1/6] Creating Namespace..." kubectl apply -f "$SCRIPT_DIR/namespace.yaml" echo "[2/6] Applying Secrets and ConfigMaps..." kubectl apply -f "$SCRIPT_DIR/configmap-secret.yaml" echo "[3/6] Applying PersistentVolumes, PVCs and StatefulSets..." kubectl apply -f "$SCRIPT_DIR/statefulset.yaml" echo "[4/6] Waiting for postgres StatefulSet to be Ready..." kubectl rollout status statefulset/postgres -n $NS --timeout=120s echo " Waiting for redis StatefulSet to be Ready..." kubectl rollout status statefulset/redis -n $NS --timeout=60s echo "[5/6] Applying Deployments..." kubectl apply -f "$SCRIPT_DIR/deployment.yaml" echo "[6/6] Applying Services..." kubectl apply -f "$SCRIPT_DIR/service.yaml" echo "" echo "Waiting for API deployment to be ready..." kubectl rollout status deployment/taskmanager-api -n $NS --timeout=120s # Determine the node IP for NodePort access NODE_IP=$(kubectl get nodes -o jsonpath='{.items[0].status.addresses[?(@.type=="InternalIP")].address}' 2>/dev/null || echo "localhost") echo "" echo "=============================================" echo " ✓ Task Manager is running!" echo "" echo " 🌐 Task Manager: http://${NODE_IP}:30080" echo " 🗄️ Adminer (DB): http://${NODE_IP}:30081" echo "" echo " Adminer login:" echo " System: PostgreSQL" echo " Server: postgres" echo " Username: taskuser" echo " Password: taskpass" echo " Database: taskmanager" echo "============================================="