这是indexloc提供的服务,不要输入任何密码
Skip to content

404 Not Found sudden issue! #232

@bukizzz

Description

@bukizzz

Bug 报告

问题描述

服务启动正常,可以访问管理界面,但是API调用返回404错误。昨天之前工作正常,今天突然出现此问题。

环境信息

  • 版本: 尝试过 4.1.9 和 4.2.1(当前运行 4.2.1)
  • 部署方式: Docker Compose
  • 操作系统: Ubuntu 25.04 (Wayland)

复现步骤

  1. 使用提供的 Docker Compose 配置启动服务
  2. 服务正常启动,健康检查通过
  3. 管理界面可以正常访问
  4. API 调用返回 404 错误

预期行为

API 调用应该正常工作,就像昨天之前一样。

实际行为

  • 服务启动正常,日志显示:
    • 数据库连接成功
    • 15个API密钥加载成功
    • 调度器启动成功
    • 健康检查端点正常工作
  • 但是API调用返回404错误:
    2025-07-20 15:22:00,759 | ERROR | [exceptions.py:99] | HTTP Exception: Not Found (Status: 404)
    

配置文件

Docker Compose 配置

version: '3.8'

volumes:
  mysql_data:

services:
  gemini-balance:
    image: ghcr.io/snailyp/gemini-balance:latest
    container_name: gemini-balance
    restart: unless-stopped
    ports:
      - "8007:8000"
    dns:
      - 1.1.1.1
      - 1.0.0.1
    env_file:
      - .env
    depends_on:
      mysql:
        condition: service_healthy
    volumes:
      - ./data:/app/data
    environment:
      - LANG=en_US.UTF-8
      - LC_ALL=en_US.UTF-8
    healthcheck:
      test: ["CMD-SHELL", "python -c \"import requests; exit(0) if requests.get('http://localhost:8000/health').status_code == 200 else exit(1)\""]
      interval: 30s
      timeout: 10s
      retries: 3
      start_period: 40s
    networks:
      - gemini-balance-internal
      - gemini-balance-api

  mysql:
    image: mysql:8
    container_name: gemini-balance-mysql
    restart: unless-stopped
    environment:
      MYSQL_ROOT_PASSWORD: your_root_password
      MYSQL_DATABASE: ${MYSQL_DATABASE}
      MYSQL_USER: ${MYSQL_USER}
      MYSQL_PASSWORD: ${MYSQL_PASSWORD}
    volumes:
      - mysql_data:/var/lib/mysql
    healthcheck:
      test: ["CMD", "mysqladmin", "ping", "-h", "127.0.0.1"]
      interval: 10s
      timeout: 5s
      retries: 3
      start_period: 30s
    networks:
      - gemini-balance-internal

networks:
  gemini-balance-internal:
    driver: bridge
    internal: false
  gemini-balance-api:
    driver: bridge

环境变量配置

# 数据库配置
DATABASE_TYPE=mysql
MYSQL_HOST=gemini-balance-mysql
MYSQL_PORT=3306
MYSQL_USER=gemini
MYSQL_PASSWORD=change_me
MYSQL_DATABASE=default_db

# API配置
API_KEYS=["REDACTED"]
ALLOWED_TOKENS=["REDACTED"]
AUTH_TOKEN=REDACTED
VERTEX_API_KEYS=["AQ.Abxxxxxxxxxxxxxxxxxxx"]
VERTEX_EXPRESS_BASE_URL=https://aiplatform.googleapis.com/v1beta1/publishers/google
TEST_MODEL=gemini-1.5-flash

# 模型配置
THINKING_MODELS=["gemini-2.5-flash-preview-04-17"]
THINKING_BUDGET_MAP={"gemini-2.5-flash-preview-04-17": 4000}
IMAGE_MODELS=["gemini-2.0-flash-exp"]
SEARCH_MODELS=["gemini-2.0-flash-exp","gemini-2.0-pro-exp"]
FILTERED_MODELS=["gemini-1.0-pro-vision-latest", "gemini-pro-vision", "chat-bison-001", "text-bison-001", "embedding-gecko-001"]

