112 lines
3.1 KiB
Bash
Executable File
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"
|