diff --git a/.gitignore b/.gitignore index 1b6128f..31605da 100644 --- a/.gitignore +++ b/.gitignore @@ -1 +1,2 @@ .run/ +backend/.run/ diff --git a/backend/configs/config.yaml b/backend/configs/config.yaml new file mode 100644 index 0000000..0358a87 --- /dev/null +++ b/backend/configs/config.yaml @@ -0,0 +1,9 @@ +server: + port: 8080 + +database: + host: localhost + port: 3306 + user: root + password: 123456 + dbname: feedsystem \ No newline at end of file diff --git a/go.mod b/backend/go.mod similarity index 100% rename from go.mod rename to backend/go.mod diff --git a/go.sum b/backend/go.sum similarity index 100% rename from go.sum rename to backend/go.sum diff --git a/start.sh b/start.sh index e7eb07e..d108ffe 100644 --- a/start.sh +++ b/start.sh @@ -4,15 +4,60 @@ set -eu ROOT_DIR="$(CDPATH= cd -- "$(dirname -- "$0")" && pwd)" cd "$ROOT_DIR" -RUN_DIR="$ROOT_DIR/.run" -mkdir -p "$RUN_DIR" +BACKEND_DIR="${BACKEND_DIR:-$ROOT_DIR/backend}" +FRONTEND_DIR="${FRONTEND_DIR:-$ROOT_DIR/frontend}" +RUN_DIR="${RUN_DIR:-$BACKEND_DIR/.run}" -# Start Redis (optional). +START_REDIS="${START_REDIS:-1}" +START_BACKEND="${START_BACKEND:-1}" +START_FRONTEND="${START_FRONTEND:-1}" + +# frontend: +# - FRONTEND_INSTALL=auto|1|0 (default auto, only when node_modules missing) +# - FRONTEND_SCRIPT=dev|preview|build (default dev) +FRONTEND_INSTALL="${FRONTEND_INSTALL:-auto}" +FRONTEND_SCRIPT="${FRONTEND_SCRIPT:-dev}" + +# redis: # - If you already run Redis elsewhere, this will detect it (when redis-cli exists) and skip. REDIS_HOST="${REDIS_HOST:-127.0.0.1}" REDIS_PORT="${REDIS_PORT:-6379}" REDIS_CONF="${REDIS_CONF:-}" +require_dir() { + if [ ! -d "$2" ]; then + echo "[start.sh] $1 dir not found: $2" + exit 1 + fi +} + +require_cmd() { + if ! command -v "$1" >/dev/null 2>&1; then + echo "[start.sh] command not found: $1" + exit 1 + fi +} + +BACKEND_PID="" +cleanup() { + if [ -n "${BACKEND_PID:-}" ]; then + echo "[start.sh] Stopping backend (pid=$BACKEND_PID)" + kill "$BACKEND_PID" >/dev/null 2>&1 || true + fi +} +trap cleanup INT TERM EXIT + +if [ "$START_BACKEND" = "1" ]; then + require_dir backend "$BACKEND_DIR" + mkdir -p "$RUN_DIR" + require_cmd go +fi + +if [ "$START_FRONTEND" = "1" ]; then + require_dir frontend "$FRONTEND_DIR" + require_cmd npm +fi + start_redis() { if ! command -v redis-server >/dev/null 2>&1; then echo "[start.sh] redis-server not found; skip starting Redis" @@ -35,7 +80,42 @@ start_redis() { echo $! >"$RUN_DIR/redis.pid" } -start_redis +start_backend_bg() { + echo "[start.sh] Starting backend (background)" + (cd "$BACKEND_DIR" && go run ./cmd) & + BACKEND_PID=$! + echo "$BACKEND_PID" >"$RUN_DIR/backend.pid" + echo "[start.sh] Backend PID: $BACKEND_PID" +} -echo "[start.sh] Starting app" -go run ./cmd +start_backend_fg() { + echo "[start.sh] Starting backend" + cd "$BACKEND_DIR" + go run ./cmd +} + +start_frontend_fg() { + if [ "$FRONTEND_INSTALL" = "1" ] || { [ "$FRONTEND_INSTALL" = "auto" ] && [ ! -d "$FRONTEND_DIR/node_modules" ]; }; then + echo "[start.sh] Installing frontend deps" + (cd "$FRONTEND_DIR" && npm install) + fi + + echo "[start.sh] Starting frontend (npm run $FRONTEND_SCRIPT)" + cd "$FRONTEND_DIR" + npm run "$FRONTEND_SCRIPT" +} + +if [ "$START_REDIS" = "1" ] && [ "$START_BACKEND" = "1" ]; then + start_redis +fi + +if [ "$START_BACKEND" = "1" ] && [ "$START_FRONTEND" = "1" ]; then + start_backend_bg + start_frontend_fg +elif [ "$START_BACKEND" = "1" ]; then + start_backend_fg +elif [ "$START_FRONTEND" = "1" ]; then + start_frontend_fg +else + echo "[start.sh] Nothing to start. Set START_BACKEND=1 and/or START_FRONTEND=1." +fi