|
|
#!/usr/bin/env bash |
|
|
set -euo pipefail |
|
|
|
|
|
export PORT=${PORT:-7860} |
|
|
export FRONTEND_PORT=${FRONTEND_PORT:-3000} |
|
|
export BACKEND_PORT=${BACKEND_PORT:-3001} |
|
|
export REDIS_PORT=${REDIS_PORT:-6379} |
|
|
export REDIS_HOST=${REDIS_HOST:-127.0.0.1} |
|
|
export REDIS_PASSWORD=${REDIS_PASSWORD:-} |
|
|
export ADMIN_TOKEN=${ADMIN_TOKEN:-admin-token} |
|
|
|
|
|
|
|
|
mkdir -p /app/uploads |
|
|
|
|
|
|
|
|
redis_pid="" |
|
|
if [[ -z "${REDIS_URL:-}" && ("$REDIS_HOST" == "127.0.0.1" || "$REDIS_HOST" == "localhost") ]]; then |
|
|
redis-server --port "$REDIS_PORT" --protected-mode no --save "" --appendonly no & |
|
|
redis_pid=$! |
|
|
fi |
|
|
|
|
|
echo "Waiting for Redis to be ready on $REDIS_HOST:$REDIS_PORT..." |
|
|
if [[ -n "${REDIS_URL:-}" ]]; then |
|
|
redis_cli_args=("-u" "$REDIS_URL") |
|
|
else |
|
|
redis_cli_args=("-h" "$REDIS_HOST" "-p" "$REDIS_PORT") |
|
|
fi |
|
|
if [[ -n "$REDIS_PASSWORD" ]]; then |
|
|
redis_cli_args+=("--pass" "$REDIS_PASSWORD") |
|
|
fi |
|
|
for i in {1..20}; do |
|
|
if redis-cli "${redis_cli_args[@]}" ping >/dev/null 2>&1; then |
|
|
echo "Redis is ready." |
|
|
break |
|
|
fi |
|
|
sleep 0.5 |
|
|
if [[ $i -eq 20 ]]; then |
|
|
echo "Redis did not start in time" >&2 |
|
|
exit 1 |
|
|
fi |
|
|
done |
|
|
|
|
|
|
|
|
( |
|
|
cd /app/apps/backend |
|
|
PORT="$BACKEND_PORT" REDIS_HOST="$REDIS_HOST" REDIS_PORT="$REDIS_PORT" REDIS_PASSWORD="$REDIS_PASSWORD" REDIS_URL="$REDIS_URL" ADMIN_TOKEN="$ADMIN_TOKEN" pnpm start:prod |
|
|
) & |
|
|
backend_pid=$! |
|
|
|
|
|
|
|
|
( |
|
|
cd /app/apps/frontend |
|
|
PORT="$FRONTEND_PORT" pnpm start --hostname 0.0.0.0 --port "$FRONTEND_PORT" |
|
|
) & |
|
|
frontend_pid=$! |
|
|
|
|
|
|
|
|
envsubst '${PORT} ${FRONTEND_PORT} ${BACKEND_PORT}' < /app/deploy/hf/nginx.conf.template > /etc/nginx/nginx.conf |
|
|
nginx -g 'daemon off;' & |
|
|
nginx_pid=$! |
|
|
|
|
|
pids=() |
|
|
if [[ -n "$redis_pid" ]]; then |
|
|
pids+=($redis_pid) |
|
|
fi |
|
|
pids+=($backend_pid $frontend_pid $nginx_pid) |
|
|
|
|
|
cleanup() { |
|
|
echo "Shutting down services..." |
|
|
for pid in "${pids[@]}"; do |
|
|
if kill -0 "$pid" 2>/dev/null; then |
|
|
kill "$pid" 2>/dev/null || true |
|
|
fi |
|
|
done |
|
|
} |
|
|
|
|
|
trap cleanup EXIT |
|
|
|
|
|
|
|
|
wait -n "${pids[@]}" |
|
|
|