Spaces:
Running
Running
| # โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ | |
| # 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 |