1.修改代码适配阿里云的服务器

This commit is contained in:
whm
2026-03-17 14:27:32 +08:00
parent 826617d737
commit 20e7f3a65d
1777 changed files with 775041 additions and 10 deletions

155
start-direct.sh Normal file
View File

@@ -0,0 +1,155 @@
#!/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"