# 功能配置
TOOLS_CODE_EXECUTION_ENABLED=false
SHOW_SEARCH_LINK=true
SHOW_THINKING_PROCESS=true
BASE_URL=https://generativelanguage.googleapis.com/v1beta
MAX_FAILURES=10
MAX_RETRIES=3
CHECK_INTERVAL_HOURS=1
TIMEZONE=Europe/London
LANGUAGE=en
TIME_OUT=300
PROXIES=[]
PROXIES_USE_CONSISTENCY_HASH_BY_API_KEY=true

# 付费密钥和图像配置
PAID_KEY=AIzaSyxxxxxxxxxxxxxxxxxxx
CREATE_IMAGE_MODEL=imagen-3.0-generate-002
UPLOAD_PROVIDER=smms
SMMS_SECRET_TOKEN=XXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
PICGO_API_KEY=xxxx
CLOUDFLARE_IMGBED_URL=https://xxxxxxx.pages.dev/upload
CLOUDFLARE_IMGBED_AUTH_CODE=xxxxxxxxx
CLOUDFLARE_IMGBED_UPLOAD_FOLDER=

# 流优化配置
STREAM_OPTIMIZER_ENABLED=false
STREAM_MIN_DELAY=0.016
STREAM_MAX_DELAY=0.024
STREAM_SHORT_TEXT_THRESHOLD=10
STREAM_LONG_TEXT_THRESHOLD=50
STREAM_CHUNK_SIZE=5

# 日志配置
LOG_LEVEL=info
AUTO_DELETE_ERROR_LOGS_ENABLED=true
AUTO_DELETE_ERROR_LOGS_DAYS=7
AUTO_DELETE_REQUEST_LOGS_ENABLED=false
AUTO_DELETE_REQUEST_LOGS_DAYS=30

# 其他配置
FAKE_STREAM_ENABLED=True
FAKE_STREAM_EMPTY_DATA_INTERVAL_SECONDS=5
SAFETY_SETTINGS=[{"category": "HARM_CATEGORY_HARASSMENT", "threshold": "OFF"}, {"category": "HARM_CATEGORY_HATE_SPEECH", "threshold": "OFF"}, {"category": "HARM_CATEGORY_SEXUALLY_EXPLICIT", "threshold": "OFF"}, {"category": "HARM_CATEGORY_DANGEROUS_CONTENT", "threshold": "OFF"}, {"category": "HARM_CATEGORY_CIVIC_INTEGRITY", "threshold": "BLOCK_NONE"}]
URL_NORMALIZATION_ENABLED=false
TTS_MODEL=gemini-2.5-flash-preview-tts
TTS_VOICE_NAME=Zephyr
TTS_SPEED=normal

日志信息

启动日志(部分)

2025-07-20 15:19:05,081 | INFO | [key_manager.py:229] | KeyManager instance created/re-created with 15 API keys and 1 Vertex Express API keys.
2025-07-20 15:19:05,081 | INFO | [application.py:47] | Database, config sync, and KeyManager initialized successfully
2025-07-20 15:19:05,364 | INFO | [application.py:84] | Update check completed. Info: {'update_available': False, 'latest_version': None, 'error_message': None, 'current_version': '2.2.1'}
INFO: Application startup complete.
INFO: Uvicorn running on http://0.0.0.0:8000 (Press CTRL+C to quit)

错误日志

2025-07-20 15:22:00,759 | ERROR | [exceptions.py:99] | HTTP Exception: Not Found (Status: 404)
2025-07-20 15:22:13,813 | ERROR | [exceptions.py:99] | HTTP Exception: Not Found (Status: 404)
2025-07-20 15:22:18,374 | ERROR | [exceptions.py:99] | HTTP Exception: Not Found (Status: 404)

附加信息

  • API密钥已验证有效
  • 已尝试更新到最新版本,问题依然存在
  • 昨天之前工作正常
  • 健康检查端点 /health 可以正常访问
  • 管理界面可以正常访问,显示15个密钥状态正常
  • 数据库连接正常,MySQL容器运行正常

可能的原因

怀疑可能是路由配置或API端点映射问题,导致除了健康检查和管理界面外的其他API调用返回404。

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions