| #!/usr/bin/env sh |
|
|
| set -eu |
|
|
| |
| CONFIG_PATH="${CONFIG_PATH:-/tmp/config.yaml}" |
| PORT="${PORT:-8317}" |
| AUTH_DIR="${AUTH_DIR:-/tmp/auths}" |
|
|
| |
| REMOTE_SECRET="${REMOTE_SECRET:-${MANAGEMENT_PASSWORD:-}}" |
| ALLOW_REMOTE="${ALLOW_REMOTE:-true}" |
| DISABLE_PANEL="${DISABLE_PANEL:-false}" |
| DEBUG="${DEBUG:-false}" |
| LOG_TO_FILE="${LOG_TO_FILE:-false}" |
| USAGE_STATS_ENABLED="${USAGE_STATS_ENABLED:-true}" |
| REQUEST_RETRY="${REQUEST_RETRY:-3}" |
| SWITCH_PROJECT="${SWITCH_PROJECT:-true}" |
| SWITCH_PREVIEW_MODEL="${SWITCH_PREVIEW_MODEL:-true}" |
|
|
| |
| mkdir -p "$(dirname "$CONFIG_PATH")" "$AUTH_DIR" || true |
|
|
| |
| API_KEYS_INPUT="${API_KEYS:-}" |
| API_KEYS_YAML="[]" |
| if [ -n "$API_KEYS_INPUT" ]; then |
| tmp="/tmp/_keys.yaml" |
| : > "$tmp" |
| |
| echo "$API_KEYS_INPUT" | tr ',' '\n' | sed 's/^[[:space:]]*//;s/[[:space:]]*$//' | sed '/^$/d' | \ |
| while IFS= read -r key; do |
| esc=$(printf '%s' "$key" | sed 's/\\/\\\\/g; s/"/\\"/g') |
| printf ' - "%s"\n' "$esc" >> "$tmp" |
| done |
| if [ -s "$tmp" ]; then |
| API_KEYS_YAML="\n$(cat "$tmp")" |
| fi |
| fi |
|
|
| |
| cat > "$CONFIG_PATH" <<EOF |
| port: ${PORT} |
| remote-management: |
| allow-remote: ${ALLOW_REMOTE} |
| secret-key: "${REMOTE_SECRET}" |
| disable-control-panel: ${DISABLE_PANEL} |
| auth-dir: "${AUTH_DIR}" |
| |
| debug: ${DEBUG} |
| logging-to-file: ${LOG_TO_FILE} |
| usage-statistics-enabled: ${USAGE_STATS_ENABLED} |
| request-retry: ${REQUEST_RETRY} |
| |
| quota-exceeded: |
| switch-project: ${SWITCH_PROJECT} |
| switch-preview-model: ${SWITCH_PREVIEW_MODEL} |
| |
| api-keys:${API_KEYS_YAML} |
| EOF |
|
|
| echo "INFO: config.yaml 已生成于 $CONFIG_PATH" |
| echo "INFO: auth-dir = $AUTH_DIR" |
|
|
| |
| if [ -n "${PGSTORE_DSN:-}" ]; then |
| export PGSTORE_LOCAL_PATH="${PGSTORE_LOCAL_PATH:-/tmp}" |
| mkdir -p "${PGSTORE_LOCAL_PATH}/pgstore" || true |
| fi |
|
|
| |
| exec_with_cd() { |
| cd /tmp || true |
| exec "$1" --config "$CONFIG_PATH" |
| } |
|
|
| |
| if command -v CLIProxyAPI >/dev/null 2>&1; then |
| exec_with_cd "$(command -v CLIProxyAPI)" |
| fi |
| if command -v cli-proxy-api >/dev/null 2>&1; then |
| exec_with_cd "$(command -v cli-proxy-api)" |
| fi |
|
|
| |
| for p in \ |
| /CLIProxyAPI/CLIProxyAPI \ |
| /CLIProxyAPI/cli-proxy-api \ |
| /usr/local/bin/CLIProxyAPI \ |
| /usr/local/bin/cli-proxy-api \ |
| /usr/bin/CLIProxyAPI \ |
| /usr/bin/cli-proxy-api \ |
| /bin/CLIProxyAPI \ |
| /bin/cli-proxy-api |
| do |
| if [ -x "$p" ]; then |
| echo "INFO: 使用可执行文件: $p" |
| exec_with_cd "$p" |
| fi |
| done |
|
|
| |
| echo "FATAL: 找不到 CLIProxyAPI 可执行文件。列出常见目录帮助排查:" >&2 |
| echo "------ ls -l /CLIProxyAPI ------" >&2 |
| ls -l /CLIProxyAPI 2>/dev/null || true |
| echo "------ which -a CLIProxyAPI / cli-proxy-api ------" >&2 |
| which -a CLIProxyAPI 2>/dev/null || true |
| which -a cli-proxy-api 2>/dev/null || true |
| exit 127 |
|
|