| #!/usr/bin/env bash |
| set -euo pipefail |
|
|
| |
| RAW_USERS="${BASIC_AUTH_USERS:-}" |
| if [[ -z "${RAW_USERS}" ]]; then |
| echo "[ERROR] BASIC_AUTH_USERS is required. Use one 'username:password' per line." >&2 |
| exit 1 |
| fi |
| RAW_USERS="${RAW_USERS//\\n/$'\n'}" |
|
|
| AUTH_FILE="/etc/caddy/users.auth" |
| > "${AUTH_FILE}" |
| chmod 600 "${AUTH_FILE}" |
|
|
| |
| while IFS= read -r line || [[ -n "${line}" ]]; do |
| line="${line%$'\r'}" |
| [[ -z "${line}" ]] && continue |
| [[ "${line}" == \ |
|
|
| if [[ "${line}" != *:* ]]; then |
| echo "[ERROR] Invalid BASIC_AUTH_USERS line: '${line}'" >&2 |
| exit 1 |
| fi |
|
|
| user="${line%%:*}" |
| pass="${line#*:}" |
| if [[ -z "${user}" || -z "${pass}" ]]; then |
| echo "[ERROR] Empty username or password is not allowed: '${line}'" >&2 |
| exit 1 |
| fi |
|
|
| hash="$(caddy hash-password --plaintext "${pass}")" |
| printf "%s %s\n" "${user}" "${hash}" >> "${AUTH_FILE}" |
| done <<< "${RAW_USERS}" |
|
|
| if [[ ! -s "${AUTH_FILE}" ]]; then |
| echo "[ERROR] No valid user entries found in BASIC_AUTH_USERS." >&2 |
| exit 1 |
| fi |
|
|
| |
| export GRADIO_SERVER_NAME="${GRADIO_SERVER_NAME:-127.0.0.1}" |
| export GRADIO_SERVER_PORT="${GRADIO_SERVER_PORT:-7861}" |
| |
| export PORT="${GRADIO_SERVER_PORT}" |
|
|
| echo "[INFO] Starting pdf2zh_next on ${GRADIO_SERVER_NAME}:${GRADIO_SERVER_PORT}" |
| pdf2zh_next --gui --server-port "${GRADIO_SERVER_PORT}" & |
| PDF_PID=$! |
|
|
| echo "[INFO] Starting caddy on :7860" |
| caddy run --config /etc/caddy/Caddyfile & |
| CADDY_PID=$! |
|
|
| cleanup() { |
| kill "${PDF_PID}" "${CADDY_PID}" 2>/dev/null || true |
| } |
| trap cleanup INT TERM EXIT |
|
|
| |
| set +e |
| wait -n "${PDF_PID}" "${CADDY_PID}" |
| EXIT_CODE=$? |
| set -e |
| echo "[ERROR] A service exited unexpectedly. Shutting down." |
| exit "${EXIT_CODE}" |
|
|