Spaces:
Sleeping
Sleeping
File size: 3,469 Bytes
1c8e50c |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 |
#!/bin/bash
set -euo pipefail
ROOT_DIR="/app"
LOG_DIR="${ROOT_DIR}/logs"
MONGO_DATA_DIR="/data/db"
mkdir -p "${LOG_DIR}" "${MONGO_DATA_DIR}"
cleanup() {
if [[ -n "${SERVICE_PIDS[*]-}" ]]; then
for pid in "${SERVICE_PIDS[@]}"; do
if kill -0 "${pid}" 2>/dev/null; then
kill "${pid}" 2>/dev/null || true
fi
done
fi
mongod --shutdown --dbpath "${MONGO_DATA_DIR}" >/dev/null 2>&1 || true
}
trap cleanup EXIT
log() {
echo "[$(date '+%Y-%m-%dT%H:%M:%S%z')] $*"
}
wait_for_port() {
local host="$1"
local port="$2"
local retries="${3:-60}"
local delay="${4:-2}"
for ((i=0; i<retries; i++)); do
if nc -z "${host}" "${port}" 2>/dev/null; then
return 0
fi
sleep "${delay}"
done
log "❌ Timed out waiting for ${host}:${port}"
return 1
}
wait_for_http() {
local url="$1"
local retries="${2:-60}"
local delay="${3:-2}"
for ((i=0; i<retries; i++)); do
if curl -fsS "${url}" >/dev/null 2>&1; then
return 0
fi
sleep "${delay}"
done
log "❌ Timed out waiting for ${url}"
return 1
}
start_service() {
local service_dir="$1"
local jar_name="$2"
shift 2
(
cd "${ROOT_DIR}/${service_dir}"
env "$@" java -jar "build/libs/${jar_name}" \
>>"${LOG_DIR}/${service_dir}.log" 2>&1 &
echo $!
)
}
log "Starting MongoDB daemon"
mongod --dbpath "${MONGO_DATA_DIR}" --bind_ip_all --logpath "${LOG_DIR}/mongodb.log" --fork
wait_for_port "127.0.0.1" 27017 120 1
SERVICE_PIDS=()
log "Starting Eureka server"
PID=$(start_service "EurekaServerConfiguration" "eureka-server.jar" \
SERVER_PORT=8085 \
SPRING_PROFILES_ACTIVE=docker \
ZIPKIN_BASE_URL=)
SERVICE_PIDS+=(${PID})
wait_for_http "http://127.0.0.1:8085/actuator/health"
log "Starting User service"
PID=$(start_service "TaskUserService" "task-user-service.jar" \
SERVER_PORT=8081 \
SPRING_PROFILES_ACTIVE=docker \
SPRING_APP_NAME=USER-SERVICE \
EUREKA_SERVER_URI=http://127.0.0.1:8085/eureka \
MONGODB_URI=mongodb://127.0.0.1:27017/users \
ZIPKIN_BASE_URL= \
TASK_ALLOWED_ORIGINS=* \
TASK_ALLOW_CREDENTIALS=false)
SERVICE_PIDS+=(${PID})
wait_for_http "http://127.0.0.1:8081/actuator/health"
log "Starting Task service"
PID=$(start_service "TaskService" "task-service.jar" \
SERVER_PORT=8082 \
SPRING_PROFILES_ACTIVE=docker \
SPRING_APP_NAME=TASK-SERVICE \
EUREKA_SERVER_URI=http://127.0.0.1:8085/eureka \
MONGODB_URI=mongodb://127.0.0.1:27017/tasks \
ZIPKIN_BASE_URL=)
SERVICE_PIDS+=(${PID})
wait_for_http "http://127.0.0.1:8082/actuator/health"
log "Starting Task Submission service"
PID=$(start_service "TaskSubmissionService" "task-submission-service.jar" \
SERVER_PORT=8083 \
SPRING_PROFILES_ACTIVE=docker \
SPRING_APP_NAME=TASK-SUBMISSION-SERVICE \
EUREKA_SERVER_URI=http://127.0.0.1:8085/eureka \
MONGODB_URI=mongodb://127.0.0.1:27017/submissions \
ZIPKIN_BASE_URL=)
SERVICE_PIDS+=(${PID})
wait_for_http "http://127.0.0.1:8083/actuator/health"
log "Starting API Gateway"
PID=$(start_service "APIGateWay" "api-gateway.jar" \
SERVER_PORT=8090 \
SPRING_PROFILES_ACTIVE=docker \
EUREKA_SERVER_URI=http://127.0.0.1:8085/eureka \
ZIPKIN_BASE_URL= \
GATEWAY_ALLOWED_ORIGIN_1=* \
GATEWAY_ALLOWED_ORIGIN_PATTERN=*)
SERVICE_PIDS+=(${PID})
wait_for_http "http://127.0.0.1:8090/actuator/health"
log "All backend services are up. Launching UI server"
cd "${ROOT_DIR}/task-management-ui"
export INTERNAL_API_URL="http://127.0.0.1:8090"
exec node server.js
|