147 lines
3.3 KiB
Bash
Executable File
147 lines
3.3 KiB
Bash
Executable File
#!/usr/bin/env bash
|
|
set -euo pipefail
|
|
|
|
SCRIPT_DIR="$(cd "$(dirname "$0")" && pwd)"
|
|
# shellcheck disable=SC1091
|
|
source "$SCRIPT_DIR/common.sh"
|
|
|
|
BUILD_SCRIPT="$SCRIPT_DIR/build_local_backend.sh"
|
|
PUBLISH_SCRIPT="$SCRIPT_DIR/publish_local_nacos_configs.sh"
|
|
|
|
SKIP_BUILD=false
|
|
INFRA_ONLY=false
|
|
FORCE_BUILD=false
|
|
|
|
PARALLEL_PIDS=()
|
|
PARALLEL_LABELS=()
|
|
|
|
reset_parallel_jobs() {
|
|
PARALLEL_PIDS=()
|
|
PARALLEL_LABELS=()
|
|
}
|
|
|
|
start_parallel_job() {
|
|
local label="$1"
|
|
shift
|
|
|
|
"$@" &
|
|
PARALLEL_PIDS+=("$!")
|
|
PARALLEL_LABELS+=("$label")
|
|
}
|
|
|
|
wait_parallel_jobs() {
|
|
local failed=0 index
|
|
|
|
for index in "${!PARALLEL_PIDS[@]}"; do
|
|
if ! wait "${PARALLEL_PIDS[$index]}"; then
|
|
echo "parallel wait failed: ${PARALLEL_LABELS[$index]}" >&2
|
|
failed=1
|
|
fi
|
|
done
|
|
|
|
if [ "$failed" -ne 0 ]; then
|
|
exit 1
|
|
fi
|
|
}
|
|
|
|
wait_infra_ready() {
|
|
reset_parallel_jobs
|
|
start_parallel_job mysql wait_container_healthy chatapp3-local-mysql 120
|
|
start_parallel_job redis wait_container_healthy chatapp3-local-redis 120
|
|
start_parallel_job mongo wait_container_healthy chatapp3-local-mongo 120
|
|
start_parallel_job nacos wait_http "http://127.0.0.1:${LIKEI_LOCAL_NACOS_PORT}/nacos/" 120
|
|
|
|
if ! local_rocketmq_disabled; then
|
|
start_parallel_job rocketmq wait_local_rocketmq
|
|
fi
|
|
|
|
wait_parallel_jobs
|
|
}
|
|
|
|
wait_app_services_ready() {
|
|
local service
|
|
|
|
reset_parallel_jobs
|
|
for service in gateway auth other live order wallet console external visual-monitor scheduling golang; do
|
|
start_parallel_job "$service" wait_service_health "$service" 180
|
|
done
|
|
wait_parallel_jobs
|
|
}
|
|
|
|
usage() {
|
|
cat <<'EOF'
|
|
用法:
|
|
./start_local_services.sh
|
|
./start_local_services.sh --skip-build
|
|
./start_local_services.sh --infra-only
|
|
./start_local_services.sh --rebuild
|
|
EOF
|
|
}
|
|
|
|
while [ "$#" -gt 0 ]; do
|
|
case "$1" in
|
|
--skip-build)
|
|
SKIP_BUILD=true
|
|
;;
|
|
--infra-only)
|
|
INFRA_ONLY=true
|
|
;;
|
|
--rebuild)
|
|
FORCE_BUILD=true
|
|
;;
|
|
-h|--help)
|
|
usage
|
|
exit 0
|
|
;;
|
|
*)
|
|
echo "unknown option: $1" >&2
|
|
usage >&2
|
|
exit 1
|
|
;;
|
|
esac
|
|
shift
|
|
done
|
|
|
|
load_local_env
|
|
wait_for_docker
|
|
|
|
if [ "$SKIP_BUILD" = false ] && [ "$INFRA_ONLY" = false ]; then
|
|
if [ "$FORCE_BUILD" = true ] || ! all_local_java_jars_present; then
|
|
java_major="$(java_major_version || true)"
|
|
if [ "$java_major" = "17" ]; then
|
|
"$BUILD_SCRIPT"
|
|
else
|
|
if [ "$FORCE_BUILD" = true ]; then
|
|
echo "rebuilding local Java services requires JDK 17; current java major version is ${java_major:-unknown}" >&2
|
|
else
|
|
echo "local Java jars are missing and the current machine is not using JDK 17" >&2
|
|
echo "please switch to JDK 17 and rerun ./start_local_services.sh, or prebuild the jars first" >&2
|
|
fi
|
|
exit 1
|
|
fi
|
|
else
|
|
echo "local Java jars already exist; skipping build"
|
|
fi
|
|
fi
|
|
|
|
compose up -d --remove-orphans mysql redis mongo nacos zookeeper
|
|
|
|
if ! local_rocketmq_disabled; then
|
|
compose up -d --remove-orphans rocketmq-namesrv rocketmq-init rocketmq-broker rocketmq-proxy
|
|
fi
|
|
|
|
echo "waiting for local infra..."
|
|
require_env LIKEI_LOCAL_NACOS_PORT
|
|
wait_infra_ready
|
|
|
|
"$PUBLISH_SCRIPT"
|
|
|
|
if [ "$INFRA_ONLY" = false ]; then
|
|
compose up -d --remove-orphans --force-recreate \
|
|
gateway auth external other live order wallet console visual-monitor scheduling golang
|
|
|
|
wait_app_services_ready
|
|
fi
|
|
|
|
compose ps
|