支持 MySQL 迁移与性能优化

This commit is contained in:
yml2213
2026-07-25 10:23:19 +08:00
parent df4297bee5
commit 32f9eadfdb
9 changed files with 460 additions and 33 deletions
+45 -9
View File
@@ -5,6 +5,7 @@ set -e
ROOT_DIR="$(cd "$(dirname "$0")" && pwd)"
cd "$ROOT_DIR"
APP_PORT="${APP_PORT:-8000}"
# ── 工具函数 ──────────────────────────────────────────────
@@ -44,9 +45,6 @@ cmd_deploy() {
# 创建数据和日志目录
mkdir -p data logs
# 先停掉旧容器(避免名称冲突)
$COMPOSE down 2>/dev/null || true
# 构建并启动
echo "正在构建镜像(首次构建约3-5分钟)..."
$COMPOSE build
@@ -60,12 +58,12 @@ cmd_deploy() {
# 健康检查
for i in $(seq 1 15); do
if curl -s http://localhost:8800/api/health | grep -q "ok" 2>/dev/null; then
if curl -s "http://localhost:${APP_PORT}/api/health" | grep -q "ok" 2>/dev/null; then
echo ""
echo "=============================="
echo " ✅ 部署成功!"
echo "=============================="
echo " 访问地址: http://localhost:8800"
echo " 访问地址: http://localhost:${APP_PORT}"
echo " 默认账号见环境变量 ADMIN_USERNAME/ADMIN_PASSWORD(未设置则为 admin/admin123"
echo ""
echo " 查看日志: $COMPOSE logs -f"
@@ -92,7 +90,7 @@ cmd_reset() {
echo "=============================="
echo ""
echo " 将删除以下内容:"
echo " • 数据库文件 (data/web.db)"
echo " • MySQL 数据卷"
echo " • 历史Cookie (data/cookies/)"
echo " • 应用日志 (logs/)"
echo " • Docker容器和镜像"
@@ -110,11 +108,11 @@ cmd_reset() {
# 停止并删除容器
if [ -n "$COMPOSE" ]; then
echo " 停止并删除容器..."
$COMPOSE down --rmi local 2>/dev/null || $COMPOSE down 2>/dev/null || true
$COMPOSE down --volumes --rmi local 2>/dev/null || $COMPOSE down --volumes 2>/dev/null || true
fi
# 删除数据文件
echo " 删除数据..."
echo " 删除旧 SQLite 数据..."
rm -rf data/web.db data/web.db-shm data/web.db-wal
echo " 删除Cookie..."
@@ -143,6 +141,42 @@ cmd_logs() {
$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
@@ -180,13 +214,14 @@ cmd_help() {
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:8800"
echo " 访问地址: http://localhost:${APP_PORT}"
echo " 调试地址: http://localhost:5174"
echo " 默认账号见环境变量 ADMIN_USERNAME/ADMIN_PASSWORD"
echo ""
@@ -196,6 +231,7 @@ cmd_help() {
case "${1:-}" in
reset) cmd_reset ;;
migrate-mysql) cmd_migrate_mysql ;;
logs) cmd_logs ;;
stop) cmd_stop ;;
restart) cmd_restart ;;