chore: 仅保留 pull-and-restart.sh 与 restart.sh,两脚本均检测并安装 Docker;删除其余脚本与 .bat

Made-with: Cursor
This commit is contained in:
whm
2026-03-17 15:16:15 +08:00
parent 20e7f3a65d
commit 1022d99708
8 changed files with 105 additions and 247 deletions

View File

@@ -1,12 +1,46 @@
#!/usr/bin/env bash #!/usr/bin/env bash
# 拉取代码并重启项目(线上项目根目录:/home/yxd/project/yh_web # 拉取代码并重启:检测 Docker 并一键安装(无则安装),再 git pull + docker compose 构建并启动
# 行尾LF.gitattributes # 用法cd 项目根 && chmod +x pull-and-restart.sh && ./pull-and-restart.sh
# 用法cd /home/yxd/project/yh_web && ./pull-and-restart.sh # 行尾LF
# 或指定目录PROJECT_ROOT=/home/yxd/project/yh_web ./pull-and-restart.sh
set -e set -e
ROOT="${PROJECT_ROOT:-$(cd "$(dirname "$0")" && pwd)}" ROOT="${PROJECT_ROOT:-$(cd "$(dirname "$0")" && pwd)}"
cd "$ROOT" 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 "=========================================="
echo " yh_web 拉取并重启" echo " yh_web 拉取并重启"
echo " 路径: $ROOT" echo " 路径: $ROOT"
@@ -16,13 +50,36 @@ echo "=========================================="
[ -f server/.env ] && set -a && source server/.env && set +a [ -f server/.env ] && set -a && source server/.env && set +a
echo "[1/2] 拉取代码..." echo "[1/2] 拉取代码..."
if git rev-parse --is-inside-work-tree >/dev/null 2>&1; then
git pull 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 ""
echo "[2/2] 重新构建并启动(与 start-only-server 相同API 用 GOPROXY/vendor..." echo "[2/2] 重新构建并启动..."
export GOPROXY="${GOPROXY:-https://goproxy.cn,direct}" export GOPROXY="${GOPROXY:-https://goproxy.cn,direct}"
docker compose build --no-cache compose_cmd build --no-cache
docker compose up -d --force-recreate compose_cmd up -d --force-recreate
echo "" echo ""
echo "完成. api:9527 web:9528 admin:9529" echo "完成. api:9527 web:9528 admin:9529"

View File

@@ -1,29 +0,0 @@
#!/usr/bin/env bash
# 推送到 Gitea: https://gitea.yuxindazhineng.com/whm/web
set -e
cd "$(dirname "$0")"
GITEA_URL="https://gitea.yuxindazhineng.com/whm/web.git"
if [ ! -d .git ]; then
echo "初始化 Git 仓库..."
git init
git branch -M main
fi
if ! git remote get-url origin 2>/dev/null; then
echo "添加远程: $GITEA_URL"
git remote add origin "$GITEA_URL"
else
git remote set-url origin "$GITEA_URL"
fi
echo "添加并提交..."
git add .
if [ -n "$(git status --porcelain)" ]; then
git commit -m "chore: push to gitea (yh_web)"
else
echo "无新变更"
fi
echo "推送到 origin..."
git push -u origin main || git push -u origin main --force
echo "完成: https://gitea.yuxindazhineng.com/whm/web"

View File

@@ -1,14 +1,48 @@
#!/usr/bin/env bash #!/usr/bin/env bash
# 仅重启项目(不拉代码),适用于配置/环境变更后重启 # 直接重启:检测 Docker 并一键安装(无则安装),再 docker compose 重启,不拉代码
# 行尾LF.gitattributes # 用法cd 项目根 && chmod +x restart.sh && ./restart.sh
# 用法cd /home/yxd/project/yh_web && ./restart.sh # 行尾LF
# 或PROJECT_ROOT=/home/yxd/project/yh_web ./restart.sh
set -e set -e
ROOT="${PROJECT_ROOT:-$(cd "$(dirname "$0")" && pwd)}" ROOT="${PROJECT_ROOT:-$(cd "$(dirname "$0")" && pwd)}"
cd "$ROOT" cd "$ROOT"
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
compose_cmd() { run_sudo docker compose "$@" 2>/dev/null || run_sudo docker-compose "$@"; }
echo "重启 yh_web ($ROOT)..." echo "重启 yh_web ($ROOT)..."
[ -f server/.env ] && sed -i 's/\r$//' server/.env
[ -f server/.env ] && set -a && source server/.env && set +a [ -f server/.env ] && set -a && source server/.env && set +a
docker compose down 2>/dev/null || docker-compose down
docker compose up -d 2>/dev/null || docker-compose up -d compose_cmd down 2>/dev/null || true
compose_cmd up -d
echo "完成. api:9527 web:9528 admin:9529" echo "完成. api:9527 web:9528 admin:9529"

View File

