<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
    <channel>
        <title>Tools on ifanticの小屋</title>
        <link>https://langminjeii.ifantic.de/categories/tools/</link>
        <description>Recent content in Tools on ifanticの小屋</description>
        <generator>Hugo -- gohugo.io</generator>
        <language>zh-cn</language>
        <copyright>IFantic | BLOG</copyright><atom:link href="https://langminjeii.ifantic.de/categories/tools/index.xml" rel="self" type="application/rss+xml" /><item>
        <title>Cloudpaste部署——在线剪贴板、图床、文件中转站</title>
        <link>https://langminjeii.ifantic.de/post/cloudpaste%E9%83%A8%E7%BD%B2%E5%9C%A8%E7%BA%BF%E5%89%AA%E8%B4%B4%E6%9D%BF%E5%9B%BE%E5%BA%8A%E6%96%87%E4%BB%B6%E4%B8%AD%E8%BD%AC%E7%AB%99/</link>
        <pubDate>Sun, 22 Jun 2025 15:17:31 +0800</pubDate>
        
        <guid>https://langminjeii.ifantic.de/post/cloudpaste%E9%83%A8%E7%BD%B2%E5%9C%A8%E7%BA%BF%E5%89%AA%E8%B4%B4%E6%9D%BF%E5%9B%BE%E5%BA%8A%E6%96%87%E4%BB%B6%E4%B8%AD%E8%BD%AC%E7%AB%99/</guid>
        <description>&lt;img src="https://langminjeii.ifantic.de/post/cloudpaste.png" alt="Featured image of post Cloudpaste部署——在线剪贴板、图床、文件中转站" /&gt;&lt;p&gt;随便写写 ~ 项目在下面：&lt;/p&gt;
&lt;div class=&#34;github&#34;&gt;
    &lt;div class=&#34;logo&#34;&gt;
        &lt;svg xmlns=&#34;http://www.w3.org/2000/svg&#34; class=&#34;icon github-icon&#34; viewBox=&#34;0 0 16 16&#34;&gt;&lt;path fill-rule=&#34;evenodd&#34; clip-rule=&#34;evenodd&#34; d=&#34;M2 2.5C2 1.83696 2.26339 1.20107 2.73223 0.732233C3.20108 0.263392 3.83696 0 4.5 0L13.25 0C13.4489 0 13.6397 0.0790176 13.7803 0.21967C13.921 0.360322 14 0.551088 14 0.75V13.25C14 13.4489 13.921 13.6397 13.7803 13.7803C13.6397 13.921 13.4489 14 13.25 14H10.75C10.5511 14 10.3603 13.921 10.2197 13.7803C10.079 13.6397 10 13.4489 10 13.25C10 13.0511 10.079 12.8603 10.2197 12.7197C10.3603 12.579 10.5511 12.5 10.75 12.5H12.5V10.5H4.5C4.30308 10.5 4.11056 10.5582 3.94657 10.6672C3.78257 10.7762 3.65442 10.9312 3.57816 11.1128C3.50191 11.2943 3.48096 11.4943 3.51793 11.6878C3.5549 11.8812 3.64816 12.0594 3.786 12.2C3.92524 12.3422 4.0023 12.5338 4.00024 12.7328C3.99818 12.9318 3.91716 13.1218 3.775 13.261C3.63285 13.4002 3.4412 13.4773 3.24222 13.4752C3.04325 13.4732 2.85324 13.3922 2.714 13.25C2.25571 12.7829 1.99929 12.1544 2 11.5V2.5ZM12.5 1.5V9H4.5C4.144 9 3.806 9.074 3.5 9.208V2.5C3.5 2.23478 3.60536 1.98043 3.79289 1.79289C3.98043 1.60536 4.23478 1.5 4.5 1.5H12.5ZM5 12.25V15.5C5 15.5464 5.01293 15.5919 5.03734 15.6314C5.06175 15.6709 5.09667 15.7028 5.1382 15.7236C5.17972 15.7444 5.22621 15.7532 5.27245 15.749C5.31869 15.7448 5.36286 15.7279 5.4 15.7L6.85 14.613C6.89328 14.5805 6.94591 14.563 7 14.563C7.05409 14.563 7.10673 14.5805 7.15 14.613L8.6 15.7C8.63714 15.7279 8.68131 15.7448 8.72755 15.749C8.77379 15.7532 8.82028 15.7444 8.8618 15.7236C8.90333 15.7028 8.93826 15.6709 8.96266 15.6314C8.98707 15.5919 9 15.5464 9 15.5V12.25C9 12.1837 8.97366 12.1201 8.92678 12.0732C8.87989 12.0263 8.81631 12 8.75 12H5.25C5.1837 12 5.12011 12.0263 5.07322 12.0732C5.02634 12.1201 5 12.1837 5 12.25Z&#34;/&gt;&lt;/svg&gt;
        &lt;a class=&#34;name&#34; href=https://github.com/ling-drag0n/CloudPaste target=&#34;_blank&#34;&gt;CloudPaste - 在线剪贴板 📋&lt;/a&gt;
    &lt;/div&gt;
    &lt;div class=&#34;description&#34;&gt;基于 Cloudflare 的在线剪贴板和文件分享服务，支持 Markdown 编辑和文件上传&lt;/div&gt;
    &lt;div class=&#34;language&#34;&gt;
        &lt;span class=&#34;language-color&#34; style=&#34;background-color: #f1e05a&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;language-name&#34;&gt;JavaScript&lt;/span&gt;
    &lt;/div&gt;
&lt;/div&gt;

&lt;h2 id=&#34;-特点&#34;&gt;✨ 特点
&lt;/h2&gt;&lt;h3 id=&#34;-markdown-编辑与分享&#34;&gt;📝 Markdown 编辑与分享
&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;强大的编辑器&lt;/strong&gt;：集成 &lt;a class=&#34;link&#34; href=&#34;https://github.com/Vanessa219/vditor&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;Vditor&lt;/a&gt;，支持 GitHub 风格的 Markdown、数学公式、流程图、思维导图等&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;安全分享&lt;/strong&gt;：内容可设置访问密码保护&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;灵活时效&lt;/strong&gt;：支持设置内容过期时间&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;访问控制&lt;/strong&gt;：可限制最大查看次数&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;个性化&lt;/strong&gt;：自定义分享链接及备注&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;支持文本 Raw 直链&lt;/strong&gt;：类似 gihub 的 Raw 直链，用于 yaml 配置文件来启动的服务&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;多格式导出&lt;/strong&gt;：支持 PDF、Markdown、HTML、PNG 图片、Word 文档 导出&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;便捷分享&lt;/strong&gt;：一键复制分享链接和生成二维码&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;自动保存&lt;/strong&gt;：支持自动保存草稿功能&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&#34;-文件上传与管理&#34;&gt;📤 文件上传与管理
&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;多存储支持&lt;/strong&gt;：兼容多种 S3 存储服务 (Cloudflare R2、Backblaze B2、AWS S3 等)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;存储配置&lt;/strong&gt;：可视化界面配置多个存储空间，灵活切换默认存储源&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;高效上传&lt;/strong&gt;：通过预签名 URL 直接上传至 S3 存储，多文件上传&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;实时反馈&lt;/strong&gt;：上传进度实时显示&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;自定义限制&lt;/strong&gt;：单次上传限制和最大容量限制&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;元数据管理&lt;/strong&gt;：文件备注、密码、过期时间、访问限制&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;数据分析&lt;/strong&gt;：文件访问统计与趋势分析&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;服务器直传&lt;/strong&gt;：支持调接口进行文件上传、下载等操作&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&#34;-便捷的文件文本操作&#34;&gt;🛠 便捷的文件/文本操作
&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;统一管理&lt;/strong&gt;：支持文件/文本创建、删除和属性修改&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;在线预览&lt;/strong&gt;：常见文档、图片和媒体文件的在线预览与直链生成&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;分享工具&lt;/strong&gt;：生成短链接和二维码，便于跨平台分享&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;批量管理&lt;/strong&gt;：文件/文本批量操作与显示&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&#34;-webdav-和挂载点管理&#34;&gt;🔄 WebDAV 和挂载点管理
&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;WebDAV 协议支持&lt;/strong&gt;：通过标准 WebDAV 协议访问和管理文件系统&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;网络驱动器挂载&lt;/strong&gt;：支持 部分第三方客户端直接挂载&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;灵活的挂载点&lt;/strong&gt;：支持创建多个挂载点，连接不同的存储服务&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;权限控制&lt;/strong&gt;：精细的挂载点访问权限管理&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;API 密钥集成&lt;/strong&gt;：通过 API 密钥授权 WebDAV 访问&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;大文件支持&lt;/strong&gt;：自动使用分片上传机制处理大文件&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;目录操作&lt;/strong&gt;：完整支持目录创建、上传、删除、重命名等操作&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&#34;-轻量权限管理&#34;&gt;🔐 轻量权限管理
&lt;/h3&gt;&lt;h4 id=&#34;管理员权限控制&#34;&gt;管理员权限控制
&lt;/h4&gt;&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;系统管理&lt;/strong&gt;：全局系统设置配置&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;内容审核&lt;/strong&gt;：所有用户内容的管理&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;存储管理&lt;/strong&gt;：S3 存储服务的添加、编辑与删除&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;权限分配&lt;/strong&gt;：API 密钥的创建与权限管理&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;数据分析&lt;/strong&gt;：完整的统计数据访问&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 id=&#34;api-密钥权限控制&#34;&gt;API 密钥权限控制
&lt;/h4&gt;&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;文本权限&lt;/strong&gt;：创建/编辑/删除文本内容&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;文件权限&lt;/strong&gt;：上传/管理/删除文件&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;存储权限&lt;/strong&gt;：可选择特定的存储配置&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;读写分离&lt;/strong&gt;：可设置只读或读写权限&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;时效控制&lt;/strong&gt;：自定义有效期（从小时到月）&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;安全机制&lt;/strong&gt;：自动失效与手动撤销功能&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&#34;-系统功能&#34;&gt;💫 系统功能
&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;适配性强&lt;/strong&gt;：响应式设计，适配移动设备和桌面&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;多语言&lt;/strong&gt;：中/英文双语界面支持&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;视觉模式&lt;/strong&gt;：明亮/暗黑主题切换&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;安全认证&lt;/strong&gt;：基于 JWT 的管理员认证系统&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;离线体验&lt;/strong&gt;：PWA 支持，可离线使用和安装到桌面&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;h2 id=&#34;-部署教程&#34;&gt;🚀 部署教程
&lt;/h2&gt;&lt;h3 id=&#34;前期准备&#34;&gt;前期准备
&lt;/h3&gt;&lt;p&gt;在开始部署前，请确保您已准备以下内容：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a class=&#34;link&#34; href=&#34;https://dash.cloudflare.com/&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;Cloudflare&lt;/a&gt; 账号（必需）&lt;/li&gt;
&lt;li&gt;如使用 R2：开通 &lt;strong&gt;Cloudflare R2&lt;/strong&gt; 服务并创建存储桶（需绑定支付方式）&lt;/li&gt;
&lt;li&gt;其他 S3 存储服务的配置信息：
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;S3_ACCESS_KEY_ID&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;S3_SECRET_ACCESS_KEY&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;S3_BUCKET_NAME&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;S3_ENDPOINT&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&#34;开始部署&#34;&gt;开始部署
&lt;/h3&gt;&lt;h4 id=&#34;获取-cloudflare-api-令牌&#34;&gt;获取 Cloudflare API 令牌
&lt;/h4&gt;&lt;ol&gt;
&lt;li&gt;访问 &lt;a class=&#34;link&#34; href=&#34;https://dash.cloudflare.com/profile/api-tokens&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;Cloudflare Dashboard&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;创建新的 API 令牌&lt;/li&gt;
&lt;li&gt;选择&amp;quot;编辑 Cloudflare Workers&amp;quot;模板，并添加 D1 数据库编辑权限&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;
&lt;div class=&#34;post-img-view&#34;&gt;
&lt;a data-fancybox=&#34;gallery&#34; href=&#34;https://static.houhuayuan.me/blog/2025/06/a5234126225b1f32cf257eefbd60a5d2.png&#34;&gt;
&lt;img src=&#34;https://static.houhuayuan.me/blog/2025/06/a5234126225b1f32cf257eefbd60a5d2.png&#34; alt=&#34;&#34;  /&gt;
&lt;/a&gt;
&lt;/div&gt;

