feat: Linux one-click start pulls from Gitea ai_site
Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
@@ -37,3 +37,10 @@ FIDELITY_PASSWORD=demo123
|
|||||||
# AIJZ_PUBLIC_BASE_URL=https://aijz.example.com
|
# AIJZ_PUBLIC_BASE_URL=https://aijz.example.com
|
||||||
# 证书放 nginx/<域名>.pem + nginx/<域名>.key,或 nginx/fullchain.pem + privkey.pem
|
# 证书放 nginx/<域名>.pem + nginx/<域名>.key,或 nginx/fullchain.pem + privkey.pem
|
||||||
# 改配置后:./reload-config.sh host-nginx 或 ./reload-config.sh platform
|
# 改配置后:./reload-config.sh host-nginx 或 ./reload-config.sh platform
|
||||||
|
|
||||||
|
# ---- 一键部署拉代码(./start.sh 默认拉取;./pull-and-restart.sh 专用)----
|
||||||
|
# AIJZ_GIT_URL=https://gitea.yuxindazhineng.com/whm/ai_site.git
|
||||||
|
# GIT_BRANCH=main
|
||||||
|
# FORCE_GIT_RESET=1
|
||||||
|
# AIJZ_SKIP_GIT_PULL=0
|
||||||
|
# 私有库示例:AIJZ_GIT_URL=https://<token>@gitea.yuxindazhineng.com/whm/ai_site.git
|
||||||
|
|||||||
11
README.md
11
README.md
@@ -32,13 +32,18 @@
|
|||||||
|
|
||||||
### Linux
|
### Linux
|
||||||
```bash
|
```bash
|
||||||
chmod +x start.sh stop.sh restart.sh scripts/linux/*.sh
|
chmod +x start.sh stop.sh restart.sh pull-and-restart.sh scripts/linux/*.sh
|
||||||
./start.sh # 默认 Compose
|
./start.sh # 默认先从 Gitea 拉代码再 Compose 启动
|
||||||
./start.sh --rebuild
|
./start.sh --rebuild
|
||||||
|
./start.sh --no-pull # 跳过拉取
|
||||||
|
./pull-and-restart.sh # 拉最新后重启
|
||||||
./stop.sh
|
./stop.sh
|
||||||
./restart.sh # 先停再启
|
./restart.sh # 先停再启(不拉代码)
|
||||||
```
|
```
|
||||||
|
|
||||||
|
代码源默认:`https://gitea.yuxindazhineng.com/whm/ai_site.git`(分支 `main`)。
|
||||||
|
可用环境变量 `AIJZ_GIT_URL` / `GIT_BRANCH` / `AIJZ_SKIP_GIT_PULL=1` 覆盖(见 `.env.example`)。
|
||||||
|
|
||||||
无 Docker 时脚本会**自动回退**宿主机模式(`--host` 可强制)。
|
无 Docker 时脚本会**自动回退**宿主机模式(`--host` 可强制)。
|
||||||
|
|
||||||
| 物理路径 | 内容 |
|
| 物理路径 | 内容 |
|
||||||
|
|||||||
@@ -1,7 +1,11 @@
|
|||||||
#!/usr/bin/env bash
|
#!/usr/bin/env bash
|
||||||
# AI 建站 — 拉取代码并重启
|
# AI 建站 — 拉取代码并重启
|
||||||
# 用法:./pull-and-restart.sh
|
# 用法:./pull-and-restart.sh
|
||||||
# 环境变量:GIT_BRANCH(默认 master)、FORCE_GIT_RESET(默认 1,与远程硬对齐)
|
# 默认仓库:https://gitea.yuxindazhineng.com/whm/ai_site.git
|
||||||
|
# 环境变量:
|
||||||
|
# AIJZ_GIT_URL 覆盖仓库地址
|
||||||
|
# GIT_BRANCH 分支(默认 main)
|
||||||
|
# FORCE_GIT_RESET 默认 1,与远程硬对齐
|
||||||
set -euo pipefail
|
set -euo pipefail
|
||||||
ROOT="$(cd "$(dirname "$0")" && pwd)"
|
ROOT="$(cd "$(dirname "$0")" && pwd)"
|
||||||
cd "$ROOT"
|
cd "$ROOT"
|
||||||
@@ -11,10 +15,12 @@ cd "$ROOT"
|
|||||||
echo "========================================"
|
echo "========================================"
|
||||||
echo " AI 建站 拉取并重启"
|
echo " AI 建站 拉取并重启"
|
||||||
echo " 路径: $ROOT"
|
echo " 路径: $ROOT"
|
||||||
|
echo " 仓库: ${AIJZ_GIT_URL:-https://gitea.yuxindazhineng.com/whm/ai_site.git}"
|
||||||
|
echo " 分支: ${GIT_BRANCH:-main}"
|
||||||
echo "========================================"
|
echo "========================================"
|
||||||
|
|
||||||
ensure_docker
|
ensure_docker
|
||||||
git_pull_hard || true
|
git_pull_hard
|
||||||
stack_down
|
stack_down
|
||||||
sleep 1
|
sleep 1
|
||||||
stack_up 1
|
stack_up 1
|
||||||
|
|||||||
@@ -384,18 +384,57 @@ ${pub_line}
|
|||||||
EOF
|
EOF
|
||||||
}
|
}
|
||||||
|
|
||||||
git_pull_hard() {
|
# 默认代码源(可用 AIJZ_GIT_URL / GIT_BRANCH 覆盖)
|
||||||
local branch="${GIT_BRANCH:-master}"
|
AIJZ_GIT_URL_DEFAULT="https://gitea.yuxindazhineng.com/whm/ai_site.git"
|
||||||
echo "拉取代码(branch=$branch)..."
|
|
||||||
if ! git rev-parse --is-inside-work-tree >/dev/null 2>&1; then
|
ensure_git_origin() {
|
||||||
echo "错误: 当前不是 git 仓库,跳过拉取。" >&2
|
local url="${1:-${AIJZ_GIT_URL:-$AIJZ_GIT_URL_DEFAULT}}"
|
||||||
|
if ! command -v git >/dev/null 2>&1; then
|
||||||
|
echo "错误: 未安装 git,无法拉取代码。请先安装 git。" >&2
|
||||||
|
return 1
|
||||||
|
fi
|
||||||
|
if ! git rev-parse --is-inside-work-tree >/dev/null 2>&1; then
|
||||||
|
echo "当前目录不是 git 仓库,初始化并关联 origin -> $url"
|
||||||
|
git init
|
||||||
|
git remote add origin "$url"
|
||||||
|
return 0
|
||||||
|
fi
|
||||||
|
if git remote get-url origin >/dev/null 2>&1; then
|
||||||
|
local cur
|
||||||
|
cur="$(git remote get-url origin)"
|
||||||
|
if [ "$cur" != "$url" ]; then
|
||||||
|
echo "更新 origin: $cur -> $url"
|
||||||
|
git remote set-url origin "$url"
|
||||||
|
fi
|
||||||
|
else
|
||||||
|
echo "添加 origin -> $url"
|
||||||
|
git remote add origin "$url"
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
# 从 Gitea ai_site 拉取并与远程对齐(默认硬重置,保留未跟踪文件如 .env)
|
||||||
|
# 环境变量:
|
||||||
|
# AIJZ_GIT_URL 仓库地址(默认 https://gitea.yuxindazhineng.com/whm/ai_site.git)
|
||||||
|
# GIT_BRANCH 分支(默认 main)
|
||||||
|
# FORCE_GIT_RESET 1=reset --hard 对齐远程(默认 1);0=仅快进合并
|
||||||
|
git_pull_hard() {
|
||||||
|
local url="${AIJZ_GIT_URL:-$AIJZ_GIT_URL_DEFAULT}"
|
||||||
|
local branch="${GIT_BRANCH:-main}"
|
||||||
|
echo "拉取代码($url branch=$branch)..."
|
||||||
|
ensure_git_origin "$url" || return 1
|
||||||
|
if ! git fetch origin --progress; then
|
||||||
|
echo "错误: git fetch 失败。私有仓库请配置凭据,或设置 AIJZ_GIT_URL 为带 token 的地址。" >&2
|
||||||
|
return 1
|
||||||
|
fi
|
||||||
|
if ! git rev-parse --verify "origin/$branch" >/dev/null 2>&1; then
|
||||||
|
echo "错误: 远程不存在分支 origin/$branch" >&2
|
||||||
return 1
|
return 1
|
||||||
fi
|
fi
|
||||||
git fetch origin --progress
|
|
||||||
if [ "${FORCE_GIT_RESET:-1}" = "1" ]; then
|
if [ "${FORCE_GIT_RESET:-1}" = "1" ]; then
|
||||||
|
git checkout -B "$branch" "origin/$branch"
|
||||||
git reset --hard "origin/$branch"
|
git reset --hard "origin/$branch"
|
||||||
else
|
else
|
||||||
git checkout "$branch" 2>/dev/null || true
|
git checkout "$branch" 2>/dev/null || git checkout -b "$branch" "origin/$branch"
|
||||||
git merge --ff-only "origin/$branch"
|
git merge --ff-only "origin/$branch"
|
||||||
fi
|
fi
|
||||||
echo "当前: $(git rev-parse --short HEAD) $(git log -1 --pretty=%s)"
|
echo "当前: $(git rev-parse --short HEAD) $(git log -1 --pretty=%s)"
|
||||||
|
|||||||
19
start.sh
19
start.sh
@@ -1,6 +1,7 @@
|
|||||||
#!/usr/bin/env bash
|
#!/usr/bin/env bash
|
||||||
# AI 建站 — Linux 一键启动(Docker Compose)
|
# AI 建站 — Linux 一键启动(Docker Compose)
|
||||||
# 用法:cd 项目根 && ./start.sh [--rebuild]
|
# 用法:cd 项目根 && ./start.sh [--rebuild] [--no-pull]
|
||||||
|
# 默认从 Gitea 拉取最新代码再启动(可用 --no-pull / AIJZ_SKIP_GIT_PULL=1 跳过)
|
||||||
# 行尾:LF
|
# 行尾:LF
|
||||||
set -euo pipefail
|
set -euo pipefail
|
||||||
ROOT="$(cd "$(dirname "$0")" && pwd)"
|
ROOT="$(cd "$(dirname "$0")" && pwd)"
|
||||||
@@ -9,21 +10,35 @@ cd "$ROOT"
|
|||||||
. "$ROOT/scripts/lib-aijz-deploy.sh"
|
. "$ROOT/scripts/lib-aijz-deploy.sh"
|
||||||
|
|
||||||
REBUILD=0
|
REBUILD=0
|
||||||
|
DO_PULL=1
|
||||||
for a in "$@"; do
|
for a in "$@"; do
|
||||||
case "$a" in
|
case "$a" in
|
||||||
--rebuild|-r) REBUILD=1 ;;
|
--rebuild|-r) REBUILD=1 ;;
|
||||||
|
--no-pull) DO_PULL=0 ;;
|
||||||
|
--pull) DO_PULL=1 ;;
|
||||||
-h|--help)
|
-h|--help)
|
||||||
echo "用法: $0 [--rebuild]"
|
echo "用法: $0 [--rebuild] [--no-pull|--pull]"
|
||||||
|
echo " 默认拉取: ${AIJZ_GIT_URL:-https://gitea.yuxindazhineng.com/whm/ai_site.git} 分支 ${GIT_BRANCH:-main}"
|
||||||
|
echo " 跳过拉取: --no-pull 或 AIJZ_SKIP_GIT_PULL=1"
|
||||||
exit 0
|
exit 0
|
||||||
;;
|
;;
|
||||||
esac
|
esac
|
||||||
done
|
done
|
||||||
|
if [ "${AIJZ_SKIP_GIT_PULL:-0}" = "1" ]; then
|
||||||
|
DO_PULL=0
|
||||||
|
fi
|
||||||
|
|
||||||
echo "========================================"
|
echo "========================================"
|
||||||
echo " AI 建站 启动"
|
echo " AI 建站 启动"
|
||||||
echo " 路径: $ROOT"
|
echo " 路径: $ROOT"
|
||||||
echo "========================================"
|
echo "========================================"
|
||||||
|
|
||||||
|
if [ "$DO_PULL" = "1" ]; then
|
||||||
|
git_pull_hard
|
||||||
|
else
|
||||||
|
echo "已跳过代码拉取(--no-pull / AIJZ_SKIP_GIT_PULL)"
|
||||||
|
fi
|
||||||
|
|
||||||
ensure_docker
|
ensure_docker
|
||||||
stack_up "$REBUILD"
|
stack_up "$REBUILD"
|
||||||
healthcheck
|
healthcheck
|
||||||
|
|||||||
Reference in New Issue
Block a user