Commit a406638e284c90f58438fdec5ebbd68cbe996a6f
1 parent
3a950275
up
Showing
5 changed files
with
72 additions
and
19 deletions
Show diff stats
CLAUDE.md
| ... | ... | @@ -88,7 +88,7 @@ The `searcher` supports: |
| 88 | 88 | - Supports both local and remote images |
| 89 | 89 | |
| 90 | 90 | ## Test Data |
| 91 | - | |
| 91 | +、 | |
| 92 | 92 | **Customer1 Test Dataset:** |
| 93 | 93 | - Location: `data/customer1/goods_with_pic.5years_congku.csv.shuf.1w` |
| 94 | 94 | - Contains 10,000 shuffled product records with images | ... | ... |
api/app.py
| ... | ... | @@ -51,8 +51,28 @@ def init_service(customer_id: str = "customer1", es_host: str = "http://localhos |
| 51 | 51 | |
| 52 | 52 | print(f"Configuration loaded: {_config.customer_name}") |
| 53 | 53 | |
| 54 | - # Initialize ES client | |
| 55 | - _es_client = ESClient(hosts=[es_host]) | |
| 54 | + # Get ES credentials from environment variables or .env file | |
| 55 | + es_username = os.getenv('ES_USERNAME') | |
| 56 | + es_password = os.getenv('ES_PASSWORD') | |
| 57 | + | |
| 58 | + # Try to load from config if not in env | |
| 59 | + if not es_username or not es_password: | |
| 60 | + try: | |
| 61 | + from config.env_config import get_es_config | |
| 62 | + es_config = get_es_config() | |
| 63 | + es_username = es_username or es_config.get('username') | |
| 64 | + es_password = es_password or es_config.get('password') | |
| 65 | + except Exception: | |
| 66 | + pass | |
| 67 | + | |
| 68 | + # Initialize ES client with authentication if credentials are available | |
| 69 | + if es_username and es_password: | |
| 70 | + print(f"Connecting to Elasticsearch with authentication: {es_username}") | |
| 71 | + _es_client = ESClient(hosts=[es_host], username=es_username, password=es_password) | |
| 72 | + else: | |
| 73 | + print(f"Connecting to Elasticsearch without authentication") | |
| 74 | + _es_client = ESClient(hosts=[es_host]) | |
| 75 | + | |
| 56 | 76 | if not _es_client.ping(): |
| 57 | 77 | raise ConnectionError(f"Failed to connect to Elasticsearch at {es_host}") |
| 58 | 78 | ... | ... |
api/routes/admin.py
| ... | ... | @@ -18,7 +18,7 @@ async def health_check(): |
| 18 | 18 | Returns service status and Elasticsearch connectivity. |
| 19 | 19 | """ |
| 20 | 20 | try: |
| 21 | - from main import get_es_client, get_config | |
| 21 | + from ..app import get_es_client, get_config | |
| 22 | 22 | |
| 23 | 23 | es_client = get_es_client() |
| 24 | 24 | config = get_config() |
| ... | ... | @@ -46,7 +46,7 @@ async def get_configuration(): |
| 46 | 46 | Get current customer configuration (sanitized). |
| 47 | 47 | """ |
| 48 | 48 | try: |
| 49 | - from main import get_config | |
| 49 | + from ..app import get_config | |
| 50 | 50 | |
| 51 | 51 | config = get_config() |
| 52 | 52 | |
| ... | ... | @@ -74,7 +74,7 @@ async def update_rewrite_rules(rules: Dict[str, str]): |
| 74 | 74 | rules: Dictionary of pattern -> replacement mappings |
| 75 | 75 | """ |
| 76 | 76 | try: |
| 77 | - from main import get_query_parser | |
| 77 | + from ..app import get_query_parser | |
| 78 | 78 | |
| 79 | 79 | query_parser = get_query_parser() |
| 80 | 80 | query_parser.update_rewrite_rules(rules) |
| ... | ... | @@ -94,7 +94,7 @@ async def get_rewrite_rules(): |
| 94 | 94 | Get current query rewrite rules. |
| 95 | 95 | """ |
| 96 | 96 | try: |
| 97 | - from main import get_query_parser | |
| 97 | + from ..app import get_query_parser | |
| 98 | 98 | |
| 99 | 99 | query_parser = get_query_parser() |
| 100 | 100 | rules = query_parser.get_rewrite_rules() |
| ... | ... | @@ -114,7 +114,7 @@ async def get_index_stats(): |
| 114 | 114 | Get index statistics. |
| 115 | 115 | """ |
| 116 | 116 | try: |
| 117 | - from main import get_es_client, get_config | |
| 117 | + from ..app import get_es_client, get_config | |
| 118 | 118 | |
| 119 | 119 | es_client = get_es_client() |
| 120 | 120 | config = get_config() | ... | ... |
scripts/start_backend.sh
| ... | ... | @@ -16,16 +16,30 @@ echo -e "${GREEN}========================================${NC}" |
| 16 | 16 | echo -e "${GREEN}Starting Backend API Service${NC}" |
| 17 | 17 | echo -e "${GREEN}========================================${NC}" |
| 18 | 18 | |
| 19 | -# Load config | |
| 20 | -source .env | |
| 19 | +# Load config from .env file if it exists | |
| 20 | +if [ -f .env ]; then | |
| 21 | + set -a | |
| 22 | + source .env | |
| 23 | + set +a | |
| 24 | +fi | |
| 21 | 25 | |
| 22 | 26 | echo -e "\n${YELLOW}Configuration:${NC}" |
| 23 | -echo " Customer: $CUSTOMER_ID" | |
| 24 | -echo " API Host: $API_HOST" | |
| 25 | -echo " API Port: $API_PORT" | |
| 26 | -echo " ES Host: $ES_HOST" | |
| 27 | +echo " Customer: ${CUSTOMER_ID:-customer1}" | |
| 28 | +echo " API Host: ${API_HOST:-0.0.0.0}" | |
| 29 | +echo " API Port: ${API_PORT:-6002}" | |
| 30 | +echo " ES Host: ${ES_HOST:-http://localhost:9200}" | |
| 31 | +echo " ES Username: ${ES_USERNAME:-not set}" | |
| 27 | 32 | |
| 28 | 33 | echo -e "\n${YELLOW}Starting service...${NC}" |
| 34 | + | |
| 35 | +# Export environment variables for the Python process | |
| 36 | +export CUSTOMER_ID=${CUSTOMER_ID:-customer1} | |
| 37 | +export API_HOST=${API_HOST:-0.0.0.0} | |
| 38 | +export API_PORT=${API_PORT:-6002} | |
| 39 | +export ES_HOST=${ES_HOST:-http://localhost:9200} | |
| 40 | +export ES_USERNAME=${ES_USERNAME:-} | |
| 41 | +export ES_PASSWORD=${ES_PASSWORD:-} | |
| 42 | + | |
| 29 | 43 | python -m api.app \ |
| 30 | 44 | --host $API_HOST \ |
| 31 | 45 | --port $API_PORT \ | ... | ... |
start_all.sh
| ... | ... | @@ -3,8 +3,8 @@ |
| 3 | 3 | # One-click startup script for SearchEngine |
| 4 | 4 | # This script starts everything you need |
| 5 | 5 | |
| 6 | - | |
| 7 | -set -e | |
| 6 | +# Don't exit on error - we want to continue even if some checks fail | |
| 7 | +# set -e | |
| 8 | 8 | |
| 9 | 9 | cd "$(dirname "$0")" |
| 10 | 10 | |
| ... | ... | @@ -65,14 +65,33 @@ echo -e "${GREEN}日志文件: logs/backend.log${NC}" |
| 65 | 65 | |
| 66 | 66 | # Wait for backend to start |
| 67 | 67 | echo -e "${YELLOW}等待后端服务启动...${NC}" |
| 68 | -sleep 5 | |
| 68 | +MAX_RETRIES=12 | |
| 69 | +RETRY_COUNT=0 | |
| 70 | +BACKEND_READY=false | |
| 71 | + | |
| 72 | +while [ $RETRY_COUNT -lt $MAX_RETRIES ]; do | |
| 73 | + sleep 2 | |
| 74 | + if curl -s http://localhost:6002/ > /dev/null 2>&1; then | |
| 75 | + BACKEND_READY=true | |
| 76 | + break | |
| 77 | + fi | |
| 78 | + RETRY_COUNT=$((RETRY_COUNT + 1)) | |
| 79 | + echo -e "${YELLOW} 等待中... ($RETRY_COUNT/$MAX_RETRIES)${NC}" | |
| 80 | +done | |
| 69 | 81 | |
| 70 | 82 | # Check if backend is running |
| 71 | -if curl -s http://localhost:6002/admin/health > /dev/null 2>&1; then | |
| 83 | +if [ "$BACKEND_READY" = true ]; then | |
| 72 | 84 | echo -e "${GREEN}✓ 后端服务运行正常${NC}" |
| 85 | + # Try health check, but don't fail if it's not ready yet | |
| 86 | + if curl -s http://localhost:6002/admin/health > /dev/null 2>&1; then | |
| 87 | + echo -e "${GREEN}✓ 健康检查通过${NC}" | |
| 88 | + else | |
| 89 | + echo -e "${YELLOW}⚠ 健康检查未通过,但服务已启动${NC}" | |
| 90 | + fi | |
| 73 | 91 | else |
| 74 | 92 | echo -e "${RED}✗ 后端服务启动失败,请检查日志: logs/backend.log${NC}" |
| 75 | - exit 1 | |
| 93 | + echo -e "${YELLOW}提示: 后端服务可能需要更多时间启动,或者检查端口是否被占用${NC}" | |
| 94 | + # Don't exit - let user decide whether to continue | |
| 76 | 95 | fi |
| 77 | 96 | |
| 78 | 97 | # Step 4: Start frontend | ... | ... |