feat: 更新首页信息处理模型,支持内存缓存与过期机制;添加全量目录同步脚本

This commit is contained in:
yuxuanhui
2026-09-12 10:33:40 +08:00
parent b9975e58e9
commit 9dee2de039
7 changed files with 295 additions and 20 deletions
+80
View File
@@ -0,0 +1,80 @@
#!/usr/bin/env bash
set -Eeuo pipefail
# 修改这三个值即可。
REGION="EUR"
UNIVERSE="TOP2500"
DELAY="1"
PROJECT_NAME="${COMPOSE_PROJECT_NAME:-wq-alpha-production}"
BACKEND_PYTHON="/app/.venv/bin/python"
if ! docker info >/dev/null; then
echo "ERROR: 无法连接 Docker,请检查 1Panel 任务的 Docker 访问权限" >&2
exit 1
fi
# 先检查 docker ps 的退出状态;进程替换会掩盖查询失败。
if ! CONTAINER_NAMES="$(
docker ps \
--filter "status=running" \
--filter "label=com.docker.compose.project=${PROJECT_NAME}" \
--filter "label=com.docker.compose.service=backend" \
--format '{{.Names}}'
)"; then
echo "ERROR: 查询 production backend 容器失败" >&2
exit 1
fi
BACKEND_CONTAINERS=()
while IFS= read -r container; do
if [ -n "$container" ]; then
BACKEND_CONTAINERS+=("$container")
fi
done <<< "$CONTAINER_NAMES"
if [ "${#BACKEND_CONTAINERS[@]}" -eq 0 ]; then
echo "ERROR: 没有找到 production backend 容器,Compose 项目名:${PROJECT_NAME}" >&2
exit 1
fi
if [ "${#BACKEND_CONTAINERS[@]}" -gt 1 ]; then
echo "ERROR: 找到多个 production backend 容器,拒绝选择:" >&2
printf ' %s\n' "${BACKEND_CONTAINERS[@]}" >&2
exit 1
fi
BACKEND_CONTAINER="${BACKEND_CONTAINERS[0]}"
HEALTH_STATUS="$(
docker inspect \
--format '{{if .State.Health}}{{.State.Health.Status}}{{else}}none{{end}}' \
"$BACKEND_CONTAINER"
)"
if [ "$HEALTH_STATUS" != "healthy" ]; then
echo "ERROR: backend 容器当前不健康,状态:${HEALTH_STATUS}" >&2
exit 1
fi
if ! docker exec "$BACKEND_CONTAINER" test -x "$BACKEND_PYTHON"; then
echo "ERROR: 容器中不存在可执行命令:${BACKEND_PYTHON}" >&2
exit 1
fi
if ! docker exec --workdir /app "$BACKEND_CONTAINER" \
"$BACKEND_PYTHON" -m app.cli catalog-sync --help >/dev/null; then
echo "ERROR: catalog-sync CLI 不可用,请确认已部署包含全量目录同步的镜像" >&2
exit 1
fi
if ! docker exec "$BACKEND_CONTAINER" sh -c \
'test -n "${DATABASE_URL:-}" && test -n "${ENCRYPTION_KEY:-}" && test -n "${ADMIN_PASSWORD:-}"'; then
echo "ERROR: 容器缺少 DATABASE_URL、ENCRYPTION_KEY 或 ADMIN_PASSWORD" >&2
exit 1
fi
echo "使用容器:${BACKEND_CONTAINER}"
echo "开始全量同步:${REGION} / ${UNIVERSE} / Delay ${DELAY}"
# 沿用容器环境和现有后台执行器,不创建另一套同步进程。
# 保留 CLI 退出码;等待超时不取消后台任务。
exec docker exec --workdir /app \
"$BACKEND_CONTAINER" \
"$BACKEND_PYTHON" -u -m app.cli catalog-sync \
--region "$REGION" --universe "$UNIVERSE" --delay "$DELAY"