Files
memind/scripts/install-imgproxy-prod.sh

112 lines
3.1 KiB
Bash
Executable File

#!/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}" <<EOF
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>Label</key>
<string>${LABEL}</string>
<key>ProgramArguments</key>
<array>
<string>/bin/bash</string>
<string>-lc</string>
<string>
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}'
</string>
</array>
<key>WorkingDirectory</key>
<string>${ROOT}</string>
<key>EnvironmentVariables</key>
<dict>
<key>PATH</key>
<string>/opt/homebrew/bin:/opt/homebrew/opt/node@24/bin:/usr/local/bin:/usr/bin:/bin</string>
</dict>
<key>RunAtLoad</key>
<true/>
<key>KeepAlive</key>
<true/>
<key>ThrottleInterval</key>
<integer>10</integer>
<key>StandardOutPath</key>
<string>${LOG_FILE}</string>
<key>StandardErrorPath</key>
<string>${LOG_FILE}</string>
</dict>
</plist>
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"