&lt;/p&gt;
&lt;p&gt;
&lt;div class=&#34;post-img-view&#34;&gt;
&lt;a data-fancybox=&#34;gallery&#34; href=&#34;https://static.houhuayuan.me/blog/2025/06/cc5101745cfc3a4247240089877c3036.png&#34;&gt;
&lt;img src=&#34;https://static.houhuayuan.me/blog/2025/06/cc5101745cfc3a4247240089877c3036.png&#34; alt=&#34;&#34;  /&gt;
&lt;/a&gt;
&lt;/div&gt;

&lt;/p&gt;
&lt;ol start=&#34;4&#34;&gt;
&lt;li&gt;获取cloudflare account ID：&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;
&lt;div class=&#34;post-img-view&#34;&gt;
&lt;a data-fancybox=&#34;gallery&#34; href=&#34;https://static.houhuayuan.me/blog/2025/06/ee2fbba2d9097915bb0941055656fa12.png&#34;&gt;
&lt;img src=&#34;https://static.houhuayuan.me/blog/2025/06/ee2fbba2d9097915bb0941055656fa12.png&#34; alt=&#34;&#34;  /&gt;
&lt;/a&gt;
&lt;/div&gt;

&lt;/p&gt;
&lt;h4 id=&#34;配置-github-仓库&#34;&gt;配置 GitHub 仓库
&lt;/h4&gt;&lt;ol&gt;
&lt;li&gt;Fork 或克隆仓库 &lt;a class=&#34;link&#34; href=&#34;https://github.com/ling-drag0n/CloudPaste&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;https://github.com/ling-drag0n/CloudPaste&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;进入您的 GitHub 仓库设置&lt;/li&gt;
&lt;li&gt;转到 Settings → Secrets and variables → Actions → New Repository secrets&lt;/li&gt;
&lt;li&gt;添加以下 Secrets：&lt;/li&gt;
&lt;/ol&gt;
&lt;table&gt;
  &lt;thead&gt;
      &lt;tr&gt;
          &lt;th&gt;Secret 名称&lt;/th&gt;
          &lt;th&gt;必需&lt;/th&gt;
          &lt;th&gt;用途&lt;/th&gt;
      &lt;/tr&gt;
  &lt;/thead&gt;
  &lt;tbody&gt;
      &lt;tr&gt;
          &lt;td&gt;&lt;code&gt;CLOUDFLARE_API_TOKEN&lt;/code&gt;&lt;/td&gt;
          &lt;td&gt;✅&lt;/td&gt;
          &lt;td&gt;Cloudflare API 令牌（需要 Workers、D1 和 Pages 权限）&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;&lt;code&gt;CLOUDFLARE_ACCOUNT_ID&lt;/code&gt;&lt;/td&gt;
          &lt;td&gt;✅&lt;/td&gt;
          &lt;td&gt;Cloudflare 账户 ID&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;&lt;code&gt;ENCRYPTION_SECRET&lt;/code&gt;&lt;/td&gt;
          &lt;td&gt;❌&lt;/td&gt;
          &lt;td&gt;用于加密敏感数据的密钥（如不提供，将自动生成）&lt;/td&gt;
      &lt;/tr&gt;
  &lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;
&lt;div class=&#34;post-img-view&#34;&gt;
&lt;a data-fancybox=&#34;gallery&#34; href=&#34;https://static.houhuayuan.me/blog/2025/06/11ad4de493541e97803667c870105625.png&#34;&gt;
&lt;img src=&#34;https://static.houhuayuan.me/blog/2025/06/11ad4de493541e97803667c870105625.png&#34; alt=&#34;&#34;  /&gt;
&lt;/a&gt;
&lt;/div&gt;

&lt;/p&gt;
&lt;ol start=&#34;5&#34;&gt;
&lt;li&gt;后端部署：&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;
&lt;div class=&#34;post-img-view&#34;&gt;
&lt;a data-fancybox=&#34;gallery&#34; href=&#34;https://static.houhuayuan.me/blog/2025/06/6c11e6b3e53dfd851308a47ca0aff90f.png&#34;&gt;
&lt;img src=&#34;https://static.houhuayuan.me/blog/2025/06/6c11e6b3e53dfd851308a47ca0aff90f.png&#34; alt=&#34;&#34;  /&gt;
&lt;/a&gt;
&lt;/div&gt;

&lt;/p&gt;
&lt;ol start=&#34;6&#34;&gt;
&lt;li&gt;然后按照同样的步骤，部署前端：&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;
&lt;div class=&#34;post-img-view&#34;&gt;
&lt;a data-fancybox=&#34;gallery&#34; href=&#34;https://static.houhuayuan.me/blog/2025/06/e19f281358ecdaaf43833f2d5fd456d8.png&#34;&gt;
&lt;img src=&#34;https://static.houhuayuan.me/blog/2025/06/e19f281358ecdaaf43833f2d5fd456d8.png&#34; alt=&#34;&#34;  /&gt;
&lt;/a&gt;
&lt;/div&gt;

&lt;/p&gt;
&lt;ol start=&#34;7&#34;&gt;
&lt;li&gt;后端部署完成后，在cloudflare pages里查看后端地址：&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;
&lt;div class=&#34;post-img-view&#34;&gt;
&lt;a data-fancybox=&#34;gallery&#34; href=&#34;https://static.houhuayuan.me/blog/2025/06/9482410603540f4d67ef6d8a41f532f0.png&#34;&gt;
&lt;img src=&#34;https://static.houhuayuan.me/blog/2025/06/9482410603540f4d67ef6d8a41f532f0.png&#34; alt=&#34;&#34;  /&gt;
&lt;/a&gt;
&lt;/div&gt;

&lt;/p&gt;
&lt;ol start=&#34;8&#34;&gt;
&lt;li&gt;复制地址，回到前端 Cloudflare Pages 控制面板设置环境变量：&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;
&lt;div class=&#34;post-img-view&#34;&gt;
&lt;a data-fancybox=&#34;gallery&#34; href=&#34;https://static.houhuayuan.me/blog/2025/06/6ed81cd98519cb53a34c84ce7a6fcade.png&#34;&gt;
&lt;img src=&#34;https://static.houhuayuan.me/blog/2025/06/6ed81cd98519cb53a34c84ce7a6fcade.png&#34; alt=&#34;&#34;  /&gt;
&lt;/a&gt;
&lt;/div&gt;

&lt;/p&gt;
&lt;div class=&#34;mycard&#34;&gt;
      &lt;div class=&#34;content&#34;&gt;&lt;ul&gt;
&lt;li&gt;名称：&lt;code&gt;VITE_BACKEND_URL&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;值：刚刚部署的后端 Worker URL（如 &lt;code&gt;https://cloudpaste-backend.your-username.workers.dev&lt;/code&gt;），末尾不带&amp;quot;/&amp;quot;, 同时建议使用自定义的 worker 后端域名。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;一定要完整的填写后端域名, &lt;code&gt;https://xxxx.com&lt;/code&gt; 格式&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;&lt;/div&gt;
    &lt;/div&gt;

&lt;ol start=&#34;9&#34;&gt;
&lt;li&gt;重要步骤： 随后要再次运行一遍前端的工作流，以便完成后端域名加载！！！&lt;/li&gt;
&lt;/ol&gt;



&lt;div class=&#34;simple-notice simple-notice-info&#34; &gt;
    &lt;div class=&#34;simple-notice-title&#34;&gt;&lt;svg xmlns=&#34;http://www.w3.org/2000/svg&#34; class=&#34;icon simple-notice-icon&#34; viewBox=&#34;0 0 192 512&#34;&gt;&lt;path d=&#34;M20 424.23h20V279.77H20a20 20 0 01-20-20V212a20 20 0 0120-20h112a20 20 0 0120 20v212.23h20a20 20 0 0120 20V492a20 20 0 01-20 20H20a20 20 0 01-20-20v-47.77a20 20 0 0120-20zM96 0a72 72 0 100 144A72 72 0 0096 0z&#34;/&gt;&lt;/svg&gt;&lt;/div&gt;&lt;p&gt;&lt;code&gt;⚠️ 安全提示：请在系统初始化后立即修改默认管理员密码（用户名: admin, 密码: admin123）。&lt;/code&gt;&lt;/p&gt;&lt;/div&gt;

&lt;h3 id=&#34;r2-api-相关获取及跨域配置&#34;&gt;R2 API 相关获取及跨域配置
&lt;/h3&gt;&lt;ol&gt;
&lt;li&gt;登录 Cloudflare Dashboard&lt;/li&gt;
&lt;li&gt;点击 R2 存储，创建一个存储桶&lt;/li&gt;
&lt;li&gt;创建 API 令牌&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;
&lt;div class=&#34;post-img-view&#34;&gt;
&lt;a data-fancybox=&#34;gallery&#34; href=&#34;https://static.houhuayuan.me/blog/2025/06/3b0d75eaa852f298464382bee0a04aa6.png&#34;&gt;
&lt;img src=&#34;https://static.houhuayuan.me/blog/2025/06/3b0d75eaa852f298464382bee0a04aa6.png&#34; alt=&#34;&#34;  /&gt;
&lt;/a&gt;
&lt;/div&gt;

&lt;/p&gt;
&lt;p&gt;
&lt;div class=&#34;post-img-view&#34;&gt;
&lt;a data-fancybox=&#34;gallery&#34; href=&#34;https://static.houhuayuan.me/blog/2025/06/86078b96f83ea68ce615c6af79068488.png&#34;&gt;
&lt;img src=&#34;https://static.houhuayuan.me/blog/2025/06/86078b96f83ea68ce615c6af79068488.png&#34; alt=&#34;&#34;  /&gt;
&lt;/a&gt;
&lt;/div&gt;

&lt;/p&gt;
&lt;ol start=&#34;4&#34;&gt;
&lt;li&gt;创建后把全部数据都保存好，后续要填写密钥ID和密钥&lt;/li&gt;
&lt;li&gt;配置跨域规则：点击对应存储桶，点击设置，编辑 CORS 策略，如下所示：&lt;/li&gt;
&lt;/ol&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-fallback&#34; data-lang=&#34;fallback&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;ln&#34;&gt;1&lt;/span&gt;&lt;span class=&#34;cl&#34;&gt;[
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;ln&#34;&gt;2&lt;/span&gt;&lt;span class=&#34;cl&#34;&gt;  {
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;ln&#34;&gt;3&lt;/span&gt;&lt;span class=&#34;cl&#34;&gt;    &amp;#34;AllowedOrigins&amp;#34;: [&amp;#34;http://localhost:3000&amp;#34;, &amp;#34;https://根据自己的前端域名来替代&amp;#34;],
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;ln&#34;&gt;4&lt;/span&gt;&lt;span class=&#34;cl&#34;&gt;    &amp;#34;AllowedMethods&amp;#34;: [&amp;#34;GET&amp;#34;, &amp;#34;PUT&amp;#34;, &amp;#34;POST&amp;#34;, &amp;#34;DELETE&amp;#34;, &amp;#34;HEAD&amp;#34;],
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;ln&#34;&gt;5&lt;/span&gt;&lt;span class=&#34;cl&#34;&gt;    &amp;#34;AllowedHeaders&amp;#34;: [&amp;#34;*&amp;#34;],
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;ln&#34;&gt;6&lt;/span&gt;&lt;span class=&#34;cl&#34;&gt;    &amp;#34;ExposeHeaders&amp;#34;: [&amp;#34;ETag&amp;#34;],
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;ln&#34;&gt;7&lt;/span&gt;&lt;span class=&#34;cl&#34;&gt;    &amp;#34;MaxAgeSeconds&amp;#34;: 3600
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;ln&#34;&gt;8&lt;/span&gt;&lt;span class=&#34;cl&#34;&gt;  }
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;ln&#34;&gt;9&lt;/span&gt;&lt;span class=&#34;cl&#34;&gt;]
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class=&#34;details admonition warning open&#34;&gt;
        &lt;div class=&#34;details-summary admonition-title&#34;&gt;
            &lt;i class=&#34;icon fas fa-exclamation-triangle fa-fw&#34;&gt;&lt;/i&gt;注意！！！&lt;i class=&#34;details-icon fas fa-angle-right fa-fw&#34;&gt;&lt;/i&gt;
        &lt;/div&gt;
        &lt;div class=&#34;details-content&#34;&gt;
            &lt;div class=&#34;admonition-content&#34;&gt;编辑 CORS 策略那一块的前端域名最后不能有 &lt;code&gt;/&lt;/code&gt;，否则跨域配置会失败！我配置报错查了好久都没查到什么原因，最后莫名把反斜杠去掉就好了。&lt;/div&gt;
        &lt;/div&gt;
    &lt;/div&gt;
