feat: improve mindspace asset handling and local runtime paths
This commit is contained in:
Executable
+111
@@ -0,0 +1,111 @@
|
||||
#!/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"
|
||||
Reference in New Issue
Block a user