Bug: Fix: One click docker setup



We need a script for one click docker setup
diff --git a/README.md b/README.md
index 21b5d4def23..3033263e578 100644
--- a/README.md
+++ b/README.md
@@ -69,15 +69,27 @@ Read more at [Hyperswitch docs](https://docs.hyperswitch.io/).
 
 ### 1. Local Setup
 
-You can run Hyperswitch on your system using Docker compose after cloning this repository. 
-We recommend using Docker Desktop (Or Orbstack) for Windows and Mac OS. On Linux, you can install Docker Engine directly.
+#### One-Click Setup (Recommended)
+
+You can run Hyperswitch on your system with a single command using our one-click setup script:
+
 ```shell
 git clone --depth 1 --branch latest https://github.com/juspay/hyperswitch
 cd hyperswitch
-docker compose up -d
-# This script verifies the setup and provides links to the individual components.
-scripts/docker_output.sh
+scripts/setup.sh
 ```
+
+The above script will:
+- Check for prerequisites (Docker Compose/Podman)
+- Set up necessary configurations
+- Let you select a deployment profile:
+  - **Standard**: Recommended - App server + Control Center + Web SDK.
+  - **Full**: Standard + Monitoring + Scheduler.
+  - **Standalone App Server**: Core services only (Hyperswitch server, PostgreSQL, Redis)
+- Start the selected services
+- Check service health
+- Provide access information
+
 The next step is to [configure a connector][configure-a-connector] with the Hyperswitch Control Center and [try a payment][try-a-payment].
 
 Check out the [local setup guide][local-setup-guide] for more details on setting up the entire stack or component wise.
diff --git a/scripts/setup.sh b/scripts/setup.sh
new file mode 100755
index 00000000000..c40c5365c90
--- /dev/null
+++ b/scripts/setup.sh
@@ -0,0 +1,241 @@
+#! /usr/bin/env bash
+set -euo pipefail
+
+# ANSI color codes for pretty output
+RED='\033[0;31m'
+GREEN='\033[0;32m'
+YELLOW='\033[0;33m'
+BLUE='\033[0;34m'
+BOLD='\033[1m'
+NC='\033[0m' # No Color
+
+# Alias for docker to use podman
+alias docker=podman
+
+# Function to print colorful messages
+echo_info() {
+    echo -e "${BLUE}[INFO]${NC} $1"
+}
+
+echo_success() {
+    echo -e "${GREEN}[SUCCESS]${NC} $1"
+}
+
+echo_warning() {
+    echo -e "${YELLOW}[WARNING]${NC} $1"
+}
+
+echo_error() {
+    echo -e "${RED}[ERROR]${NC} $1"
+}
+
+show_banner() {
+    echo -e "${BLUE}${BOLD}"
+    echo "" 
+    echo "        #             "
+    echo "        # #    #  ####  #####    ##   #   #  "
+    echo "        # #    # #      #    #  #  #   # #   "
+    echo "        # #    #  ####  #    # #    #   #    "
+    echo "  #     # #    #      # #####  ######   #    "
+    echo "  #     # #    # #    # #      #    #   #    "
+    echo "   #####   ####   ####  #      #    #   #    "
+    echo "" 
+    echo "" 
+    echo "  #     # #   # #####  ###### #####   ####  #    # # #####  ####  #    # "
+    echo "  #     #  # #  #    # #      #    # #      #    # #   #   #    # #    # "
+    echo "  #     #   #   #    # #####  #    #  ####  #    # #   #   #      ###### "
+    echo "  #######   #   #####  #      #####       # # ## # #   #   #      #    # "
+    echo "  #     #   #   #      #      #   #  #    # ##  ## #   #   #    # #    # "
+    echo "  #     #   #   #      ###### #    #  ####  #    # #   #    ####  #    # "
+    echo ""                                                                                                           
+    sleep 1
+    echo -e "${NC}"
+    echo -e "🚀 ${BLUE}One-Click Docker Setup${NC} 🚀"
+    echo
+}
+
+# Detect Docker Compose version
+detect_docker_compose() {
+    # Check Docker or Podman
+    if command -v docker &> /dev/null; then
+        CONTAINER_ENGINE="docker"
+        echo_success "Docker is installed."
+    elif command -v podman &> /dev/null; then
+        CONTAINER_ENGINE="podman"
+        echo_success "Podman is installed."
+    else
+        echo_error "Neither Docker nor Podman is installed. Please install one of them to proceed."
+        echo_info "Visit https://docs.docker.com/get-docker/ or https://podman.io/docs/installation for installation instructions."
+        echo_info "After installation, re-run this script: scripts/setup.sh"
+        exit 1
+    fi
+
+    # Check Docker Compose or Podman Compose
+    if $CONTAINER_ENGINE compose version &> /dev/null; then
+        DOCKER_COMPOSE="$CONTAINER_ENGINE compose"
+        echo_success "Compose is installed for $CONTAINER_ENGINE."
+    else
+        echo_error "Compose is not installed for $CONTAINER_ENGINE. Please install $CONTAINER_ENGINE compose to proceed."
+        if [ "$CONTAINER_ENGINE" = "docker" ]; then
+            echo_info "Visit https://docs.docker.com/compose/install/ for installation instructions."
+        elif [ "$CONTAINER_ENGINE" = "podman" ]; then
+            echo_info "Visit https://podman-desktop.io/docs/compose/setting-up-compose for installation instructions."
+        fi
+        echo_info "After installation, re-run this script: scripts/setup.sh"
+        exit 1
+    fi
+}
+
+check_prerequisites() {
+    # Check curl
+    if ! command -v curl &> /dev/null; then
+        echo_error "curl is not installed. Please install curl to proceed."
+        exit 1
+    fi
+    echo_success "curl is installed."
+    
+    # Check ports
+    required_ports=(8080 9000 9050 5432 6379 9060)
+    unavailable_ports=()
+    
+    for port in "${required_ports[@]}"; do
+        if command -v nc &> /dev/null; then
+            if nc -z localhost "$port" 2>/dev/null; then
+                unavailable_ports+=("$port")
+            fi
+        elif command -v lsof &> /dev/null; then
+            if lsof -i :"$port" &> /dev/null; then
+                unavailable_ports+=("$port")
+            fi
+        else
+            echo_warning "Neither nc nor lsof available to check ports. Skipping port check."
+            break
+        fi
+    done
+    
+    if [ ${#unavailable_ports[@]} -ne 0 ]; then
+        echo_warning "The following ports are already in use: ${unavailable_ports[*]}"
+        echo_warning "This might cause conflicts with Hyperswitch services."
+        read -p "Do you want to continue anyway? (y/n): " -n 1 -r
+        echo
+        if [[ ! $REPLY =~ ^[Yy]$ ]]; then
+            exit 1
+        fi
+    else
+        echo_success "All required ports are available."
+    fi
+}
+
+setup_config() {
+    if [ ! -f "config/docker_compose.toml" ]; then
+        echo_error "Configuration file 'config/docker_compose.toml' not found. Please ensure the file exists and is correctly configured."
+        exit 1
+    fi
+}
+
+select_profile() {    
+    echo ""    
+    echo "Select a setup option:"
+    echo -e "1) Standard Setup: ${BLUE}[Recommended]${NC} Ideal for quick trial. Services included: ${BLUE}App Server, Control Center, Unified Checkout, PostgreSQL and Redis${NC}"
+    echo -e "2) Full Stack Setup: Ideal for comprehensive end-to-end payment testing. Services included: ${BLUE}Everything in Standard, Monitoring and Scheduler${NC}"
+    echo -e "3) Standalone App Server: Ideal for API-first integration testing. Services included: ${BLUE}App server, PostgreSQL and Redis)${NC}"
+    echo ""
+    local profile_selected=false
+    while [ "$profile_selected" = false ]; do
+        read -p "Enter your choice (1-3): " profile_choice
+        profile_choice=${profile_choice:-1}
+        
+        case $profile_choice in
+            1)
+                PROFILE="standard"
+                profile_selected=true
+                ;;
+            2)
+                PROFILE="full"
+                profile_selected=true
+                ;;
+            3)
+                PROFILE="standalone"
+                profile_selected=true
+                ;;
+            *)
+                echo_error "Invalid choice. Please enter 1, 2, or 3."
+                ;;
+        esac
+    done
+    
+    echo "Selected setup: $PROFILE"
+}
+
+start_services() {
+    
+    case $PROFILE in
+        standalone)
+            $DOCKER_COMPOSE up -d pg redis-standalone migration_runner hyperswitch-server
+            ;;
+        standard)
+            $DOCKER_COMPOSE up -d
+            ;;
+        full)
+            $DOCKER_COMPOSE --profile scheduler --profile monitoring --profile olap up -d
+            ;;
+    esac
+}
+
+check_services_health() {
+    # Wait for the hyperswitch-server to be healthy
+    MAX_RETRIES=30
+    RETRY_INTERVAL=5
+    RETRIES=0
+    
+    while [ $RETRIES -lt $MAX_RETRIES ]; do
+        if curl --silent --head --request GET 'http://localhost:8080/health' | grep "200 OK" > /dev/null; then
+            echo_success "Hyperswitch server is healthy!"
+            print_access_info  # Call print_access_info only when the server is healthy
+            return
+        fi
+        
+        RETRIES=$((RETRIES+1))
+        if [ $RETRIES -eq $MAX_RETRIES ]; then
+            echo ""
+            echo_error "${RED}${BOLD}Hyperswitch server did not become healthy in the expected time."
+            echo -e "Check logs with: $DOCKER_COMPOSE logs hyperswitch-server, Or reach out to us on slack(https://hyperswitch-io.slack.com/) for help."
+            echo -e "The setup process will continue, but some services might not work correctly.${NC}"
+            echo ""
+        else
+            echo "Waiting for server to become healthy... ($RETRIES/$MAX_RETRIES)"
+            sleep $RETRY_INTERVAL
+        fi
+    done
+}
+
+print_access_info() {
+    echo ""
+    echo -e "${GREEN}${BOLD}Setup complete! You can access Hyperswitch services at:${NC}"
+    echo ""
+    
+    if [ "$PROFILE" != "standalone" ]; then
+        echo -e "  • ${GREEN}${BOLD}Control Center${NC}: ${BLUE}${BOLD}http://localhost:9000${NC}"
+    fi
+    
+    echo -e "  • ${GREEN}${BOLD}App Server${NC}: ${BLUE}${BOLD}http://localhost:8080${NC}"
+    
+    if [ "$PROFILE" != "standalone" ]; then
+        echo -e "  • ${GREEN}${BOLD}Unified Checkout${NC}: ${BLUE}${BOLD}http://localhost:9060${NC}"
+    fi
+    
+    if [ "$PROFILE" = "full" ]; then
+        echo -e "  • ${GREEN}${BOLD}Monitoring (Grafana)${NC}: ${BLUE}${BOLD}http://localhost:3000${NC}"
+    fi
+    echo ""
+    echo_info "To stop all services, run: $DOCKER_COMPOSE down"
+}
+
+# Main execution flow
+show_banner
+detect_docker_compose
+check_prerequisites
+setup_config
+select_profile
+start_services
+check_services_health  # This will call print_access_info if the server is healthy

