文件

91 行
3.1 KiB
Bash

此文件含有模棱两可的 Unicode 字符
此文件含有可能会与其他字符混淆的 Unicode 字符。 如果您是想特意这样的,可以安全地忽略该警告。 使用 Escape 按钮显示他们。
#!/usr/bin/env bash
#
# kdbx-viewer 一键部署脚本(Linux / macOS)
# 功能:拉取 git 代码 -> 生成/校验 .env -> 准备挂载目录 -> docker compose 构建并启动
#
# 用法:
# ./deploy.sh # 使用默认仓库与当前目录
# ./deploy.sh /opt/kdbx # 指定部署目录
# REPO=https://... ./deploy.sh # 指定 git 仓库地址
#
set -euo pipefail
# 默认仓库地址(可被环境变量 REPO 覆盖)
REPO="${REPO:-http://git.iwali.top/wangchuanli/kdbx-viewer.git}"
# 部署目录(第一个参数,默认 ./kdbx-viewer)
DEPLOY_DIR="${1:-kdbx-viewer}"
echo "============================================"
echo " kdbx-viewer 一键部署"
echo " 仓库: $REPO"
echo " 目录: $DEPLOY_DIR"
echo "============================================"
# ---------- 1. 拉取代码 ----------
if [ -d "$DEPLOY_DIR/.git" ]; then
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"
fi
cd "$DEPLOY_DIR"
# ---------- 2. 校验/生成 .env ----------
echo "[2/5] 检查 .env ..."
if [ ! -f .env ]; then
if [ ! -f .env.example ]; then
echo "缺少 .env.example,无法生成 .env,请手动创建。" >&2
exit 1
fi
cp .env.example .env
echo "已生成 .env(基于 .env.example)。"
echo "!!! 请先编辑 .env 填写以下敏感项,再重新运行本脚本:"
grep -nE '^APP_PW_DYNAMIC=|^APP_PW_STATIC=|^SESSION_SECRET=' .env || true
echo "(将占位值替换为真实强口令/随机串)"
exit 1
fi
# 校验关键敏感项是否为空或仍为占位
need_edit=0
for key in APP_PW_DYNAMIC APP_PW_STATIC SESSION_SECRET; do
val="$(grep -E "^${key}=" .env | tail -1 | cut -d= -f2-)"
if [ -z "${val:-}" ] || [ "${val}" = "你的固定部分" ] || [ "${val}" = "改成你的强口令" ] || [ "${val}" = "改成随机长字符串" ]; then
echo " [警告] .env 中 $key 未正确设置($val)"
need_edit=1
fi
done
if [ "$need_edit" -eq 1 ]; then
echo "请编辑 .env 补全敏感项后重新运行 ./deploy.sh"
exit 1
fi
# ---------- 3. 准备挂载目录 ----------
echo "[3/5] 准备挂载目录 vault/ logs/ ssl/ ..."
mkdir -p vault logs ssl
# ---------- 4. 环境前置检查 ----------
echo "[4/5] 检查 docker / docker compose ..."
if ! command -v docker >/dev/null 2>&1; then
echo "未检测到 docker,请先安装 Docker:https://docs.docker.com/get-docker/" >&2
exit 1
fi
if ! docker compose version >/dev/null 2>&1; then
echo "未检测到 docker compose v2,请升级 Docker Desktop 或安装 compose 插件。" >&2
exit 1
fi
# ---------- 5. 构建并启动 ----------
echo "[5/5] docker compose 构建并启动(后台)..."
docker compose up -d --build
echo ""
echo "部署完成。访问地址(默认 HTTPS,证书缺失时自动生成自签):"
PORT="$(grep -E '^PORT=' .env | tail -1 | cut -d= -f2-)"
PORT="${PORT:-3000}"
echo " https://localhost:${PORT}"
echo ""
echo "常用命令:"
echo " 查看日志: docker compose logs -f"
echo " 停止服务: docker compose down"
echo " 更新代码: ./deploy.sh"