#!/usr/bin/env bash set -e # ===== 斗鱼批量登录 Docker 部署脚本 ===== ROOT_DIR="$(cd "$(dirname "$0")" && pwd)" cd "$ROOT_DIR" # ── 工具函数 ────────────────────────────────────────────── detect_compose() { if docker compose version &> /dev/null; then echo "docker compose" elif command -v docker-compose &> /dev/null; then echo "docker-compose" else echo "" fi } # ── 子命令 ────────────────────────────────────────────── cmd_deploy() { echo "" echo "==============================" echo " 斗鱼批量登录 - Docker 部署" echo "==============================" if ! command -v docker &> /dev/null; then echo "❌ 未安装 Docker,请先安装:" echo " curl -fsSL https://get.docker.com | sh" exit 1 fi COMPOSE=$(detect_compose) if [ -z "$COMPOSE" ]; then echo "❌ 未安装 docker compose,请先安装 Docker Compose" exit 1 fi echo " 使用: $COMPOSE" echo "" # 创建数据和日志目录 mkdir -p data logs # 先停掉旧容器(避免名称冲突) $COMPOSE down 2>/dev/null || true # 构建并启动 echo "正在构建镜像(首次构建约3-5分钟)..." $COMPOSE build echo "" echo "正在启动服务..." $COMPOSE up -d echo "" echo "等待服务启动..." # 健康检查 for i in $(seq 1 15); do if curl -s http://localhost:8800/api/health | grep -q "ok" 2>/dev/null; then echo "" echo "==============================" echo " ✅ 部署成功!" echo "==============================" echo " 访问地址: http://localhost:8800" echo " 默认账号见环境变量 ADMIN_USERNAME/ADMIN_PASSWORD(未设置则为 admin/admin123)" echo "" echo " 查看日志: $COMPOSE logs -f" echo " 停止服务: $COMPOSE down" echo " 重启服务: $COMPOSE restart" echo " 重置数据: ./deploy.sh reset" echo "==============================" exit 0 fi echo " 等待中... ($i/15)" sleep 2 done echo "" echo "❌ 服务启动超时,查看日志:" $COMPOSE logs --tail 30 exit 1 } cmd_reset() { echo "" echo "==============================" echo " ⚠️ 重置所有数据" echo "==============================" echo "" echo " 将删除以下内容:" echo " • 数据库文件 (data/web.db)" echo " • 历史Cookie (data/cookies/)" echo " • 应用日志 (logs/)" echo " • Docker容器和镜像" echo "" # 交互确认 read -rp " 确认删除所有数据?输入 YES 继续: " confirm if [ "$confirm" != "YES" ]; then echo " 已取消" exit 0 fi COMPOSE=$(detect_compose) # 停止并删除容器 if [ -n "$COMPOSE" ]; then echo " 停止并删除容器..." $COMPOSE down --rmi local 2>/dev/null || $COMPOSE down 2>/dev/null || true fi # 删除数据文件 echo " 删除数据库..." rm -rf data/web.db data/web.db-shm data/web.db-wal echo " 删除Cookie..." rm -rf data/cookies/ echo " 删除日志..." rm -rf logs/*.log # 删除其他临时文件 rm -rf data/accounts.json data/gui_state.json data/app.db 2>/dev/null || true echo "" echo "==============================" echo " ✅ 数据已重置" echo "==============================" echo " 运行 ./deploy.sh 重新部署" echo "==============================" } cmd_logs() { COMPOSE=$(detect_compose) if [ -z "$COMPOSE" ]; then echo "❌ 未检测到 docker compose" exit 1 fi $COMPOSE logs -f } cmd_stop() { COMPOSE=$(detect_compose) if [ -z "$COMPOSE" ]; then echo "❌ 未检测到 docker compose" exit 1 fi $COMPOSE down echo "✅ 服务已停止" } cmd_restart() { COMPOSE=$(detect_compose) if [ -z "$COMPOSE" ]; then echo "❌ 未检测到 docker compose" exit 1 fi $COMPOSE restart echo "✅ 服务已重启" } cmd_dev() { exec "$ROOT_DIR/dev.sh" } # ── 帮助 ────────────────────────────────────────────────── cmd_help() { echo "" echo "==============================" echo " 斗鱼批量登录 - 部署工具" echo "==============================" echo "" echo " 用法: ./deploy.sh <命令>" echo "" echo " 命令:" echo " (无参数) 构建并部署" echo " reset 删除所有数据并重置(需确认)" echo " logs 查看实时日志" echo " stop 停止服务" echo " restart 重启服务" echo " dev 本地调试启动(后端 reload + 前端热更新)" echo " help 显示帮助" echo "" echo " 访问地址: http://localhost:8800" echo " 调试地址: http://localhost:5174" echo " 默认账号见环境变量 ADMIN_USERNAME/ADMIN_PASSWORD" echo "" } # ── 入口 ────────────────────────────────────────────────── case "${1:-}" in reset) cmd_reset ;; logs) cmd_logs ;; stop) cmd_stop ;; restart) cmd_restart ;; dev) cmd_dev ;; help|-h) cmd_help ;; *) cmd_deploy ;; esac