axonhub / deploy.sh
llzai's picture
Upload 2 files
6d0cdca verified
#!/bin/bash
# AxonHub Hugging Face Spaces 部署脚本
#
# 使用方法:
# ./deploy.sh <HF_USERNAME> <SPACE_NAME>
#
# 示例:
# ./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 <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}"
# 检查 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 ""