@echo off setlocal enabledelayedexpansion echo Current directory: %cd% where docker where scp where where set SSH_SERVER_IP=192.168.10.110 set SSH_SERVER_USER=root set SSH_CERT_PATH=%USERPROFILE%\.ssh\root_jarviceai set IMAGE_NAME=aitools-amd64:latest set ENV_FILE=.env set COMPOSE_FILE=docker-compose.yaml set PLATFORM=linux/amd64/v3 REM === Общие настройки === set DOCKERFILE=.\aitools\Dockerfile set DOCKER_PATH=.\aitools set IMAGE_TAR_NAME=image-aitools.tar set IMAGE_TAR_GZ_NAME=image-aitools.tar.gz REM REM === Проверка запущен ли Docker Daemon === REM echo Checking if Docker is running... REM docker version >nul 2>&1 REM if !errorlevel! neq 0 ( REM echo ERROR: Docker is not running or not installed! REM echo Please start Docker Desktop and try again. REM echo. REM echo If Docker is installed, ensure it's running in the system tray. REM echo You may need to restart Docker Desktop. REM pause REM exit /b 1 REM ) REM === Проверка наличия .env === if not exist "%ENV_FILE%" ( echo Error: %ENV_FILE% not found! pause exit /b 1 ) REM === Собираем образы === set TMP_ENV_ARGS=tmp_env_args.txt > "%TMP_ENV_ARGS%" ( for /f "usebackq tokens=*" %%a in ("%ENV_FILE%") do ( echo --build-arg %%a ) ) set BUILD_ARGS= for /f "usebackq tokens=*" %%a in ("%TMP_ENV_ARGS%") do ( set BUILD_ARGS=!BUILD_ARGS! %%a ) echo Building image locally with build args... docker build --platform "%PLATFORM%" -f "%DOCKERFILE%" -t "%IMAGE_NAME%" --progress=plain !BUILD_ARGS! "%DOCKER_PATH%" REM === Экспорт образов в tar === echo Creating tar archives of images... docker save -o "%IMAGE_TAR_NAME%" "%IMAGE_NAME%" REM === Сжатие gzip (если доступно) === where gzip >nul if !errorlevel! equ 0 ( echo Compressing images with gzip... gzip "%IMAGE_TAR_NAME%" set IMAGE=%IMAGE_TAR_GZ_NAME% ) else ( echo Warning: gzip not found. Using uncompressed .tar files. set IMAGE=%IMAGE_TAR_NAME% ) REM === Передача на сервер === echo Transferring images and files to server... scp -i "%SSH_CERT_PATH%" "%IMAGE%" "%SSH_SERVER_USER%@%SSH_SERVER_IP%:/tmp/" if errorlevel 1 ( echo Error: scp failed to upload %IMAGE% pause exit /b 1 ) scp -i "%SSH_CERT_PATH%" "%COMPOSE_FILE%" "%SSH_SERVER_USER%@%SSH_SERVER_IP%:/tmp/docker-compose.yaml" if errorlevel 1 ( echo Error: scp failed to upload %COMPOSE_FILE% pause exit /b 1 ) scp -i "%SSH_CERT_PATH%" "%ENV_FILE%" "%SSH_SERVER_USER%@%SSH_SERVER_IP%:/tmp/.env" if errorlevel 1 ( echo Error: scp failed to upload %ENV_FILE% pause exit /b 1 ) REM === Выполнение на сервере === echo Creating directory on server and moving files... ssh -i "%SSH_CERT_PATH%" "%SSH_SERVER_USER%@%SSH_SERVER_IP%" "mkdir -p /opt/aitools && mv -f /tmp/docker-compose.yaml /opt/aitools/docker-compose.yaml && mv -f /tmp/.env /opt/aitools/.env && echo 'Files moved'" echo Loading images on server and starting... ssh -i "%SSH_CERT_PATH%" "%SSH_SERVER_USER%@%SSH_SERVER_IP%" "docker stop aitools 2>/dev/null || true && docker rm aitools 2>/dev/null || true && docker load < /tmp/%IMAGE% && rm /tmp/%IMAGE% && cd /opt/aitools && docker compose up -d && echo 'Deployment completed!'" REM === Очистка локальных файлов === echo Cleaning local archives... del /q "%IMAGE_TAR_NAME%" "%TMP_ENV_ARGS%" 2>nul del /q "%IMAGE_TAR_GZ_NAME%" 2>nul echo Deployment completed! pause