From 1093888889fb10fae112c148b54ec9dbf993b8ac Mon Sep 17 00:00:00 2001
From: root <peng.alan@gmail.com>
Date: 星期日, 18 五月 2025 15:58:34 +0800
Subject: [PATCH] fix the deploy-en.sh by dos2unix command

---
 docker-deploy/one-step-script/deploy-en.sh | 1038 ++++++++++++++++++++++++++++----------------------------
 1 files changed, 519 insertions(+), 519 deletions(-)

diff --git a/docker-deploy/one-step-script/deploy-en.sh b/docker-deploy/one-step-script/deploy-en.sh
index 6d36f6a..525928c 100755
--- a/docker-deploy/one-step-script/deploy-en.sh
+++ b/docker-deploy/one-step-script/deploy-en.sh
@@ -1,519 +1,519 @@
-#!/bin/bash
-
-# RuoYi-AI Interactive Deployment Script
-# This script helps configure and deploy the RuoYi-AI project with custom settings
-
-set -e
-
-echo "=================================================="
-echo "   RuoYi-AI Interactive Deployment Script"
-echo "=================================================="
-echo ""
-echo "This script will guide you through the configuration and deployment of RuoYi-AI."
-echo "You will be prompted to enter various configuration parameters."
-echo ""
-
-SCRIPT_DIR=${PWD}
-
-# Prompt for deployment directory with default value
-read -p "Enter deployment directory [${PWD}/ruoyi-ai-deploy]: " user_input
-DEPLOY_DIR="${user_input:-${PWD}/ruoyi-ai-deploy}"
-
-# Check if directory exists
-if [ -d "$DEPLOY_DIR" ]; then
-    echo "Warning: Directory $DEPLOY_DIR already exists!"
-    read -p "Do you want to delete it? [y/N]: " delete_choice
-    
-    case "${delete_choice:-N}" in
-        [Yy]* )
-            echo "Deleting existing directory..."
-            rm -rf "$DEPLOY_DIR"
-            mkdir -p "$DEPLOY_DIR"
-            echo "Directory has been recreated."
-            ;;
-        * )
-            echo "Keeping existing directory."
-            ;;
-    esac
-else
-    mkdir -p "$DEPLOY_DIR"
-    echo "Directory created at $DEPLOY_DIR"
-fi
-
-echo "Selected deployment directory: $DEPLOY_DIR"
-
-mkdir -p ${DEPLOY_DIR}/{data/mysql,data/redis,data/logs,data/weaviate}
-cd ${DEPLOY_DIR}
-
-# Function to prompt for a value with a default
-prompt_with_default() {
-    local prompt=$1
-    local default=$2
-    local var_name=$3
-
-    read -p "${prompt} [${default}]: " input
-    if [ -z "$input" ]; then
-        eval "${var_name}=\"${default}\""
-    else
-        eval "${var_name}=\"${input}\""
-    fi
-}
-
-# Function to prompt for a password with masking
-prompt_for_password() {
-    local prompt=$1
-    local default=$2
-    local var_name=$3
-
-    read -sp "${prompt} [default: ${default}]: " input
-    echo ""
-    if [ -z "$input" ]; then
-        eval "${var_name}=\"${default}\""
-    else
-        eval "${var_name}=\"${input}\""
-    fi
-}
-
-# Function to escape special characters for sed replacement string
-escape_sed_replacement_string() {
-    # Escape &, \, and the delimiter | for the sed replacement string
-    echo "$1" | sed -e 's/[&\\|]/\\&/g'
-}
-
-echo "=== General Configuration ==="
-prompt_with_default "Time Zone" "Asia/Shanghai" "TZ"
-
-echo ""
-echo "=== MySQL Configuration ==="
-prompt_with_default "MySQL Port" "3306" "MYSQL_PORT"
-prompt_with_default "MySQL Database Name" "ruoyi-ai" "MYSQL_DATABASE"
-prompt_for_password "MySQL root Password" "root" "MYSQL_ROOT_PASSWORD"
-
-echo ""
-echo "=== Redis Configuration ==="
-prompt_with_default "Redis Port" "6379" "REDIS_PORT"
-prompt_for_password "Redis Password (leave empty for no password)" "" "REDIS_PASSWORD"
-prompt_with_default "Redis Database Index" "0" "REDIS_DATABASE"
-prompt_with_default "Redis Connection Timeout" "10s" "REDIS_TIMEOUT"
-
-echo ""
-echo "=== Backend Service Configuration ==="
-prompt_with_default "Backend Service Port" "6039" "SERVER_PORT"
-prompt_with_default "Backend Service Hostname" "ruoyi-backend" "BACKEND_HOST"
-prompt_with_default "Database Username" "root" "DB_USERNAME"
-prompt_for_password "Database Password" "root" "DB_PASSWORD"
-
-echo ""
-echo "=== Frontend Service Configuration ==="
-prompt_with_default "Admin UI Port" "8082" "ADMIN_PORT"
-prompt_with_default "Web UI Port" "8081" "WEB_PORT"
-
-echo ""
-echo "=== Weaviate Vector Database Configuration ==="
-prompt_with_default "Weaviate HTTP Port" "50050" "WEAVIATE_HTTP_PORT"
-prompt_with_default "Weaviate gRPC Port" "50051" "WEAVIATE_GRPC_PORT"
-prompt_with_default "Weaviate Query Limit" "25" "WEAVIATE_QUERY_LIMIT"
-prompt_with_default "Weaviate Anonymous Access" "true" "WEAVIATE_ANONYMOUS_ACCESS"
-prompt_with_default "Weaviate Data Path" "/var/lib/weaviate" "WEAVIATE_DATA_PATH"
-prompt_with_default "Weaviate Vectorizer Module" "none" "WEAVIATE_VECTORIZER_MODULE"
-prompt_with_default "Weaviate Modules" "text2vec-cohere,text2vec-huggingface,text2vec-palm,text2vec-openai,generative-openai,generative-cohere,generative-palm,ref2vec-centroid,reranker-cohere,qna-openai" "WEAVIATE_MODULES"
-prompt_with_default "Weaviate Cluster Hostname" "node1" "WEAVIATE_CLUSTER_HOSTNAME"
-prompt_with_default "Weaviate Protocol" "http" "WEAVIATE_PROTOCOL"
-prompt_with_default "Weaviate Class Name" "LocalKnowledge" "WEAVIATE_CLASSNAME"
-
-echo ""
-echo "=== Production Environment Configuration ==="
-prompt_with_default "Production Database URL" "jdbc:mysql://mysql:3306/ruoyi-ai?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8&autoReconnect=true&rewriteBatchedStatements=true" "PROD_DB_URL"
-prompt_with_default "Production Database Username" "root" "PROD_DB_USERNAME"
-prompt_for_password "Production Database Password" "root" "PROD_DB_PASSWORD"
-prompt_with_default "Production Redis Host" "redis" "PROD_REDIS_HOST"
-prompt_with_default "Production Redis Port" "6379" "PROD_REDIS_PORT"
-prompt_with_default "Production Redis Database" "0" "PROD_REDIS_DATABASE"
-prompt_for_password "Production Redis Password (leave empty for no password)" "" "PROD_REDIS_PASSWORD"
-prompt_with_default "Production Redis Timeout" "10s" "PROD_REDIS_TIMEOUT"
-
-echo ""
-echo "=== Frontend Configuration ==="
-prompt_with_default "Frontend API Base URL" "http://${BACKEND_HOST}:${SERVER_PORT}" "FRONTEND_API_BASE_URL"
-prompt_with_default "Frontend Development Server Port" "3000" "FRONTEND_DEV_PORT"
-
-# Copy template files
-cp ${SCRIPT_DIR}/template/.env.template ${DEPLOY_DIR}/.env
-cp ${SCRIPT_DIR}/template/docker-compose.yaml.template ${DEPLOY_DIR}/docker-compose.yaml
-
-echo "Template files copied to deployment directory."
-
-# Replace placeholders in .env file
-echo "Updating .env file with your configuration..."
-sed -i "s|{{TZ}}|$(escape_sed_replacement_string "${TZ}")|g" ${DEPLOY_DIR}/.env
-sed -i "s|{{MYSQL_ROOT_PASSWORD}}|$(escape_sed_replacement_string "${MYSQL_ROOT_PASSWORD}")|g" ${DEPLOY_DIR}/.env
-sed -i "s|{{MYSQL_DATABASE}}|$(escape_sed_replacement_string "${MYSQL_DATABASE}")|g" ${DEPLOY_DIR}/.env
-sed -i "s|{{MYSQL_PORT}}|$(escape_sed_replacement_string "${MYSQL_PORT}")|g" ${DEPLOY_DIR}/.env
-sed -i "s|{{REDIS_PORT}}|$(escape_sed_replacement_string "${REDIS_PORT}")|g" ${DEPLOY_DIR}/.env
-sed -i "s|{{REDIS_PASSWORD}}|$(escape_sed_replacement_string "${REDIS_PASSWORD}")|g" ${DEPLOY_DIR}/.env
-sed -i "s|{{REDIS_DATABASE}}|$(escape_sed_replacement_string "${REDIS_DATABASE}")|g" ${DEPLOY_DIR}/.env
-sed -i "s|{{REDIS_TIMEOUT}}|$(escape_sed_replacement_string "${REDIS_TIMEOUT}")|g" ${DEPLOY_DIR}/.env
-sed -i "s|{{SERVER_PORT}}|$(escape_sed_replacement_string "${SERVER_PORT}")|g" ${DEPLOY_DIR}/.env
-sed -i "s|{{DB_URL}}|$(escape_sed_replacement_string "jdbc:mysql://mysql:3306/${MYSQL_DATABASE}?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8&autoReconnect=true&rewriteBatchedStatements=true")|g" ${DEPLOY_DIR}/.env
-sed -i "s|{{DB_USERNAME}}|$(escape_sed_replacement_string "${DB_USERNAME}")|g" ${DEPLOY_DIR}/.env
-sed -i "s|{{DB_PASSWORD}}|$(escape_sed_replacement_string "${DB_PASSWORD}")|g" ${DEPLOY_DIR}/.env
-sed -i "s|{{BACKEND_HOST}}|$(escape_sed_replacement_string "${BACKEND_HOST}")|g" ${DEPLOY_DIR}/.env
-sed -i "s|{{ADMIN_PORT}}|$(escape_sed_replacement_string "${ADMIN_PORT}")|g" ${DEPLOY_DIR}/.env
-sed -i "s|{{WEB_PORT}}|$(escape_sed_replacement_string "${WEB_PORT}")|g" ${DEPLOY_DIR}/.env
-sed -i "s|{{FRONTEND_API_BASE_URL}}|$(escape_sed_replacement_string "${FRONTEND_API_BASE_URL}")|g" ${DEPLOY_DIR}/.env
-sed -i "s|{{FRONTEND_DEV_PORT}}|$(escape_sed_replacement_string "${FRONTEND_DEV_PORT}")|g" ${DEPLOY_DIR}/.env
-sed -i "s|{{WEAVIATE_HTTP_PORT}}|$(escape_sed_replacement_string "${WEAVIATE_HTTP_PORT}")|g" ${DEPLOY_DIR}/.env
-sed -i "s|{{WEAVIATE_GRPC_PORT}}|$(escape_sed_replacement_string "${WEAVIATE_GRPC_PORT}")|g" ${DEPLOY_DIR}/.env
-sed -i "s|{{WEAVIATE_QUERY_LIMIT}}|$(escape_sed_replacement_string "${WEAVIATE_QUERY_LIMIT}")|g" ${DEPLOY_DIR}/.env
-sed -i "s|{{WEAVIATE_ANONYMOUS_ACCESS}}|$(escape_sed_replacement_string "${WEAVIATE_ANONYMOUS_ACCESS}")|g" ${DEPLOY_DIR}/.env
-sed -i "s|{{WEAVIATE_DATA_PATH}}|$(escape_sed_replacement_string "${WEAVIATE_DATA_PATH}")|g" ${DEPLOY_DIR}/.env
-sed -i "s|{{WEAVIATE_VECTORIZER_MODULE}}|$(escape_sed_replacement_string "${WEAVIATE_VECTORIZER_MODULE}")|g" ${DEPLOY_DIR}/.env
-sed -i "s|{{WEAVIATE_MODULES}}|$(escape_sed_replacement_string "${WEAVIATE_MODULES}")|g" ${DEPLOY_DIR}/.env
-sed -i "s|{{WEAVIATE_CLUSTER_HOSTNAME}}|$(escape_sed_replacement_string "${WEAVIATE_CLUSTER_HOSTNAME}")|g" ${DEPLOY_DIR}/.env
-sed -i "s|{{WEAVIATE_PROTOCOL}}|$(escape_sed_replacement_string "${WEAVIATE_PROTOCOL}")|g" ${DEPLOY_DIR}/.env
-sed -i "s|{{WEAVIATE_CLASSNAME}}|$(escape_sed_replacement_string "${WEAVIATE_CLASSNAME}")|g" ${DEPLOY_DIR}/.env
-sed -i "s|{{PROD_DB_URL}}|$(escape_sed_replacement_string "${PROD_DB_URL}")|g" ${DEPLOY_DIR}/.env
-sed -i "s|{{PROD_DB_USERNAME}}|$(escape_sed_replacement_string "${PROD_DB_USERNAME}")|g" ${DEPLOY_DIR}/.env
-sed -i "s|{{PROD_DB_PASSWORD}}|$(escape_sed_replacement_string "${PROD_DB_PASSWORD}")|g" ${DEPLOY_DIR}/.env
-sed -i "s|{{PROD_REDIS_HOST}}|$(escape_sed_replacement_string "${PROD_REDIS_HOST}")|g" ${DEPLOY_DIR}/.env
-sed -i "s|{{PROD_REDIS_PORT}}|$(escape_sed_replacement_string "${PROD_REDIS_PORT}")|g" ${DEPLOY_DIR}/.env
-sed -i "s|{{PROD_REDIS_DATABASE}}|$(escape_sed_replacement_string "${PROD_REDIS_DATABASE}")|g" ${DEPLOY_DIR}/.env
-sed -i "s|{{PROD_REDIS_PASSWORD}}|$(escape_sed_replacement_string "${PROD_REDIS_PASSWORD}")|g" ${DEPLOY_DIR}/.env
-sed -i "s|{{PROD_REDIS_TIMEOUT}}|$(escape_sed_replacement_string "${PROD_REDIS_TIMEOUT}")|g" ${DEPLOY_DIR}/.env
-
-echo ".env file has been updated with your configuration."
-
-# Replace placeholders in docker-compose.yaml file
-echo "Updating docker-compose.yaml file with your configuration..."
-
-# Determine Redis command arguments based on password
-#if [ -n "${REDIS_PASSWORD}" ]; then
-#    REDIS_COMMAND_ARGS="--requirepass $(escape_sed_replacement_string "${REDIS_PASSWORD}")"
-#else
-#    REDIS_COMMAND_ARGS=""
-#fi
-
-sed -i "s|{{MYSQL_ROOT_PASSWORD}}|$(escape_sed_replacement_string "${MYSQL_ROOT_PASSWORD}")|g" ${DEPLOY_DIR}/docker-compose.yaml
-sed -i "s|{{MYSQL_DATABASE}}|$(escape_sed_replacement_string "${MYSQL_DATABASE}")|g" ${DEPLOY_DIR}/docker-compose.yaml
-sed -i "s|{{MYSQL_PORT}}|$(escape_sed_replacement_string "${MYSQL_PORT}")|g" ${DEPLOY_DIR}/docker-compose.yaml
-sed -i "s|{{REDIS_PORT}}|$(escape_sed_replacement_string "${REDIS_PORT}")|g" ${DEPLOY_DIR}/docker-compose.yaml
-sed -i "s|{{REDIS_COMMAND_ARGS}}|$(escape_sed_replacement_string "${REDIS_COMMAND_ARGS}")|g" ${DEPLOY_DIR}/docker-compose.yaml
-sed -i "s|{{WEAVIATE_HTTP_PORT}}|$(escape_sed_replacement_string "${WEAVIATE_HTTP_PORT}")|g" ${DEPLOY_DIR}/docker-compose.yaml
-sed -i "s|{{WEAVIATE_GRPC_PORT}}|$(escape_sed_replacement_string "${WEAVIATE_GRPC_PORT}")|g" ${DEPLOY_DIR}/docker-compose.yaml
-sed -i "s|{{WEAVIATE_QUERY_LIMIT}}|$(escape_sed_replacement_string "${WEAVIATE_QUERY_LIMIT}")|g" ${DEPLOY_DIR}/docker-compose.yaml
-sed -i "s|{{WEAVIATE_ANONYMOUS_ACCESS}}|$(escape_sed_replacement_string "${WEAVIATE_ANONYMOUS_ACCESS}")|g" ${DEPLOY_DIR}/docker-compose.yaml
-sed -i "s|{{WEAVIATE_DATA_PATH}}|$(escape_sed_replacement_string "${WEAVIATE_DATA_PATH}")|g" ${DEPLOY_DIR}/docker-compose.yaml
-sed -i "s|{{WEAVIATE_VECTORIZER_MODULE}}|$(escape_sed_replacement_string "${WEAVIATE_VECTORIZER_MODULE}")|g" ${DEPLOY_DIR}/docker-compose.yaml
-sed -i "s|{{WEAVIATE_MODULES}}|$(escape_sed_replacement_string "${WEAVIATE_MODULES}")|g" ${DEPLOY_DIR}/docker-compose.yaml
-sed -i "s|{{WEAVIATE_CLUSTER_HOSTNAME}}|$(escape_sed_replacement_string "${WEAVIATE_CLUSTER_HOSTNAME}")|g" ${DEPLOY_DIR}/docker-compose.yaml
-sed -i "s|{{SERVER_PORT}}|$(escape_sed_replacement_string "${SERVER_PORT}")|g" ${DEPLOY_DIR}/docker-compose.yaml
-sed -i "s|{{DB_URL}}|$(escape_sed_replacement_string "jdbc:mysql://mysql:3306/${MYSQL_DATABASE}?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8&autoReconnect=true&rewriteBatchedStatements=true")|g" ${DEPLOY_DIR}/docker-compose.yaml
-sed -i "s|{{DB_USERNAME}}|$(escape_sed_replacement_string "${DB_USERNAME}")|g" ${DEPLOY_DIR}/docker-compose.yaml
-sed -i "s|{{DB_PASSWORD}}|$(escape_sed_replacement_string "${DB_PASSWORD}")|g" ${DEPLOY_DIR}/docker-compose.yaml
-sed -i "s|{{REDIS_HOST}}|redis|g" ${DEPLOY_DIR}/docker-compose.yaml # REDIS_HOST is hardcoded to 'redis' in docker-compose
-sed -i "s|{{REDIS_DATABASE}}|$(escape_sed_replacement_string "${REDIS_DATABASE}")|g" ${DEPLOY_DIR}/docker-compose.yaml
-sed -i "s|{{REDIS_PASSWORD}}|$(escape_sed_replacement_string "${REDIS_PASSWORD}")|g" ${DEPLOY_DIR}/docker-compose.yaml
-sed -i "s|{{REDIS_TIMEOUT}}|$(escape_sed_replacement_string "${REDIS_TIMEOUT}")|g" ${DEPLOY_DIR}/docker-compose.yaml
-sed -i "s|{{TZ}}|$(escape_sed_replacement_string "${TZ}")|g" ${DEPLOY_DIR}/docker-compose.yaml
-sed -i "s|{{ADMIN_PORT}}|$(escape_sed_replacement_string "${ADMIN_PORT}")|g" ${DEPLOY_DIR}/docker-compose.yaml
-sed -i "s|{{WEB_PORT}}|$(escape_sed_replacement_string "${WEB_PORT}")|g" ${DEPLOY_DIR}/docker-compose.yaml
-
-echo ""
-echo "=== Build or Deploy Options ==="
-read -p "Do you want to build new images (B) or deploy directly using existing images (D)?[B/d]: " build_or_deploy_choice
-BUILD_CHOICE="${build_or_deploy_choice:-B}" # Default to Build
-
-if [[ "${BUILD_CHOICE}" == [Bb]* ]]; then
-    echo "Image build process in progress..."
-
-    # Clone ruoyi-ai-backend repositories
-    if [ -d "${DEPLOY_DIR}/ruoyi-ai" ]; then
-        echo "Directory ${DEPLOY_DIR}/ruoyi-ai already exists."
-        read -p "Do you want to delete it and clone a new copy?[Y/n]: " answer
-        case ${answer:-Y} in
-            [Yy]* )
-                echo "Deleting existing directory..."
-                rm -rf ${DEPLOY_DIR}/ruoyi-ai
-                echo "Cloning ruoyi-ai-backend repository..."
-                cd ${DEPLOY_DIR} && git clone https://github.com/ageerle/ruoyi-ai
-                
-                # Prompt for branch selection
-                read -p "Please enter the branch name for ruoyi-ai repository [main]: " RUOYI_AI_BRANCH
-                RUOYI_AI_BRANCH="${RUOYI_AI_BRANCH:-main}"
-                echo "Switching to branch: ${RUOYI_AI_BRANCH}"
-                cd ${DEPLOY_DIR}/ruoyi-ai && git checkout ${RUOYI_AI_BRANCH}
-                cd ..
-            ;;
-            [Nn]* )
-                echo "Skipping clone operation."
-            ;;
-            * )
-                echo "Invalid input. Skipping clone operation."
-            ;;
-        esac
-    else
-        echo "Cloning ruoyi-ai-backend repository..."
-        cd ${DEPLOY_DIR} && git clone https://github.com/ageerle/ruoyi-ai
-        
-        # Prompt for branch selection
-        read -p "Please enter the branch name for ruoyi-ai repository [main]: " RUOYI_AI_BRANCH
-        RUOYI_AI_BRANCH="${RUOYI_AI_BRANCH:-main}"
-        echo "Switching to branch: ${RUOYI_AI_BRANCH}"
-        cd ${DEPLOY_DIR}/ruoyi-ai && git checkout ${RUOYI_AI_BRANCH}
-        cd ..
-    fi
-
-    # Clone ruoyi-ai-admin repositories
-    if [ -d "${DEPLOY_DIR}/ruoyi-admin" ]; then
-        echo "Directory ${DEPLOY_DIR}/ruoyi-admin already exists."
-        read -p "Do you want to delete it and clone a new copy?[Y/n]: " answer
-        case ${answer:-Y} in
-            [Yy]* )
-                echo "Deleting existing directory..."
-                rm -rf ${DEPLOY_DIR}/ruoyi-admin
-                echo "Cloning ruoyi-admin repository..."
-                cd ${DEPLOY_DIR} && git clone https://github.com/ageerle/ruoyi-admin
-                
-                # Prompt for branch selection
-                read -p "Please enter the branch name for ruoyi-admin repository [main]: " RUOYI_ADMIN_BRANCH
-                RUOYI_ADMIN_BRANCH="${RUOYI_ADMIN_BRANCH:-main}"
-                echo "Switching to branch: ${RUOYI_ADMIN_BRANCH}"
-                cd ${DEPLOY_DIR}/ruoyi-admin && git checkout ${RUOYI_ADMIN_BRANCH}
-                cd ..
-            ;;
-            [Nn]* )
-                echo "Skipping clone operation."
-            ;;
-            * )
-                echo "Invalid input. Skipping clone operation."
-            ;;
-        esac
-    else
-        echo "Cloning ruoyi-ai-admin repository..."
-        cd ${DEPLOY_DIR} && git clone https://github.com/ageerle/ruoyi-admin
-        
-        # Prompt for branch selection
-        read -p "Please enter the branch name for ruoyi-admin repository [main]: " RUOYI_ADMIN_BRANCH
-        RUOYI_ADMIN_BRANCH="${RUOYI_ADMIN_BRANCH:-main}"
-        echo "Switching to branch: ${RUOYI_ADMIN_BRANCH}"
-        cd ${DEPLOY_DIR}/ruoyi-admin && git checkout ${RUOYI_ADMIN_BRANCH}
-        cd ..
-    fi
-
-    # Clone ruoyi-ai-web repositories
-    if [ -d "${DEPLOY_DIR}/ruoyi-web" ]; then
-        echo "Directory ${DEPLOY_DIR}/ruoyi-web already exists."
-        read -p "Do you want to delete it and clone a new copy?[Y/n]: " answer
-        case ${answer:-Y} in
-            [Yy]* )
-                echo "Deleting existing directory..."
-                rm -rf ${DEPLOY_DIR}/ruoyi-web
-                echo "Cloning ruoyi-ai-web repository..."
-                cd ${DEPLOY_DIR} && git clone https://github.com/ageerle/ruoyi-web
-                
-                # Prompt for branch selection
-                read -p "Please enter the branch name for ruoyi-web repository [main]: " RUOYI_WEB_BRANCH
-                RUOYI_WEB_BRANCH="${RUOYI_WEB_BRANCH:-main}"
-                echo "Switching to branch: ${RUOYI_WEB_BRANCH}"
-                cd ${DEPLOY_DIR}/ruoyi-web && git checkout ${RUOYI_WEB_BRANCH}
-                cd ..
-            ;;
-            [Nn]* )
-                echo "Skipping clone operation."
-            ;;
-            * )
-                echo "Invalid input. Skipping clone operation."
-            ;;
-        esac
-    else
-        echo "Cloning ruoyi-ai-web repository..."
-        cd ${DEPLOY_DIR} && git clone https://github.com/ageerle/ruoyi-web
-        
-        # Prompt for branch selection
-        read -p "Please enter the branch name for ruoyi-web repository [main]: " RUOYI_WEB_BRANCH
-        RUOYI_WEB_BRANCH="${RUOYI_WEB_BRANCH:-main}"
-        echo "Switching to branch: ${RUOYI_WEB_BRANCH}"
-        cd ${DEPLOY_DIR}/ruoyi-web && git checkout ${RUOYI_WEB_BRANCH}
-        cd ..
-    fi
-
-    # Update application-prod.yml file
-    echo "Updating application-prod.yml file with your configuration..."
-    # Copy application-prod.yml template
-    cp ${SCRIPT_DIR}/template/application-prod.yml.template ${DEPLOY_DIR}/ruoyi-ai/ruoyi-admin/src/main/resources/application-prod.yml
-
-    # Replace placeholders in application-prod.yml
-    sed -i "s|{{PROD_DB_URL}}|$(escape_sed_replacement_string "${PROD_DB_URL}")|g" ${DEPLOY_DIR}/ruoyi-ai/ruoyi-admin/src/main/resources/application-prod.yml
-    sed -i "s|{{PROD_DB_USERNAME}}|$(escape_sed_replacement_string "${PROD_DB_USERNAME}")|g" ${DEPLOY_DIR}/ruoyi-ai/ruoyi-admin/src/main/resources/application-prod.yml
-    sed -i "s|{{PROD_DB_PASSWORD}}|$(escape_sed_replacement_string "${PROD_DB_PASSWORD}")|g" ${DEPLOY_DIR}/ruoyi-ai/ruoyi-admin/src/main/resources/application-prod.yml
-    sed -i "s|{{PROD_REDIS_HOST}}|$(escape_sed_replacement_string "${PROD_REDIS_HOST}")|g" ${DEPLOY_DIR}/ruoyi-ai/ruoyi-admin/src/main/resources/application-prod.yml
-    sed -i "s|{{PROD_REDIS_PORT}}|$(escape_sed_replacement_string "${PROD_REDIS_PORT}")|g" ${DEPLOY_DIR}/ruoyi-ai/ruoyi-admin/src/main/resources/application-prod.yml
-    sed -i "s|{{PROD_REDIS_DATABASE}}|$(escape_sed_replacement_string "${PROD_REDIS_DATABASE}")|g" ${DEPLOY_DIR}/ruoyi-ai/ruoyi-admin/src/main/resources/application-prod.yml
-    if [ -z "${PROD_REDIS_PASSWORD}" ]; then
-      sed -i "s/^    password: {{PROD_REDIS_PASSWORD}}/#    password: {{PROD_REDIS_PASSWORD}}/g" ${DEPLOY_DIR}/ruoyi-ai/ruoyi-admin/src/main/resources/application-prod.yml
-    else
-      sed -i "s|{{PROD_REDIS_PASSWORD}}|$(escape_sed_replacement_string "${PROD_REDIS_PASSWORD}")|g" ${DEPLOY_DIR}/ruoyi-ai/ruoyi-admin/src/main/resources/application-prod.yml
-    fi
-    sed -i "s|{{PROD_REDIS_TIMEOUT}}|$(escape_sed_replacement_string "${PROD_REDIS_TIMEOUT}")|g" ${DEPLOY_DIR}/ruoyi-ai/ruoyi-admin/src/main/resources/application-prod.yml
-
-    # Update vite.config.mts file
-    echo "Updating vite.config.mts file with your configuration..."
-    sed -i "s|http://127.0.0.1:6039|${FRONTEND_API_BASE_URL}|g" ${DEPLOY_DIR}/ruoyi-admin/apps/web-antd/vite.config.mts
-    
-    # Update image tags in docker-compose.yaml file
-    echo "Updating image tags in docker-compose.yaml file..."
-    sed -i "s|ruoyi-ai-backend:latest|ruoyi-ai-backend:${RUOYI_AI_BRANCH}|g" ${DEPLOY_DIR}/docker-compose.yaml
-    sed -i "s|ruoyi-ai-admin:latest|ruoyi-ai-admin:${RUOYI_ADMIN_BRANCH}|g" ${DEPLOY_DIR}/docker-compose.yaml
-    sed -i "s|ruoyi-ai-web:latest|ruoyi-ai-web:${RUOYI_WEB_BRANCH}|g" ${DEPLOY_DIR}/docker-compose.yaml
-
-    # Create Nginx configuration files for frontend services
-    echo "Copying Admin UI Nginx configuration template to temporary location..."
-    cp ${SCRIPT_DIR}/template/nginx.admin.conf.template ${DEPLOY_DIR}/nginx.admin.conf.tmp
-
-    echo "Updating Admin UI Nginx configuration in temporary file..."
-    sed -i "s|{{BACKEND_HOST}}|$(escape_sed_replacement_string "${BACKEND_HOST}")|g" ${DEPLOY_DIR}/nginx.admin.conf.tmp
-    sed -i "s|{{SERVER_PORT}}|$(escape_sed_replacement_string "${SERVER_PORT}")|g" ${DEPLOY_DIR}/nginx.admin.conf.tmp
-
-    echo "Moving updated Admin UI Nginx configuration to final location..."
-    mv ${DEPLOY_DIR}/nginx.admin.conf.tmp ${DEPLOY_DIR}/ruoyi-admin/nginx.conf
-
-    echo "Copying Web UI Nginx configuration template to temporary location..."
-    cp ${SCRIPT_DIR}/template/nginx.web.conf.template ${DEPLOY_DIR}/nginx.web.conf.tmp
-
-    echo "Updating Web UI Nginx configuration in temporary file..."
-    sed -i "s|{{BACKEND_HOST}}|$(escape_sed_replacement_string "${BACKEND_HOST}")|g" ${DEPLOY_DIR}/nginx.web.conf.tmp
-    sed -i "s|{{SERVER_PORT}}|$(escape_sed_replacement_string "${SERVER_PORT}")|g" ${DEPLOY_DIR}/nginx.web.conf.tmp
-
-    echo "Moving updated Web UI Nginx configuration to final location..."
-    mv ${DEPLOY_DIR}/nginx.web.conf.tmp ${DEPLOY_DIR}/ruoyi-web/nginx.conf
-
-    # Create Dockerfiles for frontend services
-    echo "Creating Dockerfile for Admin UI..."
-    cat > ${DEPLOY_DIR}/ruoyi-admin/Dockerfile << EOF
-FROM nginx:1.25-alpine
-
-COPY dist/ /usr/share/nginx/html/
-COPY nginx.conf /etc/nginx/conf.d/default.conf
-
-EXPOSE 80
-
-CMD ["nginx", "-g", "daemon off;"]
-EOF
-
-    echo "Creating Dockerfile for Web UI..."
-    cat > ${DEPLOY_DIR}/ruoyi-web/Dockerfile << EOF
-FROM nginx:1.25-alpine
-
-COPY dist/ /usr/share/nginx/html/
-COPY nginx.conf /etc/nginx/conf.d/default.conf
-
-EXPOSE 80
-
-CMD ["nginx", "-g", "daemon off;"]
-EOF
-
-    # Build backend service
-    echo "Building Ruoyi-AI backend service..."
-    cd ${DEPLOY_DIR}/ruoyi-ai
-    docker run -it --rm --name build-ruoyi-ai-backend -v ${DEPLOY_DIR}/ruoyi-ai:/code --entrypoint=/bin/bash maven:3.9.9-eclipse-temurin-17-alpine -c "cd /code && mvn clean package -P prod"
-
-    # Build frontend Admin service
-    echo "Building Ruoyi-AI frontend Admin service..."
-    cd ${DEPLOY_DIR}/ruoyi-admin
-    docker run -it --rm --name build-ruoyi-ai-admin -v ${DEPLOY_DIR}/ruoyi-admin:/app -w /app node:20 sh -c "npm install -g pnpm && pnpm install && pnpm build"
-
-    # Build frontend Web service
-    echo "Building Ruoyi-AI frontend Web service..."
-    cd ${DEPLOY_DIR}/ruoyi-web
-    docker run -it --rm --name build-ruoyi-ai-web -v ${DEPLOY_DIR}/ruoyi-web:/app -w /app node:20 sh -c "npm install -g pnpm && pnpm install && pnpm build"
-
-    # Build Docker images
-    echo "Building Ruoyi-AI Backend Docker images..."
-    cd ${DEPLOY_DIR}/ruoyi-ai
-    rm -rf temp
-    mkdir temp
-    cp ./ruoyi-admin/target/ruoyi-admin.jar temp/
-    cd temp/
-    cat > Dockerfile << EOF
-FROM openjdk:17-jdk-slim
-WORKDIR /app
-COPY ruoyi-admin.jar /app/ruoyi-admin.jar
-EXPOSE ${SERVER_PORT}
-ENTRYPOINT ["java","-jar","ruoyi-admin.jar","--spring.profiles.active=prod"]
-EOF
-    docker build -t ruoyi-ai-backend:${RUOYI_AI_BRANCH} .
-    cd ..
-
-    echo "Building Ruoyi-AI Admin Docker images..."
-    cd ${DEPLOY_DIR}/ruoyi-admin
-    rm -rf temp
-    mkdir temp
-    cp ./apps/web-antd/dist.zip temp/
-    cp Dockerfile temp/
-    cp nginx.conf temp/
-    cd temp/
-    unzip dist.zip -d dist
-    rm -f dist.zip
-    docker build -t ruoyi-ai-admin:${RUOYI_ADMIN_BRANCH} .
-    cd ..
-
-    echo "Building Ruoyi-AI Web Docker images..."
-    cd ${DEPLOY_DIR}/ruoyi-web
-    rm -rf temp
-    mkdir temp
-    cp -pr ${DEPLOY_DIR}/ruoyi-web/dist temp/
-    cp Dockerfile temp/
-    cp nginx.conf temp/
-    cd temp/
-    docker build -t ruoyi-ai-web:${RUOYI_WEB_BRANCH} .
-    cd ..
-else
-    echo "Skipping image build process. Deploying directly using existing images..."
-    
-    # Prompt for branch names to use as image tags
-    read -p "Please enter the tag for ruoyi-ai-backend image [main]: " RUOYI_AI_BRANCH
-    RUOYI_AI_BRANCH="${RUOYI_AI_BRANCH:-main}"
-    
-    read -p "Please enter the tag for ruoyi-ai-admin image [main]: " RUOYI_ADMIN_BRANCH
-    RUOYI_ADMIN_BRANCH="${RUOYI_ADMIN_BRANCH:-main}"
-    
-    read -p "Please enter the tag for ruoyi-ai-web image [main]: " RUOYI_WEB_BRANCH
-    RUOYI_WEB_BRANCH="${RUOYI_WEB_BRANCH:-main}"
-    
-    # Update image tags in docker-compose.yaml file
-    echo "Updating image tags in docker-compose.yaml file..."
-    sed -i "s|ruoyi-ai-backend:latest|ruoyi-ai-backend:${RUOYI_AI_BRANCH}|g" ${DEPLOY_DIR}/docker-compose.yaml
-    sed -i "s|ruoyi-ai-admin:latest|ruoyi-ai-admin:${RUOYI_ADMIN_BRANCH}|g" ${DEPLOY_DIR}/docker-compose.yaml
-    sed -i "s|ruoyi-ai-web:latest|ruoyi-ai-web:${RUOYI_WEB_BRANCH}|g" ${DEPLOY_DIR}/docker-compose.yaml
-fi
-
-# Copy SQL file
-rm -rf ${DEPLOY_DIR}/mysql-init
-cp -pr ${SCRIPT_DIR}/mysql-init ${DEPLOY_DIR}/
-
-# Update SQL file with configuration values
-echo "Updating SQL configuration values..."
-sed -i "s|'weaviate', 'host', '127.0.0.1:6038'|'weaviate', 'host', 'weaviate:8080'|g" ${DEPLOY_DIR}/mysql-init/01_ruoyi-ai.sql
-sed -i "s|'weaviate', 'protocol', 'http'|'weaviate', 'protocol', '${WEAVIATE_PROTOCOL}'|g" ${DEPLOY_DIR}/mysql-init/01_ruoyi-ai.sql
-sed -i "s|'weaviate', 'classname', 'LocalKnowledge'|'weaviate', 'classname', '${WEAVIATE_CLASSNAME}'|g" ${DEPLOY_DIR}/mysql-init/01_ruoyi-ai.sql
-
-# Deploy using Docker Compose
-echo "Deploying with Docker Compose..."
-cd ${DEPLOY_DIR}
-docker-compose down
-docker-compose up -d
-
-echo "=================================================="
-echo "   RuoYi-AI Deployment Complete"
-echo "=================================================="
-echo ""
-echo "Your RuoYi-AI system has deployed the following services:"
-echo "- Backend API: http://localhost:${SERVER_PORT}"
-echo "- Admin UI: http://localhost:${ADMIN_PORT}"
-echo "- Web UI: http://localhost:${WEB_PORT}"
-echo "- Weaviate: http://localhost:${WEAVIATE_HTTP_PORT}"
-echo ""
-echo "All configurations have been customized according to your inputs."
-echo "Configuration files have been updated to use environment variables."
-echo ""
-echo "Thank you for using the RuoYi-AI interactive deployment script!"
+#!/bin/bash
+
+# RuoYi-AI Interactive Deployment Script
+# This script helps configure and deploy the RuoYi-AI project with custom settings
+
+set -e
+
+echo "=================================================="
+echo "   RuoYi-AI Interactive Deployment Script"
+echo "=================================================="
+echo ""
+echo "This script will guide you through the configuration and deployment of RuoYi-AI."
+echo "You will be prompted to enter various configuration parameters."
+echo ""
+
+SCRIPT_DIR=${PWD}
+
+# Prompt for deployment directory with default value
+read -p "Enter deployment directory [${PWD}/ruoyi-ai-deploy]: " user_input
+DEPLOY_DIR="${user_input:-${PWD}/ruoyi-ai-deploy}"
+
+# Check if directory exists
+if [ -d "$DEPLOY_DIR" ]; then
+    echo "Warning: Directory $DEPLOY_DIR already exists!"
+    read -p "Do you want to delete it? [y/N]: " delete_choice
+    
+    case "${delete_choice:-N}" in
+        [Yy]* )
+            echo "Deleting existing directory..."
+            rm -rf "$DEPLOY_DIR"
+            mkdir -p "$DEPLOY_DIR"
+            echo "Directory has been recreated."
+            ;;
+        * )
+            echo "Keeping existing directory."
+            ;;
+    esac
+else
+    mkdir -p "$DEPLOY_DIR"
+    echo "Directory created at $DEPLOY_DIR"
+fi
+
+echo "Selected deployment directory: $DEPLOY_DIR"
+
+mkdir -p ${DEPLOY_DIR}/{data/mysql,data/redis,data/logs,data/weaviate}
+cd ${DEPLOY_DIR}
+
+# Function to prompt for a value with a default
+prompt_with_default() {
+    local prompt=$1
+    local default=$2
+    local var_name=$3
+
+    read -p "${prompt} [${default}]: " input
+    if [ -z "$input" ]; then
+        eval "${var_name}=\"${default}\""
+    else
+        eval "${var_name}=\"${input}\""
+    fi
+}
+
+# Function to prompt for a password with masking
+prompt_for_password() {
+    local prompt=$1
+    local default=$2
+    local var_name=$3
+
+    read -sp "${prompt} [default: ${default}]: " input
+    echo ""
+    if [ -z "$input" ]; then
+        eval "${var_name}=\"${default}\""
+    else
+        eval "${var_name}=\"${input}\""
+    fi
+}
+
+# Function to escape special characters for sed replacement string
+escape_sed_replacement_string() {
+    # Escape &, \, and the delimiter | for the sed replacement string
+    echo "$1" | sed -e 's/[&\\|]/\\&/g'
+}
+
+echo "=== General Configuration ==="
+prompt_with_default "Time Zone" "Asia/Shanghai" "TZ"
+
+echo ""
+echo "=== MySQL Configuration ==="
+prompt_with_default "MySQL Port" "3306" "MYSQL_PORT"
+prompt_with_default "MySQL Database Name" "ruoyi-ai" "MYSQL_DATABASE"
+prompt_for_password "MySQL root Password" "root" "MYSQL_ROOT_PASSWORD"
+
+echo ""
+echo "=== Redis Configuration ==="
+prompt_with_default "Redis Port" "6379" "REDIS_PORT"
+prompt_for_password "Redis Password (leave empty for no password)" "" "REDIS_PASSWORD"
+prompt_with_default "Redis Database Index" "0" "REDIS_DATABASE"
+prompt_with_default "Redis Connection Timeout" "10s" "REDIS_TIMEOUT"
+
+echo ""
+echo "=== Backend Service Configuration ==="
+prompt_with_default "Backend Service Port" "6039" "SERVER_PORT"
+prompt_with_default "Backend Service Hostname" "ruoyi-backend" "BACKEND_HOST"
+prompt_with_default "Database Username" "root" "DB_USERNAME"
+prompt_for_password "Database Password" "root" "DB_PASSWORD"
+
+echo ""
+echo "=== Frontend Service Configuration ==="
+prompt_with_default "Admin UI Port" "8082" "ADMIN_PORT"
+prompt_with_default "Web UI Port" "8081" "WEB_PORT"
+
+echo ""
+echo "=== Weaviate Vector Database Configuration ==="
+prompt_with_default "Weaviate HTTP Port" "50050" "WEAVIATE_HTTP_PORT"
+prompt_with_default "Weaviate gRPC Port" "50051" "WEAVIATE_GRPC_PORT"
+prompt_with_default "Weaviate Query Limit" "25" "WEAVIATE_QUERY_LIMIT"
+prompt_with_default "Weaviate Anonymous Access" "true" "WEAVIATE_ANONYMOUS_ACCESS"
+prompt_with_default "Weaviate Data Path" "/var/lib/weaviate" "WEAVIATE_DATA_PATH"
+prompt_with_default "Weaviate Vectorizer Module" "none" "WEAVIATE_VECTORIZER_MODULE"
+prompt_with_default "Weaviate Modules" "text2vec-cohere,text2vec-huggingface,text2vec-palm,text2vec-openai,generative-openai,generative-cohere,generative-palm,ref2vec-centroid,reranker-cohere,qna-openai" "WEAVIATE_MODULES"
+prompt_with_default "Weaviate Cluster Hostname" "node1" "WEAVIATE_CLUSTER_HOSTNAME"
+prompt_with_default "Weaviate Protocol" "http" "WEAVIATE_PROTOCOL"
+prompt_with_default "Weaviate Class Name" "LocalKnowledge" "WEAVIATE_CLASSNAME"
+
+echo ""
+echo "=== Production Environment Configuration ==="
+prompt_with_default "Production Database URL" "jdbc:mysql://mysql:3306/ruoyi-ai?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8&autoReconnect=true&rewriteBatchedStatements=true" "PROD_DB_URL"
+prompt_with_default "Production Database Username" "root" "PROD_DB_USERNAME"
+prompt_for_password "Production Database Password" "root" "PROD_DB_PASSWORD"
+prompt_with_default "Production Redis Host" "redis" "PROD_REDIS_HOST"
+prompt_with_default "Production Redis Port" "6379" "PROD_REDIS_PORT"
+prompt_with_default "Production Redis Database" "0" "PROD_REDIS_DATABASE"
+prompt_for_password "Production Redis Password (leave empty for no password)" "" "PROD_REDIS_PASSWORD"
+prompt_with_default "Production Redis Timeout" "10s" "PROD_REDIS_TIMEOUT"
+
+echo ""
+echo "=== Frontend Configuration ==="
+prompt_with_default "Frontend API Base URL" "http://${BACKEND_HOST}:${SERVER_PORT}" "FRONTEND_API_BASE_URL"
+prompt_with_default "Frontend Development Server Port" "3000" "FRONTEND_DEV_PORT"
+
+# Copy template files
+cp ${SCRIPT_DIR}/template/.env.template ${DEPLOY_DIR}/.env
+cp ${SCRIPT_DIR}/template/docker-compose.yaml.template ${DEPLOY_DIR}/docker-compose.yaml
+
+echo "Template files copied to deployment directory."
+
+# Replace placeholders in .env file
+echo "Updating .env file with your configuration..."
+sed -i "s|{{TZ}}|$(escape_sed_replacement_string "${TZ}")|g" ${DEPLOY_DIR}/.env
+sed -i "s|{{MYSQL_ROOT_PASSWORD}}|$(escape_sed_replacement_string "${MYSQL_ROOT_PASSWORD}")|g" ${DEPLOY_DIR}/.env
+sed -i "s|{{MYSQL_DATABASE}}|$(escape_sed_replacement_string "${MYSQL_DATABASE}")|g" ${DEPLOY_DIR}/.env
+sed -i "s|{{MYSQL_PORT}}|$(escape_sed_replacement_string "${MYSQL_PORT}")|g" ${DEPLOY_DIR}/.env
+sed -i "s|{{REDIS_PORT}}|$(escape_sed_replacement_string "${REDIS_PORT}")|g" ${DEPLOY_DIR}/.env
+sed -i "s|{{REDIS_PASSWORD}}|$(escape_sed_replacement_string "${REDIS_PASSWORD}")|g" ${DEPLOY_DIR}/.env
+sed -i "s|{{REDIS_DATABASE}}|$(escape_sed_replacement_string "${REDIS_DATABASE}")|g" ${DEPLOY_DIR}/.env
+sed -i "s|{{REDIS_TIMEOUT}}|$(escape_sed_replacement_string "${REDIS_TIMEOUT}")|g" ${DEPLOY_DIR}/.env
+sed -i "s|{{SERVER_PORT}}|$(escape_sed_replacement_string "${SERVER_PORT}")|g" ${DEPLOY_DIR}/.env
+sed -i "s|{{DB_URL}}|$(escape_sed_replacement_string "jdbc:mysql://mysql:3306/${MYSQL_DATABASE}?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8&autoReconnect=true&rewriteBatchedStatements=true")|g" ${DEPLOY_DIR}/.env
+sed -i "s|{{DB_USERNAME}}|$(escape_sed_replacement_string "${DB_USERNAME}")|g" ${DEPLOY_DIR}/.env
+sed -i "s|{{DB_PASSWORD}}|$(escape_sed_replacement_string "${DB_PASSWORD}")|g" ${DEPLOY_DIR}/.env
+sed -i "s|{{BACKEND_HOST}}|$(escape_sed_replacement_string "${BACKEND_HOST}")|g" ${DEPLOY_DIR}/.env
+sed -i "s|{{ADMIN_PORT}}|$(escape_sed_replacement_string "${ADMIN_PORT}")|g" ${DEPLOY_DIR}/.env
+sed -i "s|{{WEB_PORT}}|$(escape_sed_replacement_string "${WEB_PORT}")|g" ${DEPLOY_DIR}/.env
+sed -i "s|{{FRONTEND_API_BASE_URL}}|$(escape_sed_replacement_string "${FRONTEND_API_BASE_URL}")|g" ${DEPLOY_DIR}/.env
+sed -i "s|{{FRONTEND_DEV_PORT}}|$(escape_sed_replacement_string "${FRONTEND_DEV_PORT}")|g" ${DEPLOY_DIR}/.env
+sed -i "s|{{WEAVIATE_HTTP_PORT}}|$(escape_sed_replacement_string "${WEAVIATE_HTTP_PORT}")|g" ${DEPLOY_DIR}/.env
+sed -i "s|{{WEAVIATE_GRPC_PORT}}|$(escape_sed_replacement_string "${WEAVIATE_GRPC_PORT}")|g" ${DEPLOY_DIR}/.env
+sed -i "s|{{WEAVIATE_QUERY_LIMIT}}|$(escape_sed_replacement_string "${WEAVIATE_QUERY_LIMIT}")|g" ${DEPLOY_DIR}/.env
+sed -i "s|{{WEAVIATE_ANONYMOUS_ACCESS}}|$(escape_sed_replacement_string "${WEAVIATE_ANONYMOUS_ACCESS}")|g" ${DEPLOY_DIR}/.env
+sed -i "s|{{WEAVIATE_DATA_PATH}}|$(escape_sed_replacement_string "${WEAVIATE_DATA_PATH}")|g" ${DEPLOY_DIR}/.env
+sed -i "s|{{WEAVIATE_VECTORIZER_MODULE}}|$(escape_sed_replacement_string "${WEAVIATE_VECTORIZER_MODULE}")|g" ${DEPLOY_DIR}/.env
+sed -i "s|{{WEAVIATE_MODULES}}|$(escape_sed_replacement_string "${WEAVIATE_MODULES}")|g" ${DEPLOY_DIR}/.env
+sed -i "s|{{WEAVIATE_CLUSTER_HOSTNAME}}|$(escape_sed_replacement_string "${WEAVIATE_CLUSTER_HOSTNAME}")|g" ${DEPLOY_DIR}/.env
+sed -i "s|{{WEAVIATE_PROTOCOL}}|$(escape_sed_replacement_string "${WEAVIATE_PROTOCOL}")|g" ${DEPLOY_DIR}/.env
+sed -i "s|{{WEAVIATE_CLASSNAME}}|$(escape_sed_replacement_string "${WEAVIATE_CLASSNAME}")|g" ${DEPLOY_DIR}/.env
+sed -i "s|{{PROD_DB_URL}}|$(escape_sed_replacement_string "${PROD_DB_URL}")|g" ${DEPLOY_DIR}/.env
+sed -i "s|{{PROD_DB_USERNAME}}|$(escape_sed_replacement_string "${PROD_DB_USERNAME}")|g" ${DEPLOY_DIR}/.env
+sed -i "s|{{PROD_DB_PASSWORD}}|$(escape_sed_replacement_string "${PROD_DB_PASSWORD}")|g" ${DEPLOY_DIR}/.env
+sed -i "s|{{PROD_REDIS_HOST}}|$(escape_sed_replacement_string "${PROD_REDIS_HOST}")|g" ${DEPLOY_DIR}/.env
+sed -i "s|{{PROD_REDIS_PORT}}|$(escape_sed_replacement_string "${PROD_REDIS_PORT}")|g" ${DEPLOY_DIR}/.env
+sed -i "s|{{PROD_REDIS_DATABASE}}|$(escape_sed_replacement_string "${PROD_REDIS_DATABASE}")|g" ${DEPLOY_DIR}/.env
+sed -i "s|{{PROD_REDIS_PASSWORD}}|$(escape_sed_replacement_string "${PROD_REDIS_PASSWORD}")|g" ${DEPLOY_DIR}/.env
+sed -i "s|{{PROD_REDIS_TIMEOUT}}|$(escape_sed_replacement_string "${PROD_REDIS_TIMEOUT}")|g" ${DEPLOY_DIR}/.env
+
+echo ".env file has been updated with your configuration."
+
+# Replace placeholders in docker-compose.yaml file
+echo "Updating docker-compose.yaml file with your configuration..."
+
+# Determine Redis command arguments based on password
+#if [ -n "${REDIS_PASSWORD}" ]; then
+#    REDIS_COMMAND_ARGS="--requirepass $(escape_sed_replacement_string "${REDIS_PASSWORD}")"
+#else
+#    REDIS_COMMAND_ARGS=""
+#fi
+
+sed -i "s|{{MYSQL_ROOT_PASSWORD}}|$(escape_sed_replacement_string "${MYSQL_ROOT_PASSWORD}")|g" ${DEPLOY_DIR}/docker-compose.yaml
+sed -i "s|{{MYSQL_DATABASE}}|$(escape_sed_replacement_string "${MYSQL_DATABASE}")|g" ${DEPLOY_DIR}/docker-compose.yaml
+sed -i "s|{{MYSQL_PORT}}|$(escape_sed_replacement_string "${MYSQL_PORT}")|g" ${DEPLOY_DIR}/docker-compose.yaml
+sed -i "s|{{REDIS_PORT}}|$(escape_sed_replacement_string "${REDIS_PORT}")|g" ${DEPLOY_DIR}/docker-compose.yaml
+sed -i "s|{{REDIS_COMMAND_ARGS}}|$(escape_sed_replacement_string "${REDIS_COMMAND_ARGS}")|g" ${DEPLOY_DIR}/docker-compose.yaml
+sed -i "s|{{WEAVIATE_HTTP_PORT}}|$(escape_sed_replacement_string "${WEAVIATE_HTTP_PORT}")|g" ${DEPLOY_DIR}/docker-compose.yaml
+sed -i "s|{{WEAVIATE_GRPC_PORT}}|$(escape_sed_replacement_string "${WEAVIATE_GRPC_PORT}")|g" ${DEPLOY_DIR}/docker-compose.yaml
+sed -i "s|{{WEAVIATE_QUERY_LIMIT}}|$(escape_sed_replacement_string "${WEAVIATE_QUERY_LIMIT}")|g" ${DEPLOY_DIR}/docker-compose.yaml
+sed -i "s|{{WEAVIATE_ANONYMOUS_ACCESS}}|$(escape_sed_replacement_string "${WEAVIATE_ANONYMOUS_ACCESS}")|g" ${DEPLOY_DIR}/docker-compose.yaml
+sed -i "s|{{WEAVIATE_DATA_PATH}}|$(escape_sed_replacement_string "${WEAVIATE_DATA_PATH}")|g" ${DEPLOY_DIR}/docker-compose.yaml
+sed -i "s|{{WEAVIATE_VECTORIZER_MODULE}}|$(escape_sed_replacement_string "${WEAVIATE_VECTORIZER_MODULE}")|g" ${DEPLOY_DIR}/docker-compose.yaml
+sed -i "s|{{WEAVIATE_MODULES}}|$(escape_sed_replacement_string "${WEAVIATE_MODULES}")|g" ${DEPLOY_DIR}/docker-compose.yaml
+sed -i "s|{{WEAVIATE_CLUSTER_HOSTNAME}}|$(escape_sed_replacement_string "${WEAVIATE_CLUSTER_HOSTNAME}")|g" ${DEPLOY_DIR}/docker-compose.yaml
+sed -i "s|{{SERVER_PORT}}|$(escape_sed_replacement_string "${SERVER_PORT}")|g" ${DEPLOY_DIR}/docker-compose.yaml
+sed -i "s|{{DB_URL}}|$(escape_sed_replacement_string "jdbc:mysql://mysql:3306/${MYSQL_DATABASE}?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8&autoReconnect=true&rewriteBatchedStatements=true")|g" ${DEPLOY_DIR}/docker-compose.yaml
+sed -i "s|{{DB_USERNAME}}|$(escape_sed_replacement_string "${DB_USERNAME}")|g" ${DEPLOY_DIR}/docker-compose.yaml
+sed -i "s|{{DB_PASSWORD}}|$(escape_sed_replacement_string "${DB_PASSWORD}")|g" ${DEPLOY_DIR}/docker-compose.yaml
+sed -i "s|{{REDIS_HOST}}|redis|g" ${DEPLOY_DIR}/docker-compose.yaml # REDIS_HOST is hardcoded to 'redis' in docker-compose
+sed -i "s|{{REDIS_DATABASE}}|$(escape_sed_replacement_string "${REDIS_DATABASE}")|g" ${DEPLOY_DIR}/docker-compose.yaml
+sed -i "s|{{REDIS_PASSWORD}}|$(escape_sed_replacement_string "${REDIS_PASSWORD}")|g" ${DEPLOY_DIR}/docker-compose.yaml
+sed -i "s|{{REDIS_TIMEOUT}}|$(escape_sed_replacement_string "${REDIS_TIMEOUT}")|g" ${DEPLOY_DIR}/docker-compose.yaml
+sed -i "s|{{TZ}}|$(escape_sed_replacement_string "${TZ}")|g" ${DEPLOY_DIR}/docker-compose.yaml
+sed -i "s|{{ADMIN_PORT}}|$(escape_sed_replacement_string "${ADMIN_PORT}")|g" ${DEPLOY_DIR}/docker-compose.yaml
+sed -i "s|{{WEB_PORT}}|$(escape_sed_replacement_string "${WEB_PORT}")|g" ${DEPLOY_DIR}/docker-compose.yaml
+
+echo ""
+echo "=== Build or Deploy Options ==="
+read -p "Do you want to build new images (B) or deploy directly using existing images (D)?[B/d]: " build_or_deploy_choice
+BUILD_CHOICE="${build_or_deploy_choice:-B}" # Default to Build
+
+if [[ "${BUILD_CHOICE}" == [Bb]* ]]; then
+    echo "Image build process in progress..."
+
+    # Clone ruoyi-ai-backend repositories
+    if [ -d "${DEPLOY_DIR}/ruoyi-ai" ]; then
+        echo "Directory ${DEPLOY_DIR}/ruoyi-ai already exists."
+        read -p "Do you want to delete it and clone a new copy?[Y/n]: " answer
+        case ${answer:-Y} in
+            [Yy]* )
+                echo "Deleting existing directory..."
+                rm -rf ${DEPLOY_DIR}/ruoyi-ai
+                echo "Cloning ruoyi-ai-backend repository..."
+                cd ${DEPLOY_DIR} && git clone https://github.com/ageerle/ruoyi-ai
+                
+                # Prompt for branch selection
+                read -p "Please enter the branch name for ruoyi-ai repository [main]: " RUOYI_AI_BRANCH
+                RUOYI_AI_BRANCH="${RUOYI_AI_BRANCH:-main}"
+                echo "Switching to branch: ${RUOYI_AI_BRANCH}"
+                cd ${DEPLOY_DIR}/ruoyi-ai && git checkout ${RUOYI_AI_BRANCH}
+                cd ..
+            ;;
+            [Nn]* )
+                echo "Skipping clone operation."
+            ;;
+            * )
+                echo "Invalid input. Skipping clone operation."
+            ;;
+        esac
+    else
+        echo "Cloning ruoyi-ai-backend repository..."
+        cd ${DEPLOY_DIR} && git clone https://github.com/ageerle/ruoyi-ai
+        
+        # Prompt for branch selection
+        read -p "Please enter the branch name for ruoyi-ai repository [main]: " RUOYI_AI_BRANCH
+        RUOYI_AI_BRANCH="${RUOYI_AI_BRANCH:-main}"
+        echo "Switching to branch: ${RUOYI_AI_BRANCH}"
+        cd ${DEPLOY_DIR}/ruoyi-ai && git checkout ${RUOYI_AI_BRANCH}
+        cd ..
+    fi
+
+    # Clone ruoyi-ai-admin repositories
+    if [ -d "${DEPLOY_DIR}/ruoyi-admin" ]; then
+        echo "Directory ${DEPLOY_DIR}/ruoyi-admin already exists."
+        read -p "Do you want to delete it and clone a new copy?[Y/n]: " answer
+        case ${answer:-Y} in
+            [Yy]* )
+                echo "Deleting existing directory..."
+                rm -rf ${DEPLOY_DIR}/ruoyi-admin
+                echo "Cloning ruoyi-admin repository..."
+                cd ${DEPLOY_DIR} && git clone https://github.com/ageerle/ruoyi-admin
+                
+                # Prompt for branch selection
+                read -p "Please enter the branch name for ruoyi-admin repository [main]: " RUOYI_ADMIN_BRANCH
+                RUOYI_ADMIN_BRANCH="${RUOYI_ADMIN_BRANCH:-main}"
+                echo "Switching to branch: ${RUOYI_ADMIN_BRANCH}"
+                cd ${DEPLOY_DIR}/ruoyi-admin && git checkout ${RUOYI_ADMIN_BRANCH}
+                cd ..
+            ;;
+            [Nn]* )
+                echo "Skipping clone operation."
+            ;;
+            * )
+                echo "Invalid input. Skipping clone operation."
+            ;;
+        esac
+    else
+        echo "Cloning ruoyi-ai-admin repository..."
+        cd ${DEPLOY_DIR} && git clone https://github.com/ageerle/ruoyi-admin
+        
+        # Prompt for branch selection
+        read -p "Please enter the branch name for ruoyi-admin repository [main]: " RUOYI_ADMIN_BRANCH
+        RUOYI_ADMIN_BRANCH="${RUOYI_ADMIN_BRANCH:-main}"
+        echo "Switching to branch: ${RUOYI_ADMIN_BRANCH}"
+        cd ${DEPLOY_DIR}/ruoyi-admin && git checkout ${RUOYI_ADMIN_BRANCH}
+        cd ..
+    fi
+
+    # Clone ruoyi-ai-web repositories
+    if [ -d "${DEPLOY_DIR}/ruoyi-web" ]; then
+        echo "Directory ${DEPLOY_DIR}/ruoyi-web already exists."
+        read -p "Do you want to delete it and clone a new copy?[Y/n]: " answer
+        case ${answer:-Y} in
+            [Yy]* )
+                echo "Deleting existing directory..."
+                rm -rf ${DEPLOY_DIR}/ruoyi-web
+                echo "Cloning ruoyi-ai-web repository..."
+                cd ${DEPLOY_DIR} && git clone https://github.com/ageerle/ruoyi-web
+                
+                # Prompt for branch selection
+                read -p "Please enter the branch name for ruoyi-web repository [main]: " RUOYI_WEB_BRANCH
+                RUOYI_WEB_BRANCH="${RUOYI_WEB_BRANCH:-main}"
+                echo "Switching to branch: ${RUOYI_WEB_BRANCH}"
+                cd ${DEPLOY_DIR}/ruoyi-web && git checkout ${RUOYI_WEB_BRANCH}
+                cd ..
+            ;;
+            [Nn]* )
+                echo "Skipping clone operation."
+            ;;
+            * )
+                echo "Invalid input. Skipping clone operation."
+            ;;
+        esac
+    else
+        echo "Cloning ruoyi-ai-web repository..."
+        cd ${DEPLOY_DIR} && git clone https://github.com/ageerle/ruoyi-web
+        
+        # Prompt for branch selection
+        read -p "Please enter the branch name for ruoyi-web repository [main]: " RUOYI_WEB_BRANCH
+        RUOYI_WEB_BRANCH="${RUOYI_WEB_BRANCH:-main}"
+        echo "Switching to branch: ${RUOYI_WEB_BRANCH}"
+        cd ${DEPLOY_DIR}/ruoyi-web && git checkout ${RUOYI_WEB_BRANCH}
+        cd ..
+    fi
+
+    # Update application-prod.yml file
+    echo "Updating application-prod.yml file with your configuration..."
+    # Copy application-prod.yml template
+    cp ${SCRIPT_DIR}/template/application-prod.yml.template ${DEPLOY_DIR}/ruoyi-ai/ruoyi-admin/src/main/resources/application-prod.yml
+
+    # Replace placeholders in application-prod.yml
+    sed -i "s|{{PROD_DB_URL}}|$(escape_sed_replacement_string "${PROD_DB_URL}")|g" ${DEPLOY_DIR}/ruoyi-ai/ruoyi-admin/src/main/resources/application-prod.yml
+    sed -i "s|{{PROD_DB_USERNAME}}|$(escape_sed_replacement_string "${PROD_DB_USERNAME}")|g" ${DEPLOY_DIR}/ruoyi-ai/ruoyi-admin/src/main/resources/application-prod.yml
+    sed -i "s|{{PROD_DB_PASSWORD}}|$(escape_sed_replacement_string "${PROD_DB_PASSWORD}")|g" ${DEPLOY_DIR}/ruoyi-ai/ruoyi-admin/src/main/resources/application-prod.yml
+    sed -i "s|{{PROD_REDIS_HOST}}|$(escape_sed_replacement_string "${PROD_REDIS_HOST}")|g" ${DEPLOY_DIR}/ruoyi-ai/ruoyi-admin/src/main/resources/application-prod.yml
+    sed -i "s|{{PROD_REDIS_PORT}}|$(escape_sed_replacement_string "${PROD_REDIS_PORT}")|g" ${DEPLOY_DIR}/ruoyi-ai/ruoyi-admin/src/main/resources/application-prod.yml
+    sed -i "s|{{PROD_REDIS_DATABASE}}|$(escape_sed_replacement_string "${PROD_REDIS_DATABASE}")|g" ${DEPLOY_DIR}/ruoyi-ai/ruoyi-admin/src/main/resources/application-prod.yml
+    if [ -z "${PROD_REDIS_PASSWORD}" ]; then
+      sed -i "s/^    password: {{PROD_REDIS_PASSWORD}}/#    password: {{PROD_REDIS_PASSWORD}}/g" ${DEPLOY_DIR}/ruoyi-ai/ruoyi-admin/src/main/resources/application-prod.yml
+    else
+      sed -i "s|{{PROD_REDIS_PASSWORD}}|$(escape_sed_replacement_string "${PROD_REDIS_PASSWORD}")|g" ${DEPLOY_DIR}/ruoyi-ai/ruoyi-admin/src/main/resources/application-prod.yml
+    fi
+    sed -i "s|{{PROD_REDIS_TIMEOUT}}|$(escape_sed_replacement_string "${PROD_REDIS_TIMEOUT}")|g" ${DEPLOY_DIR}/ruoyi-ai/ruoyi-admin/src/main/resources/application-prod.yml
+
+    # Update vite.config.mts file
+    echo "Updating vite.config.mts file with your configuration..."
+    sed -i "s|http://127.0.0.1:6039|${FRONTEND_API_BASE_URL}|g" ${DEPLOY_DIR}/ruoyi-admin/apps/web-antd/vite.config.mts
+    
+    # Update image tags in docker-compose.yaml file
+    echo "Updating image tags in docker-compose.yaml file..."
+    sed -i "s|ruoyi-ai-backend:latest|ruoyi-ai-backend:${RUOYI_AI_BRANCH}|g" ${DEPLOY_DIR}/docker-compose.yaml
+    sed -i "s|ruoyi-ai-admin:latest|ruoyi-ai-admin:${RUOYI_ADMIN_BRANCH}|g" ${DEPLOY_DIR}/docker-compose.yaml
+    sed -i "s|ruoyi-ai-web:latest|ruoyi-ai-web:${RUOYI_WEB_BRANCH}|g" ${DEPLOY_DIR}/docker-compose.yaml
+
+    # Create Nginx configuration files for frontend services
+    echo "Copying Admin UI Nginx configuration template to temporary location..."
+    cp ${SCRIPT_DIR}/template/nginx.admin.conf.template ${DEPLOY_DIR}/nginx.admin.conf.tmp
+
+    echo "Updating Admin UI Nginx configuration in temporary file..."
+    sed -i "s|{{BACKEND_HOST}}|$(escape_sed_replacement_string "${BACKEND_HOST}")|g" ${DEPLOY_DIR}/nginx.admin.conf.tmp
+    sed -i "s|{{SERVER_PORT}}|$(escape_sed_replacement_string "${SERVER_PORT}")|g" ${DEPLOY_DIR}/nginx.admin.conf.tmp
+
+    echo "Moving updated Admin UI Nginx configuration to final location..."
+    mv ${DEPLOY_DIR}/nginx.admin.conf.tmp ${DEPLOY_DIR}/ruoyi-admin/nginx.conf
+
+    echo "Copying Web UI Nginx configuration template to temporary location..."
+    cp ${SCRIPT_DIR}/template/nginx.web.conf.template ${DEPLOY_DIR}/nginx.web.conf.tmp
+
+    echo "Updating Web UI Nginx configuration in temporary file..."
+    sed -i "s|{{BACKEND_HOST}}|$(escape_sed_replacement_string "${BACKEND_HOST}")|g" ${DEPLOY_DIR}/nginx.web.conf.tmp
+    sed -i "s|{{SERVER_PORT}}|$(escape_sed_replacement_string "${SERVER_PORT}")|g" ${DEPLOY_DIR}/nginx.web.conf.tmp
+
+    echo "Moving updated Web UI Nginx configuration to final location..."
+    mv ${DEPLOY_DIR}/nginx.web.conf.tmp ${DEPLOY_DIR}/ruoyi-web/nginx.conf
+
+    # Create Dockerfiles for frontend services
+    echo "Creating Dockerfile for Admin UI..."
+    cat > ${DEPLOY_DIR}/ruoyi-admin/Dockerfile << EOF
+FROM nginx:1.25-alpine
+
+COPY dist/ /usr/share/nginx/html/
+COPY nginx.conf /etc/nginx/conf.d/default.conf
+
+EXPOSE 80
+
+CMD ["nginx", "-g", "daemon off;"]
+EOF
+
+    echo "Creating Dockerfile for Web UI..."
+    cat > ${DEPLOY_DIR}/ruoyi-web/Dockerfile << EOF
+FROM nginx:1.25-alpine
+
+COPY dist/ /usr/share/nginx/html/
+COPY nginx.conf /etc/nginx/conf.d/default.conf
+
+EXPOSE 80
+
+CMD ["nginx", "-g", "daemon off;"]
+EOF
+
+    # Build backend service
+    echo "Building Ruoyi-AI backend service..."
+    cd ${DEPLOY_DIR}/ruoyi-ai
+    docker run -it --rm --name build-ruoyi-ai-backend -v ${DEPLOY_DIR}/ruoyi-ai:/code --entrypoint=/bin/bash maven:3.9.9-eclipse-temurin-17-alpine -c "cd /code && mvn clean package -P prod"
+
+    # Build frontend Admin service
+    echo "Building Ruoyi-AI frontend Admin service..."
+    cd ${DEPLOY_DIR}/ruoyi-admin
+    docker run -it --rm --name build-ruoyi-ai-admin -v ${DEPLOY_DIR}/ruoyi-admin:/app -w /app node:20 sh -c "npm install -g pnpm && pnpm install && pnpm build"
+
+    # Build frontend Web service
+    echo "Building Ruoyi-AI frontend Web service..."
+    cd ${DEPLOY_DIR}/ruoyi-web
+    docker run -it --rm --name build-ruoyi-ai-web -v ${DEPLOY_DIR}/ruoyi-web:/app -w /app node:20 sh -c "npm install -g pnpm && pnpm install && pnpm build"
+
+    # Build Docker images
+    echo "Building Ruoyi-AI Backend Docker images..."
+    cd ${DEPLOY_DIR}/ruoyi-ai
+    rm -rf temp
+    mkdir temp
+    cp ./ruoyi-admin/target/ruoyi-admin.jar temp/
+    cd temp/
+    cat > Dockerfile << EOF
+FROM openjdk:17-jdk-slim
+WORKDIR /app
+COPY ruoyi-admin.jar /app/ruoyi-admin.jar
+EXPOSE ${SERVER_PORT}
+ENTRYPOINT ["java","-jar","ruoyi-admin.jar","--spring.profiles.active=prod"]
+EOF
+    docker build -t ruoyi-ai-backend:${RUOYI_AI_BRANCH} .
+    cd ..
+
+    echo "Building Ruoyi-AI Admin Docker images..."
+    cd ${DEPLOY_DIR}/ruoyi-admin
+    rm -rf temp
+    mkdir temp
+    cp ./apps/web-antd/dist.zip temp/
+    cp Dockerfile temp/
+    cp nginx.conf temp/
+    cd temp/
+    unzip dist.zip -d dist
+    rm -f dist.zip
+    docker build -t ruoyi-ai-admin:${RUOYI_ADMIN_BRANCH} .
+    cd ..
+
+    echo "Building Ruoyi-AI Web Docker images..."
+    cd ${DEPLOY_DIR}/ruoyi-web
+    rm -rf temp
+    mkdir temp
+    cp -pr ${DEPLOY_DIR}/ruoyi-web/dist temp/
+    cp Dockerfile temp/
+    cp nginx.conf temp/
+    cd temp/
+    docker build -t ruoyi-ai-web:${RUOYI_WEB_BRANCH} .
+    cd ..
+else
+    echo "Skipping image build process. Deploying directly using existing images..."
+    
+    # Prompt for branch names to use as image tags
+    read -p "Please enter the tag for ruoyi-ai-backend image [main]: " RUOYI_AI_BRANCH
+    RUOYI_AI_BRANCH="${RUOYI_AI_BRANCH:-main}"
+    
+    read -p "Please enter the tag for ruoyi-ai-admin image [main]: " RUOYI_ADMIN_BRANCH
+    RUOYI_ADMIN_BRANCH="${RUOYI_ADMIN_BRANCH:-main}"
+    
+    read -p "Please enter the tag for ruoyi-ai-web image [main]: " RUOYI_WEB_BRANCH
+    RUOYI_WEB_BRANCH="${RUOYI_WEB_BRANCH:-main}"
+    
+    # Update image tags in docker-compose.yaml file
+    echo "Updating image tags in docker-compose.yaml file..."
+    sed -i "s|ruoyi-ai-backend:latest|ruoyi-ai-backend:${RUOYI_AI_BRANCH}|g" ${DEPLOY_DIR}/docker-compose.yaml
+    sed -i "s|ruoyi-ai-admin:latest|ruoyi-ai-admin:${RUOYI_ADMIN_BRANCH}|g" ${DEPLOY_DIR}/docker-compose.yaml
+    sed -i "s|ruoyi-ai-web:latest|ruoyi-ai-web:${RUOYI_WEB_BRANCH}|g" ${DEPLOY_DIR}/docker-compose.yaml
+fi
+
+# Copy SQL file
+rm -rf ${DEPLOY_DIR}/mysql-init
+cp -pr ${SCRIPT_DIR}/mysql-init ${DEPLOY_DIR}/
+
+# Update SQL file with configuration values
+echo "Updating SQL configuration values..."
+sed -i "s|'weaviate', 'host', '127.0.0.1:6038'|'weaviate', 'host', 'weaviate:8080'|g" ${DEPLOY_DIR}/mysql-init/01_ruoyi-ai.sql
+sed -i "s|'weaviate', 'protocol', 'http'|'weaviate', 'protocol', '${WEAVIATE_PROTOCOL}'|g" ${DEPLOY_DIR}/mysql-init/01_ruoyi-ai.sql
+sed -i "s|'weaviate', 'classname', 'LocalKnowledge'|'weaviate', 'classname', '${WEAVIATE_CLASSNAME}'|g" ${DEPLOY_DIR}/mysql-init/01_ruoyi-ai.sql
+
+# Deploy using Docker Compose
+echo "Deploying with Docker Compose..."
+cd ${DEPLOY_DIR}
+docker-compose down
+docker-compose up -d
+
+echo "=================================================="
+echo "   RuoYi-AI Deployment Complete"
+echo "=================================================="
+echo ""
+echo "Your RuoYi-AI system has deployed the following services:"
+echo "- Backend API: http://localhost:${SERVER_PORT}"
+echo "- Admin UI: http://localhost:${ADMIN_PORT}"
+echo "- Web UI: http://localhost:${WEB_PORT}"
+echo "- Weaviate: http://localhost:${WEAVIATE_HTTP_PORT}"
+echo ""
+echo "All configurations have been customized according to your inputs."
+echo "Configuration files have been updated to use environment variables."
+echo ""
+echo "Thank you for using the RuoYi-AI interactive deployment script!"

--
Gitblit v1.9.3