99 行
3.4 KiB
Batchfile
99 行
3.4 KiB
Batchfile
@echo off
|
||
REM ============================================================
|
||
REM kdbx-viewer 一键部署脚本(Windows / cmd)
|
||
REM 功能:拉取 git 代码 -> 生成/校验 .env -> 准备目录 -> docker compose 构建并启动
|
||
REM
|
||
REM 用法:
|
||
REM deploy.bat 使用默认仓库与当前目录
|
||
REM deploy.bat D:\kdbx 指定部署目录
|
||
REM set REPO=https://... && deploy.bat 指定 git 仓库地址
|
||
REM ============================================================
|
||
setlocal EnableDelayedExpansion
|
||
|
||
REM 默认仓库地址(可被环境变量 REPO 覆盖)
|
||
if not defined REPO set "REPO=http://git.iwali.top/wangchuanli/kdbx-viewer.git"
|
||
REM 部署目录(第一个参数,默认当前目录下的 kdbx-viewer)
|
||
if "%~1"=="" (set "DEPLOY_DIR=kdbx-viewer") else (set "DEPLOY_DIR=%~1")
|
||
|
||
echo ============================================
|
||
echo kdbx-viewer 一键部署
|
||
echo 仓库: %REPO%
|
||
echo 目录: %DEPLOY_DIR%
|
||
echo ============================================
|
||
|
||
REM ---------- 1. 拉取代码 ----------
|
||
if exist "%DEPLOY_DIR%\.git" (
|
||
echo [1/5] 已存在仓库,执行 git pull ...
|
||
git -C "%DEPLOY_DIR%" pull --ff-only || git -C "%DEPLOY_DIR%" pull
|
||
) else (
|
||
echo [1/5] 克隆仓库 %REPO% ...
|
||
git clone "%REPO%" "%DEPLOY_DIR%"
|
||
)
|
||
cd /d "%DEPLOY_DIR%"
|
||
|
||
REM ---------- 2. 校验/生成 .env ----------
|
||
echo [2/5] 检查 .env ...
|
||
if not exist ".env" (
|
||
if not exist ".env.example" (
|
||
echo 缺少 .env.example,无法生成 .env,请手动创建。 1>&2
|
||
exit /b 1
|
||
)
|
||
copy .env.example .env >nul
|
||
echo 已生成 .env(基于 .env.example)。
|
||
echo !!! 请先编辑 .env 填写敏感项,再重新运行本脚本:
|
||
findstr /b "APP_PW_DYNAMIC= APP_PW_STATIC= SESSION_SECRET=" .env
|
||
echo (将占位值替换为真实强口令/随机串)
|
||
exit /b 1
|
||
)
|
||
|
||
REM 校验关键敏感项是否仍为占位/空
|
||
set "NEED_EDIT=0"
|
||
for %%K in (APP_PW_DYNAMIC APP_PW_STATIC SESSION_SECRET) do (
|
||
for /f "tokens=2* delims==" %%V in ('findstr /b "%%K=" .env') do (
|
||
set "VAL=%%V"
|
||
if "!VAL!"=="" set "NEED_EDIT=1"
|
||
if "!VAL!"=="你的固定部分" set "NEED_EDIT=1"
|
||
if "!VAL!"=="改成你的强口令" set "NEED_EDIT=1"
|
||
if "!VAL!"=="改成随机长字符串" set "NEED_EDIT=1"
|
||
)
|
||
)
|
||
if "!NEED_EDIT!"=="1" (
|
||
echo .env 中仍存在未设置的占位项,请编辑补全后重新运行 deploy.bat
|
||
exit /b 1
|
||
)
|
||
|
||
REM ---------- 3. 准备挂载目录 ----------
|
||
echo [3/5] 准备挂载目录 vault/ logs/ ssl/ ...
|
||
if not exist vault mkdir vault
|
||
if not exist logs mkdir logs
|
||
if not exist ssl mkdir ssl
|
||
|
||
REM ---------- 4. 环境前置检查 ----------
|
||
echo [4/5] 检查 docker / docker compose ...
|
||
where docker >nul 2>nul
|
||
if errorlevel 1 (
|
||
echo 未检测到 docker,请先安装 Docker Desktop:https://www.docker.com/products/docker-desktop/
|
||
exit /b 1
|
||
)
|
||
docker compose version >nul 2>nul
|
||
if errorlevel 1 (
|
||
echo 未检测到 docker compose v2,请升级 Docker Desktop 或安装 compose 插件。
|
||
exit /b 1
|
||
)
|
||
|
||
REM ---------- 5. 构建并启动 ----------
|
||
echo [5/5] docker compose 构建并启动(后台)...
|
||
docker compose up -d --build
|
||
|
||
echo.
|
||
echo 部署完成。访问地址(默认 HTTPS,证书缺失时自动生成自签):
|
||
for /f "tokens=2* delims==" %%P in ('findstr /b "PORT=" .env') do set "PORT=%%P"
|
||
if not defined PORT set "PORT=3000"
|
||
echo https://localhost:!PORT!
|
||
echo.
|
||
echo 常用命令:
|
||
echo 查看日志: docker compose logs -f
|
||
echo 停止服务: docker compose down
|
||
echo 更新代码: deploy.bat
|
||
endlocal
|