sin601/claude-code
0
1#!/bin/bash2# 启动 CLIProxyAPI 代理服务3# 支持任意 OpenAI 兼容 API4 5set -e6 7CONFIG_DIR="${CONFIG_DIR:-/config}"8HOME="${HOME:-/root}"9 10# 加载配置11if [ -f "${CONFIG_DIR}/config.env" ]; then12 set -a13 source "${CONFIG_DIR}/config.env"14 set +a15fi16 17# 检查是否启用代理18if [ "${ENABLE_PROXY}" != "true" ]; then19 echo "[Proxy] CLIProxyAPI is disabled."20 exit 021fi22 23# 确定 API 配置24# 优先使用 API_KEY,其次 ANTHROPIC_API_KEY25API_KEY_VALUE="${API_KEY:-${ANTHROPIC_API_KEY:-}}"26# 优先使用 API_BASE_URL27API_URL="${API_BASE_URL:-https://api.anthropic.com/v1}"28 29if [ -z "${API_KEY_VALUE}" ]; then30 echo "[Proxy] Warning: No API Key configured. Proxy will start but may not work."31fi32 33echo "[Proxy] Configuring CLIProxyAPI..."34echo "[Proxy] API URL: ${API_URL}"35echo "[Proxy] API Key: $([ -n "${API_KEY_VALUE}" ] && echo "configured" || echo "NOT SET")"36 37# 创建 CLIProxyAPI 配置38CONFIG_FILE="${HOME}/.cli-proxy-api/config.yaml"39mkdir -p "${HOME}/.cli-proxy-api"40 41# 构建提供商配置42# 支持多个 API Key(逗号分隔)43PROVIDERS_YAML=""44 45if [ -n "${API_KEY_VALUE}" ]; then46 IFS=',' read -ra KEYS <<< "${API_KEY_VALUE}"47 48 for i in "${!KEYS[@]}"; do49 KEY="${KEYS[$i]}"50 KEY=$(echo "$KEY" | xargs) # trim whitespace51 52 if [ -n "$KEY" ]; then53 PROVIDER_NAME="provider-$((i+1))"54 55 PROVIDERS_YAML+="56 - name: ${PROVIDER_NAME}57 base-url: \"${API_URL}\"58 api-key: \"${KEY}\"59 models:60 - name: \"claude-sonnet-4-20250514\"61 alias: \"claude-sonnet-4\"62 - name: \"claude-3-5-sonnet-20241022\"63 alias: \"claude-3.5-sonnet\"64 - name: \"claude-3-5-haiku-20241022\"65 alias: \"claude-3.5-haiku\"66 - name: \"claude-opus-4-20250514\"67 alias: \"claude-opus-4\"68"69 fi70 done71fi72 73# 写入配置文件74cat > "${CONFIG_FILE}" << EOF75# CLIProxyAPI Configuration76# Auto-generated for OpenAI-compatible API77 78host: ""79port: ${PROXY_PORT:-8080}80 81remote-management:82 allow-remote: false83 secret-key: "${MANAGEMENT_KEY:-}"84 85auth-dir: "${HOME}/.cli-proxy-api"86 87# API keys for authentication88api-keys:89 - "hf-space-key"90 91debug: false92 93# Routing strategy94routing:95 strategy: "round-robin"96 97# Quota exceeded behavior98quota-exceeded:99 switch-project: true100 switch-preview-model: true101 102# OpenAI compatibility providers103openai-compatibility:${PROVIDERS_YAML}104 105EOF106 107echo "[Proxy] Configuration saved to ${CONFIG_FILE}"108echo ""109echo "=== CLIProxyAPI Configuration ==="110cat "${CONFIG_FILE}"111echo ""112 113# 设置环境变量让 Claude Code 使用代理114export ANTHROPIC_BASE_URL="http://localhost:${PROXY_PORT:-8080}"115 116# 启动 CLIProxyAPI117echo "[Proxy] Starting CLIProxyAPI on port ${PROXY_PORT:-8080}..."118exec cliproxyapi --config "${CONFIG_FILE}"119 