@@ -1,24 +0,0 @@
#!/usr/bin/env bash
# 在 Docker 中运行项目,统一域名: https://yuheng.yuxindazhineng.com
# 端口: 9527=api, 9528=index, 9529=admin直连对外通过 nginx 80/443
set -e
cd "$(dirname "$0")"
echo "=== yh_web Docker 启动 ==="
echo "对外域名与 HTTPS 由 Nginx Proxy Manager 配置,本机端口: 9527=api, 9528=web, 9529=admin"
echo ""
# 可选:从 server/.env 加载到当前 shell供 docker-compose 使用
if [ -f server/.env ]; then
set -a
source server/.env
set +a
echo "已加载 server/.env"
fi
docker compose build --no-cache 2>/dev/null || docker-compose build --no-cache
docker compose up -d 2>/dev/null || docker-compose up -d
echo ""
echo "已启动。请用 NPM 配置的域名访问(如 https://yuheng.yuxindazhineng.com"
echo "直连: api :9527, web :9528, admin :9529"

View File

@@ -1,8 +0,0 @@
@echo off
chcp 65001 >nul
cd /d "%~dp0"
echo Starting backend with hot reload...
if not exist tmp mkdir tmp
CompileDaemon -command=tmp\main.exe -build="go build -o tmp\main.exe ."

View File

@@ -1,13 +0,0 @@
@echo off
REM MongoDB SSH 穿透 - 将远程 27017 映射到本地 27017
REM 运行此脚本后再启动 server即可连接远程 MongoDB
echo 正在建立 SSH 隧道...
echo 远程: www.yuxindazhineng.com:27017 -^> 本地: localhost:27017
echo.
echo 保持此窗口打开,隧道有效。关闭窗口即断开。
echo.
ssh -p 2223 -L 27017:localhost:27017 yxd@www.yuxindazhineng.com
pause

View File

