point / deploy_to_hf.sh
eithney
Refactor application to Flask: enhance structure with RESTful API, static file support, and logging. Update Dockerfile for production with Gunicorn and health checks. Expand requirements for Flask and OpenSearch integration.
b0a1454
Raw
History Blame Contribute Delete
4.45 kB
#!/bin/bash
# 部署到 Hugging Face Spaces 脚本
# 设置颜色输出
GREEN='\033[0;32m'
BLUE='\033[0;34m'
RED='\033[0;31m'
YELLOW='\033[1;33m'
NC='\033[0m' # No Color
echo -e "${BLUE}================================${NC}"
echo -e "${BLUE}部署到 Hugging Face Spaces${NC}"
echo -e "${BLUE}================================${NC}"
# 检查是否安装了 git
if ! command -v git &> /dev/null; then
echo -e "${RED}❌ 错误: 未安装 Git${NC}"
exit 1
fi
# 获取用户信息
echo -e "\n${YELLOW}请输入你的 Hugging Face 信息:${NC}"
read -p "Hugging Face 用户名: " HF_USERNAME
read -p "Space 名称: " SPACE_NAME
if [ -z "$HF_USERNAME" ] || [ -z "$SPACE_NAME" ]; then
echo -e "${RED}❌ 错误: 用户名和 Space 名称不能为空${NC}"
exit 1
fi
# 构建远程仓库 URL
SPACE_URL="https://huggingface.co/spaces/${HF_USERNAME}/${SPACE_NAME}"
echo -e "\n${GREEN}Space URL: ${SPACE_URL}${NC}"
# 检查是否已经添加了 space 远程仓库
if git remote | grep -q "^space$"; then
echo -e "${YELLOW}⚠️ 检测到已存在的 'space' 远程仓库${NC}"
read -p "是否更新远程仓库地址? (y/n): " UPDATE_REMOTE
if [ "$UPDATE_REMOTE" = "y" ]; then
git remote set-url space ${SPACE_URL}
echo -e "${GREEN}✅ 已更新远程仓库地址${NC}"
fi
else
# 添加 Hugging Face Space 作为远程仓库
git remote add space ${SPACE_URL}
echo -e "${GREEN}✅ 已添加远程仓库${NC}"
fi
# 检查 Dockerfile 是否存在
if [ ! -f "Dockerfile" ]; then
echo -e "${RED}❌ 错误: 未找到 Dockerfile${NC}"
exit 1
fi
# 检查必要文件
echo -e "\n${BLUE}检查必要文件...${NC}"
REQUIRED_FILES=("app.py" "config.py" "requirements.txt" "index.html" "book_10242.json")
MISSING_FILES=()
for file in "${REQUIRED_FILES[@]}"; do
if [ -f "$file" ]; then
echo -e "${GREEN} ✅ $file${NC}"
else
echo -e "${RED}$file (缺失)${NC}"
MISSING_FILES+=("$file")
fi
done
if [ ${#MISSING_FILES[@]} -gt 0 ]; then
echo -e "${RED}❌ 缺少必要文件,部署可能失败${NC}"
read -p "是否继续? (y/n): " CONTINUE
if [ "$CONTINUE" != "y" ]; then
exit 1
fi
fi
# 检查 Git 状态
echo -e "\n${BLUE}检查 Git 状态...${NC}"
if [ -n "$(git status --porcelain)" ]; then
echo -e "${YELLOW}⚠️ 检测到未提交的更改${NC}"
git status --short
read -p "是否添加并提交这些更改? (y/n): " COMMIT_CHANGES
if [ "$COMMIT_CHANGES" = "y" ]; then
git add .
read -p "提交信息 (默认: 'Deploy Flask app to Hugging Face Spaces'): " COMMIT_MSG
COMMIT_MSG=${COMMIT_MSG:-"Deploy Flask app to Hugging Face Spaces"}
git commit -m "$COMMIT_MSG"
echo -e "${GREEN}✅ 已提交更改${NC}"
else
echo -e "${YELLOW}⚠️ 未提交的更改不会被推送${NC}"
fi
else
echo -e "${GREEN}✅ 工作目录干净${NC}"
fi
# 推送到 Hugging Face Spaces
echo -e "\n${BLUE}推送到 Hugging Face Spaces...${NC}"
echo -e "${YELLOW}注意: 可能需要输入 Hugging Face 访问令牌${NC}"
echo -e "${YELLOW}获取令牌: https://huggingface.co/settings/tokens${NC}"
read -p "是否现在推送? (y/n): " PUSH_NOW
if [ "$PUSH_NOW" = "y" ]; then
# 获取当前分支
CURRENT_BRANCH=$(git branch --show-current)
echo -e "${BLUE}当前分支: ${CURRENT_BRANCH}${NC}"
# 推送到 space
if git push space ${CURRENT_BRANCH}:main -f; then
echo -e "\n${GREEN}🎉 部署成功!${NC}"
echo -e "${GREEN}Space URL: ${SPACE_URL}${NC}"
echo -e "${GREEN}应用 URL: https://${HF_USERNAME}-${SPACE_NAME}.hf.space${NC}"
echo -e "\n${YELLOW}提示: 首次部署需要 5-10 分钟构建时间${NC}"
echo -e "${YELLOW}可以在 Space 页面查看构建日志${NC}"
else
echo -e "${RED}❌ 推送失败${NC}"
echo -e "${YELLOW}可能的原因:${NC}"
echo -e " 1. 未登录 Hugging Face (需要访问令牌)"
echo -e " 2. Space 不存在 (需要先在网页上创建 Space)"
echo -e " 3. 网络连接问题"
exit 1
fi
else
echo -e "${YELLOW}已取消推送${NC}"
echo -e "\n${BLUE}手动推送命令:${NC}"
echo -e " git push space main"
fi
echo -e "\n${BLUE}================================${NC}"
echo -e "${GREEN}部署流程完成!${NC}"
echo -e "${BLUE}================================${NC}"