&lt;p&gt;最后在管理页配置一下s3存储和挂载，就可以当文件中转站使用啦！&lt;/p&gt;
&lt;p&gt;
&lt;div class=&#34;post-img-view&#34;&gt;
&lt;a data-fancybox=&#34;gallery&#34; href=&#34;https://static.houhuayuan.me/blog/2025/06/a62b5f1dc63ee20b71778bdf8516de2a.png&#34;&gt;
&lt;img src=&#34;https://static.houhuayuan.me/blog/2025/06/a62b5f1dc63ee20b71778bdf8516de2a.png&#34; alt=&#34;&#34;  /&gt;
&lt;/a&gt;
&lt;/div&gt;

&lt;/p&gt;
</description>
        </item>
        <item>
        <title>Gemini 负载均衡代理搭配 Cherry Studio</title>
        <link>https://langminjeii.ifantic.de/post/gemini-%E8%B4%9F%E8%BD%BD%E5%9D%87%E8%A1%A1%E4%BB%A3%E7%90%86%E6%90%AD%E9%85%8D-cherry-studio/</link>
        <pubDate>Wed, 09 Apr 2025 10:51:31 +0800</pubDate>
        
        <guid>https://langminjeii.ifantic.de/post/gemini-%E8%B4%9F%E8%BD%BD%E5%9D%87%E8%A1%A1%E4%BB%A3%E7%90%86%E6%90%AD%E9%85%8D-cherry-studio/</guid>
        <description>&lt;img src="https://langminjeii.ifantic.de/post/gemini.png" alt="Featured image of post Gemini 负载均衡代理搭配 Cherry Studio" /&gt;&lt;h2 id=&#34;部署-gemini-代理&#34;&gt;部署 Gemini 代理
&lt;/h2&gt;&lt;div class=&#34;github&#34;&gt;
    &lt;div class=&#34;logo&#34;&gt;
        &lt;svg xmlns=&#34;http://www.w3.org/2000/svg&#34; class=&#34;icon github-icon&#34; viewBox=&#34;0 0 16 16&#34;&gt;&lt;path fill-rule=&#34;evenodd&#34; clip-rule=&#34;evenodd&#34; d=&#34;M2 2.5C2 1.83696 2.26339 1.20107 2.73223 0.732233C3.20108 0.263392 3.83696 0 4.5 0L13.25 0C13.4489 0 13.6397 0.0790176 13.7803 0.21967C13.921 0.360322 14 0.551088 14 0.75V13.25C14 13.4489 13.921 13.6397 13.7803 13.7803C13.6397 13.921 13.4489 14 13.25 14H10.75C10.5511 14 10.3603 13.921 10.2197 13.7803C10.079 13.6397 10 13.4489 10 13.25C10 13.0511 10.079 12.8603 10.2197 12.7197C10.3603 12.579 10.5511 12.5 10.75 12.5H12.5V10.5H4.5C4.30308 10.5 4.11056 10.5582 3.94657 10.6672C3.78257 10.7762 3.65442 10.9312 3.57816 11.1128C3.50191 11.2943 3.48096 11.4943 3.51793 11.6878C3.5549 11.8812 3.64816 12.0594 3.786 12.2C3.92524 12.3422 4.0023 12.5338 4.00024 12.7328C3.99818 12.9318 3.91716 13.1218 3.775 13.261C3.63285 13.4002 3.4412 13.4773 3.24222 13.4752C3.04325 13.4732 2.85324 13.3922 2.714 13.25C2.25571 12.7829 1.99929 12.1544 2 11.5V2.5ZM12.5 1.5V9H4.5C4.144 9 3.806 9.074 3.5 9.208V2.5C3.5 2.23478 3.60536 1.98043 3.79289 1.79289C3.98043 1.60536 4.23478 1.5 4.5 1.5H12.5ZM5 12.25V15.5C5 15.5464 5.01293 15.5919 5.03734 15.6314C5.06175 15.6709 5.09667 15.7028 5.1382 15.7236C5.17972 15.7444 5.22621 15.7532 5.27245 15.749C5.31869 15.7448 5.36286 15.7279 5.4 15.7L6.85 14.613C6.89328 14.5805 6.94591 14.563 7 14.563C7.05409 14.563 7.10673 14.5805 7.15 14.613L8.6 15.7C8.63714 15.7279 8.68131 15.7448 8.72755 15.749C8.77379 15.7532 8.82028 15.7444 8.8618 15.7236C8.90333 15.7028 8.93826 15.6709 8.96266 15.6314C8.98707 15.5919 9 15.5464 9 15.5V12.25C9 12.1837 8.97366 12.1201 8.92678 12.0732C8.87989 12.0263 8.81631 12 8.75 12H5.25C5.1837 12 5.12011 12.0263 5.07322 12.0732C5.02634 12.1201 5 12.1837 5 12.25Z&#34;/&gt;&lt;/svg&gt;
        &lt;a class=&#34;name&#34; href=https://github.com/snailyp/gemini-balance target=&#34;_blank&#34;&gt;🚀 Gemini 代理服务&lt;/a&gt;
    &lt;/div&gt;
    &lt;div class=&#34;description&#34;&gt;本项目是一个基于 FastAPI 框架开发的高性能、易于部署的Gemini OpenAI兼容 和 Gemini API 代理服务。它不仅兼容 OpenAI 的 API 接口，还支持 Google 的 Gemini 原生接口。该代理服务内置了多 API Key 轮询、负载均衡、自动重试、访问控制（Bearer Token 认证）、流式响应等功能，旨在简化 AI 应用的开发和部署流程。&lt;/div&gt;
    &lt;div class=&#34;language&#34;&gt;
        &lt;span class=&#34;language-color&#34; style=&#34;background-color: #F48201&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;language-name&#34;&gt;Python&lt;/span&gt;
    &lt;/div&gt;
&lt;/div&gt;

&lt;ol&gt;
&lt;li&gt;复制&lt;a class=&#34;link&#34; href=&#34;https://huggingface.co/spaces/snailyp/gemini-balance&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;space空间&lt;/a&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;
&lt;div class=&#34;post-img-view&#34;&gt;
&lt;a data-fancybox=&#34;gallery&#34; href=&#34;https://static.houhuayuan.me/blog/2025/04/899fce962fbef8522eb24c86f0efae78.png&#34;&gt;
&lt;img src=&#34;https://static.houhuayuan.me/blog/2025/04/899fce962fbef8522eb24c86f0efae78.png&#34; alt=&#34;&#34;  /&gt;
&lt;/a&gt;
&lt;/div&gt;

&lt;/p&gt;
&lt;ol start=&#34;2&#34;&gt;
&lt;li&gt;修改 &lt;code&gt;visibility&lt;/code&gt; 为 &lt;code&gt;Public&lt;/code&gt;(一定注意修改成public，不然访问不到会报错)，配置 &lt;code&gt;ALLOWED_TOKENS&lt;/code&gt; 和 &lt;code&gt;API_KEYS&lt;/code&gt;。其余配置默认不用修改。&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;
&lt;div class=&#34;post-img-view&#34;&gt;
&lt;a data-fancybox=&#34;gallery&#34; href=&#34;https://static.houhuayuan.me/blog/2025/04/3aabae244e4199ccda08485dc3a1fb0a.png&#34;&gt;
&lt;img src=&#34;https://static.houhuayuan.me/blog/2025/04/3aabae244e4199ccda08485dc3a1fb0a.png&#34; alt=&#34;&#34;  /&gt;
&lt;/a&gt;
&lt;/div&gt;

&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;ALLOWED_TOKENS&lt;/code&gt; 格式为&lt;code&gt;[&amp;quot;自定义apikey&amp;quot;]&lt;/code&gt;，注意中括号、逗号和引号都有严格遵循。这个变量是对API的访问鉴权。&lt;/li&gt;
&lt;li&gt;&lt;code&gt;API_KEYS&lt;/code&gt; 格式为单个key的形式：&lt;code&gt;[&amp;quot;gemini_key1&amp;quot;]&lt;/code&gt;；多个key的形式&lt;code&gt;[&amp;quot;gemini_key1&amp;quot;,&amp;quot;gemini_key2&amp;quot;]&lt;/code&gt;。注意中括号、逗号和引号都有严格遵循。这里填的就是在&lt;a class=&#34;link&#34; href=&#34;https://aistudio.google.com/app/apikey&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;谷歌控制台&lt;/a&gt;创建的apikey。&lt;/li&gt;
&lt;li&gt;&lt;code&gt;BASE_URL&lt;/code&gt; 保持默认&lt;/li&gt;
&lt;/ul&gt;
&lt;ol start=&#34;3&#34;&gt;
&lt;li&gt;耐心等待一下。部署成功后，会出现running状态&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;
&lt;div class=&#34;post-img-view&#34;&gt;
&lt;a data-fancybox=&#34;gallery&#34; href=&#34;https://static.houhuayuan.me/blog/2025/04/5deeed15466f82f0c4d2b7068f1d65c8.png&#34;&gt;
&lt;img src=&#34;https://static.houhuayuan.me/blog/2025/04/5deeed15466f82f0c4d2b7068f1d65c8.png&#34; alt=&#34;&#34;  /&gt;
&lt;/a&gt;
&lt;/div&gt;

&lt;/p&gt;
&lt;ol start=&#34;4&#34;&gt;
&lt;li&gt;这时该huggingface服务的默认host为 &lt;code&gt;huggingface用户名-gemini-balance.hf.space&lt;/code&gt;，比如上面的是 &lt;code&gt;snailyp-gemini-balance.hf.space&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;注意&lt;/strong&gt;：huggingface服务48h不使用会进入sleeping,建议通过青龙面板或者uptime kuma等定时任务进行保活。（直接用get请求调用 &lt;code&gt;https://用户名-gemini-balance.hf.space&lt;/code&gt; 即可）&lt;/li&gt;
&lt;li&gt;支持端点 &lt;code&gt;/hf/v1/models&lt;/code&gt; 和 &lt;code&gt;/hf/v1/chat/completions&lt;/code&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;h2 id=&#34;cherry-studio&#34;&gt;Cherry Studio
&lt;/h2&gt;&lt;p&gt;在&lt;a class=&#34;link&#34; href=&#34;https://cherry-ai.com/download&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;这里&lt;/a&gt;下载Cherry Studio的客户端。&lt;/p&gt;
&lt;p&gt;比较有用的是知识库的功能。那么要怎么用呢？&lt;/p&gt;
&lt;h3 id=&#34;知识库配置硅基流动-embedding&#34;&gt;知识库配置：硅基流动 Embedding
&lt;/h3&gt;&lt;p&gt;点击&lt;a class=&#34;link&#34; href=&#34;https://cloud.siliconflow.cn/&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;这里&lt;/a&gt;注册账号。&lt;/p&gt;



&lt;div class=&#34;notice notice-info&#34; &gt;
    &lt;div class=&#34;notice-title&#34;&gt;&lt;svg xmlns=&#34;http://www.w3.org/2000/svg&#34; class=&#34;icon notice-icon&#34; viewBox=&#34;0 0 512 512&#34; fill=&#34;hsl(30, 80%, 70%)&#34;&gt;&lt;path d=&#34;M256 8a248 248 0 100 496 248 248 0 000-496zm0 110a42 42 0 110 84 42 42 0 010-84zm56 254c0 7-5 12-12 12h-88c-7 0-12-5-12-12v-24c0-7 5-12 12-12h12v-64h-12c-7 0-12-5-12-12v-24c0-7 5-12 12-12h64c7 0 12 5 12 12v100h12c7 0 12 5 12 12v24z&#34;/&gt;&lt;/svg&gt;&lt;/div&gt;&lt;p&gt;无论用什么注册到后面都是要绑定手机号的，所以推荐直接绑手机即可。&lt;/p&gt;&lt;/div&gt;

&lt;p&gt;然后左边栏下滑，创建一个apikey：&lt;/p&gt;
&lt;p&gt;
&lt;div class=&#34;post-img-view&#34;&gt;
&lt;a data-fancybox=&#34;gallery&#34; href=&#34;https://static.houhuayuan.me/blog/2025/04/82c143197d5cbbfe7e0244f5c6162526.png&#34;&gt;
&lt;img src=&#34;https://static.houhuayuan.me/blog/2025/04/82c143197d5cbbfe7e0244f5c6162526.png&#34; alt=&#34;&#34;  /&gt;
&lt;/a&gt;
&lt;/div&gt;

