|
|
#!/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 |
|
|
|