| #!/bin/sh |
| set -eu |
|
|
| if [ -z "${PROXY_PATH:-}" ]; then |
| PROXY_PATH="/" |
| fi |
| case "${PROXY_PATH}" in |
| /*) ;; |
| *) PROXY_PATH="/${PROXY_PATH}" ;; |
| esac |
|
|
| CONFIG_PATH="${CONFIG_PATH:-/data/config.yaml}" |
| AUTH_DIR="${AUTH_DIR:-/data/auth}" |
|
|
| mkdir -p "$(dirname "${CONFIG_PATH}")" "${AUTH_DIR}" |
| if [ -n "${CONFIG_CONTENT_B64:-}" ]; then |
| echo "Writing config from CONFIG_CONTENT_B64 to ${CONFIG_PATH}" |
| echo "${CONFIG_CONTENT_B64}" | base64 -d > "${CONFIG_PATH}" |
| elif [ -n "${CONFIG_CONTENT:-}" ]; then |
| echo "Writing config from CONFIG_CONTENT to ${CONFIG_PATH}" |
| printf '%s\n' "${CONFIG_CONTENT}" > "${CONFIG_PATH}" |
| fi |
|
|
| if [ ! -f "${CONFIG_PATH}" ]; then |
| for candidate in \ |
| /app/config.yaml \ |
| /app/config.yml \ |
| /CLIProxyAPI/config.yaml \ |
| /CLIProxyAPI/config.yml \ |
| /CLIProxyAPI/config.example.yaml \ |
| /CLIProxyAPI/config.example.yml \ |
| /CLIProxyAPI/config.sample.yaml \ |
| /CLIProxyAPI/config.sample.yml \ |
| /CLIProxyAPI/config.template.yaml \ |
| /CLIProxyAPI/config.template.yml; do |
| if [ -f "${candidate}" ]; then |
| echo "Copying default config from ${candidate} to ${CONFIG_PATH}" |
| cp "${candidate}" "${CONFIG_PATH}" |
| break |
| fi |
| done |
| fi |
|
|
| if [ -n "${CLI_PROXY_KEY:-}" ]; then |
| if [ -z "${MANAGEMENT_KEY:-}" ]; then |
| MANAGEMENT_KEY="${CLI_PROXY_KEY}" |
| fi |
| if [ -z "${API_KEYS:-}" ]; then |
| API_KEYS="${CLI_PROXY_KEY}" |
| fi |
| fi |
|
|
| if [ -f "${CONFIG_PATH}" ]; then |
| if [ -n "${MANAGEMENT_KEY:-}" ]; then |
| MGMT_ESCAPED="$(printf '%s' "${MANAGEMENT_KEY}" | sed 's/[\\/&]/\\&/g')" |
| if grep -q '^[[:space:]]*secret-key:' "${CONFIG_PATH}"; then |
| sed -i "s|^\([[:space:]]*secret-key:\).*|\1 \"${MGMT_ESCAPED}\"|" "${CONFIG_PATH}" |
| fi |
| fi |
| if [ -n "${API_KEYS:-}" ]; then |
| TMP_CONFIG="${CONFIG_PATH}.tmp" |
| awk -v keys="${API_KEYS}" ' |
| BEGIN { |
| n=split(keys, arr, /[ ,]+/); |
| in_api=0; |
| found=0; |
| } |
| function emit_keys() { |
| print "api-keys:"; |
| for (i=1; i<=n; i++) { |
| if (length(arr[i]) > 0) { |
| print " - \"" arr[i] "\""; |
| } |
| } |
| } |
| { |
| if (in_api) { |
| if ($0 ~ /^[[:space:]]*-/) { |
| next; |
| } else { |
| in_api=0; |
| } |
| } |
| if ($0 ~ /^api-keys:[[:space:]]*$/) { |
| emit_keys(); |
| in_api=1; |
| found=1; |
| next; |
| } |
| print $0; |
| } |
| END { |
| if (!found) { |
| emit_keys(); |
| } |
| } |
| ' "${CONFIG_PATH}" > "${TMP_CONFIG}" && mv "${TMP_CONFIG}" "${CONFIG_PATH}" |
| fi |
| fi |
|
|
| if [ -f "${CONFIG_PATH}" ]; then |
| ln -sf "${CONFIG_PATH}" /CLIProxyAPI/config.yaml |
| elif [ -f "/CLIProxyAPI/config.yaml" ]; then |
| echo "Using existing /CLIProxyAPI/config.yaml" |
| else |
| echo "No config file found. Set CONFIG_CONTENT or mount CONFIG_PATH." |
| fi |
| if [ -e /root/.cli-proxy-api ] && [ ! -L /root/.cli-proxy-api ]; then |
| rm -rf /root/.cli-proxy-api |
| fi |
| ln -sfn "${AUTH_DIR}" /root/.cli-proxy-api |
|
|
| NGINX_CONF_DIR="/etc/nginx/conf.d" |
| if [ -d "/etc/nginx/http.d" ]; then |
| NGINX_CONF_DIR="/etc/nginx/http.d" |
| fi |
|
|
| if [ -z "${MANAGEMENT_KEY:-}" ] && [ -f "${CONFIG_PATH}" ]; then |
| MGMT_KEY_LINE="$(sed -n 's/^[[:space:]]*secret-key[[:space:]]*:[[:space:]]*//p' "${CONFIG_PATH}" | head -n 1)" |
| MGMT_KEY_LINE="$(printf '%s' "${MGMT_KEY_LINE}" | sed 's/[[:space:]]*$//')" |
| MANAGEMENT_KEY="${MGMT_KEY_LINE#\"}" |
| MANAGEMENT_KEY="${MANAGEMENT_KEY%\"}" |
| MANAGEMENT_KEY="${MANAGEMENT_KEY#\'}" |
| MANAGEMENT_KEY="${MANAGEMENT_KEY%\'}" |
| export MANAGEMENT_KEY |
| fi |
|
|
| export PROXY_PATH CLI_PROXY_HOST CLI_PROXY_PORT PORT MANAGEMENT_KEY |
| envsubst '${PORT} ${CLI_PROXY_HOST} ${CLI_PROXY_PORT} ${MANAGEMENT_KEY}' \ |
| < /etc/nginx/templates/default.conf.template \ |
| > "${NGINX_CONF_DIR}/default.conf" |
|
|
| detect_cmd() { |
| if [ -n "${CLI_PROXY_CMD:-}" ]; then |
| echo "${CLI_PROXY_CMD}" |
| return 0 |
| fi |
| if [ -x "/docker-entrypoint.sh" ]; then |
| echo "/docker-entrypoint.sh" |
| return 0 |
| fi |
| if [ -x "/entrypoint.sh" ]; then |
| echo "/entrypoint.sh" |
| return 0 |
| fi |
| if [ -x "/CLIProxyAPI/cli-proxy-api" ]; then |
| echo "/CLIProxyAPI/cli-proxy-api" |
| return 0 |
| fi |
| if [ -x "/CLIProxyAPI/start.sh" ]; then |
| echo "/CLIProxyAPI/start.sh" |
| return 0 |
| fi |
| if [ -x "/CLIProxyAPI/run.sh" ]; then |
| echo "/CLIProxyAPI/run.sh" |
| return 0 |
| fi |
| if [ -x "/CLIProxyAPI/CLIProxyAPI" ]; then |
| echo "/CLIProxyAPI/CLIProxyAPI" |
| return 0 |
| fi |
| if [ -f "/CLIProxyAPI/main.py" ]; then |
| echo "python /CLIProxyAPI/main.py" |
| return 0 |
| fi |
| if [ -f "/CLIProxyAPI/app.py" ]; then |
| echo "python /CLIProxyAPI/app.py" |
| return 0 |
| fi |
| if [ -f "/CLIProxyAPI/server.py" ]; then |
| echo "python /CLIProxyAPI/server.py" |
| return 0 |
| fi |
| if [ -f "/CLIProxyAPI/index.js" ]; then |
| echo "node /CLIProxyAPI/index.js" |
| return 0 |
| fi |
| if [ -f "/CLIProxyAPI/package.json" ]; then |
| echo "npm start --prefix /CLIProxyAPI" |
| return 0 |
| fi |
| return 1 |
| } |
|
|
| if [ "$#" -gt 0 ]; then |
| echo "Starting CLIProxyAPI from base CMD: $*" |
| "$@" & |
| else |
| CLI_CMD="$(detect_cmd || true)" |
| if [ -z "${CLI_CMD}" ]; then |
| echo "Cannot detect how to start CLIProxyAPI." |
| echo "Set CLI_PROXY_CMD in Space Variables to the correct launch command." |
| exit 1 |
| fi |
|
|
| echo "Starting CLIProxyAPI: ${CLI_CMD}" |
| sh -c "${CLI_CMD}" & |
| fi |
|
|
| echo "Starting nginx on port ${PORT}, proxy path ${PROXY_PATH}" |
| exec nginx -g 'daemon off;' |
|
|