Spaces:
Running
Running
File size: 7,211 Bytes
27a715d | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 | #!/usr/bin/env bash
# โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
# litellmGUI ไธ้ฎ้จ็ฝฒ่ๆฌ๏ผ้็จไบ GitHub Codespaces / Ubuntu VPS๏ผ
# ไฝฟ็จๆนๆณ๏ผ็ดๆฅ็ฒ่ดดๆดๆฎตๅฐ็ป็ซฏๆง่ก
# โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
set -euo pipefail
GREEN="\033[32m"; CYAN="\033[36m"; YELLOW="\033[33m"; RED="\033[31m"; RESET="\033[0m"
ok() { echo -e "${GREEN}โ${RESET} $1"; }
info() { echo -e "${CYAN}โ${RESET} $1"; }
warn() { echo -e "${YELLOW}โ ${RESET} $1"; }
err() { echo -e "${RED}โ ้่ฏฏ๏ผ$1${RESET}"; exit 1; }
echo ""
echo -e "${CYAN}======================================${RESET}"
echo -e "${CYAN} litellmGUI ไธ้ฎ้จ็ฝฒ่ๆฌ ${RESET}"
echo -e "${CYAN}======================================${RESET}"
echo ""
# โโ 1. ๆฃๆฅ Docker โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
info "ๆฃๆฅ Docker ็ฏๅข..."
command -v docker &>/dev/null || err "ๆชๆพๅฐ Docker๏ผ่ฏทๅ
ๅฎ่ฃ
๏ผcurl -fsSL https://get.docker.com | sh"
docker compose version &>/dev/null 2>&1 || err "ๆชๆพๅฐ Docker Compose๏ผ่ฏทๅ
ๅฎ่ฃ
๏ผapt install docker-compose-plugin -y"
ok "Docker ็ฏๅขๅฐฑ็ปช๏ผ$(docker --version)"
# โโ 2. ๅ
้ไปๅบ โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
REPO_DIR="$HOME/litellmGUI"
if [ -d "$REPO_DIR/.git" ]; then
warn "ไปๅบๅทฒๅญๅจ๏ผๆง่ก git pull ๆดๆฐ..."
git -C "$REPO_DIR" pull --ff-only
else
info "ๅ
้ไปๅบ..."
git clone https://github.com/lipeiying032/litellmGUI.git "$REPO_DIR"
fi
cd "$REPO_DIR"
ok "ไปๅบๅฐฑ็ปช๏ผ$REPO_DIR"
# โโ 3. ็ๆๅฏ้ฅ โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
info "็ๆ้ๆบๅฏ้ฅ..."
gen_hex() { openssl rand -hex "$1" 2>/dev/null || od -An -N"$1" -tx1 /dev/urandom | tr -d ' \n'; }
MASTER_KEY="sk-gateway-$(gen_hex 16)"
JWT_SECRET="$(gen_hex 32)"
# โโ 4. ๅๅ
ฅ .env โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
info "็ๆ .env ้
็ฝฎๆไปถ..."
# ๅคๆญๆฏ Codespaces ่ฟๆฏ VPS๏ผ่ชๅจ่ฎพ็ฝฎ GATEWAY_PUBLIC_URL
if [ -n "${CODESPACE_NAME:-}" ]; then
# GitHub Codespaces ็ฏๅข
PUBLIC_URL="https://${CODESPACE_NAME}-80.${GITHUB_CODESPACES_PORT_FORWARDING_DOMAIN:-app.github.dev}"
warn "ๆฃๆตๅฐ Codespaces ็ฏๅข"
warn "็ซฏๅฃ่ฝฌๅ URL๏ผ้ๅจ Codespaces ็ซฏๅฃ้ขๆฟ่ฎพ็ฝฎ 80 ็ซฏๅฃไธบ Public๏ผ๏ผ"
warn " $PUBLIC_URL"
else
# VPS ็ฏๅข๏ผๅฐ่ฏ่ทๅๅ
ฌ็ฝ IP
PUBLIC_IP=$(curl -s --connect-timeout 3 ifconfig.me 2>/dev/null || echo "localhost")
PUBLIC_URL="http://${PUBLIC_IP}"
info "ๆฃๆตๅฐ VPS ็ฏๅข๏ผๅ
ฌ็ฝ IP๏ผ${PUBLIC_IP}"
fi
cat > .env << EOF
# ่ชๅจ็ๆไบ $(date '+%Y-%m-%d %H:%M:%S')
LITELLM_MASTER_KEY=${MASTER_KEY}
JWT_SECRET=${JWT_SECRET}
GATEWAY_PUBLIC_URL=${PUBLIC_URL}
HTTP_PORT=80
HTTPS_PORT=443
LOG_LEVEL=http
EOF
ok ".env ๅทฒ็ๆ"
echo ""
echo -e "${YELLOW}โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ${RESET}"
echo -e "${YELLOW} ้่ฆ๏ผ่ฏทไฟๅญไปฅไธไฟกๆฏ๏ผ${RESET}"
echo -e "${YELLOW}โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ${RESET}"
echo -e " LITELLM_MASTER_KEY = ${GREEN}${MASTER_KEY}${RESET}"
echo -e " JWT_SECRET = ${GREEN}${JWT_SECRET}${RESET}"
echo -e " GATEWAY_PUBLIC_URL = ${GREEN}${PUBLIC_URL}${RESET}"
echo -e "${YELLOW}โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ${RESET}"
echo ""
# โโ 5. ้ไฝ LiteLLM worker ๆฐ๏ผ่็ๅ
ๅญ๏ผโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
info "ไผๅๅ
ๅญ้
็ฝฎ๏ผworker ๆฐ 4โ2๏ผ..."
sed -i 's/--num_workers 4/--num_workers 2/g' docker-compose.yml
ok "ๅ
ๅญ้
็ฝฎไผๅๅฎๆ"
# โโ 6. ๆๅปบๅนถๅฏๅจ โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
info "ๅผๅงๆๅปบ Docker ้ๅ๏ผ้ฆๆฌก็บฆ้ 3~5 ๅ้๏ผ..."
docker compose pull litellm 2>/dev/null || true
docker compose build --parallel
docker compose up -d
ok "ๅฎนๅจๅทฒๅฏๅจ"
# โโ 7. ็ญๅพ
ๆๅกๅฅๅบท โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
echo ""
info "็ญๅพ
ๆๅกๅฏๅจ๏ผLiteLLM ๅๅงๅ็บฆ้ 60 ็ง๏ผ..."
echo -n " ่ฟๅบฆ๏ผ"
HEALTHY=false
for i in $(seq 1 40); do
sleep 3
echo -n "."
if curl -sf http://localhost/api/health &>/dev/null; then
HEALTHY=true
echo ""
break
fi
done
echo ""
if [ "$HEALTHY" = true ]; then
# ่ทๅๅฅๅบท็ถๆ
HEALTH=$(curl -s http://localhost/api/health 2>/dev/null || echo "{}")
echo -e "${GREEN}โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ${RESET}"
echo -e "${GREEN} ๐ ้จ็ฝฒๆๅ๏ผ${RESET}"
echo -e "${GREEN}โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ${RESET}"
echo ""
echo -e " ๅฅๅบท็ถๆ๏ผ${HEALTH}"
echo ""
echo -e " Web UI๏ผ ${CYAN}${PUBLIC_URL}${RESET}"
echo -e " API ็ซฏ็น๏ผ ${CYAN}${PUBLIC_URL}/v1${RESET}"
echo -e " ็ฎก็ API๏ผ ${CYAN}${PUBLIC_URL}/api/health${RESET}"
echo ""
if [ -n "${CODESPACE_NAME:-}" ]; then
echo -e "${YELLOW} Codespaces ๆ็คบ๏ผ${RESET}"
echo -e " ่ฏทๅจ VS Code ็ซฏๅฃ้ขๆฟไธญๅฐ 80 ็ซฏๅฃ่ฎพ็ฝฎไธบ Public"
echo -e " ๆ่ฝไปๅค้จ่ฎฟ้ฎ Web UI"
fi
echo ""
echo -e " ๅธธ็จๅฝไปค๏ผ"
echo -e " ๆฅ็ๆฅๅฟ๏ผ ${CYAN}cd ~/litellmGUI && docker compose logs -f${RESET}"
echo -e " ๆฅ็็ถๆ๏ผ ${CYAN}cd ~/litellmGUI && docker compose ps${RESET}"
echo -e " ้ๅฏๆๅก๏ผ ${CYAN}cd ~/litellmGUI && docker compose restart${RESET}"
echo -e " ๅๆญขๆๅก๏ผ ${CYAN}cd ~/litellmGUI && docker compose down${RESET}"
echo -e "${GREEN}โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ${RESET}"
else
warn "ๆๅกๅฏๅจ่ถ
ๆถ๏ผ่ฏทๆฅ็ๆฅๅฟๆๆฅ้ฎ้ข๏ผ"
echo -e " ${CYAN}cd ~/litellmGUI && docker compose logs --tail=50${RESET}"
echo ""
docker compose ps
fi |