&lt;/p&gt;
&lt;p&gt;回到模型广场，用筛选器能看到有四个免费的嵌入模型，最推荐的中文处理模型是 &lt;code&gt;BAAI/bge-large-zh-v1.5&lt;/code&gt; 和 &lt;code&gt;BAAI/bge-m3&lt;/code&gt;。&lt;/p&gt;
&lt;p&gt;
&lt;div class=&#34;post-img-view&#34;&gt;
&lt;a data-fancybox=&#34;gallery&#34; href=&#34;https://static.houhuayuan.me/blog/2025/04/a67877761f66d2ea1108f000c043b40d.png&#34;&gt;
&lt;img src=&#34;https://static.houhuayuan.me/blog/2025/04/a67877761f66d2ea1108f000c043b40d.png&#34; alt=&#34;&#34;  /&gt;
&lt;/a&gt;
&lt;/div&gt;

&lt;/p&gt;
&lt;p&gt;然后到 &lt;code&gt;Cherry Studio&lt;/code&gt; 添加嵌入模型。&lt;/p&gt;
&lt;p&gt;
&lt;div class=&#34;post-img-view&#34;&gt;
&lt;a data-fancybox=&#34;gallery&#34; href=&#34;https://static.houhuayuan.me/blog/2025/04/1cb7d6484dafe369576b9c0ec10a360e.png&#34;&gt;
&lt;img src=&#34;https://static.houhuayuan.me/blog/2025/04/1cb7d6484dafe369576b9c0ec10a360e.png&#34; alt=&#34;&#34;  /&gt;
&lt;/a&gt;
&lt;/div&gt;

&lt;br&gt;

&lt;div class=&#34;post-img-view&#34;&gt;
&lt;a data-fancybox=&#34;gallery&#34; href=&#34;https://static.houhuayuan.me/blog/2025/04/cc117050f74e1e8494e7c5652f5cbb33.png&#34;&gt;
&lt;img src=&#34;https://static.houhuayuan.me/blog/2025/04/cc117050f74e1e8494e7c5652f5cbb33.png&#34; alt=&#34;&#34;  /&gt;
&lt;/a&gt;
&lt;/div&gt;

&lt;/p&gt;
&lt;h3 id=&#34;搭配-gemini-使用知识库&#34;&gt;搭配 Gemini 使用知识库
&lt;/h3&gt;&lt;p&gt;
&lt;div class=&#34;post-img-view&#34;&gt;
&lt;a data-fancybox=&#34;gallery&#34; href=&#34;https://static.houhuayuan.me/blog/2025/04/e287e57b36e9ab5c22667e3935d792ce.png&#34;&gt;
&lt;img src=&#34;https://static.houhuayuan.me/blog/2025/04/e287e57b36e9ab5c22667e3935d792ce.png&#34; alt=&#34;&#34;  /&gt;
&lt;/a&gt;
&lt;/div&gt;

&lt;/p&gt;
&lt;p&gt;我这里以 &lt;code&gt;cherry studio&lt;/code&gt; 的文档为例，添加站点地图&lt;a class=&#34;link&#34; href=&#34;https://docs.cherry-ai.com/sitemap-pages.xml&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;docs.cherry-ai.com/sitemap-pages.xml&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;
&lt;div class=&#34;post-img-view&#34;&gt;
&lt;a data-fancybox=&#34;gallery&#34; href=&#34;https://static.houhuayuan.me/blog/2025/04/5541b9faac3a976834e8eedd0ceb1d76.png&#34;&gt;
&lt;img src=&#34;https://static.houhuayuan.me/blog/2025/04/5541b9faac3a976834e8eedd0ceb1d76.png&#34; alt=&#34;&#34;  /&gt;
&lt;/a&gt;
&lt;/div&gt;

&lt;/p&gt;
&lt;p&gt;注意，站点地图只支持 &lt;code&gt;xml&lt;/code&gt; 路径！稍等一会，显示绿勾就是处理完成了.&lt;/p&gt;
&lt;p&gt;
&lt;div class=&#34;post-img-view&#34;&gt;
&lt;a data-fancybox=&#34;gallery&#34; href=&#34;https://static.houhuayuan.me/blog/2025/04/75dcd9c747922a6d724681dfc36785df.png&#34;&gt;
&lt;img src=&#34;https://static.houhuayuan.me/blog/2025/04/75dcd9c747922a6d724681dfc36785df.png&#34; alt=&#34;&#34;  /&gt;
&lt;/a&gt;
&lt;/div&gt;

&lt;/p&gt;
&lt;p&gt;再添加一个模型，类型就选默认的 &lt;code&gt;OpenAI&lt;/code&gt; 即可。&lt;/p&gt;
&lt;p&gt;
&lt;div class=&#34;post-img-view&#34;&gt;
&lt;a data-fancybox=&#34;gallery&#34; href=&#34;https://static.houhuayuan.me/blog/2025/04/cde615d74e90d7d0dfb0f0daf6355907.png&#34;&gt;
&lt;img src=&#34;https://static.houhuayuan.me/blog/2025/04/cde615d74e90d7d0dfb0f0daf6355907.png&#34; alt=&#34;&#34;  /&gt;
&lt;/a&gt;
&lt;/div&gt;

&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;API地址填 &lt;code&gt;HuggingFace&lt;/code&gt; 代理的host地址，也就是上面所说的 &lt;code&gt;huggingface用户名-gemini-balance.hf.space&lt;/code&gt;。&lt;/li&gt;
&lt;li&gt;API密钥填你上面部署时配置的 &lt;code&gt;ALLOWED_TOKENS&lt;/code&gt; 。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;检查连接：&lt;/p&gt;
&lt;p&gt;
&lt;div class=&#34;post-img-view&#34;&gt;
&lt;a data-fancybox=&#34;gallery&#34; href=&#34;https://static.houhuayuan.me/blog/2025/04/3f7f0e232fbad63e0007958ef2373f4e.png&#34;&gt;
&lt;img src=&#34;https://static.houhuayuan.me/blog/2025/04/3f7f0e232fbad63e0007958ef2373f4e.png&#34; alt=&#34;&#34;  /&gt;
&lt;/a&gt;
&lt;/div&gt;

&lt;/p&gt;
&lt;p&gt;左上角进入对话，选择创建好的模型：&lt;/p&gt;
&lt;p&gt;
&lt;div class=&#34;post-img-view&#34;&gt;
&lt;a data-fancybox=&#34;gallery&#34; href=&#34;https://static.houhuayuan.me/blog/2025/04/51e09f5909ebf7d2ccaa48a81048ddb1.png&#34;&gt;
&lt;img src=&#34;https://static.houhuayuan.me/blog/2025/04/51e09f5909ebf7d2ccaa48a81048ddb1.png&#34; alt=&#34;&#34;  /&gt;
&lt;/a&gt;
&lt;/div&gt;

&lt;/p&gt;
&lt;p&gt;选择你创建好的知识库：&lt;/p&gt;
&lt;p&gt;
&lt;div class=&#34;post-img-view&#34;&gt;
&lt;a data-fancybox=&#34;gallery&#34; href=&#34;https://static.houhuayuan.me/blog/2025/04/10f06b75cea6009284279598aab678bb.png&#34;&gt;
&lt;img src=&#34;https://static.houhuayuan.me/blog/2025/04/10f06b75cea6009284279598aab678bb.png&#34; alt=&#34;&#34;  /&gt;
&lt;/a&gt;
&lt;/div&gt;

&lt;/p&gt;
&lt;p&gt;只要是在知识库里能检索到的信息AI就会引用回答，还会标出参考来源。&lt;/p&gt;
&lt;p&gt;
&lt;div class=&#34;post-img-view&#34;&gt;
&lt;a data-fancybox=&#34;gallery&#34; href=&#34;https://static.houhuayuan.me/blog/2025/04/670affb1875927f0f15d7ff323bbce18.png&#34;&gt;
&lt;img src=&#34;https://static.houhuayuan.me/blog/2025/04/670affb1875927f0f15d7ff323bbce18.png&#34; alt=&#34;&#34;  /&gt;
&lt;/a&gt;
&lt;/div&gt;

&lt;/p&gt;
&lt;p&gt;目前 &lt;code&gt;gemini-2.0-flash-exp-search&lt;/code&gt; 支持联网。&lt;span class=&#34;blur&#34;&gt;虽然它没显示联网图标&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;
&lt;div class=&#34;post-img-view&#34;&gt;
&lt;a data-fancybox=&#34;gallery&#34; href=&#34;https://static.houhuayuan.me/blog/2025/04/36062d283cdeba8912c2c34e2cd611af.png&#34;&gt;
&lt;img src=&#34;https://static.houhuayuan.me/blog/2025/04/36062d283cdeba8912c2c34e2cd611af.png&#34; alt=&#34;&#34;  /&gt;
&lt;/a&gt;
&lt;/div&gt;

&lt;/p&gt;
&lt;h3 id=&#34;mcp-使用&#34;&gt;MCP 使用
&lt;/h3&gt;&lt;p&gt;初次使用时需要在设置中安装MCP相关环境的环境依赖（需科学网络）：&lt;/p&gt;
&lt;p&gt;
&lt;div class=&#34;post-img-view&#34;&gt;
&lt;a data-fancybox=&#34;gallery&#34; href=&#34;https://static.houhuayuan.me/blog/2025/04/cb3d698ccbbbedfc7213d18ef253e9b8.png&#34;&gt;
&lt;img src=&#34;https://static.houhuayuan.me/blog/2025/04/cb3d698ccbbbedfc7213d18ef253e9b8.png&#34; alt=&#34;&#34;  /&gt;
&lt;/a&gt;
&lt;/div&gt;

&lt;br&gt;

&lt;div class=&#34;post-img-view&#34;&gt;
&lt;a data-fancybox=&#34;gallery&#34; href=&#34;https://static.houhuayuan.me/blog/2025/04/91373bb97e60e4d209a5882c09a563d5.png&#34;&gt;
&lt;img src=&#34;https://static.houhuayuan.me/blog/2025/04/91373bb97e60e4d209a5882c09a563d5.png&#34; alt=&#34;&#34;  /&gt;
&lt;/a&gt;
&lt;/div&gt;

&lt;/p&gt;
&lt;p&gt;直接安装即可。如若安装不了，可以参考官方文档，查看以下路径查看是否有配置文件：&lt;/p&gt;
&lt;p&gt;&lt;code&gt;Windows&lt;/code&gt;: &lt;code&gt;C:\Users\用户名\.cherrystudio\bin&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;&lt;code&gt;macOS，Linux&lt;/code&gt;: &lt;code&gt;~/.cherrystudio/bin&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;如果没有对应目录，需要手动建立。然后下载可执行文件放到这个目录下面：&lt;/p&gt;
&lt;p&gt;Bun: &lt;a class=&#34;link&#34; href=&#34;https://github.com/oven-sh/bun/releases&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;https://github.com/oven-sh/bun/releases&lt;/a&gt;&lt;br&gt;
UV: &lt;a class=&#34;link&#34; href=&#34;https://github.com/astral-sh/uv/releases&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;https://github.com/astral-sh/uv/releases&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;
&lt;div class=&#34;post-img-view&#34;&gt;
&lt;a data-fancybox=&#34;gallery&#34; href=&#34;https://static.houhuayuan.me/blog/2025/04/69e15503a448d4ce574b6fdf268bb038.png&#34;&gt;
&lt;img src=&#34;https://static.houhuayuan.me/blog/2025/04/69e15503a448d4ce574b6fdf268bb038.png&#34; alt=&#34;&#34;  /&gt;
&lt;/a&gt;
&lt;/div&gt;

&lt;/p&gt;
&lt;p&gt;重新进入 MCP 服务器界面，看到小绿勾就说明环境依赖配置成功了：&lt;/p&gt;
&lt;p&gt;
&lt;div class=&#34;post-img-view&#34;&gt;
&lt;a data-fancybox=&#34;gallery&#34; href=&#34;https://static.houhuayuan.me/blog/2025/04/7b5ab2b335e81f7a3427379dbd4c4f2d.png&#34;&gt;
&lt;img src=&#34;https://static.houhuayuan.me/blog/2025/04/7b5ab2b335e81f7a3427379dbd4c4f2d.png&#34; alt=&#34;&#34;  /&gt;
&lt;/a&gt;
&lt;/div&gt;

&lt;/p&gt;
&lt;p&gt;调用cherry自带的 &lt;code&gt;fetch MCP&lt;/code&gt; 服务器试一下：&lt;/p&gt;
&lt;p&gt;
&lt;div class=&#34;post-img-view&#34;&gt;
&lt;a data-fancybox=&#34;gallery&#34; href=&#34;https://static.houhuayuan.me/blog/2025/04/82062fed1d50d651e7ce877f3e054500.png&#34;&gt;
&lt;img src=&#34;https://static.houhuayuan.me/blog/2025/04/82062fed1d50d651e7ce877f3e054500.png&#34; alt=&#34;&#34;  /&gt;
&lt;/a&gt;
&lt;/div&gt;

