#!/usr/bin/env bash set -euo pipefail ROOT="${ROOT:-/Users/john/Project/Memind}" ENV_FILE="${ENV_FILE:-${ROOT}/.env}" LABEL="${LABEL:-cn.tkmind.imgproxy}" PLIST="${HOME}/Library/LaunchAgents/${LABEL}.plist" LOG_DIR="${HOME}/Library/Logs" LOG_FILE="${LOG_DIR}/imgproxy.log" IMGPROXY_BIN="${IMGPROXY_BIN:-/opt/homebrew/bin/imgproxy}" IMGPROXY_BIND="${IMGPROXY_BIND:-127.0.0.1:20081}" UID_NUM="$(id -u)" GUI="gui/${UID_NUM}" if [[ ! -f "${ENV_FILE}" ]]; then echo "未找到环境文件: ${ENV_FILE}" >&2 exit 1 fi if [[ ! -x "${IMGPROXY_BIN}" ]]; then echo "未找到 imgproxy: ${IMGPROXY_BIN}" >&2 echo "请先在 103 执行: brew install imgproxy" >&2 exit 1 fi mkdir -p "${HOME}/Library/LaunchAgents" "${LOG_DIR}" set -a source "${ENV_FILE}" set +a MINDSPACE_STORAGE_ROOT="${MINDSPACE_STORAGE_ROOT:-${ROOT}/data/mindspace}" IMGPROXY_SIGNING_KEY="${IMGPROXY_SIGNING_KEY:-}" IMGPROXY_SIGNING_SALT="${IMGPROXY_SIGNING_SALT:-}" if [[ -z "${IMGPROXY_SIGNING_KEY}" || -z "${IMGPROXY_SIGNING_SALT}" ]]; then echo "缺少 IMGPROXY_SIGNING_KEY / IMGPROXY_SIGNING_SALT,无法安装 imgproxy" >&2 exit 1 fi cat >"${PLIST}" < Label ${LABEL} ProgramArguments /bin/bash -lc export IMGPROXY_BIND='${IMGPROXY_BIND}'; export IMGPROXY_LOCAL_FILESYSTEM_ROOT='${MINDSPACE_STORAGE_ROOT}'; export IMGPROXY_KEY='${IMGPROXY_SIGNING_KEY}'; export IMGPROXY_SALT='${IMGPROXY_SIGNING_SALT}'; export IMGPROXY_USE_ETAG='true'; export IMGPROXY_ENABLE_WEBP_DETECTION='true'; exec '${IMGPROXY_BIN}' WorkingDirectory ${ROOT} EnvironmentVariables PATH /opt/homebrew/bin:/opt/homebrew/opt/node@24/bin:/usr/local/bin:/usr/bin:/bin RunAtLoad KeepAlive ThrottleInterval 10 StandardOutPath ${LOG_FILE} StandardErrorPath ${LOG_FILE} EOF if launchctl print "${GUI}/${LABEL}" >/dev/null 2>&1; then launchctl bootout "${GUI}/${LABEL}" 2>/dev/null || true sleep 1 fi launchctl bootstrap "${GUI}" "${PLIST}" launchctl enable "${GUI}/${LABEL}" launchctl kickstart -k "${GUI}/${LABEL}" echo "等待 imgproxy 就绪..." for _ in $(seq 1 20); do if curl -sf "http://${IMGPROXY_BIND}/health" >/dev/null 2>&1; then break fi sleep 1 done echo "" echo "=== imgproxy 状态 ===" launchctl list | grep "${LABEL}" || true curl -i "http://${IMGPROXY_BIND}/health" || true echo "" echo "LaunchAgent: ${PLIST}" echo "Log file: ${LOG_FILE}" echo "Storage: ${MINDSPACE_STORAGE_ROOT}" echo "Bind: ${IMGPROXY_BIND}" echo "" echo "如果这是 103 生产环境,记得把 Portal .env 中的 IMGPROXY_BASE_URL 设为:" echo " IMGPROXY_BASE_URL=https://img.tkmind.cn"