diff --git a/start.sh b/start.sh index 84c3518..578901f 100644 --- a/start.sh +++ b/start.sh @@ -9,9 +9,17 @@ FRONTEND_DIR="${FRONTEND_DIR:-$ROOT_DIR/frontend}" RUN_DIR="${RUN_DIR:-$BACKEND_DIR/.run}" START_REDIS="${START_REDIS:-1}" +START_RABBITMQ="${START_RABBITMQ:-1}" START_BACKEND="${START_BACKEND:-1}" START_FRONTEND="${START_FRONTEND:-1}" +# docker compose (for dependencies like RabbitMQ): +# - START_RABBITMQ=1|0 (default 1) +# - COMPOSE_FILE=path (default ./docker-compose.yml) +# - STOP_DOCKER=1|0 (default 0; when 1, stop started compose services on exit) +COMPOSE_FILE="${COMPOSE_FILE:-$ROOT_DIR/docker-compose.yml}" +STOP_DOCKER="${STOP_DOCKER:-0}" + # frontend: # - FRONTEND_INSTALL=auto|1|0 (default auto, only when node_modules missing) # - FRONTEND_SCRIPT=dev|preview|build (default dev) @@ -60,6 +68,11 @@ cleanup() { taskkill //PID "$BACKEND_PID" //T //F >/dev/null 2>&1 || true fi fi + + if [ "$STOP_DOCKER" = "1" ] && [ -n "${COMPOSE_CMD:-}" ] && [ -f "$COMPOSE_FILE" ]; then + echo "[start.sh] Stopping docker compose services" + $COMPOSE_CMD -f "$COMPOSE_FILE" stop >/dev/null 2>&1 || true + fi } trap cleanup INT TERM EXIT @@ -75,6 +88,54 @@ if [ "$START_FRONTEND" = "1" ]; then require_cmd npm fi +detect_compose() { + if command -v docker >/dev/null 2>&1; then + if docker compose version >/dev/null 2>&1; then + COMPOSE_CMD="docker compose" + return 0 + fi + fi + if command -v docker-compose >/dev/null 2>&1; then + COMPOSE_CMD="docker-compose" + return 0 + fi + return 1 +} + +start_rabbitmq_compose() { + if [ ! -f "$COMPOSE_FILE" ]; then + echo "[start.sh] $COMPOSE_FILE not found; skip starting RabbitMQ via docker compose" + return 0 + fi + if ! detect_compose; then + echo "[start.sh] docker compose not found; skip starting RabbitMQ via docker compose" + return 0 + fi + + echo "[start.sh] Starting RabbitMQ via docker compose ($COMPOSE_FILE)" + $COMPOSE_CMD -f "$COMPOSE_FILE" up -d rabbitmq + + # Best-effort readiness check. + if command -v docker >/dev/null 2>&1; then + local rabbit_cid="" + rabbit_cid="$($COMPOSE_CMD -f "$COMPOSE_FILE" ps -q rabbitmq 2>/dev/null || true)" + if [ -z "$rabbit_cid" ]; then + rabbit_cid="my-rabbitmq" + fi + + local i=0 + while [ "$i" -lt 30 ]; do + if docker exec "$rabbit_cid" rabbitmq-diagnostics -q ping >/dev/null 2>&1; then + echo "[start.sh] RabbitMQ ready" + return 0 + fi + sleep 1 + i=$((i + 1)) + done + echo "[start.sh] RabbitMQ may not be ready yet; continuing anyway" + fi +} + start_redis() { if ! command -v redis-server >/dev/null 2>&1; then echo "[start.sh] redis-server not found; skip starting Redis" @@ -118,6 +179,10 @@ start_frontend_bg() { echo "[start.sh] Frontend PID: $FRONTEND_PID" } +if [ "$START_RABBITMQ" = "1" ] && [ "$START_BACKEND" = "1" ]; then + start_rabbitmq_compose +fi + if [ "$START_REDIS" = "1" ] && [ "$START_BACKEND" = "1" ]; then start_redis fi