76 lines
2.7 KiB
Bash
76 lines
2.7 KiB
Bash
#!/usr/bin/env bash
|
||
# 在部署(compose up)之后执行:将 web/promotion/视频发布 导入 data/uploads + MongoDB site_assets。
|
||
# 触发条件:环境变量或 server/.env 中设置了 YH_IMPORT_PROMOTION_SITE_ID(Mongo 站点 _id)。
|
||
# 使用 Docker 内 golang 执行 go run,与 compose 内 mongo 同网(mongodb://mongo:27017),宿主机无需安装 Go。
|
||
# 用法:由 pull-and-restart.sh / restart.sh 调用;勿单独在 compose 未启动时依赖 mongo 网络。
|
||
set +e
|
||
ROOT="${1:-}"
|
||
if [ -z "$ROOT" ] || [ ! -d "$ROOT/server" ]; then
|
||
echo "run-promotion-import-on-deploy.sh: 无效项目根目录" >&2
|
||
exit 0
|
||
fi
|
||
ROOT="$(cd "$ROOT" && pwd)"
|
||
|
||
SITE="${YH_IMPORT_PROMOTION_SITE_ID:-}"
|
||
if [ -z "$SITE" ] && [ -f "$ROOT/server/.env" ]; then
|
||
SITE="$(grep -E '^[[:space:]]*YH_IMPORT_PROMOTION_SITE_ID=' "$ROOT/server/.env" 2>/dev/null | tail -1 | cut -d= -f2- | tr -d '\r' | sed "s/^[\"']//;s/[\"']$//" | sed 's/^[[:space:]]*//;s/[[:space:]]*$//')"
|
||
fi
|
||
if [ -z "$SITE" ]; then
|
||
echo "跳过 promotion-import:未设置 YH_IMPORT_PROMOTION_SITE_ID(可在 server/.env 中配置)。"
|
||
exit 0
|
||
fi
|
||
|
||
SRC_DIR="$ROOT/web/promotion/视频发布"
|
||
if [ ! -d "$SRC_DIR" ]; then
|
||
echo "跳过 promotion-import:无源目录 $SRC_DIR"
|
||
exit 0
|
||
fi
|
||
|
||
DOCKER="docker"
|
||
if ! docker info >/dev/null 2>&1; then
|
||
if sudo docker info >/dev/null 2>&1; then
|
||
DOCKER="sudo docker"
|
||
else
|
||
echo "警告: 无法使用 docker,跳过 promotion-import" >&2
|
||
exit 0
|
||
fi
|
||
fi
|
||
|
||
PROJECT_NAME="${COMPOSE_PROJECT_NAME:-$(basename "$ROOT")}"
|
||
NET="${PROJECT_NAME}_yh_net"
|
||
if ! $DOCKER network inspect "$NET" >/dev/null 2>&1; then
|
||
echo "警告: 未找到 Docker 网络 $NET(COMPOSE_PROJECT_NAME 是否一致?),跳过 promotion-import" >&2
|
||
exit 0
|
||
fi
|
||
|
||
REGISTRY_MIRROR="${REGISTRY_MIRROR:-docker.m.daocloud.io/library/}"
|
||
GOIMAGE="${REGISTRY_MIRROR}golang:1.21-alpine"
|
||
GOPROXY="${GOPROXY:-https://goproxy.cn,direct}"
|
||
|
||
ENV_FILE_ARG=()
|
||
if [ -f "$ROOT/server/.env" ]; then
|
||
ENV_FILE_ARG=(--env-file "$ROOT/server/.env")
|
||
fi
|
||
|
||
echo ""
|
||
echo "promotion-import:site=$SITE(源=$SRC_DIR -> uploads=/uploads)..."
|
||
mkdir -p "$ROOT/data/uploads"
|
||
|
||
if ! $DOCKER run --rm \
|
||
--network "$NET" \
|
||
-v "$ROOT/server:/src" \
|
||
-v "$ROOT/data/uploads:/uploads" \
|
||
-v "$SRC_DIR:/import-src:ro" \
|
||
"${ENV_FILE_ARG[@]}" \
|
||
-e MONGODB_URI=mongodb://mongo:27017 \
|
||
-e GOPROXY="$GOPROXY" \
|
||
-e YH_PI_SITE="$SITE" \
|
||
"$GOIMAGE" \
|
||
sh -c 'cd /src && go run -mod=vendor ./cmd/promotion-import/ -site="$YH_PI_SITE" -src=/import-src -upload=/uploads'; then
|
||
echo "警告: promotion-import 未成功,可手动执行: ./scripts/import-promotion-to-api.sh -site=$SITE" >&2
|
||
fi
|
||
|
||
chmod -R a+rX "$ROOT/data/uploads" 2>/dev/null || sudo chmod -R a+rX "$ROOT/data/uploads" 2>/dev/null || true
|
||
|
||
exit 0
|