&lt;/p&gt;
&lt;p&gt;不过注意：上面部署的 Gemini 代理的 OpenAI 格式的api有时会不支持对tools的调用，要换成 Gemini 格式的api；而且有时候回答着突然阻断了。换成 Gemini 格式的api其实就是把 OpenAI 格式的api地址后面的 &lt;code&gt;/hf/v1&lt;/code&gt; 删掉就行了，比如 OpenAI 格式的api地址是 &lt;code&gt;https://username-gemini-balance.hf.space/hf/v1/chat/completions&lt;/code&gt;，那么 Gemini 格式的api地址就是 &lt;code&gt;https://username-gemini-balance.hf.space/chat/completions&lt;/code&gt;。至于阻断，好像没有太好的解决方法。&lt;/p&gt;
&lt;p&gt;再推荐一个谷歌搜索的 MCP 服务器（需要代理）：&lt;/p&gt;
&lt;div class=&#34;github&#34;&gt;
    &lt;div class=&#34;logo&#34;&gt;
        &lt;svg xmlns=&#34;http://www.w3.org/2000/svg&#34; class=&#34;icon github-icon&#34; viewBox=&#34;0 0 16 16&#34;&gt;&lt;path fill-rule=&#34;evenodd&#34; clip-rule=&#34;evenodd&#34; d=&#34;M2 2.5C2 1.83696 2.26339 1.20107 2.73223 0.732233C3.20108 0.263392 3.83696 0 4.5 0L13.25 0C13.4489 0 13.6397 0.0790176 13.7803 0.21967C13.921 0.360322 14 0.551088 14 0.75V13.25C14 13.4489 13.921 13.6397 13.7803 13.7803C13.6397 13.921 13.4489 14 13.25 14H10.75C10.5511 14 10.3603 13.921 10.2197 13.7803C10.079 13.6397 10 13.4489 10 13.25C10 13.0511 10.079 12.8603 10.2197 12.7197C10.3603 12.579 10.5511 12.5 10.75 12.5H12.5V10.5H4.5C4.30308 10.5 4.11056 10.5582 3.94657 10.6672C3.78257 10.7762 3.65442 10.9312 3.57816 11.1128C3.50191 11.2943 3.48096 11.4943 3.51793 11.6878C3.5549 11.8812 3.64816 12.0594 3.786 12.2C3.92524 12.3422 4.0023 12.5338 4.00024 12.7328C3.99818 12.9318 3.91716 13.1218 3.775 13.261C3.63285 13.4002 3.4412 13.4773 3.24222 13.4752C3.04325 13.4732 2.85324 13.3922 2.714 13.25C2.25571 12.7829 1.99929 12.1544 2 11.5V2.5ZM12.5 1.5V9H4.5C4.144 9 3.806 9.074 3.5 9.208V2.5C3.5 2.23478 3.60536 1.98043 3.79289 1.79289C3.98043 1.60536 4.23478 1.5 4.5 1.5H12.5ZM5 12.25V15.5C5 15.5464 5.01293 15.5919 5.03734 15.6314C5.06175 15.6709 5.09667 15.7028 5.1382 15.7236C5.17972 15.7444 5.22621 15.7532 5.27245 15.749C5.31869 15.7448 5.36286 15.7279 5.4 15.7L6.85 14.613C6.89328 14.5805 6.94591 14.563 7 14.563C7.05409 14.563 7.10673 14.5805 7.15 14.613L8.6 15.7C8.63714 15.7279 8.68131 15.7448 8.72755 15.749C8.77379 15.7532 8.82028 15.7444 8.8618 15.7236C8.90333 15.7028 8.93826 15.6709 8.96266 15.6314C8.98707 15.5919 9 15.5464 9 15.5V12.25C9 12.1837 8.97366 12.1201 8.92678 12.0732C8.87989 12.0263 8.81631 12 8.75 12H5.25C5.1837 12 5.12011 12.0263 5.07322 12.0732C5.02634 12.1201 5 12.1837 5 12.25Z&#34;/&gt;&lt;/svg&gt;
        &lt;a class=&#34;name&#34; href=https://github.com/jae-jae/g-search-mcp target=&#34;_blank&#34;&gt;G-Search MCP&lt;/a&gt;
    &lt;/div&gt;
    &lt;div class=&#34;description&#34;&gt;A powerful MCP server for Google search that enables parallel searching with multiple keywords simultaneously.&lt;/div&gt;
    &lt;div class=&#34;language&#34;&gt;
        &lt;span class=&#34;language-color&#34; style=&#34;background-color: #F48201&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;language-name&#34;&gt;TypeScript&lt;/span&gt;
    &lt;/div&gt;
&lt;/div&gt;

&lt;p&gt;如果开了代理还是搜索失败的话，可以让 AI 打开搜索的 debug 模式，然后就可以看到浏览器搜索过程了。&lt;/p&gt;
&lt;h2 id=&#34;补充&#34;&gt;补充
&lt;/h2&gt;&lt;p&gt;参考链接：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a class=&#34;link&#34; href=&#34;https://linux.do/t/topic/494741&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;【gemini代理系列5】huggingface部署gemini代理，账号轮询调用，解锁区域限制 - LINUX DO&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class=&#34;link&#34; href=&#34;https://linux.do/t/topic/547339&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;4000字长文，写给大家看的MCP使用指南 - LINUX DO&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Cherry Studio 自定义字体设置：&lt;/p&gt;



&lt;div class=&#34;notice notice-note&#34; &gt;
    &lt;div class=&#34;notice-title&#34;&gt;&lt;svg xmlns=&#34;http://www.w3.org/2000/svg&#34; class=&#34;icon notice-icon&#34; viewBox=&#34;0 0 512 512&#34; fill=&#34;hsl(200, 65%, 65%)&#34;&gt;&lt;path d=&#34;M504 256a248 248 0 11-496 0 248 248 0 01496 0zm-248 50a46 46 0 100 92 46 46 0 000-92zm-44-165l8 136c0 6 5 11 12 11h48c7 0 12-5 12-11l8-136c0-7-5-13-12-13h-64c-7 0-12 6-12 13z&#34;/&gt;&lt;/svg&gt;&lt;/div&gt;&lt;p&gt;&lt;code&gt;src: url(&#39;file://D:/user/Cherry Studio/LXGWWenKaiTC-Regular.ttf&#39;)&lt;/code&gt; 改为自己电脑上霞鹜文楷字体&lt;/p&gt;&lt;/div&gt;

&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-css&#34; data-lang=&#34;css&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;ln&#34;&gt; 1&lt;/span&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;@&lt;/span&gt;&lt;span class=&#34;k&#34;&gt;font-face&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;ln&#34;&gt; 2&lt;/span&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;nt&#34;&gt;font-family&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;LXGWWenKaiTC-Regular&amp;#39;&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;ln&#34;&gt; 3&lt;/span&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;nt&#34;&gt;src&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;nt&#34;&gt;url&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;file://D:/user/Cherry Studio/LXGWWenKaiTC-Regular.ttf&amp;#39;&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt; &lt;span class=&#34;nt&#34;&gt;format&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;truetype&amp;#39;&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;);&lt;/span&gt;&lt;span class=&#34;c&#34;&gt;/*此处改为自己电脑上霞鹜文楷字体的安装路径*/&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;ln&#34;&gt; 4&lt;/span&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;nt&#34;&gt;font-weight&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;nt&#34;&gt;normal&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;ln&#34;&gt; 5&lt;/span&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;nt&#34;&gt;font-style&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;nt&#34;&gt;normal&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;ln&#34;&gt; 6&lt;/span&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;nt&#34;&gt;font-display&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;nt&#34;&gt;swap&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;ln&#34;&gt; 7&lt;/span&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;nt&#34;&gt;unicode-range&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;nt&#34;&gt;U&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;+&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;4E00-9FFF&lt;/span&gt; &lt;span class=&#34;c&#34;&gt;/* 扩展CJK字符范围 */&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;ln&#34;&gt; 8&lt;/span&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;ln&#34;&gt; 9&lt;/span&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;ln&#34;&gt;10&lt;/span&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c&#34;&gt;/* 强制全局应用字体 */&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;ln&#34;&gt;11&lt;/span&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;o&#34;&gt;*,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;ln&#34;&gt;12&lt;/span&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;o&#34;&gt;*&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;::&lt;/span&gt;&lt;span class=&#34;nd&#34;&gt;after&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;ln&#34;&gt;13&lt;/span&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;font-family&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; 
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;ln&#34;&gt;14&lt;/span&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;s1&#34;&gt;&amp;#39;LXGWWenKaiTC-Regular&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;                    &lt;span class=&#34;c&#34;&gt;/* 西文字体 可更换*/&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;ln&#34;&gt;15&lt;/span&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;s1&#34;&gt;&amp;#39;LXGWWenKaiTC-Regular&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;       &lt;span class=&#34;c&#34;&gt;/* 中文字体 可更换*/&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;ln&#34;&gt;16&lt;/span&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;kc&#34;&gt;sans-serif&lt;/span&gt; &lt;span class=&#34;cp&#34;&gt;!important&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;       &lt;span class=&#34;c&#34;&gt;/* 强制覆盖所有样式 */&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;ln&#34;&gt;17&lt;/span&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;ln&#34;&gt;18&lt;/span&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;ln&#34;&gt;19&lt;/span&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c&#34;&gt;/* 单独设置等宽字体 */&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;ln&#34;&gt;20&lt;/span&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nt&#34;&gt;code&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;nt&#34;&gt;pre&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;nt&#34;&gt;kbd&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;nt&#34;&gt;samp&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;nt&#34;&gt;tt&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;ln&#34;&gt;21&lt;/span&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;font-family&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; 
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;ln&#34;&gt;22&lt;/span&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;n&#34;&gt;Consolas&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;ln&#34;&gt;23&lt;/span&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;n&#34;&gt;Monaco&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;ln&#34;&gt;24&lt;/span&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;s1&#34;&gt;&amp;#39;Andale Mono&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;ln&#34;&gt;25&lt;/span&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;s1&#34;&gt;&amp;#39;Ubuntu Mono&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;ln&#34;&gt;26&lt;/span&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;kc&#34;&gt;monospace&lt;/span&gt; &lt;span class=&#34;cp&#34;&gt;!important&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;ln&#34;&gt;27&lt;/span&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;ln&#34;&gt;28&lt;/span&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;ln&#34;&gt;29&lt;/span&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c&#34;&gt;/* 覆盖表单元素 */&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;ln&#34;&gt;30&lt;/span&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nt&#34;&gt;input&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;nt&#34;&gt;button&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;nt&#34;&gt;textarea&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;nt&#34;&gt;select&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;ln&#34;&gt;31&lt;/span&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;font-family&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;kc&#34;&gt;inherit&lt;/span&gt; &lt;span class=&#34;cp&#34;&gt;!important&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;ln&#34;&gt;32&lt;/span&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;还有更多好玩的用法就自己探索啦~&lt;/p&gt;
</description>
        </item>
        <item>
        <title>使用HuggingFace部署FileCodeBox</title>
        <link>https://langminjeii.ifantic.de/post/%E4%BD%BF%E7%94%A8huggingface%E9%83%A8%E7%BD%B2filecodebox/</link>
        <pubDate>Mon, 24 Feb 2025 16:38:34 +0800</pubDate>
        
        <guid>https://langminjeii.ifantic.de/post/%E4%BD%BF%E7%94%A8huggingface%E9%83%A8%E7%BD%B2filecodebox/</guid>
        <description>&lt;img src="https://langminjeii.ifantic.de/post/codebox.png" alt="Featured image of post 使用HuggingFace部署FileCodeBox" /&gt;&lt;p&gt;项目地址：&lt;/p&gt;
&lt;p&gt;&lt;a class=&#34;link&#34; href=&#34;https://github.com/vastsa/FileCodeBox&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;https://github.com/vastsa/FileCodeBox&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;前期准备：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;一个cloudflare账号&lt;/li&gt;
&lt;li&gt;一个huggingface账号&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;创建dockerfile&#34;&gt;创建&lt;code&gt;dockerfile&lt;/code&gt;
&lt;/h2&gt;&lt;p&gt;注册好huggingface后，点击头像新建一个空间：&lt;/p&gt;
&lt;p&gt;
&lt;div class=&#34;post-img-view&#34;&gt;
&lt;a data-fancybox=&#34;gallery&#34; href=&#34;https://static.houhuayuan.me/blog/2025/02/00e623371d74931c8bb5fe3ead53f38b.png&#34;&gt;
&lt;img src=&#34;https://static.houhuayuan.me/blog/2025/02/00e623371d74931c8bb5fe3ead53f38b.png&#34; alt=&#34; , 50%&#34;  /&gt;
&lt;/a&gt;
&lt;/div&gt;

