111 lines
3.5 KiB
Batchfile
111 lines
3.5 KiB
Batchfile
@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 |