| #!/bin/bash |
| |
| |
| |
| |
| |
| |
| |
|
|
| set -e |
|
|
| |
| RED='\033[0;31m' |
| GREEN='\033[0;32m' |
| YELLOW='\033[1;33m' |
| BLUE='\033[0;34m' |
| NC='\033[0m' |
|
|
| |
| 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 <HF_USERNAME> <SPACE_NAME>" |
| 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}" |
|
|
| |
| if ! command -v git &> /dev/null; then |
| error "请先安装 git" |
| fi |
|
|
| |
| 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 |
|
|
| |
| 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 || { |
| |
| warn "rsync 不可用,使用 cp 复制文件..." |
| cp -r "$PROJECT_ROOT"/* . 2>/dev/null || true |
| rm -rf node_modules dist vendor .idea .vscode *.log 2>/dev/null || true |
| } |
|
|
| |
| 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)" |
|
|
| |
| 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 "" |