cli2api / start.sh
hequ's picture
Update start.sh
36d870e verified
raw
history blame
2.43 kB
#!/usr/bin/env sh
set -eu
CONFIG_PATH="${CONFIG_PATH:-/CLIProxyAPI/config.yaml}"
PORT="${PORT:-8317}"
ensure_dir_writable() {
# $1 = 目标目录
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"