Implements a comprehensive bash script that simplifies the Hyperswitch Docker setup process with the following features:
- Prerequisites checking for Docker and Docker Compose
- Port availability validation
- Multiple deployment profiles (Minimal, Standard, Full, Development)
- Automatic configuration setup
- Service health monitoring
- Detailed documentation in README.md and docs/one_click_setup.md

Resolves issue #7761

## Type of Change
<!-- Put an `x` in the boxes that apply -->

- [ ] Bugfix
- [ ] New feature
- [x] Enhancement
- [ ] Refactoring
- [ ] Dependency updates
- [ ] Documentation
- [ ] CI/CD

## Description
<!-- Describe your changes in detail -->


### Additional Changes

- [ ] This PR modifies the API contract
- [ ] This PR modifies the database schema
- [ ] This PR modifies application configuration/environment variables

<!--
Provide links to the files with corresponding changes.

Following are the paths where you can find config files:
1. `config`
2. `crates/router/src/configs`
3. `loadtest/config`
-->


## Motivation and Context
<!--
Why is this change required? What problem does it solve?
If it fixes an open issue, please link to the issue here.

If you don't have an issue, we'd recommend starting with one first so the PR
can focus on the implementation (unless it is an obvious bug or documentation fix
that will have little conversation).
-->


## How did you test it?
<!--
Did you write an integration/unit/API test to verify the code changes?
Or did you test this change manually (provide relevant screenshots)?
-->
Sharing SS from local:
<img width="635" alt="Screenshot 2025-04-24 at 5 59 43 AM" src="https://github.com/user-attachments/assets/2450115e-bb2d-4bc4-91ee-c53be713f9e2" />


## Checklist
<!-- Put an `x` in the boxes that apply -->

- [ ] I formatted the code `cargo +nightly fmt --all`
- [ ] I addressed lints thrown by `cargo clippy`
- [ ] I reviewed the submitted code
- [ ] I added unit tests for my changes where possible