@@ -1,155 +0,0 @@
#!/usr/bin/env bash
# 不通过 Docker直接在本机启动API(9527) + Web(9528) + Admin(9529)
# 自动检测并安装 Go、Node.jsDebian/Ubuntu 用 aptAlibaba Cloud Linux含等保三级版用 yum/dnf否则装到 $HOME。MongoDB 需自行安装或配置远程 MONGODB_URI
# 用法chmod +x start-direct.sh && ./start-direct.sh
# 行尾LF
set -e
ROOT="${PROJECT_ROOT:-$(cd "$(dirname "$0")" && pwd)}"
cd "$ROOT"
PIDFILE="$ROOT/.direct-run.pids"
INSTALL_ROOT="${INSTALL_ROOT:-$HOME}"
# 是否能用 aptDebian/Ubuntu 且可 sudo
USE_APT=false
if command -v apt-get >/dev/null 2>&1; then
if [ "$(id -u)" = 0 ] || sudo -n true 2>/dev/null; then
USE_APT=true
fi
fi
# 是否能用 yum/dnfAlibaba Cloud Linux / CentOS / RHEL 等,含等保三级版)
USE_YUM=false
if command -v dnf >/dev/null 2>&1 || command -v yum >/dev/null 2>&1; then
if [ "$(id -u)" = 0 ] || sudo -n true 2>/dev/null; then
USE_YUM=true
fi
fi
# ---------- 自动安装 Go未安装时----------
if ! command -v go >/dev/null 2>&1; then
if [ "$USE_APT" = true ]; then
echo "未检测到 Go正在通过 apt 安装..."
sudo -n apt-get update -qq
sudo -n apt-get install -y golang-go
echo "Go 已安装: $(go version)"
elif [ "$USE_YUM" = true ]; then
echo "未检测到 Go正在通过 yum/dnf 安装(兼容等保镜像)..."
if command -v dnf >/dev/null 2>&1; then
sudo -n dnf install -y golang
else
sudo -n yum install -y golang
fi
echo "Go 已安装: $(go version)"
else
echo "未检测到 Go正在安装到 $INSTALL_ROOT/go-install ..."
GO_VER="1.21.13"
case "$(uname -m)" in
x86_64) GO_ARCH=amd64 ;;
aarch64|arm64) GO_ARCH=arm64 ;;
*) GO_ARCH=amd64 ;;
esac
GO_TGZ="go${GO_VER}.linux-${GO_ARCH}.tar.gz"
GO_URL="https://go.dev/dl/${GO_TGZ}"
mkdir -p "$INSTALL_ROOT/go-install"
( cd "$INSTALL_ROOT" && ( curl -sL "$GO_URL" -o "$GO_TGZ" || wget -q -O "$GO_TGZ" "$GO_URL" ) && tar -xzf "$GO_TGZ" && mv go go-install && rm -f "$GO_TGZ" )
export GOROOT="$INSTALL_ROOT/go-install"
export PATH="$GOROOT/bin:$PATH"
echo "Go 已安装: $(go version)"
fi
fi
# ---------- 自动安装 Node.js未安装时----------
if ! command -v node >/dev/null 2>&1; then
if [ "$USE_APT" = true ]; then
echo "未检测到 Node.js正在通过 apt + NodeSource 安装 Node 20..."
curl -fsSL https://deb.nodesource.com/setup_20.x | sudo -E bash -
sudo -n apt-get install -y nodejs
echo "Node 已安装: $(node -v)"
elif [ "$USE_YUM" = true ]; then
echo "未检测到 Node.js正在通过 dnf/yum + NodeSource 安装 Node 20兼容等保镜像..."
curl -fsSL https://rpm.nodesource.com/setup_20.x | sudo bash -
if command -v dnf >/dev/null 2>&1; then
sudo -n dnf install -y nodejs
else
sudo -n yum install -y nodejs
fi
echo "Node 已安装: $(node -v)"
else
echo "未检测到 Node.js正在通过 nvm 安装..."
export NVM_DIR="${NVM_DIR:-$HOME/.nvm}"
if [ ! -s "$NVM_DIR/nvm.sh" ]; then
mkdir -p "$NVM_DIR"
( curl -sL https://raw.githubusercontent.com/nvm-sh/nvm/v0.40.1/install.sh || wget -qO- https://raw.githubusercontent.com/nvm-sh/nvm/v0.40.1/install.sh ) | bash
fi
[ -s "$NVM_DIR/nvm.sh" ] && \. "$NVM_DIR/nvm.sh"
nvm install 20
nvm use 20
echo "Node 已安装: $(node -v)"
fi
fi
# 若已有 nvm确保当前 shell 可用
[ -s "${NVM_DIR:-$HOME/.nvm}/nvm.sh" ] && \. "${NVM_DIR:-$HOME/.nvm}/nvm.sh" 2>/dev/null || true
[ -f server/.env ] && sed -i 's/\r$//' server/.env
[ -f server/.env ] && set -a && source server/.env && set +a
export PORT="${PORT:-9527}"
mkdir -p "$ROOT/logs"
echo "=========================================="
echo " yh_web 直接启动(无 Docker"
echo " 路径: $ROOT"
echo " API:9527 Web:9528 Admin:9529"
echo "=========================================="
: > "$PIDFILE"
# 1) API
echo "启动 API (port $PORT)..."
cd "$ROOT/server"
go build -o yh_api . 2>/dev/null || true
nohup ./yh_api >> "$ROOT/logs/api.log" 2>&1 &
echo $! >> "$PIDFILE"
cd "$ROOT"
sleep 1
# 避免 npm/vite 在脚本里只显示不刷新的 spinner改为逐行输出
export CI=1
export FORCE_COLOR=0
# 2) Web 前端(需先构建;在服务器上重新安装依赖以获取当前平台 rollup 等原生包)
echo "构建并启动 Web (port 9528)..."
cd "$ROOT/web"
rm -rf node_modules package-lock.json
echo " [web] npm install约 13 分钟)..."
npm install
echo " [web] vite build..."
chmod -R u+x node_modules/.bin 2>/dev/null || true
npx vite build
nohup npx serve -s dist -l 9528 >> "$ROOT/logs/web.log" 2>&1 &
echo $! >> "$PIDFILE"
cd "$ROOT"
sleep 1
# 3) Admin 前端base /admin/,需放到 /admin 路径下再 serve
echo "构建并启动 Admin (port 9529)..."
cd "$ROOT/admin"
rm -rf node_modules package-lock.json
echo " [admin] npm install约 13 分钟)..."
npm install
echo " [admin] vite build..."
chmod -R u+x node_modules/.bin 2>/dev/null || true
npx vite build
ADMIN_SERVE="$ROOT/.admin-serve"
mkdir -p "$ADMIN_SERVE/admin"
cp -r dist/* "$ADMIN_SERVE/admin/"
nohup npx serve -s "$ADMIN_SERVE" -l 9529 >> "$ROOT/logs/admin.log" 2>&1 &
echo $! >> "$PIDFILE"
cd "$ROOT"
echo ""
echo "已启动。PID 见 $PIDFILE"
echo "停止xargs -a $PIDFILE kill 2>/dev/null"
echo ""
echo "检查是否成功:"
echo " 端口ss -tlnp | grep -E '9527|9528|9529'"
echo " 请求curl -s -o /dev/null -w '%{http_code}' http://127.0.0.1:9527/api/web/info (期望 200)"
echo " 日志tail -5 $ROOT/logs/api.log $ROOT/logs/web.log $ROOT/logs/admin.log"
echo "完成. api:9527 web:9528 admin:9529"

View File

@@ -1,4 +0,0 @@
#!/usr/bin/env bash
cd "$(dirname "$0")"
docker compose down 2>/dev/null || docker-compose down
echo "已停止所有容器"