#!/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