Files
font2pic/scripts/deploy-fonts.sh
2026-02-09 16:09:44 +08:00

203 lines
5.8 KiB
Bash
Executable File
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#!/bin/bash
# Font2SVG 字体资源部署脚本
# 用于将字体文件上传到 fonts.biboer.cn 服务器
set -e # 遇到错误立即退出
# ===== 配置区域 =====
SERVER="user@fonts.biboer.cn" # 请替换为你的 SSH 用户名
REMOTE_DIR="/home/gavin/font2svg"
REMOTE_MP_ASSETS_DIR="$REMOTE_DIR/miniprogram/assets"
LOCAL_FONTS_DIR="fonts"
LOCAL_WEB_FONTS_JSON="frontend/public/fonts.json"
LOCAL_WEB_DEFAULT_JSON="frontend/public/default.json"
LOCAL_MP_FONTS_JSON="miniprogram/assets/fonts.json"
LOCAL_MP_DEFAULT_JSON="miniprogram/assets/default.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_WEB_FONTS_JSON" ]; then
log_error "Web fonts.json 文件不存在: $LOCAL_WEB_FONTS_JSON"
exit 1
fi
if [ ! -f "$LOCAL_MP_FONTS_JSON" ]; then
log_error "小程序 fonts.json 文件不存在: $LOCAL_MP_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 $REMOTE_MP_ASSETS_DIR"
}
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_web_config() {
log_info "上传 Web 配置..."
scp "$LOCAL_WEB_FONTS_JSON" "$SERVER:$REMOTE_DIR/fonts.json"
if [ -f "$LOCAL_WEB_DEFAULT_JSON" ]; then
scp "$LOCAL_WEB_DEFAULT_JSON" "$SERVER:$REMOTE_DIR/default.json"
fi
log_info "Web 配置上传完成"
}
upload_miniprogram_config() {
log_info "上传小程序配置..."
scp "$LOCAL_MP_FONTS_JSON" "$SERVER:$REMOTE_MP_ASSETS_DIR/fonts.json"
if [ -f "$LOCAL_MP_DEFAULT_JSON" ]; then
scp "$LOCAL_MP_DEFAULT_JSON" "$SERVER:$REMOTE_MP_ASSETS_DIR/default.json"
else
log_warn "未找到小程序 default.json已跳过: $LOCAL_MP_DEFAULT_JSON"
fi
log_info "小程序配置上传完成"
}
set_permissions() {
log_info "设置文件权限..."
ssh $SERVER "chmod -R 755 $REMOTE_DIR/fonts $REMOTE_MP_ASSETS_DIR"
log_info "权限设置完成"
}
verify_deployment() {
log_info "验证部署结果..."
# 检查小程序 fonts.json
MP_HTTP_CODE=$(curl -s -o /dev/null -w "%{http_code}" "https://fonts.biboer.cn/miniprogram/assets/fonts.json")
if [ "$MP_HTTP_CODE" = "200" ]; then
log_info "小程序 fonts.json 可访问 ✓"
else
log_error "小程序 fonts.json 访问失败 (HTTP $MP_HTTP_CODE)"
log_warn "请检查 Cloudflare DNS 配置和 Nginx 配置"
exit 1
fi
WEB_HTTP_CODE=$(curl -s -o /dev/null -w "%{http_code}" "https://fonts.biboer.cn/fonts.json")
if [ "$WEB_HTTP_CODE" = "200" ]; then
log_info "Web fonts.json 可访问 ✓"
else
log_warn "Web fonts.json 不可访问 (HTTP $WEB_HTTP_CODE)"
fi
# 检查 CORS 头
CORS_HEADER=$(curl -s -I "https://fonts.biboer.cn/miniprogram/assets/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/miniprogram/assets/fonts.json',"
echo " success: (res) => console.log(res.data)"
echo " })"
echo ""
echo "3. 验证 CDN 缓存状态:"
echo " curl -I https://fonts.biboer.cn/miniprogram/assets/fonts.json | grep cf-cache-status"
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_web_config
upload_miniprogram_config
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 "$@"