统一开发环境使用 MySQL
This commit is contained in:
@@ -19,18 +19,43 @@ BACKEND_PORT="${BACKEND_PORT:-8800}"
|
||||
FRONTEND_HOST="${FRONTEND_HOST:-0.0.0.0}"
|
||||
FRONTEND_PORT="${FRONTEND_PORT:-5174}"
|
||||
LOG_LEVEL="${LOG_LEVEL:-DEBUG}"
|
||||
MYSQL_IMAGE="${MYSQL_IMAGE:-mysql:8.4}"
|
||||
MYSQL_BIND_HOST="${MYSQL_BIND_HOST:-127.0.0.1}"
|
||||
MYSQL_HOST_PORT="${MYSQL_HOST_PORT:-3307}"
|
||||
MYSQL_DATABASE="${MYSQL_DATABASE:-douyu_login}"
|
||||
MYSQL_USER="${MYSQL_USER:-douyu_login}"
|
||||
DEV_DB_HOST="${DEV_DB_HOST:-127.0.0.1}"
|
||||
DEV_DB_PORT="${DEV_DB_PORT:-$MYSQL_HOST_PORT}"
|
||||
DB_HOST="$DEV_DB_HOST"
|
||||
DB_PORT="$DEV_DB_PORT"
|
||||
DB_NAME="${DB_NAME:-$MYSQL_DATABASE}"
|
||||
DB_USER="${DB_USER:-$MYSQL_USER}"
|
||||
DB_PASSWORD="${DB_PASSWORD:-${MYSQL_PASSWORD:-}}"
|
||||
DB_POOL_SIZE="${DB_POOL_SIZE:-20}"
|
||||
DB_MAX_OVERFLOW="${DB_MAX_OVERFLOW:-20}"
|
||||
DB_POOL_TIMEOUT="${DB_POOL_TIMEOUT:-30}"
|
||||
DB_POOL_RECYCLE="${DB_POOL_RECYCLE:-1800}"
|
||||
|
||||
BACKEND_PID=""
|
||||
FRONTEND_PID=""
|
||||
|
||||
stop_tree() {
|
||||
local pid="$1"
|
||||
local children
|
||||
if [ -z "$pid" ] || ! kill -0 "$pid" 2>/dev/null; then
|
||||
return
|
||||
fi
|
||||
children="$(pgrep -P "$pid" 2>/dev/null || true)"
|
||||
for child in $children; do
|
||||
stop_tree "$child"
|
||||
done
|
||||
kill "$pid" 2>/dev/null || true
|
||||
}
|
||||
|
||||
cleanup() {
|
||||
trap - EXIT INT TERM
|
||||
if [ -n "$FRONTEND_PID" ] && kill -0 "$FRONTEND_PID" 2>/dev/null; then
|
||||
kill "$FRONTEND_PID" 2>/dev/null || true
|
||||
fi
|
||||
if [ -n "$BACKEND_PID" ] && kill -0 "$BACKEND_PID" 2>/dev/null; then
|
||||
kill "$BACKEND_PID" 2>/dev/null || true
|
||||
fi
|
||||
stop_tree "$FRONTEND_PID"
|
||||
stop_tree "$BACKEND_PID"
|
||||
}
|
||||
|
||||
require_cmd() {
|
||||
@@ -42,9 +67,61 @@ require_cmd() {
|
||||
|
||||
require_cmd uv
|
||||
require_cmd npm
|
||||
require_cmd docker
|
||||
|
||||
detect_compose() {
|
||||
if docker compose version >/dev/null 2>&1; then
|
||||
echo "docker compose"
|
||||
elif command -v docker-compose >/dev/null 2>&1; then
|
||||
echo "docker-compose"
|
||||
else
|
||||
echo ""
|
||||
fi
|
||||
}
|
||||
|
||||
if [ -n "${DATABASE_URL:-}" ] && [[ "$DATABASE_URL" != mysql+* ]]; then
|
||||
echo "dev.sh 只支持 MySQL,请移除 SQLite DATABASE_URL: $DATABASE_URL"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
if [ -z "${MYSQL_PASSWORD:-}" ] || [ -z "${MYSQL_ROOT_PASSWORD:-}" ]; then
|
||||
echo "请先在 .env 中设置 MYSQL_PASSWORD 和 MYSQL_ROOT_PASSWORD"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
if [ -z "$DB_PASSWORD" ]; then
|
||||
echo "请先在 .env 中设置 DB_PASSWORD 或 MYSQL_PASSWORD"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
COMPOSE=$(detect_compose)
|
||||
if [ -z "$COMPOSE" ]; then
|
||||
echo "缺少 docker compose"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
mkdir -p data logs
|
||||
|
||||
echo "正在启动本地 MySQL..."
|
||||
MYSQL_IMAGE="$MYSQL_IMAGE" \
|
||||
MYSQL_BIND_HOST="$MYSQL_BIND_HOST" \
|
||||
MYSQL_HOST_PORT="$MYSQL_HOST_PORT" \
|
||||
$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 ""
|
||||
echo "=============================="
|
||||
echo " 本地调试模式"
|
||||
@@ -52,12 +129,22 @@ echo "=============================="
|
||||
echo " 后端: http://${BACKEND_HOST}:${BACKEND_PORT}"
|
||||
echo " 前端: http://localhost:${FRONTEND_PORT}"
|
||||
echo " API 代理: http://127.0.0.1:${BACKEND_PORT}"
|
||||
echo " MySQL: ${DB_HOST}:${DB_PORT}/${DB_NAME}"
|
||||
echo " 退出: Ctrl+C"
|
||||
echo "=============================="
|
||||
echo ""
|
||||
|
||||
trap cleanup EXIT INT TERM
|
||||
|
||||
DB_HOST="$DB_HOST" \
|
||||
DB_PORT="$DB_PORT" \
|
||||
DB_NAME="$DB_NAME" \
|
||||
DB_USER="$DB_USER" \
|
||||
DB_PASSWORD="$DB_PASSWORD" \
|
||||
DB_POOL_SIZE="$DB_POOL_SIZE" \
|
||||
DB_MAX_OVERFLOW="$DB_MAX_OVERFLOW" \
|
||||
DB_POOL_TIMEOUT="$DB_POOL_TIMEOUT" \
|
||||
DB_POOL_RECYCLE="$DB_POOL_RECYCLE" \
|
||||
LOG_LEVEL="$LOG_LEVEL" \
|
||||
uv run uvicorn web.backend.main:app \
|
||||
--host "$BACKEND_HOST" \
|
||||
|
||||
Reference in New Issue
Block a user