#!/usr/bin/env sh set -eu APP_PORT="${APP_PORT:-4173}" PUBLIC_PORT="${PORT:-7860}" export APP_ORIGIN="${APP_ORIGIN:-http://127.0.0.1:${APP_PORT}}" export REMOTE_FOLDER="${REMOTE_FOLDER:-huggingface:notes}" APP_PID="" PROXY_PID="" log() { printf '%s\n' "$*" } setup_rclone_config() { if [ -n "${RCLONE_CONF:-}" ] || [ -n "${RCLONE_CONFIG_BASE64:-}" ] || [ -n "${RCLONE_CONFIG_CONTENT:-}" ]; then mkdir -p /root/.config/rclone umask 077 export RCLONE_CONFIG="${RCLONE_CONFIG:-/root/.config/rclone/rclone.conf}" if [ -n "${RCLONE_CONF:-}" ]; then printf '%s' "$RCLONE_CONF" > "$RCLONE_CONFIG" log "rclone config loaded from RCLONE_CONF." elif [ -n "${RCLONE_CONFIG_BASE64:-}" ]; then printf '%s' "$RCLONE_CONFIG_BASE64" | base64 -d > "$RCLONE_CONFIG" log "rclone config loaded from RCLONE_CONFIG_BASE64." else printf '%s' "$RCLONE_CONFIG_CONTENT" > "$RCLONE_CONFIG" log "rclone config loaded from RCLONE_CONFIG_CONTENT." fi chmod 600 "$RCLONE_CONFIG" return fi log "No rclone config file secret found; using rclone environment remote config if provided." } shutdown() { log "Shutting down, running final backup..." node scripts/backup-sqlite.mjs --backup >/tmp/final-backup.log 2>&1 || log "Final backup failed." if [ -n "$PROXY_PID" ]; then kill "$PROXY_PID" 2>/dev/null || true; fi if [ -n "$APP_PID" ]; then kill "$APP_PID" 2>/dev/null || true; fi wait 2>/dev/null || true } trap shutdown INT TERM mkdir -p data setup_rclone_config log "Restoring database from ${REMOTE_FOLDER}/notes.db if it exists..." node scripts/backup-sqlite.mjs --restore || log "Restore skipped or failed; continuing with local initialization." log "Starting app on ${APP_ORIGIN}..." PORT="$APP_PORT" node server.mjs & APP_PID="$!" log "Starting backup proxy on port ${PUBLIC_PORT}..." PORT="$PUBLIC_PORT" node scripts/backup-proxy.mjs & PROXY_PID="$!" wait "$PROXY_PID"