From 1710a11dad23d8fb9c364e5677b6c46ab9cd376f Mon Sep 17 00:00:00 2001 From: whm <973418690@qq.com> Date: Sat, 21 Mar 2026 21:35:11 +0800 Subject: [PATCH] =?UTF-8?q?feat(deploy):=20=E6=8B=89=E5=8F=96=E5=90=8E?= =?UTF-8?q?=E8=87=AA=E5=8A=A8=E5=90=88=E5=B9=B6=20server/.env.example=20?= =?UTF-8?q?=E7=BC=BA=E5=A4=B1=E9=94=AE=EF=BC=8C=E6=9C=8D=E5=8A=A1=E5=99=A8?= =?UTF-8?q?=E5=8F=AA=E8=B7=91=20pull-and-restart?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Made-with: Cursor --- README.md | 2 +- pull-and-restart.sh | 5 ++++ restart.sh | 1 + scripts/merge-server-env-from-example.sh | 30 ++++++++++++++++++++++++ server/.env.example | 4 ++-- 5 files changed, 39 insertions(+), 3 deletions(-) create mode 100644 scripts/merge-server-env-from-example.sh diff --git a/README.md b/README.md index dda01b6..446aed4 100644 --- a/README.md +++ b/README.md @@ -117,7 +117,7 @@ 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//promotion/social/` 并写入 `site_assets`(与 [官网](https://yuheng.yuxindazhineng.com/) `promotion-media` API 一致)。不设该变量则跳过。详见 `server/.env.example`。 +**产品视频自动导入**:`server/.env.example` 已含默认 `YH_IMPORT_PROMOTION_SITE_ID`;首次或拉代码后脚本会把 **`.env.example` 里尚未出现在 `server/.env` 的键自动追加**到 `server/.env`,**服务器只需执行 `./pull-and-restart.sh`**,无需手改配置。每次部署在 `compose up` 后会将 `web/promotion/视频发布/` 导入 `data/uploads` + `site_assets`(与 [官网](https://yuheng.yuxindazhineng.com/) `promotion-media` 一致)。多站点请改仓库内 `server/.env.example` 后再部署。 - **拉取并重启**:`cd ~/project/yh_web && ./pull-and-restart.sh` - **仅重启**:`cd ~/project/yh_web && ./restart.sh` diff --git a/pull-and-restart.sh b/pull-and-restart.sh index 1b9c1ce..b9cf86b 100755 --- a/pull-and-restart.sh +++ b/pull-and-restart.sh @@ -269,6 +269,11 @@ else rm -rf "$tmp_backup" fi +# 拉取后把 .env.example 里新增的键自动追加到 server/.env(无需手改,如 YH_IMPORT_PROMOTION_SITE_ID) +bash "$ROOT/scripts/merge-server-env-from-example.sh" "$ROOT" || true +[ -f server/.env ] && sed -i 's/\r$//' server/.env +[ -f server/.env ] && set -a && source server/.env && set +a + echo "" echo "[2/3] 重新构建并启动..." # 宿主机 9527 常被 sshd 占用,compose 必须使用 8088 且 api 不映射宿主机端口 diff --git a/restart.sh b/restart.sh index 3be6c77..3a2411f 100755 --- a/restart.sh +++ b/restart.sh @@ -180,6 +180,7 @@ if [ ! -f server/.env ]; then echo "已创建默认 server/.env" fi fi +bash "$ROOT/scripts/merge-server-env-from-example.sh" "$ROOT" || true [ -f server/.env ] && sed -i 's/\r$//' server/.env 2>/dev/null || true [ -f server/.env ] && set -a && source server/.env && set +a diff --git a/scripts/merge-server-env-from-example.sh b/scripts/merge-server-env-from-example.sh new file mode 100644 index 0000000..df5fdf9 --- /dev/null +++ b/scripts/merge-server-env-from-example.sh @@ -0,0 +1,30 @@ +#!/usr/bin/env bash +# 将 server/.env.example 中「server/.env 尚未出现的 KEY=」追加到 .env,不覆盖已有配置。 +# 供 pull-and-restart / restart 调用,实现服务器零手动改 .env。 +set +e +ROOT="${1:-}" +if [ -z "$ROOT" ]; then + ROOT="$(cd "$(dirname "$0")/.." && pwd)" +fi +ENVF="$ROOT/server/.env" +EX="$ROOT/server/.env.example" +[ -f "$EX" ] || exit 0 +[ -f "$ENVF" ] || exit 0 + +while IFS= read -r raw || [ -n "$raw" ]; do + line="${raw#"${raw%%[![:space:]]*}"}" + line="${line%"${line##*[![:space:]]}"}" + case "$line" in + \#*|'') continue ;; + esac + case "$line" in + [A-Za-z_][A-Za-z0-9_]*=*) + key="${line%%=*}" + if ! grep -qE "^[[:space:]]*${key}=" "$ENVF" 2>/dev/null; then + printf '\n# auto from .env.example (%s)\n%s\n' "$(date +%Y-%m-%d)" "$line" >> "$ENVF" + echo "merge-server-env: 已追加 $key -> server/.env" >&2 + fi + ;; + esac +done < "$EX" +exit 0 diff --git a/server/.env.example b/server/.env.example index 3953692..217bf13 100644 --- a/server/.env.example +++ b/server/.env.example @@ -9,6 +9,6 @@ GIN_MODE=release # 对外域名(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 一致);私人仓库已填官网默认值,多站请改 +# 部署时自动导入「视频发布」到 data/uploads + site_assets(compose up 后执行) +# 官网站点 MongoDB _id;pull-and-restart 会把本文件里「.env 缺失的键」自动追加到 server/.env,一般无需手改 YH_IMPORT_PROMOTION_SITE_ID=69ba1f1f41aeb82acfd609ef