Files
web/pull-and-restart.sh
2026-03-17 15:19:27 +08:00

86 lines
3.1 KiB
Bash
Executable File
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
#!/usr/bin/env bash
# 拉取代码并重启:检测 Docker 并一键安装(无则安装),再 git pull + docker compose 构建并启动
# 用法cd 项目根 && chmod +x pull-and-restart.sh && ./pull-and-restart.sh
# 行尾LF
set -e
ROOT="${PROJECT_ROOT:-$(cd "$(dirname "$0")" && pwd)}"
cd "$ROOT"
# 需要 sudo 时直接调用(会提示输入密码)
run_sudo() { sudo "$@"; }
# ---------- 检测并安装 Docker ----------
ensure_docker() {
if command -v docker >/dev/null 2>&1 && docker info >/dev/null 2>&1; then
echo "Docker 已就绪."
return 0
fi
echo "未检测到 Docker 或未启动,正在安装..."
if command -v apt-get >/dev/null 2>&1; then
run_sudo apt-get update -qq
run_sudo apt-get install -y docker.io docker-compose-plugin 2>/dev/null || run_sudo apt-get install -y docker.io docker-compose
run_sudo systemctl start docker
run_sudo systemctl enable docker
elif command -v dnf >/dev/null 2>&1 || command -v yum >/dev/null 2>&1; then
if command -v dnf >/dev/null 2>&1; then
run_sudo dnf install -y docker docker-compose-plugin 2>/dev/null || run_sudo dnf install -y docker docker-compose
else
run_sudo yum install -y docker docker-compose-plugin 2>/dev/null || run_sudo yum install -y docker docker-compose
fi
run_sudo systemctl start docker
run_sudo systemctl enable docker
else
echo "无法自动安装 Docker请先安装 Docker 与 Docker Compose 后重试."
exit 1
fi
echo "Docker 安装完成."
}
ensure_docker
# 本脚本内统一用 sudo 执行 docker避免权限问题
docker_cmd() { run_sudo docker "$@"; }
compose_cmd() { run_sudo docker compose "$@" 2>/dev/null || run_sudo docker-compose "$@"; }
echo "=========================================="
echo " yh_web 拉取并重启"
echo " 路径: $ROOT"
echo "=========================================="
[ -f server/.env ] && sed -i 's/\r$//' server/.env
[ -f server/.env ] && set -a && source server/.env && set +a
echo "[1/2] 拉取代码..."
if git rev-parse --is-inside-work-tree >/dev/null 2>&1; then
git pull
else
echo "未检测到 Git 仓库,正在克隆(需设置 GIT_REPO_URLexport GIT_REPO_URL='https://用户:Token@gitea.../web.git'..."
export GIT_TERMINAL_PROMPT=0
REPO_URL="${GIT_REPO_URL:-}"
BRANCH="${GIT_BRANCH:-master}"
if [ -z "$REPO_URL" ]; then
echo "错误:请设置环境变量 GIT_REPO_URL 后重试."
exit 1
fi
SELF="$(basename "$0")"
tmp_backup="/tmp/yh_web_deploy_$$"
mkdir -p "$tmp_backup"
[ -f "$SELF" ] && cp -a "$SELF" "$tmp_backup/"
[ -f server/.env ] && cp -a server/.env "$tmp_backup/" 2>/dev/null || true
git init -b "$BRANCH"
git remote add origin "$REPO_URL"
git fetch origin --progress
git reset --hard "origin/$BRANCH"
[ -f "$tmp_backup/$SELF" ] && cp -a "$tmp_backup/$SELF" "$SELF" && chmod +x "$SELF"
[ -f "$tmp_backup/.env" ] && mkdir -p server && cp -a "$tmp_backup/.env" server/.env
rm -rf "$tmp_backup"
fi
echo ""
echo "[2/2] 重新构建并启动..."
export GOPROXY="${GOPROXY:-https://goproxy.cn,direct}"
compose_cmd build --no-cache
compose_cmd up -d --force-recreate
echo ""
echo "完成. api:9527 web:9528 admin:9529"