#!/bin/bash # Font2SVG 字体资源部署脚本 # 用于将字体文件上传到 fonts.biboer.cn 服务器 set -e # 遇到错误立即退出 # ===== 配置区域 ===== SERVER="user@fonts.biboer.cn" # 请替换为你的 SSH 用户名 REMOTE_DIR="/home/gavin/font2svg" LOCAL_FONTS_DIR="frontend/public/fonts" LOCAL_FONTS_JSON="frontend/public/fonts.json" # 颜色输出 RED='\033[0;31m' GREEN='\033[0;32m' YELLOW='\033[1;33m' NC='\033[0m' # No Color # ===== 函数定义 ===== log_info() { echo -e "${GREEN}[INFO]${NC} $1" } log_warn() { echo -e "${YELLOW}[WARN]${NC} $1" } log_error() { echo -e "${RED}[ERROR]${NC} $1" } check_files() { log_info "检查本地文件..." if [ ! -d "$LOCAL_FONTS_DIR" ]; then log_error "字体目录不存在: $LOCAL_FONTS_DIR" exit 1 fi if [ ! -f "$LOCAL_FONTS_JSON" ]; then log_error "fonts.json 文件不存在: $LOCAL_FONTS_JSON" exit 1 fi FONT_COUNT=$(find "$LOCAL_FONTS_DIR" -name "*.ttf" -o -name "*.otf" | wc -l) log_info "发现 $FONT_COUNT 个字体文件" } create_remote_dirs() { log_info "创建远程目录..." ssh $SERVER "mkdir -p $REMOTE_DIR/fonts" } upload_fonts() { log_info "上传字体文件到 $SERVER..." log_warn "这可能需要几分钟,取决于字体文件大小..." # 使用 rsync 进行增量上传(只上传修改过的文件) rsync -avz --progress \ --exclude=".DS_Store" \ --exclude="Thumbs.db" \ "$LOCAL_FONTS_DIR/" "$SERVER:$REMOTE_DIR/fonts/" log_info "字体文件上传完成" } upload_fonts_json() { log_info "上传 fonts.json..." scp "$LOCAL_FONTS_JSON" "$SERVER:$REMOTE_DIR/" log_info "fonts.json 上传完成" } set_permissions() { log_info "设置文件权限..." ssh $SERVER "chmod -R 755 $REMOTE_DIR" log_info "权限设置完成" } verify_deployment() { log_info "验证部署结果..." # 检查 fonts.json HTTP_CODE=$(curl -s -o /dev/null -w "%{http_code}" "https://fonts.biboer.cn/fonts.json") if [ "$HTTP_CODE" = "200" ]; then log_info "fonts.json 可访问 ✓" else log_error "fonts.json 访问失败 (HTTP $HTTP_CODE)" log_warn "请检查 Cloudflare DNS 配置和 Nginx 配置" exit 1 fi # 检查 CORS 头 CORS_HEADER=$(curl -s -I "https://fonts.biboer.cn/fonts.json" | grep -i "access-control-allow-origin") if [ -n "$CORS_HEADER" ]; then log_info "CORS 配置正确 ✓" else log_warn "未检测到 CORS 头,请检查 Nginx 配置" fi } restart_nginx() { log_info "重启 Nginx..." ssh $SERVER "sudo systemctl restart nginx" || { log_warn "Nginx 重启失败,可能需要手动执行" return 1 } log_info "Nginx 重启成功" } show_summary() { echo "" echo "=======================================" log_info "部署完成!" echo "=======================================" echo "" echo "下一步操作:" echo "1. 在小程序后台配置域名:" echo " https://mp.weixin.qq.com/ → 开发 → 服务器域名" echo " 添加 downloadFile 合法域名: https://fonts.biboer.cn" echo "" echo "2. 测试字体加载(在小程序开发者工具控制台):" echo " wx.request({" echo " url: 'https://fonts.biboer.cn/fonts.json'," echo " success: (res) => console.log(res.data)" echo " })" echo "" echo "3. 验证 CDN 缓存状态:" echo " curl -I https://fonts.biboer.cn/fonts.json | grep cf-cache-status" echo "" } # ===== 主流程 ===== main() { echo "" echo "=========================================" echo " Font2SVG 字体资源部署脚本" echo " 目标服务器: fonts.biboer.cn" echo "=========================================" echo "" # 检查是否在项目根目录 if [ ! -f "package.json" ]; then log_error "请在项目根目录执行此脚本" exit 1 fi # 执行部署步骤 check_files create_remote_dirs upload_fonts upload_fonts_json set_permissions # 可选:重启 Nginx(需要 sudo 权限) read -p "是否重启 Nginx?(y/N) " -n 1 -r echo if [[ $REPLY =~ ^[Yy]$ ]]; then restart_nginx fi # 验证部署 verify_deployment show_summary } # 执行主函数 main "$@"