Files
aivideo/start-aivideo.bat

164 lines
4.0 KiB
Batchfile

@echo off
setlocal
set "ROOT=%~dp0"
cd /d "%ROOT%"
echo [1/6] Checking Docker...
set "DOCKER_EXE="
set "DOCKER_DESKTOP_EXE="
call :resolve_docker
if not defined DOCKER_EXE (
echo Docker CLI was not found.
echo Install Docker Desktop, or add docker.exe to PATH, then rerun this script.
pause
exit /b 1
)
call :ensure_docker_ready
if errorlevel 1 exit /b 1
echo [2/6] Starting mysql, redis and minio...
call "%DOCKER_EXE%" compose up -d mysql redis minio
if errorlevel 1 (
echo Failed to start docker services.
pause
exit /b 1
)
if not exist "%ROOT%backend\.env" (
echo Missing backend\.env
pause
exit /b 1
)
set "PYTHON_CMD="
where py >nul 2>nul
if not errorlevel 1 set "PYTHON_CMD=py -3"
if not defined PYTHON_CMD (
where python >nul 2>nul
if not errorlevel 1 set "PYTHON_CMD=python"
)
if not defined PYTHON_CMD (
echo Python was not found in PATH.
pause
exit /b 1
)
if not exist "%ROOT%backend\.venv\Scripts\python.exe" (
echo [3/6] Creating backend virtual environment...
call %PYTHON_CMD% -m venv "%ROOT%backend\.venv"
if errorlevel 1 (
echo Failed to create backend virtual environment.
pause
exit /b 1
)
echo [4/6] Installing backend dependencies...
call "%ROOT%backend\.venv\Scripts\python.exe" -m pip install --disable-pip-version-check -r "%ROOT%backend\requirements.txt"
if errorlevel 1 (
echo Failed to install backend dependencies.
pause
exit /b 1
)
) else (
echo [3/6] Backend virtual environment already exists.
)
if not exist "%ROOT%node_modules" (
echo [5/6] Installing frontend dependencies...
call npm install
if errorlevel 1 (
echo Failed to install frontend dependencies.
pause
exit /b 1
)
) else (
echo [5/6] Frontend dependencies already exist.
)
echo [6/6] Starting backend and unified frontend...
start "AIVideo Backend" cmd /k "cd /d ""%ROOT%backend"" && ""%ROOT%backend\.venv\Scripts\python.exe"" -m uvicorn app.main:app --reload --host 0.0.0.0 --port 8000"
start "AIVideo Frontend" cmd /k "cd /d ""%ROOT%"" && npm run dev"
echo.
echo User UI: http://localhost:3000
echo Admin UI: http://localhost:3000/admin/login
echo API: http://localhost:8000
echo.
echo Two windows have been opened for backend and frontend.
pause
goto :eof
:resolve_docker
for /f "delims=" %%I in ('where docker 2^>nul') do (
if not defined DOCKER_EXE set "DOCKER_EXE=%%~fI"
)
if defined DOCKER_EXE goto resolve_desktop
for %%I in (
"%ProgramFiles%\Docker\Docker\resources\bin\docker.exe"
"%ProgramFiles%\Docker\Docker\resources\bin\com.docker.cli.exe"
"%ProgramW6432%\Docker\Docker\resources\bin\docker.exe"
"%ProgramW6432%\Docker\Docker\resources\bin\com.docker.cli.exe"
"%LocalAppData%\Programs\Docker\Docker\resources\bin\docker.exe"
"%LocalAppData%\Programs\Docker\Docker\resources\bin\com.docker.cli.exe"
) do (
if exist "%%~fI" (
set "DOCKER_EXE=%%~fI"
goto resolve_desktop
)
)
:resolve_desktop
for %%I in (
"%ProgramFiles%\Docker\Docker\Docker Desktop.exe"
"%ProgramW6432%\Docker\Docker\Docker Desktop.exe"
"%LocalAppData%\Programs\Docker\Docker\Docker Desktop.exe"
) do (
if exist "%%~fI" (
set "DOCKER_DESKTOP_EXE=%%~fI"
goto :eof
)
)
goto :eof
:ensure_docker_ready
call "%DOCKER_EXE%" info >nul 2>nul
if not errorlevel 1 exit /b 0
if defined DOCKER_DESKTOP_EXE (
echo Docker Desktop is installed but not ready. Starting it now...
start "" "%DOCKER_DESKTOP_EXE%"
call :wait_for_docker 60
if not errorlevel 1 exit /b 0
echo Docker Desktop did not become ready in time.
echo Wait for Docker Desktop to finish starting, then rerun this script.
pause
exit /b 1
)
echo Docker CLI was found, but the Docker engine is not ready.
echo Start Docker Desktop or Docker Engine, then rerun this script.
pause
exit /b 1
:wait_for_docker
set "DOCKER_WAIT_REMAINING=%~1"
if not defined DOCKER_WAIT_REMAINING set "DOCKER_WAIT_REMAINING=60"
:wait_for_docker_loop
call "%DOCKER_EXE%" info >nul 2>nul
if not errorlevel 1 exit /b 0
if %DOCKER_WAIT_REMAINING% LEQ 0 exit /b 1
timeout /t 2 /nobreak >nul
set /a DOCKER_WAIT_REMAINING-=2
goto wait_for_docker_loop