&lt;/p&gt;
&lt;p&gt;选择用docker部署：&lt;/p&gt;
&lt;p&gt;
&lt;div class=&#34;post-img-view&#34;&gt;
&lt;a data-fancybox=&#34;gallery&#34; href=&#34;https://static.houhuayuan.me/blog/2025/02/58843e2c0245b7336d29217ef7d8a461.png&#34;&gt;
&lt;img src=&#34;https://static.houhuayuan.me/blog/2025/02/58843e2c0245b7336d29217ef7d8a461.png&#34; alt=&#34;&#34;  /&gt;
&lt;/a&gt;
&lt;/div&gt;

&lt;/p&gt;
&lt;p&gt;然后划到最底，点击左下角的&lt;nkbd&gt;Create Space&lt;/nkbd&gt;， 新建一个dockerfile&lt;/p&gt;
&lt;p&gt;
&lt;div class=&#34;post-img-view&#34;&gt;
&lt;a data-fancybox=&#34;gallery&#34; href=&#34;https://static.houhuayuan.me/blog/2025/02/e61259c6463565765589846f8cee8649.png&#34;&gt;
&lt;img src=&#34;https://static.houhuayuan.me/blog/2025/02/e61259c6463565765589846f8cee8649.png&#34; alt=&#34;&#34;  /&gt;
&lt;/a&gt;
&lt;/div&gt;

&lt;/p&gt;
&lt;p&gt;填入以下内容，然后点击&lt;nkbd&gt;Commit new file to &lt;code&gt;main&lt;/code&gt; &lt;/nkbd&gt;&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-dockerfile&#34; data-lang=&#34;dockerfile&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;ln&#34;&gt; 1&lt;/span&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;FROM&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s&#34;&gt;lanol/filecodebox:beta&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;ln&#34;&gt; 2&lt;/span&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;err&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;ln&#34;&gt; 3&lt;/span&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;RUN&lt;/span&gt; apt-get update &lt;span class=&#34;o&#34;&gt;&amp;amp;&amp;amp;&lt;/span&gt; apt-get install -y &lt;span class=&#34;se&#34;&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;ln&#34;&gt; 4&lt;/span&gt;&lt;span class=&#34;cl&#34;&gt;    python3-pip &lt;span class=&#34;se&#34;&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;ln&#34;&gt; 5&lt;/span&gt;&lt;span class=&#34;cl&#34;&gt;    git &lt;span class=&#34;se&#34;&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;ln&#34;&gt; 6&lt;/span&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;o&#34;&gt;&amp;amp;&amp;amp;&lt;/span&gt; rm -rf /var/lib/apt/lists/*&lt;span class=&#34;err&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;ln&#34;&gt; 7&lt;/span&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;err&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;ln&#34;&gt; 8&lt;/span&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;RUN&lt;/span&gt; pip3 install --no-cache-dir huggingface_hub datasets&lt;span class=&#34;err&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;ln&#34;&gt; 9&lt;/span&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;err&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;ln&#34;&gt;10&lt;/span&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;RUN&lt;/span&gt; useradd -m -u &lt;span class=&#34;m&#34;&gt;1000&lt;/span&gt; user&lt;span class=&#34;err&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;ln&#34;&gt;11&lt;/span&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;err&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;ln&#34;&gt;12&lt;/span&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;WORKDIR&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s&#34;&gt;/app&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;ln&#34;&gt;13&lt;/span&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;err&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;ln&#34;&gt;14&lt;/span&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;ENV&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;HOME&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;/home/user &lt;span class=&#34;se&#34;&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;ln&#34;&gt;15&lt;/span&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;nv&#34;&gt;PATH&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;/home/user/.local/bin:&lt;span class=&#34;nv&#34;&gt;$PATH&lt;/span&gt; &lt;span class=&#34;se&#34;&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;ln&#34;&gt;16&lt;/span&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;nv&#34;&gt;HF_HOME&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;/app/data/hf_cache &lt;span class=&#34;se&#34;&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;ln&#34;&gt;17&lt;/span&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;nv&#34;&gt;PYTHONUNBUFFERED&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;1&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;ln&#34;&gt;18&lt;/span&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;err&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;ln&#34;&gt;19&lt;/span&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;RUN&lt;/span&gt; mkdir -p /app/data &lt;span class=&#34;o&#34;&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class=&#34;se&#34;&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;ln&#34;&gt;20&lt;/span&gt;&lt;span class=&#34;cl&#34;&gt;    chown -R user:user /app/data&lt;span class=&#34;err&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;ln&#34;&gt;21&lt;/span&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;err&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;ln&#34;&gt;22&lt;/span&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;COPY&lt;/span&gt; sync_data.sh /app/&lt;span class=&#34;err&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;ln&#34;&gt;23&lt;/span&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;RUN&lt;/span&gt; chmod +x /app/sync_data.sh &lt;span class=&#34;o&#34;&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class=&#34;se&#34;&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;ln&#34;&gt;24&lt;/span&gt;&lt;span class=&#34;cl&#34;&gt;    chown user:user /app/sync_data.sh&lt;span class=&#34;err&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;ln&#34;&gt;25&lt;/span&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;err&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;ln&#34;&gt;26&lt;/span&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;USER&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s&#34;&gt;user&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;ln&#34;&gt;27&lt;/span&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;err&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;ln&#34;&gt;28&lt;/span&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;EXPOSE&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s&#34;&gt;12345&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;ln&#34;&gt;29&lt;/span&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;err&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;ln&#34;&gt;30&lt;/span&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;ENTRYPOINT&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;/app/sync_data.sh&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;
&lt;div class=&#34;post-img-view&#34;&gt;
&lt;a data-fancybox=&#34;gallery&#34; href=&#34;https://static.houhuayuan.me/blog/2025/02/05aa91d36c90a56a6159438c056af1ef.png&#34;&gt;
&lt;img src=&#34;https://static.houhuayuan.me/blog/2025/02/05aa91d36c90a56a6159438c056af1ef.png&#34; alt=&#34; , 150%&#34;  /&gt;
&lt;/a&gt;
&lt;/div&gt;

&lt;/p&gt;
&lt;h2 id=&#34;创建sync_datash文件&#34;&gt;创建&lt;code&gt;sync_data.sh&lt;/code&gt;文件
&lt;/h2&gt;&lt;p&gt;
&lt;div class=&#34;post-img-view&#34;&gt;
&lt;a data-fancybox=&#34;gallery&#34; href=&#34;https://static.houhuayuan.me/blog/2025/02/29b82b410e813363fa1bec2c5f54cfa3.png&#34;&gt;
&lt;img src=&#34;https://static.houhuayuan.me/blog/2025/02/29b82b410e813363fa1bec2c5f54cfa3.png&#34; alt=&#34; , 50%&#34;  /&gt;
&lt;/a&gt;
&lt;/div&gt;

&lt;br&gt;

&lt;div class=&#34;post-img-view&#34;&gt;
&lt;a data-fancybox=&#34;gallery&#34; href=&#34;https://static.houhuayuan.me/blog/2025/02/20fff2aa5cd22a112c13cb38aa3db23b.png&#34;&gt;
&lt;img src=&#34;https://static.houhuayuan.me/blog/2025/02/20fff2aa5cd22a112c13cb38aa3db23b.png&#34; alt=&#34; , 50%&#34;  /&gt;
&lt;/a&gt;
&lt;/div&gt;

