#!/bin/sh # 后端启动入口:按 *_ENABLED 开关动态等待依赖就绪,再启动应用。 # 仅等待「实际启用」的依赖,避免硬等待未启用的可选服务(与 environment-config-design 一致)。 # 某依赖超时未就绪只告警不阻断——应用自身应具备连接重试逻辑。 set -e WAIT_TIMEOUT="${WAIT_TIMEOUT:-60}" WAIT="" # postgres:正式环境(DATABASE_TYPE=pgsql)必需依赖 if [ "${DATABASE_TYPE}" = "pgsql" ]; then WAIT="$WAIT ${POSTGRES_HOST:-hunjing-postgres}:${POSTGRES_PORT:-5432}" fi # 可选依赖:仅在对应开关启用时等待 if [ "${REDIS_ENABLED}" = "true" ]; then WAIT="$WAIT ${REDIS_HOST:-hunjing-redis}:${REDIS_PORT:-6379}" fi if [ "${VECTOR_DB_ENABLED}" = "true" ] && [ "${VECTOR_DB_TYPE}" = "milvus" ]; then WAIT="$WAIT ${MILVUS_HOST:-hunjing-milvus}:${MILVUS_PORT:-19530}" fi if [ "${GRAPH_DB_ENABLED}" = "true" ]; then case "${GRAPH_DB_TYPE}" in neo4j) WAIT="$WAIT ${NEO4J_HOST:-hunjing-neo4j}:7687" ;; nebulagraph) WAIT="$WAIT ${NEBULAGRAPH_HOST:-hunjing-nebula-graphd}:${NEBULAGRAPH_PORT:-9669}" ;; esac fi for target in $WAIT; do echo "[entrypoint] 等待依赖就绪: $target" /usr/local/bin/wait-for-it.sh "$target" -t "$WAIT_TIMEOUT" \ || echo "[entrypoint] 警告: $target 未就绪,继续启动(应用应具备连接重试)" done echo "[entrypoint] 启动后端: uv run python -m app.main" exec uv run python -m app.main