#!/usr/bin/env bash # 在 207 上安装 / 启动 Higress standalone(Docker Compose) # 端口:Gateway 18080/18443 · Console 8001 · Nacos 8848 set -euo pipefail PATCH="/opt/workbuddy/patches_cursor/Higress部署" ENV_FILE="${PATCH}/install_options.env" DEST="/opt/higress" ENC_KEY="bocheng207higressenckey32chars!!" HTTP_PORT=18080 HTTPS_PORT=18443 CONSOLE_PORT=8001 NACOS_PORT=8848 if [ -f "$ENV_FILE" ]; then # shellcheck disable=SC1090 set -a; source "$ENV_FILE"; set +a DEST="${HIGRESS_DEST:-$DEST}" ENC_KEY="${DATA_ENC_KEY:-$ENC_KEY}" HTTP_PORT="${GATEWAY_HTTP_PORT:-$HTTP_PORT}" HTTPS_PORT="${GATEWAY_HTTPS_PORT:-$HTTPS_PORT}" CONSOLE_PORT="${CONSOLE_PORT:-$CONSOLE_PORT}" NACOS_PORT="${NACOS_PORT:-$NACOS_PORT}" fi if [ "${#ENC_KEY}" -ne 32 ]; then echo "[FAIL] DATA_ENC_KEY 必须恰好 32 字符,当前 ${#ENC_KEY}" exit 1 fi echo "[INFO] 探测宿主机网关(供容器回访 LiteLLM/Dify/Xinference)" HG="$(docker network inspect bridge -f '{{range .IPAM.Config}}{{.Gateway}}{{end}}' 2>/dev/null || true)" if [ -z "$HG" ]; then HG="172.17.0.1" fi echo "$HG" >"${PATCH}/host_gateway.ip" echo "[INFO] HOST_GATEWAY=$HG" # 端口占用检查(仅警告) for p in "$HTTP_PORT" "$HTTPS_PORT" "$CONSOLE_PORT" "$NACOS_PORT"; do if ss -lnt | grep -qE ":${p}\\s"; then echo "[WARN] 端口 $p 已在监听;若非 Higress 占用请先释放" fi done if [ -x "${DEST}/bin/startup.sh" ] || [ -f "${DEST}/docker-compose.yml" ] || [ -f "${DEST}/compose.yaml" ]; then echo "[INFO] 检测到已有安装目录 $DEST,尝试启动" if [ -x "${DEST}/bin/startup.sh" ]; then "${DEST}/bin/startup.sh" || true elif [ -x "${DEST}/bin/reload.sh" ]; then "${DEST}/bin/reload.sh" || true else (cd "$DEST" && docker compose up -d) || true fi else echo "[INFO] 首次安装 Higress → $DEST" mkdir -p "$DEST" TMP_SH="/tmp/get-higress.sh" if ! curl -fsSL "https://higress.io/standalone/get-higress.sh" -o "$TMP_SH"; then echo "[WARN] higress.io 失败,尝试 github raw" curl -fsSL "https://raw.githubusercontent.com/higress-group/higress-standalone/main/get-higress.sh" -o "$TMP_SH" \ || curl -fsSL "https://ghproxy.com/https://raw.githubusercontent.com/higress-group/higress-standalone/main/get-higress.sh" -o "$TMP_SH" fi chmod +x "$TMP_SH" bash "$TMP_SH" "$DEST" \ -a \ --use-builtin-nacos \ --gateway-http-port="$HTTP_PORT" \ --gateway-https-port="$HTTPS_PORT" \ --console-port="$CONSOLE_PORT" \ --nacos-port="$NACOS_PORT" \ -k "$ENC_KEY" fi echo "[INFO] 等待 Console :$CONSOLE_PORT ..." ok=0 for i in $(seq 1 90); do code="$(curl -sS -o /dev/null -w '%{http_code}' "http://127.0.0.1:${CONSOLE_PORT}/" 2>/dev/null || echo 000)" if [ "$code" != "000" ] && [ "$code" != "000000" ]; then ok=1 echo "[INFO] Console HTTP $code" break fi sleep 3 done echo "[INFO] docker ps (higress|nacos|gateway|console):" docker ps --format 'table {{.Names}}\t{{.Status}}\t{{.Ports}}' | grep -iE 'higress|nacos|gateway|console|NAME' || docker ps --format 'table {{.Names}}\t{{.Status}}\t{{.Ports}}' | head -n 30 if [ "$ok" != "1" ]; then echo "[FAIL] Higress Console 未在预期时间内就绪" (cd "$DEST" && docker compose ps -a) 2>/dev/null || true exit 1 fi echo "[OK] Higress Gateway http://192.168.110.207:${HTTP_PORT}" echo "[OK] Higress Console http://192.168.110.207:${CONSOLE_PORT}" echo "[OK] HOST_GATEWAY=$HG (路由后端请用此 IP 代替 127.0.0.1)"