&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;ln&#34;&gt;  1&lt;/span&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;cp&#34;&gt;#!/bin/bash
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;ln&#34;&gt;  2&lt;/span&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;ln&#34;&gt;  3&lt;/span&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# 检查环境变量&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;ln&#34;&gt;  4&lt;/span&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;if&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;[&lt;/span&gt; -z &lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$HF_TOKEN&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;]&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;||&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;[&lt;/span&gt; -z &lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$DATASET_ID&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;then&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;ln&#34;&gt;  5&lt;/span&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;nb&#34;&gt;echo&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;Starting without backup functionality - missing HF_TOKEN or DATASET_ID&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;ln&#34;&gt;  6&lt;/span&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;nb&#34;&gt;exec&lt;/span&gt; python main.py
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;ln&#34;&gt;  7&lt;/span&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;fi&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;ln&#34;&gt;  8&lt;/span&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;ln&#34;&gt;  9&lt;/span&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# 登录HuggingFace (使用环境变量方式避免交互问题)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;ln&#34;&gt; 10&lt;/span&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nb&#34;&gt;export&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;HUGGING_FACE_HUB_TOKEN&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$HF_TOKEN&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;ln&#34;&gt; 11&lt;/span&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;ln&#34;&gt; 12&lt;/span&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# 同步函数&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;ln&#34;&gt; 13&lt;/span&gt;&lt;span class=&#34;cl&#34;&gt;sync_data&lt;span class=&#34;o&#34;&gt;()&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;ln&#34;&gt; 14&lt;/span&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;while&lt;/span&gt; true&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;do&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;ln&#34;&gt; 15&lt;/span&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;nb&#34;&gt;echo&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;Starting sync process at &lt;/span&gt;&lt;span class=&#34;k&#34;&gt;$(&lt;/span&gt;date&lt;span class=&#34;k&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;ln&#34;&gt; 16&lt;/span&gt;&lt;span class=&#34;cl&#34;&gt;        
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;ln&#34;&gt; 17&lt;/span&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;c1&#34;&gt;# 创建临时压缩文件&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;ln&#34;&gt; 18&lt;/span&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;nb&#34;&gt;cd&lt;/span&gt; /app
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;ln&#34;&gt; 19&lt;/span&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;nv&#34;&gt;timestamp&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;k&#34;&gt;$(&lt;/span&gt;date +%Y%m%d_%H%M%S&lt;span class=&#34;k&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;ln&#34;&gt; 20&lt;/span&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;nv&#34;&gt;backup_file&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;backup_&lt;/span&gt;&lt;span class=&#34;si&#34;&gt;${&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;timestamp&lt;/span&gt;&lt;span class=&#34;si&#34;&gt;}&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;.tar.gz&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;ln&#34;&gt; 21&lt;/span&gt;&lt;span class=&#34;cl&#34;&gt;        
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;ln&#34;&gt; 22&lt;/span&gt;&lt;span class=&#34;cl&#34;&gt;        tar -czf &lt;span class=&#34;s2&#34;&gt;&amp;#34;/tmp/&lt;/span&gt;&lt;span class=&#34;si&#34;&gt;${&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;backup_file&lt;/span&gt;&lt;span class=&#34;si&#34;&gt;}&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt; data/
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;ln&#34;&gt; 23&lt;/span&gt;&lt;span class=&#34;cl&#34;&gt;        
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;ln&#34;&gt; 24&lt;/span&gt;&lt;span class=&#34;cl&#34;&gt;        python3 -c &lt;span class=&#34;s2&#34;&gt;&amp;#34;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;ln&#34;&gt; 25&lt;/span&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s2&#34;&gt;from huggingface_hub import HfApi
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;ln&#34;&gt; 26&lt;/span&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s2&#34;&gt;import os
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;ln&#34;&gt; 27&lt;/span&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s2&#34;&gt;def manage_backups(api, repo_id, max_files=50):
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;ln&#34;&gt; 28&lt;/span&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s2&#34;&gt;    files = api.list_repo_files(repo_id=repo_id, repo_type=&amp;#39;dataset&amp;#39;)
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;ln&#34;&gt; 29&lt;/span&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s2&#34;&gt;    backup_files = [f for f in files if f.startswith(&amp;#39;backup_&amp;#39;) and f.endswith(&amp;#39;.tar.gz&amp;#39;)]
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;ln&#34;&gt; 30&lt;/span&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s2&#34;&gt;    backup_files.sort()
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;ln&#34;&gt; 31&lt;/span&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s2&#34;&gt;    
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;ln&#34;&gt; 32&lt;/span&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s2&#34;&gt;    if len(backup_files) &amp;gt;= max_files:
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;ln&#34;&gt; 33&lt;/span&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s2&#34;&gt;        files_to_delete = backup_files[:(len(backup_files) - max_files + 1)]
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;ln&#34;&gt; 34&lt;/span&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s2&#34;&gt;        for file_to_delete in files_to_delete:
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;ln&#34;&gt; 35&lt;/span&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s2&#34;&gt;            try:
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;ln&#34;&gt; 36&lt;/span&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s2&#34;&gt;                api.delete_file(path_in_repo=file_to_delete, repo_id=repo_id, repo_type=&amp;#39;dataset&amp;#39;)
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;ln&#34;&gt; 37&lt;/span&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s2&#34;&gt;                print(f&amp;#39;Deleted old backup: {file_to_delete}&amp;#39;)
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;ln&#34;&gt; 38&lt;/span&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s2&#34;&gt;            except Exception as e:
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;ln&#34;&gt; 39&lt;/span&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s2&#34;&gt;                print(f&amp;#39;Error deleting {file_to_delete}: {str(e)}&amp;#39;)
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;ln&#34;&gt; 40&lt;/span&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s2&#34;&gt;try:
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;ln&#34;&gt; 41&lt;/span&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s2&#34;&gt;    api = HfApi()
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;ln&#34;&gt; 42&lt;/span&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s2&#34;&gt;    api.upload_file(
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;ln&#34;&gt; 43&lt;/span&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s2&#34;&gt;        path_or_fileobj=&amp;#39;/tmp/&lt;/span&gt;&lt;span class=&#34;si&#34;&gt;${&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;backup_file&lt;/span&gt;&lt;span class=&#34;si&#34;&gt;}&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#39;,
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;ln&#34;&gt; 44&lt;/span&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s2&#34;&gt;        path_in_repo=&amp;#39;&lt;/span&gt;&lt;span class=&#34;si&#34;&gt;${&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;backup_file&lt;/span&gt;&lt;span class=&#34;si&#34;&gt;}&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#39;,
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;ln&#34;&gt; 45&lt;/span&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s2&#34;&gt;        repo_id=&amp;#39;&lt;/span&gt;&lt;span class=&#34;si&#34;&gt;${&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;DATASET_ID&lt;/span&gt;&lt;span class=&#34;si&#34;&gt;}&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#39;,
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;ln&#34;&gt; 46&lt;/span&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s2&#34;&gt;        repo_type=&amp;#39;dataset&amp;#39;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;ln&#34;&gt; 47&lt;/span&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s2&#34;&gt;    )
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;ln&#34;&gt; 48&lt;/span&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s2&#34;&gt;    print(&amp;#39;Backup uploaded successfully&amp;#39;)
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;ln&#34;&gt; 49&lt;/span&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s2&#34;&gt;    
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;ln&#34;&gt; 50&lt;/span&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s2&#34;&gt;    manage_backups(api, &amp;#39;&lt;/span&gt;&lt;span class=&#34;si&#34;&gt;${&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;DATASET_ID&lt;/span&gt;&lt;span class=&#34;si&#34;&gt;}&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#39;)
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;ln&#34;&gt; 51&lt;/span&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s2&#34;&gt;except Exception as e:
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;ln&#34;&gt; 52&lt;/span&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s2&#34;&gt;    print(f&amp;#39;Backup failed: {str(e)}&amp;#39;)
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;ln&#34;&gt; 53&lt;/span&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;ln&#34;&gt; 54&lt;/span&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;c1&#34;&gt;# 清理临时文件&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;ln&#34;&gt; 55&lt;/span&gt;&lt;span class=&#34;cl&#34;&gt;        rm -f &lt;span class=&#34;s2&#34;&gt;&amp;#34;/tmp/&lt;/span&gt;&lt;span class=&#34;si&#34;&gt;${&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;backup_file&lt;/span&gt;&lt;span class=&#34;si&#34;&gt;}&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;ln&#34;&gt; 56&lt;/span&gt;&lt;span class=&#34;cl&#34;&gt;        
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;ln&#34;&gt; 57&lt;/span&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;c1&#34;&gt;# 设置同步间隔&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;ln&#34;&gt; 58&lt;/span&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;nv&#34;&gt;SYNC_INTERVAL&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;si&#34;&gt;${&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;SYNC_INTERVAL&lt;/span&gt;&lt;span class=&#34;k&#34;&gt;:-&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;7200&lt;/span&gt;&lt;span class=&#34;si&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;ln&#34;&gt; 59&lt;/span&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;nb&#34;&gt;echo&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;Next sync in &lt;/span&gt;&lt;span class=&#34;si&#34;&gt;${&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;SYNC_INTERVAL&lt;/span&gt;&lt;span class=&#34;si&#34;&gt;}&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt; seconds...&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;ln&#34;&gt; 60&lt;/span&gt;&lt;span class=&#34;cl&#34;&gt;        sleep &lt;span class=&#34;nv&#34;&gt;$SYNC_INTERVAL&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;ln&#34;&gt; 61&lt;/span&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;done&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;ln&#34;&gt; 62&lt;/span&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;o&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;ln&#34;&gt; 63&lt;/span&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;ln&#34;&gt; 64&lt;/span&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# 恢复函数&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;ln&#34;&gt; 65&lt;/span&gt;&lt;span class=&#34;cl&#34;&gt;restore_latest&lt;span class=&#34;o&#34;&gt;()&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;ln&#34;&gt; 66&lt;/span&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;nb&#34;&gt;echo&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;Attempting to restore latest backup...&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;ln&#34;&gt; 67&lt;/span&gt;&lt;span class=&#34;cl&#34;&gt;    python3 -c &lt;span class=&#34;s2&#34;&gt;&amp;#34;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;ln&#34;&gt; 68&lt;/span&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s2&#34;&gt;try:
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;ln&#34;&gt; 69&lt;/span&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s2&#34;&gt;    from huggingface_hub import HfApi
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;ln&#34;&gt; 70&lt;/span&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s2&#34;&gt;    import os
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;ln&#34;&gt; 71&lt;/span&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s2&#34;&gt;    
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;ln&#34;&gt; 72&lt;/span&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s2&#34;&gt;    api = HfApi()
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;ln&#34;&gt; 73&lt;/span&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s2&#34;&gt;    files = api.list_repo_files(&amp;#39;&lt;/span&gt;&lt;span class=&#34;si&#34;&gt;${&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;DATASET_ID&lt;/span&gt;&lt;span class=&#34;si&#34;&gt;}&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#39;, repo_type=&amp;#39;dataset&amp;#39;)
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;ln&#34;&gt; 74&lt;/span&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s2&#34;&gt;    backup_files = [f for f in files if f.startswith(&amp;#39;backup_&amp;#39;) and f.endswith(&amp;#39;.tar.gz&amp;#39;)]
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;ln&#34;&gt; 75&lt;/span&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s2&#34;&gt;    
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;ln&#34;&gt; 76&lt;/span&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s2&#34;&gt;    if backup_files:
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;ln&#34;&gt; 77&lt;/span&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s2&#34;&gt;        latest = sorted(backup_files)[-1]
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;ln&#34;&gt; 78&lt;/span&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s2&#34;&gt;        api.hf_hub_download(
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;ln&#34;&gt; 79&lt;/span&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s2&#34;&gt;            repo_id=&amp;#39;&lt;/span&gt;&lt;span class=&#34;si&#34;&gt;${&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;DATASET_ID&lt;/span&gt;&lt;span class=&#34;si&#34;&gt;}&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#39;,
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;ln&#34;&gt; 80&lt;/span&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s2&#34;&gt;            filename=latest,
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;ln&#34;&gt; 81&lt;/span&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s2&#34;&gt;            repo_type=&amp;#39;dataset&amp;#39;,
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;ln&#34;&gt; 82&lt;/span&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s2&#34;&gt;            local_dir=&amp;#39;/tmp&amp;#39;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;ln&#34;&gt; 83&lt;/span&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s2&#34;&gt;        )
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;ln&#34;&gt; 84&lt;/span&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s2&#34;&gt;        os.system(f&amp;#39;tar -xzf /tmp/{latest} -C /app&amp;#39;)
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;ln&#34;&gt; 85&lt;/span&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s2&#34;&gt;        os.remove(f&amp;#39;/tmp/{latest}&amp;#39;)
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;ln&#34;&gt; 86&lt;/span&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s2&#34;&gt;        print(f&amp;#39;Restored from {latest}&amp;#39;)
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;ln&#34;&gt; 87&lt;/span&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s2&#34;&gt;    else:
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;ln&#34;&gt; 88&lt;/span&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s2&#34;&gt;        print(&amp;#39;No backup found&amp;#39;)
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;ln&#34;&gt; 89&lt;/span&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s2&#34;&gt;except Exception as e:
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;ln&#34;&gt; 90&lt;/span&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s2&#34;&gt;    print(f&amp;#39;Restore failed: {str(e)}&amp;#39;)
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;ln&#34;&gt; 91&lt;/span&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;ln&#34;&gt; 92&lt;/span&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;o&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;ln&#34;&gt; 93&lt;/span&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;ln&#34;&gt; 94&lt;/span&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# 主程序&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;ln&#34;&gt; 95&lt;/span&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;ln&#34;&gt; 96&lt;/span&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;c1&#34;&gt;# 尝试恢复&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;ln&#34;&gt; 97&lt;/span&gt;&lt;span class=&#34;cl&#34;&gt;    restore_latest
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;ln&#34;&gt; 98&lt;/span&gt;&lt;span class=&#34;cl&#34;&gt;    
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;ln&#34;&gt; 99&lt;/span&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;c1&#34;&gt;# 启动同步进程&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;ln&#34;&gt;100&lt;/span&gt;&lt;span class=&#34;cl&#34;&gt;    sync_data &lt;span class=&#34;p&#34;&gt;&amp;amp;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;ln&#34;&gt;101&lt;/span&gt;&lt;span class=&#34;cl&#34;&gt;    
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;ln&#34;&gt;102&lt;/span&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;c1&#34;&gt;# 启动主应用&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;ln&#34;&gt;103&lt;/span&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;nb&#34;&gt;exec&lt;/span&gt; python main.py
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;ln&#34;&gt;104&lt;/span&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt; 2&amp;gt;&lt;span class=&#34;p&#34;&gt;&amp;amp;&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;1&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;|&lt;/span&gt; tee -a /app/data/backup.log
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;然后划到最底，点击左下角的&lt;nkbd&gt;Commit new file to &lt;code&gt;main&lt;/code&gt;&lt;/nkbd&gt;&lt;/p&gt;
&lt;h2 id=&#34;修改readmemd&#34;&gt;修改README.md
&lt;/h2&gt;&lt;p&gt;跟上面创建新文件一样，新建&lt;code&gt;README.md&lt;/code&gt;文件，填入：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-yaml&#34; data-lang=&#34;yaml&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;ln&#34;&gt; 1&lt;/span&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nn&#34;&gt;---&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;ln&#34;&gt; 2&lt;/span&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nt&#34;&gt;title&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;l&#34;&gt;Filebox&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;ln&#34;&gt; 3&lt;/span&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nt&#34;&gt;emoji&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;l&#34;&gt;🚀&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;ln&#34;&gt; 4&lt;/span&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nt&#34;&gt;colorFrom&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;l&#34;&gt;pink&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;ln&#34;&gt; 5&lt;/span&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nt&#34;&gt;colorTo&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;l&#34;&gt;pink&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;ln&#34;&gt; 6&lt;/span&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nt&#34;&gt;sdk&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;l&#34;&gt;docker&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;ln&#34;&gt; 7&lt;/span&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nt&#34;&gt;pinned&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;false&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;ln&#34;&gt; 8&lt;/span&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nt&#34;&gt;app_port&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;12345&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;ln&#34;&gt; 9&lt;/span&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nn&#34;&gt;---&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;ln&#34;&gt;10&lt;/span&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;ln&#34;&gt;11&lt;/span&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;l&#34;&gt;Check out the configuration reference at https://huggingface.co/docs/hub/spaces-config-reference&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;
&lt;div class=&#34;post-img-view&#34;&gt;
&lt;a data-fancybox=&#34;gallery&#34; href=&#34;https://static.houhuayuan.me/blog/2025/02/a1f29f71ee80bddd06fa47121809e78f.png&#34;&gt;
&lt;img src=&#34;https://static.houhuayuan.me/blog/2025/02/a1f29f71ee80bddd06fa47121809e78f.png&#34; alt=&#34;&#34;  /&gt;
&lt;/a&gt;
&lt;/div&gt;

&lt;/p&gt;
&lt;h2 id=&#34;创建dataset数据库&#34;&gt;创建dataset数据库
&lt;/h2&gt;&lt;p&gt;
&lt;div class=&#34;post-img-view&#34;&gt;
&lt;a data-fancybox=&#34;gallery&#34; href=&#34;https://static.houhuayuan.me/blog/2025/02/7a3ee9a58007696780d2c2f4b5188fed.png&#34;&gt;
&lt;img src=&#34;https://static.houhuayuan.me/blog/2025/02/7a3ee9a58007696780d2c2f4b5188fed.png&#34; alt=&#34;a, 50%&#34;  /&gt;
&lt;/a&gt;
&lt;/div&gt;

