Files
live-hub-py/deploy.sh
T

242 lines
6.8 KiB
Bash
Executable File
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
#!/usr/bin/env bash
set -e
# ===== 斗鱼批量登录 Docker 部署脚本 =====
ROOT_DIR="$(cd "$(dirname "$0")" && pwd)"
cd "$ROOT_DIR"
APP_PORT="${APP_PORT:-8000}"
# ── 工具函数 ──────────────────────────────────────────────
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
# 构建并启动
echo "正在构建镜像(首次构建约3-5分钟)..."
$COMPOSE build
echo ""
echo "正在启动服务..."
$COMPOSE up -d
echo ""
echo "等待服务启动..."
# 健康检查
for i in $(seq 1 15); do
if curl -s "http://localhost:${APP_PORT}/api/health" | grep -q "ok" 2>/dev/null; then
echo ""
echo "=============================="
echo " ✅ 部署成功!"
echo "=============================="
echo " 访问地址: http://localhost:${APP_PORT}"
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 " • MySQL 数据卷"
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 --volumes --rmi local 2>/dev/null || $COMPOSE down --volumes 2>/dev/null || true
fi
# 删除数据文件
echo " 删除旧 SQLite 数据..."
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_migrate_mysql() {
COMPOSE=$(detect_compose)
if [ -z "$COMPOSE" ]; then
echo "❌ 未检测到 docker compose"
exit 1
fi
if [ ! -f data/web.db ]; then
echo "❌ 未找到 data/web.db,无法迁移 SQLite 数据"
exit 1
fi
echo "正在启动 MySQL..."
$COMPOSE up -d mysql
echo "等待 MySQL 就绪..."
for i in $(seq 1 30); do
if $COMPOSE exec -T mysql sh -c 'mysqladmin ping -h localhost -uroot -p"$MYSQL_ROOT_PASSWORD" --silent' >/dev/null 2>&1; then
echo "MySQL 已就绪"
break
fi
if [ "$i" = "30" ]; then
echo "❌ MySQL 启动超时,查看日志:"
$COMPOSE logs --tail 50 mysql
exit 1
fi
sleep 2
done
echo "正在构建迁移运行镜像..."
$COMPOSE build douyu-login
echo "开始迁移 SQLite 到 MySQL..."
$COMPOSE run --rm --no-deps douyu-login \
python scripts/migrate_sqlite_to_mysql.py --source /app/data/web.db
}
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 " migrate-mysql 先启动 MySQL 并迁移 data/web.db"
echo " logs 查看实时日志"
echo " stop 停止服务"
echo " restart 重启服务"
echo " dev 本地调试启动(后端 reload + 前端热更新)"
echo " help 显示帮助"
echo ""
echo " 访问地址: http://localhost:${APP_PORT}"
echo " 调试地址: http://localhost:5174"
echo " 默认账号见环境变量 ADMIN_USERNAME/ADMIN_PASSWORD"
echo ""
}
# ── 入口 ──────────────────────────────────────────────────
case "${1:-}" in
reset) cmd_reset ;;
migrate-mysql) cmd_migrate_mysql ;;
logs) cmd_logs ;;
stop) cmd_stop ;;
restart) cmd_restart ;;
dev) cmd_dev ;;
help|-h) cmd_help ;;
*) cmd_deploy ;;
esac