#!/bin/bash # ============================================================ # 食谱翻译工具 - Docker 更新脚本 # 用于在 Docker 容器中执行自动更新 # # 用法: # export ONEDEV_ACCESS_TOKEN="your_token_here" # ./scripts/update.sh # ============================================================ set -e # 颜色定义 RED='\033[0;31m' GREEN='\033[0;32m' YELLOW='\033[1;33m' NC='\033[0m' # No Color log() { echo -e "${GREEN}[✓]${NC} $1"; } warn() { echo -e "${YELLOW}[!]${NC} $1"; } err() { echo -e "${RED}[✗]${NC} $1"; } GIT_REMOTE="${GIT_REMOTE_URL:-https://git.hanhan.ltd/recipe_tool.git}" TOKEN="${ONEDEV_ACCESS_TOKEN:-}" TMP_DIR="/tmp/recipe_tool_update_$(date +%s)" # 检查必要环境 if [ -z "$TOKEN" ]; then err "ONEDEV_ACCESS_TOKEN 未设置" exit 1 fi # 构建带认证的远程 URL AUTH_URL="https://access-token:${TOKEN}@$(echo ${GIT_REMOTE} | sed 's|https://||')" echo "========================================" echo " 食谱翻译工具 - 自动更新" echo "========================================" echo "" # 1. 克隆最新代码 echo "[1/4] 拉取最新代码..." git clone --depth 1 "${AUTH_URL}" "${TMP_DIR}" 2>/dev/null || { err "克隆仓库失败" exit 1 } log "代码拉取完成" # 2. 生成 .env 文件 echo "[2/4] 准备环境变量..." cat > "${TMP_DIR}/.env" << EOF DB_HOST=${DB_HOST:-127.0.0.1} DB_PORT=${DB_PORT:-3306} DB_USER=${DB_USER:-root} DB_PASSWORD=${DB_PASSWORD:-} DB_NAME=${DB_NAME:-recipe_tools} AI_API_KEY=${AI_API_KEY:-} AI_BASE_URL=${AI_BASE_URL:-https://api.openai.com/v1} AI_MODEL=${AI_MODEL:-gpt-3.5-turbo} ONEDEV_ACCESS_TOKEN=${TOKEN} EOF log "环境变量已准备" # 3. 构建新镜像 echo "[3/4] 构建新 Docker 镜像..." cd "${TMP_DIR}" docker compose -p recipe_tool build || { err "镜像构建失败" exit 1 } log "镜像构建完成" # 4. 重启服务 echo "[4/4] 重启服务..." docker compose -p recipe_tool up -d || { err "服务重启失败" exit 1 } log "服务已重启" # 清理 rm -rf "${TMP_DIR}" 2>/dev/null || true echo "" echo "========================================" echo -e "${GREEN} 更新完成!${NC}" echo "========================================"