| #!/usr/bin/env sh |
|
|
| set -eu |
|
|
| CONFIG_PATH="${CONFIG_PATH:-/CLIProxyAPI/config.yaml}" |
| PORT="${PORT:-8317}" |
|
|
|
|
| ensure_dir_writable() { |
| |
| dir="$1" |
| if [ -d "$dir" ]; then |
| |
| if [ -w "$dir" ]; then |
| return 0 |
| else |
| chmod 777 "$dir" 2>/dev/null || return 1 |
| return 0 |
| fi |
| else |
| mkdir -p "$dir" 2>/dev/null || return 1 |
| return 0 |
| fi |
| } |
|
|
|
|
| if [ -n "${AUTH_DIR:-}" ]; then |
| AUTH_DIR="$AUTH_DIR" |
| else |
| if ensure_dir_writable /data 2>/dev/null; then |
| AUTH_DIR="/data/auths" |
| else |
| AUTH_DIR="/tmp/auths" |
| fi |
| fi |
|
|
| ensure_dir_writable "$AUTH_DIR" || { |
| echo "WARN: $AUTH_DIR 不可写,回退到 /tmp/auths" |
| AUTH_DIR="/tmp/auths" |
| ensure_dir_writable "$AUTH_DIR" |
| } |
|
|
| CONFIG_DIR="$(dirname "$CONFIG_PATH")" |
| if ! ensure_dir_writable "$CONFIG_DIR"; then |
| echo "WARN: $CONFIG_DIR 不可写,切换 CONFIG_PATH 到 /tmp/config.yaml" |
| CONFIG_DIR="/tmp" |
| CONFIG_PATH="/tmp/config.yaml" |
| ensure_dir_writable "$CONFIG_DIR" |
| fi |
|
|
|
|
| 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}" |
|
|
| 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" |
|
|
| exec /CLIProxyAPI/cli-proxy-api --config "$CONFIG_PATH" |
|
|