File size: 1,728 Bytes
2343011 5f3b0b8 2343011 a131547 2343011 | 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 | #!/usr/bin/env bash
set -euo pipefail
FASTAPI_PID=""
PROMETHEUS_PID=""
GRAFANA_PID=""
NGINX_PID=""
MONITOR_PID=""
cleanup() {
for pid in "${MONITOR_PID}" "${NGINX_PID}" "${GRAFANA_PID}" "${PROMETHEUS_PID}" "${FASTAPI_PID}"; do
if [[ -n "${pid}" ]]; then
kill "${pid}" 2>/dev/null || true
fi
done
}
trap cleanup INT TERM EXIT
cd /app
# Source HF Spaces live-mode config if present (overrides Dockerfile defaults)
if [[ -f /app/.env.hf ]]; then
echo "Loading .env.hf..."
set -a
# shellcheck source=/dev/null
source /app/.env.hf
set +a
fi
uvicorn server.app:app --host 127.0.0.1 --port 8000 &
FASTAPI_PID=$!
/opt/prometheus/prometheus \
--config.file=/etc/prometheus/prometheus.yml \
--storage.tsdb.path=/tmp/prometheus-data \
--web.listen-address=127.0.0.1:9090 \
--web.route-prefix=/prometheus \
--web.external-url=/prometheus \
&
PROMETHEUS_PID=$!
/opt/grafana/bin/grafana-server \
--homepath /opt/grafana \
--config /etc/grafana/grafana.ini \
cfg:default.paths.data=/var/lib/grafana \
cfg:default.paths.logs=/var/log/grafana \
cfg:default.paths.plugins=/var/lib/grafana/plugins \
cfg:default.paths.provisioning=/etc/grafana/provisioning \
&
GRAFANA_PID=$!
nginx -g "daemon off;" &
NGINX_PID=$!
monitor_children() {
while true; do
for pid in "${FASTAPI_PID}" "${PROMETHEUS_PID}" "${GRAFANA_PID}"; do
if ! kill -0 "${pid}" 2>/dev/null; then
echo "A backend service exited unexpectedly." >&2
kill "${NGINX_PID}" 2>/dev/null || true
exit 1
fi
done
sleep 2
done
}
monitor_children &
MONITOR_PID=$!
wait "${NGINX_PID}"
|