#!/bin/bash # AxonHub Hugging Face Spaces 部署脚本 # # 使用方法: # ./deploy.sh # # 示例: # ./deploy.sh myusername axonhub set -e # 颜色定义 RED='\033[0;31m' GREEN='\033[0;32m' YELLOW='\033[1;33m' BLUE='\033[0;34m' NC='\033[0m' # No Color # 打印带颜色的消息 info() { echo -e "${BLUE}[INFO]${NC} $1" } success() { echo -e "${GREEN}[SUCCESS]${NC} $1" } warn() { echo -e "${YELLOW}[WARN]${NC} $1" } error() { echo -e "${RED}[ERROR]${NC} $1" exit 1 } # 检查参数 if [ -z "$1" ] || [ -z "$2" ]; then echo "使用方法: $0 " echo "示例: $0 myusername axonhub" exit 1 fi HF_USERNAME=$1 SPACE_NAME=$2 SPACE_URL="https://huggingface.co/spaces/${HF_USERNAME}/${SPACE_NAME}" info "开始部署 AxonHub 到 Hugging Face Spaces" info "Space URL: ${SPACE_URL}" # 检查 git 是否安装 if ! command -v git &> /dev/null; then error "请先安装 git" fi # 获取脚本所在目录(hf 目录) SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" # 项目根目录 PROJECT_ROOT="$(dirname "$SCRIPT_DIR")" info "项目根目录: ${PROJECT_ROOT}" # 创建临时目录 TEMP_DIR=$(mktemp -d) info "创建临时目录: ${TEMP_DIR}" # 清理函数 cleanup() { info "清理临时目录..." rm -rf "$TEMP_DIR" } trap cleanup EXIT # 克隆 HF Space info "克隆 Hugging Face Space..." cd "$TEMP_DIR" if ! git clone "https://huggingface.co/spaces/${HF_USERNAME}/${SPACE_NAME}" space 2>/dev/null; then warn "Space 不存在或无法克隆,请先在 Hugging Face 上创建 Space" echo "" echo "创建步骤:" echo "1. 访问 https://huggingface.co/spaces" echo "2. 点击 'Create new Space'" echo "3. Space name: ${SPACE_NAME}" echo "4. SDK: Docker" echo "5. Docker template: Blank" echo "" error "请创建 Space 后重新运行此脚本" fi cd space # 复制项目文件 info "复制项目文件..." # 复制所有源码(排除不需要的目录) rsync -av --progress "$PROJECT_ROOT/" . \ --exclude '.git' \ --exclude 'node_modules' \ --exclude 'dist' \ --exclude 'vendor' \ --exclude '.idea' \ --exclude '.vscode' \ --exclude '*.log' \ --exclude 'hf/deploy.sh' \ 2>/dev/null || { # 如果 rsync 不可用,使用 cp warn "rsync 不可用,使用 cp 复制文件..." cp -r "$PROJECT_ROOT"/* . 2>/dev/null || true rm -rf node_modules dist vendor .idea .vscode *.log 2>/dev/null || true } # 使用 HF 专用的 Dockerfile 和 README info "配置 Hugging Face 专用文件..." cp "$SCRIPT_DIR/Dockerfile" ./Dockerfile cp "$SCRIPT_DIR/README.md" ./README.md # 检查是否有更改 if git diff --quiet && git diff --staged --quiet; then warn "没有检测到更改" else # 提交更改 info "提交更改..." git add . git commit -m "Deploy AxonHub $(date +%Y-%m-%d_%H:%M:%S)" # 推送到 HF info "推送到 Hugging Face Spaces..." git push success "部署完成!" fi echo "" echo "==========================================" success "AxonHub 已成功部署到 Hugging Face Spaces" echo "==========================================" echo "" echo "访问地址: ${SPACE_URL}" echo "" echo "重要提示:" echo "1. 请在 Space Settings 中配置数据库连接:" echo " - Secret 名称: AXONHUB_DB_DSN" echo " - Secret 值: postgres://user:pass@host/db?sslmode=require" echo "" echo "2. 默认登录凭据:" echo " - 邮箱: admin@axonhub.com" echo " - 密码: admin" echo "" echo "3. 首次登录后请立即修改默认密码!" echo ""