feat(deploy): compose up 后自动 promotion-import(YH_IMPORT_PROMOTION_SITE_ID + Docker go run)
Made-with: Cursor
This commit is contained in:
@@ -117,6 +117,8 @@ bash pull-and-restart.sh
|
||||
若报错 `bash\r`,先执行 `sed -i 's/\r$//' pull-and-restart.sh restart.sh`。
|
||||
首次部署若目录为空,可先放入两个脚本,设置 `export GIT_REPO_URL='https://用户:Token@gitea.../web.git'` 后执行 `./pull-and-restart.sh` 完成克隆与启动。配置好 `server/.env` 后再次运行即可。
|
||||
|
||||
**产品视频自动导入(可选)**:在 `server/.env` 中设置 `YH_IMPORT_PROMOTION_SITE_ID=<官网 Mongo 站点 _id>` 后,每次 `./pull-and-restart.sh` / `./restart.sh` 在 `docker compose up` 后会自动将 `web/promotion/视频发布/` 导入到 `data/uploads/sites/<site_id>/promotion/social/` 并写入 `site_assets`(与 [官网](https://yuheng.yuxindazhineng.com/) `promotion-media` API 一致)。不设该变量则跳过。详见 `server/.env.example`。
|
||||
|
||||
- **拉取并重启**:`cd ~/project/yh_web && ./pull-and-restart.sh`
|
||||
- **仅重启**:`cd ~/project/yh_web && ./restart.sh`
|
||||
- **对外域名**:https://yuheng.yuxindazhineng.com(所有请求均通过该域名,见下)
|
||||
|
||||
@@ -350,6 +350,9 @@ fi
|
||||
compose_cmd down 2>/dev/null || true
|
||||
compose_cmd up -d --force-recreate
|
||||
|
||||
# 可选:web/promotion/视频发布 -> data/uploads + MongoDB(须 server/.env 中 YH_IMPORT_PROMOTION_SITE_ID)
|
||||
bash "$ROOT/scripts/run-promotion-import-on-deploy.sh" "$ROOT"
|
||||
|
||||
echo ""
|
||||
echo "[3/3] 证书与宿主机 Nginx(可选)..."
|
||||
NGINX_CONF_NAME="${NGINX_DOMAIN}.conf"
|
||||
|
||||
@@ -251,6 +251,8 @@ fi
|
||||
compose_cmd down 2>/dev/null || true
|
||||
compose_cmd up -d --force-recreate
|
||||
|
||||
bash "$ROOT/scripts/run-promotion-import-on-deploy.sh" "$ROOT"
|
||||
|
||||
if [ -f "$ROOT/nginx/$NGINX_CONF_NAME" ]; then
|
||||
run_sudo cp -f "$ROOT/nginx/$NGINX_CONF_NAME" /etc/nginx/conf.d/ 2>/dev/null || true
|
||||
if run_sudo nginx -t 2>/dev/null; then
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
#!/usr/bin/env bash
|
||||
# 将 web/promotion/视频发布 导入到 data/uploads + MongoDB site_assets(无需后台手动上传)
|
||||
# 依赖:server/.env 中 MONGODB_URI、MONGODB_DB(与 API 一致);本机可连 Mongo
|
||||
# 部署时若已在 server/.env 设置 YH_IMPORT_PROMOTION_SITE_ID,pull-and-restart/restart 会在 compose up 后自动执行等效逻辑(Docker 内 go run,见 run-promotion-import-on-deploy.sh)。
|
||||
# 本脚本:在宿主机直接 go run,依赖 server/.env 中 MONGODB_URI 能连上 Mongo(若 Mongo 仅在 compose 内网,请用自动导入或 docker 网络)
|
||||
#
|
||||
# 用法:
|
||||
# ./scripts/import-promotion-to-api.sh -site=你的站点MongoID
|
||||
|
||||
75
scripts/run-promotion-import-on-deploy.sh
Normal file
75
scripts/run-promotion-import-on-deploy.sh
Normal file
@@ -0,0 +1,75 @@
|
||||
#!/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
|
||||
@@ -6,5 +6,9 @@ MONGODB_URI=mongodb://mongo:27017
|
||||
MONGODB_DB=yxd-agent-testing
|
||||
PORT=8088
|
||||
GIN_MODE=release
|
||||
# 对外域名(CORS、日志),与 nginx 反代域名一致
|
||||
# 对外域名(CORS、日志),与 nginx 反代域名一致(官网 https://yuheng.yuxindazhineng.com/)
|
||||
ALLOWED_ORIGINS=https://yuheng.yuxindazhineng.com
|
||||
|
||||
# 部署时自动导入「视频发布」到 data/uploads + site_assets(pull-and-restart / restart 在 compose up 后执行)
|
||||
# 填官网站点 MongoDB _id(与 /api/web/routes 返回的 site_id 一致);留空则跳过
|
||||
# YH_IMPORT_PROMOTION_SITE_ID=
|
||||
|
||||
Reference in New Issue
Block a user