&lt;br&gt;

&lt;div class=&#34;post-img-view&#34;&gt;
&lt;a data-fancybox=&#34;gallery&#34; href=&#34;https://static.houhuayuan.me/blog/2025/02/1f9433644350c73bea4f5c2d1a5a2710.png&#34;&gt;
&lt;img src=&#34;https://static.houhuayuan.me/blog/2025/02/1f9433644350c73bea4f5c2d1a5a2710.png&#34; alt=&#34;&#34;  /&gt;
&lt;/a&gt;
&lt;/div&gt;

&lt;br&gt;

&lt;div class=&#34;post-img-view&#34;&gt;
&lt;a data-fancybox=&#34;gallery&#34; href=&#34;https://static.houhuayuan.me/blog/2025/02/22c01c85161bdcfcd199b8f535977971.png&#34;&gt;
&lt;img src=&#34;https://static.houhuayuan.me/blog/2025/02/22c01c85161bdcfcd199b8f535977971.png&#34; alt=&#34;&#34;  /&gt;
&lt;/a&gt;
&lt;/div&gt;

&lt;/p&gt;
&lt;p&gt;记住你的数据库地址，格式：&lt;code&gt;huggingface用户名称/dataset名称&lt;/code&gt;&lt;/p&gt;
&lt;h2 id=&#34;创建hf-token&#34;&gt;创建HF-token
&lt;/h2&gt;&lt;p&gt;
&lt;div class=&#34;post-img-view&#34;&gt;
&lt;a data-fancybox=&#34;gallery&#34; href=&#34;https://static.houhuayuan.me/blog/2025/02/86bc70e2f4623e2dbb4ee6d3667711a2.png&#34;&gt;
&lt;img src=&#34;https://static.houhuayuan.me/blog/2025/02/86bc70e2f4623e2dbb4ee6d3667711a2.png&#34; alt=&#34;&#34;  /&gt;
&lt;/a&gt;
&lt;/div&gt;

&lt;br&gt;

&lt;div class=&#34;post-img-view&#34;&gt;
&lt;a data-fancybox=&#34;gallery&#34; href=&#34;https://static.houhuayuan.me/blog/2025/02/7a3ee9a58007696780d2c2f4b5188fed.png&#34;&gt;
&lt;img src=&#34;https://static.houhuayuan.me/blog/2025/02/7a3ee9a58007696780d2c2f4b5188fed.png&#34; alt=&#34;&#34;  /&gt;
&lt;/a&gt;
&lt;/div&gt;

&lt;br&gt;

&lt;div class=&#34;post-img-view&#34;&gt;
&lt;a data-fancybox=&#34;gallery&#34; href=&#34;https://static.houhuayuan.me/blog/2025/02/52b21448e33d5e93eb4509d00cfb6bf6.png&#34;&gt;
&lt;img src=&#34;https://static.houhuayuan.me/blog/2025/02/52b21448e33d5e93eb4509d00cfb6bf6.png&#34; alt=&#34;&#34;  /&gt;
&lt;/a&gt;
&lt;/div&gt;

&lt;/p&gt;
&lt;p&gt;划到最底下点击&lt;nkbd&gt;Create token&lt;/nkbd&gt;保存并记住你的token&lt;/p&gt;
&lt;h2 id=&#34;在后台添加环境变量&#34;&gt;在后台添加环境变量
&lt;/h2&gt;&lt;p&gt;
&lt;div class=&#34;post-img-view&#34;&gt;
&lt;a data-fancybox=&#34;gallery&#34; href=&#34;https://static.houhuayuan.me/blog/2025/02/625e0d491343fd5fd0b92e5e75f84e4c.png&#34;&gt;
&lt;img src=&#34;https://static.houhuayuan.me/blog/2025/02/625e0d491343fd5fd0b92e5e75f84e4c.png&#34; alt=&#34;&#34;  /&gt;
&lt;/a&gt;
&lt;/div&gt;

&lt;br&gt;

&lt;div class=&#34;post-img-view&#34;&gt;
&lt;a data-fancybox=&#34;gallery&#34; href=&#34;https://static.houhuayuan.me/blog/2025/02/f63f49d09bda98495d59a7da1fdd6bed.png&#34;&gt;
&lt;img src=&#34;https://static.houhuayuan.me/blog/2025/02/f63f49d09bda98495d59a7da1fdd6bed.png&#34; alt=&#34;&#34;  /&gt;
&lt;/a&gt;
&lt;/div&gt;

&lt;/p&gt;
&lt;p&gt;查看你的dataset 对应填入 &lt;code&gt;DATASET_ID&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;
&lt;div class=&#34;post-img-view&#34;&gt;
&lt;a data-fancybox=&#34;gallery&#34; href=&#34;https://static.houhuayuan.me/blog/2025/02/55329c352eece2cd4b388e3476855fb8.png&#34;&gt;
&lt;img src=&#34;https://static.houhuayuan.me/blog/2025/02/55329c352eece2cd4b388e3476855fb8.png&#34; alt=&#34;&#34;  /&gt;
&lt;/a&gt;
&lt;/div&gt;

&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;code&gt;HF_TOKEN&lt;/code&gt; -&amp;gt;  &lt;code&gt;#你的token&lt;/code&gt;&lt;br&gt;
&lt;code&gt;DATASET_ID&lt;/code&gt; -&amp;gt;  &lt;code&gt;# 用户名/数据集名称&lt;/code&gt;&lt;br&gt;
&lt;code&gt;SYNC_INTERVAL&lt;/code&gt; -&amp;gt;  &lt;code&gt;# 同步时间（秒钟，推荐填3600&lt;/code&gt;）&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;点击&lt;nkbd&gt;App&lt;/nkbd&gt;就能看到你的项目已经运行起来啦！&lt;/p&gt;
&lt;p&gt;
&lt;div class=&#34;post-img-view&#34;&gt;
&lt;a data-fancybox=&#34;gallery&#34; href=&#34;https://static.houhuayuan.me/blog/2025/02/6dce9cdcfb48619ec11975de4ea4a0fd.png&#34;&gt;
&lt;img src=&#34;https://static.houhuayuan.me/blog/2025/02/6dce9cdcfb48619ec11975de4ea4a0fd.png&#34; alt=&#34;&#34;  /&gt;
&lt;/a&gt;
&lt;/div&gt;

&lt;/p&gt;
&lt;p&gt;完成后可以在后端改密码，可外接webdav进行东西存储，重启spaces会拉取dataset数据库中的文件进行同步，不用担心数据丢失啦&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-fallback&#34; data-lang=&#34;fallback&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;ln&#34;&gt;1&lt;/span&gt;&lt;span class=&#34;cl&#34;&gt;后端地址：/#/admin
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;ln&#34;&gt;2&lt;/span&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;ln&#34;&gt;3&lt;/span&gt;&lt;span class=&#34;cl&#34;&gt;后台默认密码：FileCodeBox2023
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id=&#34;在cloudflare进行反代&#34;&gt;在cloudflare进行反代
&lt;/h2&gt;&lt;p&gt;
&lt;div class=&#34;post-img-view&#34;&gt;
&lt;a data-fancybox=&#34;gallery&#34; href=&#34;https://static.houhuayuan.me/blog/2025/02/f5f3f9d9e2067e97ffc5ff1a27647fb7.png&#34;&gt;
&lt;img src=&#34;https://static.houhuayuan.me/blog/2025/02/f5f3f9d9e2067e97ffc5ff1a27647fb7.png&#34; alt=&#34;&#34;  /&gt;
&lt;/a&gt;
&lt;/div&gt;

&lt;br&gt;

&lt;div class=&#34;post-img-view&#34;&gt;
&lt;a data-fancybox=&#34;gallery&#34; href=&#34;https://static.houhuayuan.me/blog/2025/02/f22f5043ef791d399b90b0cbc05e7ea4.png&#34;&gt;
&lt;img src=&#34;https://static.houhuayuan.me/blog/2025/02/f22f5043ef791d399b90b0cbc05e7ea4.png&#34; alt=&#34;&#34;  /&gt;
&lt;/a&gt;
&lt;/div&gt;

&lt;/p&gt;
&lt;p&gt;然后划到最底下点击&lt;nkbd&gt;部署&lt;/nkbd&gt;&lt;/p&gt;
&lt;p&gt;
&lt;div class=&#34;post-img-view&#34;&gt;
&lt;a data-fancybox=&#34;gallery&#34; href=&#34;https://static.houhuayuan.me/blog/2025/02/d8c131ea934178e2b992bfb19dbdd614.png&#34;&gt;
&lt;img src=&#34;https://static.houhuayuan.me/blog/2025/02/d8c131ea934178e2b992bfb19dbdd614.png&#34; alt=&#34;&#34;  /&gt;
&lt;/a&gt;
&lt;/div&gt;

&lt;/p&gt;
&lt;p&gt;然后点击&lt;nkbd&gt;编辑代码&lt;/nkbd&gt; ， 填入以下内容：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-JavaScript&#34; data-lang=&#34;JavaScript&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;ln&#34;&gt;1&lt;/span&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;kr&#34;&gt;export&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;default&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;ln&#34;&gt;2&lt;/span&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;kr&#34;&gt;async&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;fetch&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;request&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;env&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;ln&#34;&gt;3&lt;/span&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;kr&#34;&gt;const&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;url&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;new&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;URL&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;request&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;url&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;ln&#34;&gt;4&lt;/span&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;nx&#34;&gt;url&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;host&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;你的地址&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;  &lt;span class=&#34;err&#34;&gt;#&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;注意地址不要有https&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;c1&#34;&gt;//
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;ln&#34;&gt;5&lt;/span&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;return&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;fetch&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;k&#34;&gt;new&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;Request&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;url&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;request&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;))&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;ln&#34;&gt;6&lt;/span&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;ln&#34;&gt;7&lt;/span&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;查看你项目的地址：&lt;/p&gt;
&lt;p&gt;
&lt;div class=&#34;post-img-view&#34;&gt;
&lt;a data-fancybox=&#34;gallery&#34; href=&#34;https://static.houhuayuan.me/blog/2025/02/396a4e1c047cfe21819533381c79da7c.png&#34;&gt;
&lt;img src=&#34;https://static.houhuayuan.me/blog/2025/02/396a4e1c047cfe21819533381c79da7c.png&#34; alt=&#34;&#34;  /&gt;
&lt;/a&gt;
&lt;/div&gt;

&lt;br&gt;

&lt;div class=&#34;post-img-view&#34;&gt;
&lt;a data-fancybox=&#34;gallery&#34; href=&#34;https://static.houhuayuan.me/blog/2025/02/6f5cb2a1ecf3477a04210852f5c92d46.png&#34;&gt;
&lt;img src=&#34;https://static.houhuayuan.me/blog/2025/02/6f5cb2a1ecf3477a04210852f5c92d46.png&#34; alt=&#34;&#34;  /&gt;
&lt;/a&gt;
&lt;/div&gt;

&lt;br&gt;

&lt;div class=&#34;post-img-view&#34;&gt;
&lt;a data-fancybox=&#34;gallery&#34; href=&#34;https://static.houhuayuan.me/blog/2025/02/4120bf04ee1dbd676223dc729931a2e3.png&#34;&gt;
&lt;img src=&#34;https://static.houhuayuan.me/blog/2025/02/4120bf04ee1dbd676223dc729931a2e3.png&#34; alt=&#34;&#34;  /&gt;
&lt;/a&gt;
&lt;/div&gt;

&lt;/p&gt;
&lt;p&gt;然后点击右边的&lt;nkbd&gt;部署&lt;/nkbd&gt;，再在worker的设置里填入自定义域域名，就可以啦！&lt;/p&gt;
&lt;p&gt;
&lt;div class=&#34;post-img-view&#34;&gt;
&lt;a data-fancybox=&#34;gallery&#34; href=&#34;https://static.houhuayuan.me/blog/2025/02/e9f0d19f0800043f716e3a3a7e73f210.png&#34;&gt;
&lt;img src=&#34;https://static.houhuayuan.me/blog/2025/02/e9f0d19f0800043f716e3a3a7e73f210.png&#34; alt=&#34;&#34;  /&gt;
&lt;/a&gt;
&lt;/div&gt;

&lt;/p&gt;
&lt;div data-theme-toc=&#34;true&#34;&gt; &lt;/div&gt;
</description>
        </item>
        
    </channel>
</rss>
