feat(deploy): 拉取后自动合并 server/.env.example 缺失键,服务器只跑 pull-and-restart
Made-with: Cursor
This commit is contained in:
@@ -117,7 +117,7 @@ bash pull-and-restart.sh
|
|||||||
若报错 `bash\r`,先执行 `sed -i 's/\r$//' pull-and-restart.sh 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` 后再次运行即可。
|
首次部署若目录为空,可先放入两个脚本,设置 `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`。
|
**产品视频自动导入**:`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 && ./pull-and-restart.sh`
|
||||||
- **仅重启**:`cd ~/project/yh_web && ./restart.sh`
|
- **仅重启**:`cd ~/project/yh_web && ./restart.sh`
|
||||||
|
|||||||
@@ -269,6 +269,11 @@ else
|
|||||||
rm -rf "$tmp_backup"
|
rm -rf "$tmp_backup"
|
||||||
fi
|
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 ""
|
||||||
echo "[2/3] 重新构建并启动..."
|
echo "[2/3] 重新构建并启动..."
|
||||||
# 宿主机 9527 常被 sshd 占用,compose 必须使用 8088 且 api 不映射宿主机端口
|
# 宿主机 9527 常被 sshd 占用,compose 必须使用 8088 且 api 不映射宿主机端口
|
||||||
|
|||||||
@@ -180,6 +180,7 @@ if [ ! -f server/.env ]; then
|
|||||||
echo "已创建默认 server/.env"
|
echo "已创建默认 server/.env"
|
||||||
fi
|
fi
|
||||||
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 ] && sed -i 's/\r$//' server/.env 2>/dev/null || true
|
||||||
[ -f server/.env ] && set -a && source server/.env && set +a
|
[ -f server/.env ] && set -a && source server/.env && set +a
|
||||||
|
|
||||||
|
|||||||
30
scripts/merge-server-env-from-example.sh
Normal file
30
scripts/merge-server-env-from-example.sh
Normal file
@@ -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
|
||||||
@@ -9,6 +9,6 @@ GIN_MODE=release
|
|||||||
# 对外域名(CORS、日志),与 nginx 反代域名一致(官网 https://yuheng.yuxindazhineng.com/)
|
# 对外域名(CORS、日志),与 nginx 反代域名一致(官网 https://yuheng.yuxindazhineng.com/)
|
||||||
ALLOWED_ORIGINS=https://yuheng.yuxindazhineng.com
|
ALLOWED_ORIGINS=https://yuheng.yuxindazhineng.com
|
||||||
|
|
||||||
# 部署时自动导入「视频发布」到 data/uploads + site_assets(pull-and-restart / restart 在 compose up 后执行)
|
# 部署时自动导入「视频发布」到 data/uploads + site_assets(compose up 后执行)
|
||||||
# 官网站点 MongoDB _id(与 /api/web/routes 的 site_id 一致);私人仓库已填官网默认值,多站请改
|
# 官网站点 MongoDB _id;pull-and-restart 会把本文件里「.env 缺失的键」自动追加到 server/.env,一般无需手改
|
||||||
YH_IMPORT_PROMOTION_SITE_ID=69ba1f1f41aeb82acfd609ef
|
YH_IMPORT_PROMOTION_SITE_ID=69ba1f1f41aeb82acfd609ef
|
||||||
|
|||||||
Reference in New Issue
Block a user