From 80c62f8c11824b6e73233b57d086106aac74067b Mon Sep 17 00:00:00 2001
From: Linkwei <link.xie@zilliz.com>
Date: Fri, 29 Nov 2024 15:06:37 +0800
Subject: [PATCH] enhance: add windows startup script for milvus docker
 deployment (#38089)
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

[enhance:add window bat milvus standalone ](enhance: add windows startup
script for milvus docker deployment)
issue:https://github.com/milvus-io/milvus/issues/38098

Signed-off-by: zilliz <zilliz@zillizdeMacBook-Pro-6.local>
Co-authored-by: zilliz <zilliz@zillizdeMacBook-Pro-6.local>
---
 scripts/standalone_embed.bat | 145 +++++++++++++++++++++++++++++++++++
 1 file changed, 145 insertions(+)
 create mode 100644 scripts/standalone_embed.bat

diff --git a/scripts/standalone_embed.bat b/scripts/standalone_embed.bat
new file mode 100644
index 0000000000..3dfe24e30d
--- /dev/null
+++ b/scripts/standalone_embed.bat
@@ -0,0 +1,145 @@
+@REM  Licensed to the LF AI & Data foundation under one
+@REM  or more contributor license agreements. See the NOTICE file
+@REM  distributed with this work for additional information
+@REM  regarding copyright ownership. The ASF licenses this file
+@REM  to you under the Apache License, Version 2.0 (the
+@REM  "License"); you may not use this file except in compliance
+@REM  with the License. You may obtain a copy of the License at
+@REM 
+@REM    http://www.apache.org/licenses/LICENSE-2.0
+@REM 
+@REM  Unless required by applicable law or agreed to in writing, software
+@REM  distributed under the License is distributed on an "AS IS" BASIS,
+@REM  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+@REM  See the License for the specific language governing permissions and
+@REM  limitations under the License.
+
+@echo off
+setlocal enabledelayedexpansion
+
+:main
+if "%1"=="" (
+    echo Please use standalone_embed.bat restart^|start^|stop^|delete
+    exit /b 1
+)
+
+if "%1"=="restart" (
+    call :stop
+    call :start
+) else if "%1"=="start" (
+    call :start
+) else if "%1"=="stop" (
+    call :stop
+) else if "%1"=="delete" (
+    call :delete
+) else (
+    echo Unknown command.
+    echo Please use standalone_embed.bat restart^|start^|stop^|upgrade^|delete
+    exit /b 1
+)
+goto :eof
+
+:run_embed
+(
+echo listen-client-urls: http://0.0.0.0:2379
+echo advertise-client-urls: http://0.0.0.0:2379
+echo quota-backend-bytes: 4294967296
+echo auto-compaction-mode: revision
+echo auto-compaction-retention: '1000'
+) > embedEtcd.yaml
+
+(
+echo # Extra config to override default milvus.yaml
+) > user.yaml
+
+docker run -d ^
+    --name milvus-standalone ^
+    --security-opt seccomp:unconfined ^
+    -e ETCD_USE_EMBED=true ^
+    -e ETCD_DATA_DIR=/var/lib/milvus/etcd ^
+    -e ETCD_CONFIG_PATH=/milvus/configs/embedEtcd.yaml ^
+    -e COMMON_STORAGETYPE=local ^
+    -v "%cd%\volumes\milvus:/var/lib/milvus" ^
+    -v "%cd%\embedEtcd.yaml:/milvus/configs/embedEtcd.yaml" ^
+    -v "%cd%\user.yaml:/milvus/configs/user.yaml" ^
+    -p 19530:19530 ^
+    -p 9091:9091 ^
+    -p 2379:2379 ^
+    --health-cmd="curl -f http://localhost:9091/healthz" ^
+    --health-interval=30s ^
+    --health-start-period=90s ^
+    --health-timeout=20s ^
+    --health-retries=3 ^
+    milvusdb/milvus:v2.4.13 ^
+    milvus run standalone >nul
+if %errorlevel% neq 0 (
+    echo Failed to start Milvus container.
+    exit /b 1
+)
+
+goto :eof
+
+:wait_for_milvus_running
+echo Wait for Milvus Starting...
+:wait_loop
+for /f "tokens=*" %%A in ('docker ps ^| findstr "milvus-standalone" ^| findstr "healthy"') do set running=1
+if "!running!"=="1" (
+    echo Start successfully.
+    echo To change the default Milvus configuration, edit user.yaml and restart the service.
+    goto :eof
+)
+timeout /t 1 >nul
+goto wait_loop
+
+:start
+for /f "tokens=*" %%A in ('docker ps ^| findstr "milvus-standalone" ^| findstr "healthy"') do (
+    echo Milvus is running.
+    exit /b 0
+)
+
+for /f "tokens=*" %%A in ('docker ps -a ^| findstr "milvus-standalone"') do set container_exists=1
+if defined container_exists (
+    docker start milvus-standalone >nul
+) else (
+    call :run_embed
+)
+
+if %errorlevel% neq 0 (
+    echo Start failed.
+    exit /b 1
+)
+
+call :wait_for_milvus_running
+goto :eof
+
+:stop
+docker stop milvus-standalone >nul
+if %errorlevel% neq 0 (
+    echo Stop failed.
+    exit /b 1
+)
+echo Stop successfully.
+goto :eof
+
+:delete_container
+for /f "tokens=*" %%A in ('docker ps ^| findstr "milvus-standalone"') do (
+    echo Please stop Milvus service before delete.
+    exit /b 1
+)
+docker rm milvus-standalone >nul
+if %errorlevel% neq 0 (
+    echo Delete Milvus container failed.
+    exit /b 1
+)
+echo Delete Milvus container successfully.
+goto :eof
+
+:delete
+call :delete_container
+rmdir /s /q "%cd%\volumes"
+del /q embedEtcd.yaml
+del /q user.yaml
+echo Delete successfully.
+goto :eof
+
+:EOF
\ No newline at end of file