entrypoint.sh 1.4 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849
  1. #!/bin/sh
  2. set -e
  3. # Include app binaries in our path
  4. export PATH="/app/.venv/bin:$PATH"
  5. # Shared config
  6. : "${ROOM_CAL_DATA_HOME:=/config}"
  7. export ROOM_CAL_DATA_HOME
  8. if [ -z "$TZ" ] && [ -f "$ROOM_CAL_DATA_HOME/config.json" ]; then
  9. TZ=$(python3 -c "import json,sys; print(json.load(open('$ROOM_CAL_DATA_HOME/config.json')).get('timezone',''))" 2>/dev/null || true)
  10. fi
  11. : "${TZ:=UTC}"
  12. export TZ
  13. if [ -z "$ROOM_CAL_API_URL" ] && [ -f "$ROOM_CAL_DATA_HOME/config.json" ]; then
  14. ROOM_CAL_API_URL=$(python3 -c "import json,sys; print(json.load(open('$ROOM_CAL_DATA_HOME/config.json')).get('api_url',''))" 2>/dev/null || true)
  15. fi
  16. export ROOM_CAL_API_URL
  17. SERVICE="${1:-api}"
  18. # Shared API config
  19. : "${API_HOST:=0.0.0.0}"
  20. : "${API_PORT:=8000}"
  21. : "${LOG_LEVEL:=info}"
  22. # App builds its own loopback URL from API_PORT (internal credential upload)
  23. export API_PORT
  24. LOG_CONFIG=/etc/uvicorn_log.json
  25. [ -f "${ROOM_CAL_DATA_HOME}/uvicorn_log.json" ] && LOG_CONFIG="${ROOM_CAL_DATA_HOME}/uvicorn_log.json"
  26. # Calc-only API
  27. if [ "$SERVICE" = "calc" ]; then
  28. exec uvicorn "room_cal.api.calc_app:app" \
  29. --host "$API_HOST" \
  30. --port "$API_PORT" \
  31. --log-config "$LOG_CONFIG" \
  32. --log-level "$LOG_LEVEL"
  33. # Standard API
  34. else
  35. export DISPLAY=:99
  36. Xvfb ${DISPLAY} -screen 0 1280x720x24 -ac &
  37. exec uvicorn "room_cal.api:create_app" --factory \
  38. --host "$API_HOST" \
  39. --port "$API_PORT" \
  40. --log-config "$LOG_CONFIG" \
  41. --log-level "$LOG_LEVEL"
  42. fi