<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" href="/rss.xsl"?><rss version="2.0" xmlns:content="http://purl.org/rss/1.0/modules/content/"><channel><title>mccsjs</title><description>一个使用 Astro构建的个人博客</description><link>https://blog.mccsjs.cn/</link><language>zh-CN</language><generator>Astro</generator><item><title>Skill学习 | 收集</title><link>https://blog.mccsjs.cn/posts/ai-agent-skill-collect</link><guid isPermaLink="true">https://blog.mccsjs.cn/posts/ai-agent-skill-collect</guid><description>收集实用的 AI Agent Skill，涵盖工程化工作流、技能创建器、技术图表生成等开发辅助工具。</description><pubDate>Thu, 06 Aug 2026 00:00:00 GMT</pubDate><content:encoded>&lt;h1 id=&quot;skill学习--收集&quot;&gt;Skill学习 | 收集&lt;/h1&gt;
&lt;blockquote&gt;
&lt;p&gt;[!NOTE] 提示
在拿到陌生的SKILL时候，一定要让AI先解释一下，再开始使用。否则很有可能染上赛博花柳。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2 id=&quot;superpowers--工程化开发工作流&quot;&gt;superpowers — 工程化开发工作流&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;地址&lt;/strong&gt;: &lt;a href=&quot;https://github.com/obra/superpowers&quot;&gt;obra/superpowers&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;简短解释&lt;/strong&gt;: AI Agent 开发工作流的决定版，核心理念是 &lt;strong&gt;Process over Prompt&lt;/strong&gt;，给 AI 套上软件工程的纪律与护栏，强制先思考、再规划、后编码、必验证。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;包含哪些 skill&lt;/strong&gt;:
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;test-driven-development&lt;/code&gt; — 强制 TDD&lt;/li&gt;
&lt;li&gt;&lt;code&gt;systematic-debugging&lt;/code&gt; — 4 阶段调试&lt;/li&gt;
&lt;li&gt;&lt;code&gt;verification-before-completion&lt;/code&gt; — 无验证证据无完成声明&lt;/li&gt;
&lt;li&gt;&lt;code&gt;brainstorming&lt;/code&gt; — 编码前头脑风暴与需求探索&lt;/li&gt;
&lt;li&gt;&lt;code&gt;writing-plans&lt;/code&gt; — 拆分为 2-5 分钟细粒度任务&lt;/li&gt;
&lt;li&gt;&lt;code&gt;executing-plans&lt;/code&gt; — 批量执行任务 + 人工检查点&lt;/li&gt;
&lt;li&gt;&lt;code&gt;subagent-driven-development&lt;/code&gt; — 子代理 + 两阶段审查&lt;/li&gt;
&lt;li&gt;&lt;code&gt;dispatching-parallel-agents&lt;/code&gt; — 并行派发独立任务&lt;/li&gt;
&lt;li&gt;&lt;code&gt;using-superpowers&lt;/code&gt; — 元技能，检查适用技能&lt;/li&gt;
&lt;li&gt;&lt;code&gt;requesting-code-review&lt;/code&gt; — 派发 reviewer 子代理&lt;/li&gt;
&lt;li&gt;&lt;code&gt;receiving-code-review&lt;/code&gt; — 技术性评估反馈&lt;/li&gt;
&lt;li&gt;&lt;code&gt;finishing-a-development-branch&lt;/code&gt; — 分支收尾流程&lt;/li&gt;
&lt;li&gt;&lt;code&gt;using-git-worktrees&lt;/code&gt; — 隔离工作区&lt;/li&gt;
&lt;li&gt;&lt;code&gt;writing-skills&lt;/code&gt; — 用 TDD 写新技能&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;安装&lt;/strong&gt;:
&lt;pre class=&quot;astro-code astro-code-themes github-light github-dark&quot; style=&quot;background-color:#fff;--shiki-dark-bg:#24292e;color:#24292e;--shiki-dark:#e1e4e8; overflow-x: auto; white-space: pre-wrap; word-wrap: break-word;&quot; tabindex=&quot;0&quot; data-language=&quot;bash&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6F42C1;--shiki-dark:#B392F0&quot;&gt;/plugin&lt;/span&gt;&lt;span style=&quot;color:#032F62;--shiki-dark:#9ECBFF&quot;&gt; marketplace&lt;/span&gt;&lt;span style=&quot;color:#032F62;--shiki-dark:#9ECBFF&quot;&gt; add&lt;/span&gt;&lt;span style=&quot;color:#032F62;--shiki-dark:#9ECBFF&quot;&gt; obra/superpowers-marketplace&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6F42C1;--shiki-dark:#B392F0&quot;&gt;/plugin&lt;/span&gt;&lt;span style=&quot;color:#032F62;--shiki-dark:#9ECBFF&quot;&gt; install&lt;/span&gt;&lt;span style=&quot;color:#032F62;--shiki-dark:#9ECBFF&quot;&gt; superpowers@superpowers-marketplace&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;卸载&lt;/strong&gt;:
&lt;pre class=&quot;astro-code astro-code-themes github-light github-dark&quot; style=&quot;background-color:#fff;--shiki-dark-bg:#24292e;color:#24292e;--shiki-dark:#e1e4e8; overflow-x: auto; white-space: pre-wrap; word-wrap: break-word;&quot; tabindex=&quot;0&quot; data-language=&quot;bash&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6F42C1;--shiki-dark:#B392F0&quot;&gt;/plugin&lt;/span&gt;&lt;span style=&quot;color:#032F62;--shiki-dark:#9ECBFF&quot;&gt; uninstall&lt;/span&gt;&lt;span style=&quot;color:#032F62;--shiki-dark:#9ECBFF&quot;&gt; superpowers&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;h2 id=&quot;skill-creator--技能创建器&quot;&gt;skill-creator — 技能创建器&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;地址&lt;/strong&gt;: &lt;a href=&quot;https://github.com/anthropics/skills/tree/main/skills/skill-creator&quot;&gt;anthropics/skills/skill-creator&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;简短解释&lt;/strong&gt;: Anthropic 官方元技能，用来创建新 Skill 的 Skill，提供标准化创建框架。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;包含哪些 skill&lt;/strong&gt;: 自身即技能创建器，覆盖捕获意图、编写 SKILL.md、创建测试、评估基准、迭代优化、描述优化等流程。&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;hr&gt;
&lt;h2 id=&quot;fireworks-tech-graph--技术图表生成&quot;&gt;fireworks-tech-graph — 技术图表生成&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;地址&lt;/strong&gt;: &lt;a href=&quot;https://github.com/yizhiyanhua-ai/fireworks-tech-graph&quot;&gt;yizhiyanhua-ai/fireworks-tech-graph&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;简短解释&lt;/strong&gt;: 从自然语言生成生产级 SVG + PNG 技术图表，无需学习 Mermaid/PlantUML 语法。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;包含哪些 skill&lt;/strong&gt;: 7 种图表风格——架构图、流程图、时序图、UML 类图、AI/Agent 工作流模式图、网络拓扑图、状态机图。&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;hr&gt;
&lt;h2 id=&quot;addyosmaniagent-skills--生产级工程技能集&quot;&gt;addyosmani/agent-skills — 生产级工程技能集&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;地址&lt;/strong&gt;: &lt;a href=&quot;https://github.com/addyosmani/agent-skills&quot;&gt;addyosmani/agent-skills&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;简短解释&lt;/strong&gt;: Addy Osmani 维护的生产级 AI Agent 工程技能集合，覆盖从需求定义到生产发布的完整软件生命周期，强调流程、验证与反合理化。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;包含哪些 skill&lt;/strong&gt;: 24 个 skill（23 个生命周期 skill + 1 个元 skill）
&lt;ul&gt;
&lt;li&gt;Define: &lt;code&gt;interview-me&lt;/code&gt;、&lt;code&gt;idea-refine&lt;/code&gt;、&lt;code&gt;spec-driven-development&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Plan: &lt;code&gt;planning-and-task-breakdown&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Build: &lt;code&gt;incremental-implementation&lt;/code&gt;、&lt;code&gt;test-driven-development&lt;/code&gt;、&lt;code&gt;context-engineering&lt;/code&gt;、&lt;code&gt;source-driven-development&lt;/code&gt;、&lt;code&gt;doubt-driven-development&lt;/code&gt;、&lt;code&gt;frontend-ui-engineering&lt;/code&gt;、&lt;code&gt;api-and-interface-design&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Verify: &lt;code&gt;browser-testing-with-devtools&lt;/code&gt;、&lt;code&gt;debugging-and-error-recovery&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Review: &lt;code&gt;code-review-and-quality&lt;/code&gt;、&lt;code&gt;code-simplification&lt;/code&gt;、&lt;code&gt;security-and-hardening&lt;/code&gt;、&lt;code&gt;performance-optimization&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Ship: &lt;code&gt;git-workflow-and-versioning&lt;/code&gt;、&lt;code&gt;ci-cd-and-automation&lt;/code&gt;、&lt;code&gt;deprecation-and-migration&lt;/code&gt;、&lt;code&gt;documentation-and-adrs&lt;/code&gt;、&lt;code&gt;observability-and-instrumentation&lt;/code&gt;、&lt;code&gt;shipping-and-launch&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Meta: &lt;code&gt;using-agent-skills&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;安装&lt;/strong&gt;:
&lt;pre class=&quot;astro-code astro-code-themes github-light github-dark&quot; style=&quot;background-color:#fff;--shiki-dark-bg:#24292e;color:#24292e;--shiki-dark:#e1e4e8; overflow-x: auto; white-space: pre-wrap; word-wrap: break-word;&quot; tabindex=&quot;0&quot; data-language=&quot;bash&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6F42C1;--shiki-dark:#B392F0&quot;&gt;/plugin&lt;/span&gt;&lt;span style=&quot;color:#032F62;--shiki-dark:#9ECBFF&quot;&gt; marketplace&lt;/span&gt;&lt;span style=&quot;color:#032F62;--shiki-dark:#9ECBFF&quot;&gt; add&lt;/span&gt;&lt;span style=&quot;color:#032F62;--shiki-dark:#9ECBFF&quot;&gt; addyosmani/agent-skills&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6F42C1;--shiki-dark:#B392F0&quot;&gt;/plugin&lt;/span&gt;&lt;span style=&quot;color:#032F62;--shiki-dark:#9ECBFF&quot;&gt; install&lt;/span&gt;&lt;span style=&quot;color:#032F62;--shiki-dark:#9ECBFF&quot;&gt; agent-skills@addy-agent-skills&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;卸载&lt;/strong&gt;:
&lt;pre class=&quot;astro-code astro-code-themes github-light github-dark&quot; style=&quot;background-color:#fff;--shiki-dark-bg:#24292e;color:#24292e;--shiki-dark:#e1e4e8; overflow-x: auto; white-space: pre-wrap; word-wrap: break-word;&quot; tabindex=&quot;0&quot; data-language=&quot;bash&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6F42C1;--shiki-dark:#B392F0&quot;&gt;/plugin&lt;/span&gt;&lt;span style=&quot;color:#032F62;--shiki-dark:#9ECBFF&quot;&gt; uninstall&lt;/span&gt;&lt;span style=&quot;color:#032F62;--shiki-dark:#9ECBFF&quot;&gt; agent-skills&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;h2 id=&quot;mattpocockskills--工程师实战技能集&quot;&gt;mattpocock/skills — 工程师实战技能集&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;地址&lt;/strong&gt;: &lt;a href=&quot;https://github.com/mattpocock/skills&quot;&gt;mattpocock/skills&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;简短解释&lt;/strong&gt;: TypeScript 专家 Matt Pocock 维护的个人技能集，从真实工程实践中蒸馏而来。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;包含哪些 skill&lt;/strong&gt;: 多个 TypeScript 与工程实战相关 skill，具体以仓库目录为准。&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;
</content:encoded><category>AI</category><category>Skill</category><category>Agent</category></item><item><title> 啊我发违法发A</title><link>https://blog.mccsjs.cn/posts/a</link><guid isPermaLink="true">https://blog.mccsjs.cn/posts/a</guid><pubDate>Sun, 26 Jul 2026 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;FAF A   A&lt;/p&gt;
</content:encoded></item><item><title>A F违法 发阿发发</title><link>https://blog.mccsjs.cn/posts/a-f</link><guid isPermaLink="true">https://blog.mccsjs.cn/posts/a-f</guid><pubDate>Sun, 26 Jul 2026 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;发发 发发发哇发&lt;/p&gt;
</content:encoded></item><item><title>发AEF A A </title><link>https://blog.mccsjs.cn/posts/aef-a-a</link><guid isPermaLink="true">https://blog.mccsjs.cn/posts/aef-a-a</guid><pubDate>Sun, 26 Jul 2026 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;发放亲爱无法 青蛙发放&lt;/p&gt;
</content:encoded></item><item><title> E3W45R3 </title><link>https://blog.mccsjs.cn/posts/e3w45r3</link><guid isPermaLink="true">https://blog.mccsjs.cn/posts/e3w45r3</guid><pubDate>Sun, 26 Jul 2026 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;3 T34G 5 3 34&lt;/p&gt;
</content:encoded></item><item><title>阿发</title><link>https://blog.mccsjs.cn/posts/e8d3da81</link><guid isPermaLink="true">https://blog.mccsjs.cn/posts/e8d3da81</guid><pubDate>Sun, 26 Jul 2026 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;拖出去小学生多吃点v&lt;/p&gt;
</content:encoded></item><item><title>FQ 3 3</title><link>https://blog.mccsjs.cn/posts/fq-3-3</link><guid isPermaLink="true">https://blog.mccsjs.cn/posts/fq-3-3</guid><pubDate>Sun, 26 Jul 2026 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;F3 F3 F3 F3&lt;/p&gt;
</content:encoded></item><item><title>x</title><link>https://blog.mccsjs.cn/posts/x</link><guid isPermaLink="true">https://blog.mccsjs.cn/posts/x</guid><pubDate>Wed, 22 Jul 2026 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;x&lt;/p&gt;
</content:encoded><category>随笔</category></item><item><title>12133</title><link>https://blog.mccsjs.cn/posts/12133</link><guid isPermaLink="true">https://blog.mccsjs.cn/posts/12133</guid><pubDate>Tue, 21 Jul 2026 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;2134日护如何27糊涂&lt;/p&gt;
</content:encoded><category>CSS</category><category>生活</category></item><item><title>6</title><link>https://blog.mccsjs.cn/posts/6</link><guid isPermaLink="true">https://blog.mccsjs.cn/posts/6</guid><pubDate>Tue, 21 Jul 2026 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;我所使用的是别人的开源项目，项目成品预览：&lt;a href=&quot;https://cfbed.1314883.xyz/&quot;&gt;CloudFlare ImgBed&lt;/a&gt;，认证码为：&lt;code&gt;cfbed&lt;/code&gt;。
注：请不要使用演示站点上传，图片数据无法保证
{% tip warning faa-horizontal animated-hover %}
本篇文章所有图片皆为自建图床+CDN效果，速度很快
{% endtip %}&lt;/p&gt;
&lt;h1 id=&quot;cloudflare部署&quot;&gt;Cloudflare部署&lt;/h1&gt;
&lt;h2 id=&quot;-第一步fork-项目&quot;&gt;📂 第一步：Fork 项目&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;访问 &lt;a href=&quot;https://github.com/MarSeventh/CloudFlare-ImgBed&quot;&gt;CloudFlare ImgBed 项目&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;点击右上角的 “Fork” 按钮
&lt;img src=&quot;https://pic.seln.cn/file/jc/1767405750891_146f5e4b4745c6f36fb8c613abc56cf7.jpg&quot; alt=&quot;image.png&quot; width=70% /&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;dasd&lt;/p&gt;
&lt;ol start=&quot;3&quot;&gt;
&lt;li&gt;选择您的 GitHub 账户&lt;/li&gt;
&lt;li&gt;确认 Fork 完成&lt;/li&gt;
&lt;/ol&gt;
&lt;h2 id=&quot;️-第二步创建-pages-项目&quot;&gt;🏗️ 第二步：创建 Pages 项目&lt;/h2&gt;
&lt;h3 id=&quot;21-访问-cloudflare-dashboard&quot;&gt;2.1 访问 Cloudflare Dashboard&lt;/h3&gt;
&lt;p&gt;p&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;登录 &lt;a href=&quot;https://dash.cloudflare.com/&quot;&gt;Cloudflare Dashboard&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;选择左侧菜单的 “计算和AI” -&amp;gt; “Workers &amp;amp; Pages”&lt;/li&gt;
&lt;li&gt;点击 “创建应用程序”&lt;/li&gt;
&lt;li&gt;在最下方 &lt;code&gt;Looking to deploy Pages?&lt;/code&gt; 选择 “Get started”
&lt;img src=&quot;https://pic.seln.cn/file/jc/1767405757570_66cd337965fc8af67091dc22fbb5a42a.jpg&quot; alt=&quot;pages-create.png&quot; width=70% /&gt;
&lt;/li&gt;
&lt;li&gt;在 “导入现有 Git 存储库” 处点击 “开始使用”
&lt;img src=&quot;https://pic.seln.cn/file/jc/1767405761040_ba6cd0c0c4a8329a388567aa5e8806ab.jpg&quot; alt=&quot;pages-create-1.png&quot; width=70% /&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;h3 id=&quot;22-连接-github-仓库&quot;&gt;2.2 连接 GitHub 仓库&lt;/h3&gt;
&lt;ol&gt;
&lt;li&gt;如果首次使用，需要授权 Cloudflare 访问 GitHub&lt;/li&gt;
&lt;li&gt;选择您 Fork 的 &lt;code&gt;CloudFlare-ImgBed&lt;/code&gt; 仓库&lt;/li&gt;
&lt;li&gt;点击 “开始设置”&lt;/li&gt;
&lt;/ol&gt;
&lt;h3 id=&quot;23-配置项目设置&quot;&gt;2.3 配置项目设置&lt;/h3&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;配置项&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;/td&gt;
&lt;td&gt;&lt;code&gt;cloudflare-imgbed&lt;/code&gt;（或自定义）&lt;/td&gt;
&lt;td&gt;项目标识符&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;生产分支&lt;/td&gt;
&lt;td&gt;&lt;code&gt;main&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;生产环境分支&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;构建命令&lt;/td&gt;
&lt;td&gt;&lt;code&gt;npm install&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;重要：构建命令&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;构建输出目录&lt;/td&gt;
&lt;td&gt;&lt;code&gt;/&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;保持默认&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;img src=&quot;https://pic.seln.cn/file/jc/1767405764256_7f82b467928622c4753977e497321ce6.jpg&quot; alt=&quot;pages-build-config.png&quot; width=70% /&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;h3 id=&quot;24-部署项目&quot;&gt;2.4 部署项目&lt;/h3&gt;
&lt;ol&gt;
&lt;li&gt;点击 “保存并部署”&lt;/li&gt;
&lt;li&gt;等待首次部署完成（约 2-3 分钟）&lt;/li&gt;
&lt;/ol&gt;
&lt;h2 id=&quot;️-第三步配置数据库&quot;&gt;🗄️ 第三步：配置数据库&lt;/h2&gt;
&lt;p&gt;注意：kv和d1只需存在一个，若两项都加可能有意料之外的问题&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;特点&lt;/th&gt;
&lt;th&gt;KV 数据库&lt;/th&gt;
&lt;th&gt;D1 数据库&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;读写性能&lt;/td&gt;
&lt;td&gt;高&lt;/td&gt;
&lt;td&gt;较低&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;免费额度&lt;/td&gt;
&lt;td&gt;少&lt;/td&gt;
&lt;td&gt;多&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&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;h3 id=&quot;创建-kv-命名空间&quot;&gt;创建 KV 命名空间&lt;/h3&gt;
&lt;ol&gt;
&lt;li&gt;在 Cloudflare Dashboard 中选择 “存储和数据库”&lt;/li&gt;
&lt;li&gt;点击 “Workers KV”&lt;/li&gt;
&lt;li&gt;点击 “创建实例”
&lt;img src=&quot;https://pic.seln.cn/file/jc/1767405763347_5bf936ac906141db10818bc533b29a3e.jpg&quot; alt=&quot;image.png&quot; width=75% /&gt;
&lt;/li&gt;
&lt;li&gt;输入命名空间名称：&lt;code&gt;img_url&lt;/code&gt;
&lt;img src=&quot;https://pic.seln.cn/file/jc/1767405766806_b52830873e9a09d36a8ca2f914199c9c.jpg&quot; alt=&quot;image.png&quot; width=75% /&gt;
&lt;/li&gt;
&lt;li&gt;点击 “创建”&lt;/li&gt;
&lt;/ol&gt;
&lt;h4 id=&quot;绑定-kv-到项目&quot;&gt;绑定 KV 到项目&lt;/h4&gt;
&lt;ol&gt;
&lt;li&gt;返回您的 Pages 项目&lt;/li&gt;
&lt;li&gt;选择 “设置” → “绑定”&lt;/li&gt;
&lt;li&gt;点击 “添加” → “KV 命名空间”&lt;/li&gt;
&lt;li&gt;填写绑定信息：
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;变量名称&lt;/strong&gt;：&lt;code&gt;img_url&lt;/code&gt;（必须是这个名称）&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;KV 命名空间&lt;/strong&gt;：选择刚创建的命名空间
&lt;img src=&quot;https://pic.seln.cn/file/jc/1767405766219_87cb7bd1d2c8e89e88f1d8ae93c8c002.jpg&quot; alt=&quot;image.png&quot; width=29% /&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;点击 “保存”&lt;/li&gt;
&lt;/ol&gt;
&lt;ul&gt;
&lt;li&gt;注意：绑定 KV 时，变量名称必须为 &lt;code&gt;img_url&lt;/code&gt;，这是项目预设的变量名，填错会出现无法进入管理界面等情况。&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 id=&quot;创建-d1-数据库&quot;&gt;创建 D1 数据库&lt;/h4&gt;
&lt;p&gt;注意：kv和d1只需存在一个，若两项都加可能有意料之外的问题&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;在 Cloudflare Dashboard 中选择 “存储和数据库”&lt;/li&gt;
&lt;li&gt;点击 “D1 SQL 数据库”&lt;/li&gt;
&lt;li&gt;点击 “创建数据库”
&lt;img src=&quot;https://pic.seln.cn/file/jc/1767405773723_3b8426163b8896face1d52c5c2d71348.jpg&quot; alt=&quot;image.png&quot; width=50% /&gt;
&lt;/li&gt;
&lt;li&gt;输入数据库名称：&lt;code&gt;img_d1&lt;/code&gt;（建议使用此名称）
&lt;img src=&quot;https://pic.seln.cn/file/jc/1767405776835_693e31b07316d9cf8f4f6a78b2d051cb.jpg&quot; alt=&quot;image.png&quot; width=50% /&gt;
&lt;/li&gt;
&lt;li&gt;不选择地区，点击 “创建”&lt;/li&gt;
&lt;/ol&gt;
&lt;h4 id=&quot;初始化-d1-数据库&quot;&gt;初始化 D1 数据库&lt;/h4&gt;
&lt;ol&gt;
&lt;li&gt;创建完成后，点击进入数据库详情页&lt;/li&gt;
&lt;li&gt;选择 “控制台” 选项卡
&lt;img src=&quot;https://pic.seln.cn/file/jc/1767405776104_595ac90bc110f72c84a40f54113bb60f.jpg&quot; alt=&quot;image.png&quot; width=50% /&gt;
&lt;/li&gt;
&lt;li&gt;在 SQL 输入框中逐段粘贴并执行初始化语句
填写示例：
&lt;img src=&quot;https://pic.seln.cn/file/jc/1767405787259_79707cfa9d39e7d23f412dff625d89f6.jpg&quot; alt=&quot;image.png&quot; width=60% /&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;{% folding blue, 太多了，请展开 %}
文件表 - 存储文件元数据&lt;/p&gt;
&lt;pre class=&quot;astro-code astro-code-themes github-light github-dark&quot; style=&quot;background-color:#fff;--shiki-dark-bg:#24292e;color:#24292e;--shiki-dark:#e1e4e8; overflow-x: auto; white-space: pre-wrap; word-wrap: break-word;&quot; tabindex=&quot;0&quot; data-language=&quot;sql&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49;--shiki-dark:#F97583&quot;&gt;CREATE&lt;/span&gt;&lt;span style=&quot;color:#D73A49;--shiki-dark:#F97583&quot;&gt; TABLE&lt;/span&gt;&lt;span style=&quot;color:#6F42C1;--shiki-dark:#B392F0&quot;&gt; IF&lt;/span&gt;&lt;span style=&quot;color:#D73A49;--shiki-dark:#F97583&quot;&gt; NOT&lt;/span&gt;&lt;span style=&quot;color:#D73A49;--shiki-dark:#F97583&quot;&gt; EXISTS&lt;/span&gt;&lt;span style=&quot;color:#24292E;--shiki-dark:#E1E4E8&quot;&gt; files (&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E;--shiki-dark:#E1E4E8&quot;&gt;    id &lt;/span&gt;&lt;span style=&quot;color:#D73A49;--shiki-dark:#F97583&quot;&gt;TEXT&lt;/span&gt;&lt;span style=&quot;color:#D73A49;--shiki-dark:#F97583&quot;&gt; PRIMARY KEY&lt;/span&gt;&lt;span style=&quot;color:#24292E;--shiki-dark:#E1E4E8&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49;--shiki-dark:#F97583&quot;&gt;    value&lt;/span&gt;&lt;span style=&quot;color:#D73A49;--shiki-dark:#F97583&quot;&gt; TEXT&lt;/span&gt;&lt;span style=&quot;color:#24292E;--shiki-dark:#E1E4E8&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E;--shiki-dark:#E1E4E8&quot;&gt;    metadata &lt;/span&gt;&lt;span style=&quot;color:#D73A49;--shiki-dark:#F97583&quot;&gt;TEXT&lt;/span&gt;&lt;span style=&quot;color:#D73A49;--shiki-dark:#F97583&quot;&gt; NOT NULL&lt;/span&gt;&lt;span style=&quot;color:#24292E;--shiki-dark:#E1E4E8&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E;--shiki-dark:#E1E4E8&quot;&gt;    file_name &lt;/span&gt;&lt;span style=&quot;color:#D73A49;--shiki-dark:#F97583&quot;&gt;TEXT&lt;/span&gt;&lt;span style=&quot;color:#24292E;--shiki-dark:#E1E4E8&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E;--shiki-dark:#E1E4E8&quot;&gt;    file_type &lt;/span&gt;&lt;span style=&quot;color:#D73A49;--shiki-dark:#F97583&quot;&gt;TEXT&lt;/span&gt;&lt;span style=&quot;color:#24292E;--shiki-dark:#E1E4E8&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E;--shiki-dark:#E1E4E8&quot;&gt;    file_size &lt;/span&gt;&lt;span style=&quot;color:#D73A49;--shiki-dark:#F97583&quot;&gt;TEXT&lt;/span&gt;&lt;span style=&quot;color:#24292E;--shiki-dark:#E1E4E8&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E;--shiki-dark:#E1E4E8&quot;&gt;    upload_ip &lt;/span&gt;&lt;span style=&quot;color:#D73A49;--shiki-dark:#F97583&quot;&gt;TEXT&lt;/span&gt;&lt;span style=&quot;color:#24292E;--shiki-dark:#E1E4E8&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E;--shiki-dark:#E1E4E8&quot;&gt;    upload_address &lt;/span&gt;&lt;span style=&quot;color:#D73A49;--shiki-dark:#F97583&quot;&gt;TEXT&lt;/span&gt;&lt;span style=&quot;color:#24292E;--shiki-dark:#E1E4E8&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E;--shiki-dark:#E1E4E8&quot;&gt;    list_type &lt;/span&gt;&lt;span style=&quot;color:#D73A49;--shiki-dark:#F97583&quot;&gt;TEXT&lt;/span&gt;&lt;span style=&quot;color:#24292E;--shiki-dark:#E1E4E8&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49;--shiki-dark:#F97583&quot;&gt;    timestamp&lt;/span&gt;&lt;span style=&quot;color:#D73A49;--shiki-dark:#F97583&quot;&gt; INTEGER&lt;/span&gt;&lt;span style=&quot;color:#24292E;--shiki-dark:#E1E4E8&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E;--shiki-dark:#E1E4E8&quot;&gt;    label &lt;/span&gt;&lt;span style=&quot;color:#D73A49;--shiki-dark:#F97583&quot;&gt;TEXT&lt;/span&gt;&lt;span style=&quot;color:#24292E;--shiki-dark:#E1E4E8&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E;--shiki-dark:#E1E4E8&quot;&gt;    directory &lt;/span&gt;&lt;span style=&quot;color:#D73A49;--shiki-dark:#F97583&quot;&gt;TEXT&lt;/span&gt;&lt;span style=&quot;color:#24292E;--shiki-dark:#E1E4E8&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E;--shiki-dark:#E1E4E8&quot;&gt;    channel &lt;/span&gt;&lt;span style=&quot;color:#D73A49;--shiki-dark:#F97583&quot;&gt;TEXT&lt;/span&gt;&lt;span style=&quot;color:#24292E;--shiki-dark:#E1E4E8&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E;--shiki-dark:#E1E4E8&quot;&gt;    channel_name &lt;/span&gt;&lt;span style=&quot;color:#D73A49;--shiki-dark:#F97583&quot;&gt;TEXT&lt;/span&gt;&lt;span style=&quot;color:#24292E;--shiki-dark:#E1E4E8&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E;--shiki-dark:#E1E4E8&quot;&gt;    tg_file_id &lt;/span&gt;&lt;span style=&quot;color:#D73A49;--shiki-dark:#F97583&quot;&gt;TEXT&lt;/span&gt;&lt;span style=&quot;color:#24292E;--shiki-dark:#E1E4E8&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E;--shiki-dark:#E1E4E8&quot;&gt;    tg_chat_id &lt;/span&gt;&lt;span style=&quot;color:#D73A49;--shiki-dark:#F97583&quot;&gt;TEXT&lt;/span&gt;&lt;span style=&quot;color:#24292E;--shiki-dark:#E1E4E8&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E;--shiki-dark:#E1E4E8&quot;&gt;    tg_bot_token &lt;/span&gt;&lt;span style=&quot;color:#D73A49;--shiki-dark:#F97583&quot;&gt;TEXT&lt;/span&gt;&lt;span style=&quot;color:#24292E;--shiki-dark:#E1E4E8&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E;--shiki-dark:#E1E4E8&quot;&gt;    is_chunked &lt;/span&gt;&lt;span style=&quot;color:#D73A49;--shiki-dark:#F97583&quot;&gt;BOOLEAN&lt;/span&gt;&lt;span style=&quot;color:#D73A49;--shiki-dark:#F97583&quot;&gt; DEFAULT&lt;/span&gt;&lt;span style=&quot;color:#24292E;--shiki-dark:#E1E4E8&quot;&gt; FALSE,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E;--shiki-dark:#E1E4E8&quot;&gt;    tags &lt;/span&gt;&lt;span style=&quot;color:#D73A49;--shiki-dark:#F97583&quot;&gt;TEXT&lt;/span&gt;&lt;span style=&quot;color:#24292E;--shiki-dark:#E1E4E8&quot;&gt;, &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E;--shiki-dark:#E1E4E8&quot;&gt;    created_at &lt;/span&gt;&lt;span style=&quot;color:#D73A49;--shiki-dark:#F97583&quot;&gt;DATETIME&lt;/span&gt;&lt;span style=&quot;color:#D73A49;--shiki-dark:#F97583&quot;&gt; DEFAULT&lt;/span&gt;&lt;span style=&quot;color:#24292E;--shiki-dark:#E1E4E8&quot;&gt; CURRENT_TIMESTAMP,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E;--shiki-dark:#E1E4E8&quot;&gt;    updated_at &lt;/span&gt;&lt;span style=&quot;color:#D73A49;--shiki-dark:#F97583&quot;&gt;DATETIME&lt;/span&gt;&lt;span style=&quot;color:#D73A49;--shiki-dark:#F97583&quot;&gt; DEFAULT&lt;/span&gt;&lt;span style=&quot;color:#24292E;--shiki-dark:#E1E4E8&quot;&gt; CURRENT_TIMESTAMP&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E;--shiki-dark:#E1E4E8&quot;&gt;);&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;系统配置表&lt;/p&gt;
&lt;pre class=&quot;astro-code astro-code-themes github-light github-dark&quot; style=&quot;background-color:#fff;--shiki-dark-bg:#24292e;color:#24292e;--shiki-dark:#e1e4e8; overflow-x: auto; white-space: pre-wrap; word-wrap: break-word;&quot; tabindex=&quot;0&quot; data-language=&quot;sql&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49;--shiki-dark:#F97583&quot;&gt;CREATE&lt;/span&gt;&lt;span style=&quot;color:#D73A49;--shiki-dark:#F97583&quot;&gt; TABLE&lt;/span&gt;&lt;span style=&quot;color:#6F42C1;--shiki-dark:#B392F0&quot;&gt; IF&lt;/span&gt;&lt;span style=&quot;color:#D73A49;--shiki-dark:#F97583&quot;&gt; NOT&lt;/span&gt;&lt;span style=&quot;color:#D73A49;--shiki-dark:#F97583&quot;&gt; EXISTS&lt;/span&gt;&lt;span style=&quot;color:#24292E;--shiki-dark:#E1E4E8&quot;&gt; settings (&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49;--shiki-dark:#F97583&quot;&gt;    key&lt;/span&gt;&lt;span style=&quot;color:#D73A49;--shiki-dark:#F97583&quot;&gt; TEXT&lt;/span&gt;&lt;span style=&quot;color:#D73A49;--shiki-dark:#F97583&quot;&gt; PRIMARY KEY&lt;/span&gt;&lt;span style=&quot;color:#24292E;--shiki-dark:#E1E4E8&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49;--shiki-dark:#F97583&quot;&gt;    value&lt;/span&gt;&lt;span style=&quot;color:#D73A49;--shiki-dark:#F97583&quot;&gt; TEXT&lt;/span&gt;&lt;span style=&quot;color:#D73A49;--shiki-dark:#F97583&quot;&gt; NOT NULL&lt;/span&gt;&lt;span style=&quot;color:#24292E;--shiki-dark:#E1E4E8&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E;--shiki-dark:#E1E4E8&quot;&gt;    category &lt;/span&gt;&lt;span style=&quot;color:#D73A49;--shiki-dark:#F97583&quot;&gt;TEXT&lt;/span&gt;&lt;span style=&quot;color:#24292E;--shiki-dark:#E1E4E8&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49;--shiki-dark:#F97583&quot;&gt;    description&lt;/span&gt;&lt;span style=&quot;color:#D73A49;--shiki-dark:#F97583&quot;&gt; TEXT&lt;/span&gt;&lt;span style=&quot;color:#24292E;--shiki-dark:#E1E4E8&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E;--shiki-dark:#E1E4E8&quot;&gt;    created_at &lt;/span&gt;&lt;span style=&quot;color:#D73A49;--shiki-dark:#F97583&quot;&gt;DATETIME&lt;/span&gt;&lt;span style=&quot;color:#D73A49;--shiki-dark:#F97583&quot;&gt; DEFAULT&lt;/span&gt;&lt;span style=&quot;color:#24292E;--shiki-dark:#E1E4E8&quot;&gt; CURRENT_TIMESTAMP,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E;--shiki-dark:#E1E4E8&quot;&gt;    updated_at &lt;/span&gt;&lt;span style=&quot;color:#D73A49;--shiki-dark:#F97583&quot;&gt;DATETIME&lt;/span&gt;&lt;span style=&quot;color:#D73A49;--shiki-dark:#F97583&quot;&gt; DEFAULT&lt;/span&gt;&lt;span style=&quot;color:#24292E;--shiki-dark:#E1E4E8&quot;&gt; CURRENT_TIMESTAMP&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E;--shiki-dark:#E1E4E8&quot;&gt;);&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;索引操作表&lt;/p&gt;
&lt;pre class=&quot;astro-code astro-code-themes github-light github-dark&quot; style=&quot;background-color:#fff;--shiki-dark-bg:#24292e;color:#24292e;--shiki-dark:#e1e4e8; overflow-x: auto; white-space: pre-wrap; word-wrap: break-word;&quot; tabindex=&quot;0&quot; data-language=&quot;sql&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49;--shiki-dark:#F97583&quot;&gt;CREATE&lt;/span&gt;&lt;span style=&quot;color:#D73A49;--shiki-dark:#F97583&quot;&gt; TABLE&lt;/span&gt;&lt;span style=&quot;color:#6F42C1;--shiki-dark:#B392F0&quot;&gt; IF&lt;/span&gt;&lt;span style=&quot;color:#D73A49;--shiki-dark:#F97583&quot;&gt; NOT&lt;/span&gt;&lt;span style=&quot;color:#D73A49;--shiki-dark:#F97583&quot;&gt; EXISTS&lt;/span&gt;&lt;span style=&quot;color:#24292E;--shiki-dark:#E1E4E8&quot;&gt; index_operations (&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E;--shiki-dark:#E1E4E8&quot;&gt;    id &lt;/span&gt;&lt;span style=&quot;color:#D73A49;--shiki-dark:#F97583&quot;&gt;TEXT&lt;/span&gt;&lt;span style=&quot;color:#D73A49;--shiki-dark:#F97583&quot;&gt; PRIMARY KEY&lt;/span&gt;&lt;span style=&quot;color:#24292E;--shiki-dark:#E1E4E8&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49;--shiki-dark:#F97583&quot;&gt;    type&lt;/span&gt;&lt;span style=&quot;color:#D73A49;--shiki-dark:#F97583&quot;&gt; TEXT&lt;/span&gt;&lt;span style=&quot;color:#D73A49;--shiki-dark:#F97583&quot;&gt; NOT NULL&lt;/span&gt;&lt;span style=&quot;color:#24292E;--shiki-dark:#E1E4E8&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49;--shiki-dark:#F97583&quot;&gt;    timestamp&lt;/span&gt;&lt;span style=&quot;color:#D73A49;--shiki-dark:#F97583&quot;&gt; INTEGER&lt;/span&gt;&lt;span style=&quot;color:#D73A49;--shiki-dark:#F97583&quot;&gt; NOT NULL&lt;/span&gt;&lt;span style=&quot;color:#24292E;--shiki-dark:#E1E4E8&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49;--shiki-dark:#F97583&quot;&gt;    data&lt;/span&gt;&lt;span style=&quot;color:#D73A49;--shiki-dark:#F97583&quot;&gt; TEXT&lt;/span&gt;&lt;span style=&quot;color:#D73A49;--shiki-dark:#F97583&quot;&gt; NOT NULL&lt;/span&gt;&lt;span style=&quot;color:#24292E;--shiki-dark:#E1E4E8&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E;--shiki-dark:#E1E4E8&quot;&gt;    processed &lt;/span&gt;&lt;span style=&quot;color:#D73A49;--shiki-dark:#F97583&quot;&gt;BOOLEAN&lt;/span&gt;&lt;span style=&quot;color:#D73A49;--shiki-dark:#F97583&quot;&gt; DEFAULT&lt;/span&gt;&lt;span style=&quot;color:#24292E;--shiki-dark:#E1E4E8&quot;&gt; FALSE,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E;--shiki-dark:#E1E4E8&quot;&gt;    created_at &lt;/span&gt;&lt;span style=&quot;color:#D73A49;--shiki-dark:#F97583&quot;&gt;DATETIME&lt;/span&gt;&lt;span style=&quot;color:#D73A49;--shiki-dark:#F97583&quot;&gt; DEFAULT&lt;/span&gt;&lt;span style=&quot;color:#24292E;--shiki-dark:#E1E4E8&quot;&gt; CURRENT_TIMESTAMP&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E;--shiki-dark:#E1E4E8&quot;&gt;);&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;其他数据表&lt;/p&gt;
&lt;pre class=&quot;astro-code astro-code-themes github-light github-dark&quot; style=&quot;background-color:#fff;--shiki-dark-bg:#24292e;color:#24292e;--shiki-dark:#e1e4e8; overflow-x: auto; white-space: pre-wrap; word-wrap: break-word;&quot; tabindex=&quot;0&quot; data-language=&quot;sql&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49;--shiki-dark:#F97583&quot;&gt;CREATE&lt;/span&gt;&lt;span style=&quot;color:#D73A49;--shiki-dark:#F97583&quot;&gt; TABLE&lt;/span&gt;&lt;span style=&quot;color:#6F42C1;--shiki-dark:#B392F0&quot;&gt; IF&lt;/span&gt;&lt;span style=&quot;color:#D73A49;--shiki-dark:#F97583&quot;&gt; NOT&lt;/span&gt;&lt;span style=&quot;color:#D73A49;--shiki-dark:#F97583&quot;&gt; EXISTS&lt;/span&gt;&lt;span style=&quot;color:#24292E;--shiki-dark:#E1E4E8&quot;&gt; other_data (&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49;--shiki-dark:#F97583&quot;&gt;    key&lt;/span&gt;&lt;span style=&quot;color:#D73A49;--shiki-dark:#F97583&quot;&gt; TEXT&lt;/span&gt;&lt;span style=&quot;color:#D73A49;--shiki-dark:#F97583&quot;&gt; PRIMARY KEY&lt;/span&gt;&lt;span style=&quot;color:#24292E;--shiki-dark:#E1E4E8&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49;--shiki-dark:#F97583&quot;&gt;    value&lt;/span&gt;&lt;span style=&quot;color:#D73A49;--shiki-dark:#F97583&quot;&gt; TEXT&lt;/span&gt;&lt;span style=&quot;color:#D73A49;--shiki-dark:#F97583&quot;&gt; NOT NULL&lt;/span&gt;&lt;span style=&quot;color:#24292E;--shiki-dark:#E1E4E8&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49;--shiki-dark:#F97583&quot;&gt;    type&lt;/span&gt;&lt;span style=&quot;color:#D73A49;--shiki-dark:#F97583&quot;&gt; TEXT&lt;/span&gt;&lt;span style=&quot;color:#24292E;--shiki-dark:#E1E4E8&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49;--shiki-dark:#F97583&quot;&gt;    description&lt;/span&gt;&lt;span style=&quot;color:#D73A49;--shiki-dark:#F97583&quot;&gt; TEXT&lt;/span&gt;&lt;span style=&quot;color:#24292E;--shiki-dark:#E1E4E8&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E;--shiki-dark:#E1E4E8&quot;&gt;    created_at &lt;/span&gt;&lt;span style=&quot;color:#D73A49;--shiki-dark:#F97583&quot;&gt;DATETIME&lt;/span&gt;&lt;span style=&quot;color:#D73A49;--shiki-dark:#F97583&quot;&gt; DEFAULT&lt;/span&gt;&lt;span style=&quot;color:#24292E;--shiki-dark:#E1E4E8&quot;&gt; CURRENT_TIMESTAMP,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E;--shiki-dark:#E1E4E8&quot;&gt;    updated_at &lt;/span&gt;&lt;span style=&quot;color:#D73A49;--shiki-dark:#F97583&quot;&gt;DATETIME&lt;/span&gt;&lt;span style=&quot;color:#D73A49;--shiki-dark:#F97583&quot;&gt; DEFAULT&lt;/span&gt;&lt;span style=&quot;color:#24292E;--shiki-dark:#E1E4E8&quot;&gt; CURRENT_TIMESTAMP&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E;--shiki-dark:#E1E4E8&quot;&gt;);&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;创建索引&lt;/p&gt;
&lt;pre class=&quot;astro-code astro-code-themes github-light github-dark&quot; style=&quot;background-color:#fff;--shiki-dark-bg:#24292e;color:#24292e;--shiki-dark:#e1e4e8; overflow-x: auto; white-space: pre-wrap; word-wrap: break-word;&quot; tabindex=&quot;0&quot; data-language=&quot;sql&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49;--shiki-dark:#F97583&quot;&gt;CREATE&lt;/span&gt;&lt;span style=&quot;color:#D73A49;--shiki-dark:#F97583&quot;&gt; INDEX&lt;/span&gt;&lt;span style=&quot;color:#6F42C1;--shiki-dark:#B392F0&quot;&gt; IF&lt;/span&gt;&lt;span style=&quot;color:#D73A49;--shiki-dark:#F97583&quot;&gt; NOT&lt;/span&gt;&lt;span style=&quot;color:#D73A49;--shiki-dark:#F97583&quot;&gt; EXISTS&lt;/span&gt;&lt;span style=&quot;color:#24292E;--shiki-dark:#E1E4E8&quot;&gt; idx_files_timestamp &lt;/span&gt;&lt;span style=&quot;color:#D73A49;--shiki-dark:#F97583&quot;&gt;ON&lt;/span&gt;&lt;span style=&quot;color:#24292E;--shiki-dark:#E1E4E8&quot;&gt; files(&lt;/span&gt;&lt;span style=&quot;color:#D73A49;--shiki-dark:#F97583&quot;&gt;timestamp&lt;/span&gt;&lt;span style=&quot;color:#D73A49;--shiki-dark:#F97583&quot;&gt; DESC&lt;/span&gt;&lt;span style=&quot;color:#24292E;--shiki-dark:#E1E4E8&quot;&gt;);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49;--shiki-dark:#F97583&quot;&gt;CREATE&lt;/span&gt;&lt;span style=&quot;color:#D73A49;--shiki-dark:#F97583&quot;&gt; INDEX&lt;/span&gt;&lt;span style=&quot;color:#6F42C1;--shiki-dark:#B392F0&quot;&gt; IF&lt;/span&gt;&lt;span style=&quot;color:#D73A49;--shiki-dark:#F97583&quot;&gt; NOT&lt;/span&gt;&lt;span style=&quot;color:#D73A49;--shiki-dark:#F97583&quot;&gt; EXISTS&lt;/span&gt;&lt;span style=&quot;color:#24292E;--shiki-dark:#E1E4E8&quot;&gt; idx_files_directory &lt;/span&gt;&lt;span style=&quot;color:#D73A49;--shiki-dark:#F97583&quot;&gt;ON&lt;/span&gt;&lt;span style=&quot;color:#24292E;--shiki-dark:#E1E4E8&quot;&gt; files(directory);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49;--shiki-dark:#F97583&quot;&gt;CREATE&lt;/span&gt;&lt;span style=&quot;color:#D73A49;--shiki-dark:#F97583&quot;&gt; INDEX&lt;/span&gt;&lt;span style=&quot;color:#6F42C1;--shiki-dark:#B392F0&quot;&gt; IF&lt;/span&gt;&lt;span style=&quot;color:#D73A49;--shiki-dark:#F97583&quot;&gt; NOT&lt;/span&gt;&lt;span style=&quot;color:#D73A49;--shiki-dark:#F97583&quot;&gt; EXISTS&lt;/span&gt;&lt;span style=&quot;color:#24292E;--shiki-dark:#E1E4E8&quot;&gt; idx_files_channel &lt;/span&gt;&lt;span style=&quot;color:#D73A49;--shiki-dark:#F97583&quot;&gt;ON&lt;/span&gt;&lt;span style=&quot;color:#24292E;--shiki-dark:#E1E4E8&quot;&gt; files(channel);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49;--shiki-dark:#F97583&quot;&gt;CREATE&lt;/span&gt;&lt;span style=&quot;color:#D73A49;--shiki-dark:#F97583&quot;&gt; INDEX&lt;/span&gt;&lt;span style=&quot;color:#6F42C1;--shiki-dark:#B392F0&quot;&gt; IF&lt;/span&gt;&lt;span style=&quot;color:#D73A49;--shiki-dark:#F97583&quot;&gt; NOT&lt;/span&gt;&lt;span style=&quot;color:#D73A49;--shiki-dark:#F97583&quot;&gt; EXISTS&lt;/span&gt;&lt;span style=&quot;color:#24292E;--shiki-dark:#E1E4E8&quot;&gt; idx_files_file_type &lt;/span&gt;&lt;span style=&quot;color:#D73A49;--shiki-dark:#F97583&quot;&gt;ON&lt;/span&gt;&lt;span style=&quot;color:#24292E;--shiki-dark:#E1E4E8&quot;&gt; files(file_type);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49;--shiki-dark:#F97583&quot;&gt;CREATE&lt;/span&gt;&lt;span style=&quot;color:#D73A49;--shiki-dark:#F97583&quot;&gt; INDEX&lt;/span&gt;&lt;span style=&quot;color:#6F42C1;--shiki-dark:#B392F0&quot;&gt; IF&lt;/span&gt;&lt;span style=&quot;color:#D73A49;--shiki-dark:#F97583&quot;&gt; NOT&lt;/span&gt;&lt;span style=&quot;color:#D73A49;--shiki-dark:#F97583&quot;&gt; EXISTS&lt;/span&gt;&lt;span style=&quot;color:#24292E;--shiki-dark:#E1E4E8&quot;&gt; idx_files_upload_ip &lt;/span&gt;&lt;span style=&quot;color:#D73A49;--shiki-dark:#F97583&quot;&gt;ON&lt;/span&gt;&lt;span style=&quot;color:#24292E;--shiki-dark:#E1E4E8&quot;&gt; files(upload_ip);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49;--shiki-dark:#F97583&quot;&gt;CREATE&lt;/span&gt;&lt;span style=&quot;color:#D73A49;--shiki-dark:#F97583&quot;&gt; INDEX&lt;/span&gt;&lt;span style=&quot;color:#6F42C1;--shiki-dark:#B392F0&quot;&gt; IF&lt;/span&gt;&lt;span style=&quot;color:#D73A49;--shiki-dark:#F97583&quot;&gt; NOT&lt;/span&gt;&lt;span style=&quot;color:#D73A49;--shiki-dark:#F97583&quot;&gt; EXISTS&lt;/span&gt;&lt;span style=&quot;color:#24292E;--shiki-dark:#E1E4E8&quot;&gt; idx_files_created_at &lt;/span&gt;&lt;span style=&quot;color:#D73A49;--shiki-dark:#F97583&quot;&gt;ON&lt;/span&gt;&lt;span style=&quot;color:#24292E;--shiki-dark:#E1E4E8&quot;&gt; files(created_at &lt;/span&gt;&lt;span style=&quot;color:#D73A49;--shiki-dark:#F97583&quot;&gt;DESC&lt;/span&gt;&lt;span style=&quot;color:#24292E;--shiki-dark:#E1E4E8&quot;&gt;);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49;--shiki-dark:#F97583&quot;&gt;CREATE&lt;/span&gt;&lt;span style=&quot;color:#D73A49;--shiki-dark:#F97583&quot;&gt; INDEX&lt;/span&gt;&lt;span style=&quot;color:#6F42C1;--shiki-dark:#B392F0&quot;&gt; IF&lt;/span&gt;&lt;span style=&quot;color:#D73A49;--shiki-dark:#F97583&quot;&gt; NOT&lt;/span&gt;&lt;span style=&quot;color:#D73A49;--shiki-dark:#F97583&quot;&gt; EXISTS&lt;/span&gt;&lt;span style=&quot;color:#24292E;--shiki-dark:#E1E4E8&quot;&gt; idx_files_tags &lt;/span&gt;&lt;span style=&quot;color:#D73A49;--shiki-dark:#F97583&quot;&gt;ON&lt;/span&gt;&lt;span style=&quot;color:#24292E;--shiki-dark:#E1E4E8&quot;&gt; files(tags);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49;--shiki-dark:#F97583&quot;&gt;CREATE&lt;/span&gt;&lt;span style=&quot;color:#D73A49;--shiki-dark:#F97583&quot;&gt; INDEX&lt;/span&gt;&lt;span style=&quot;color:#6F42C1;--shiki-dark:#B392F0&quot;&gt; IF&lt;/span&gt;&lt;span style=&quot;color:#D73A49;--shiki-dark:#F97583&quot;&gt; NOT&lt;/span&gt;&lt;span style=&quot;color:#D73A49;--shiki-dark:#F97583&quot;&gt; EXISTS&lt;/span&gt;&lt;span style=&quot;color:#24292E;--shiki-dark:#E1E4E8&quot;&gt; idx_settings_category &lt;/span&gt;&lt;span style=&quot;color:#D73A49;--shiki-dark:#F97583&quot;&gt;ON&lt;/span&gt;&lt;span style=&quot;color:#24292E;--shiki-dark:#E1E4E8&quot;&gt; settings(category);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49;--shiki-dark:#F97583&quot;&gt;CREATE&lt;/span&gt;&lt;span style=&quot;color:#D73A49;--shiki-dark:#F97583&quot;&gt; INDEX&lt;/span&gt;&lt;span style=&quot;color:#6F42C1;--shiki-dark:#B392F0&quot;&gt; IF&lt;/span&gt;&lt;span style=&quot;color:#D73A49;--shiki-dark:#F97583&quot;&gt; NOT&lt;/span&gt;&lt;span style=&quot;color:#D73A49;--shiki-dark:#F97583&quot;&gt; EXISTS&lt;/span&gt;&lt;span style=&quot;color:#24292E;--shiki-dark:#E1E4E8&quot;&gt; idx_index_operations_timestamp &lt;/span&gt;&lt;span style=&quot;color:#D73A49;--shiki-dark:#F97583&quot;&gt;ON&lt;/span&gt;&lt;span style=&quot;color:#24292E;--shiki-dark:#E1E4E8&quot;&gt; index_operations(&lt;/span&gt;&lt;span style=&quot;color:#D73A49;--shiki-dark:#F97583&quot;&gt;timestamp&lt;/span&gt;&lt;span style=&quot;color:#24292E;--shiki-dark:#E1E4E8&quot;&gt;);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49;--shiki-dark:#F97583&quot;&gt;CREATE&lt;/span&gt;&lt;span style=&quot;color:#D73A49;--shiki-dark:#F97583&quot;&gt; INDEX&lt;/span&gt;&lt;span style=&quot;color:#6F42C1;--shiki-dark:#B392F0&quot;&gt; IF&lt;/span&gt;&lt;span style=&quot;color:#D73A49;--shiki-dark:#F97583&quot;&gt; NOT&lt;/span&gt;&lt;span style=&quot;color:#D73A49;--shiki-dark:#F97583&quot;&gt; EXISTS&lt;/span&gt;&lt;span style=&quot;color:#24292E;--shiki-dark:#E1E4E8&quot;&gt; idx_index_operations_processed &lt;/span&gt;&lt;span style=&quot;color:#D73A49;--shiki-dark:#F97583&quot;&gt;ON&lt;/span&gt;&lt;span style=&quot;color:#24292E;--shiki-dark:#E1E4E8&quot;&gt; index_operations(processed);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49;--shiki-dark:#F97583&quot;&gt;CREATE&lt;/span&gt;&lt;span style=&quot;color:#D73A49;--shiki-dark:#F97583&quot;&gt; INDEX&lt;/span&gt;&lt;span style=&quot;color:#6F42C1;--shiki-dark:#B392F0&quot;&gt; IF&lt;/span&gt;&lt;span style=&quot;color:#D73A49;--shiki-dark:#F97583&quot;&gt; NOT&lt;/span&gt;&lt;span style=&quot;color:#D73A49;--shiki-dark:#F97583&quot;&gt; EXISTS&lt;/span&gt;&lt;span style=&quot;color:#24292E;--shiki-dark:#E1E4E8&quot;&gt; idx_index_operations_type &lt;/span&gt;&lt;span style=&quot;color:#D73A49;--shiki-dark:#F97583&quot;&gt;ON&lt;/span&gt;&lt;span style=&quot;color:#24292E;--shiki-dark:#E1E4E8&quot;&gt; index_operations(&lt;/span&gt;&lt;span style=&quot;color:#D73A49;--shiki-dark:#F97583&quot;&gt;type&lt;/span&gt;&lt;span style=&quot;color:#24292E;--shiki-dark:#E1E4E8&quot;&gt;);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49;--shiki-dark:#F97583&quot;&gt;CREATE&lt;/span&gt;&lt;span style=&quot;color:#D73A49;--shiki-dark:#F97583&quot;&gt; INDEX&lt;/span&gt;&lt;span style=&quot;color:#6F42C1;--shiki-dark:#B392F0&quot;&gt; IF&lt;/span&gt;&lt;span style=&quot;color:#D73A49;--shiki-dark:#F97583&quot;&gt; NOT&lt;/span&gt;&lt;span style=&quot;color:#D73A49;--shiki-dark:#F97583&quot;&gt; EXISTS&lt;/span&gt;&lt;span style=&quot;color:#24292E;--shiki-dark:#E1E4E8&quot;&gt; idx_other_data_type &lt;/span&gt;&lt;span style=&quot;color:#D73A49;--shiki-dark:#F97583&quot;&gt;ON&lt;/span&gt;&lt;span style=&quot;color:#24292E;--shiki-dark:#E1E4E8&quot;&gt; other_data(&lt;/span&gt;&lt;span style=&quot;color:#D73A49;--shiki-dark:#F97583&quot;&gt;type&lt;/span&gt;&lt;span style=&quot;color:#24292E;--shiki-dark:#E1E4E8&quot;&gt;);&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;创建触发器&lt;/p&gt;
&lt;pre class=&quot;astro-code astro-code-themes github-light github-dark&quot; style=&quot;background-color:#fff;--shiki-dark-bg:#24292e;color:#24292e;--shiki-dark:#e1e4e8; overflow-x: auto; white-space: pre-wrap; word-wrap: break-word;&quot; tabindex=&quot;0&quot; data-language=&quot;sql&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49;--shiki-dark:#F97583&quot;&gt;CREATE&lt;/span&gt;&lt;span style=&quot;color:#D73A49;--shiki-dark:#F97583&quot;&gt; TRIGGER&lt;/span&gt;&lt;span style=&quot;color:#6F42C1;--shiki-dark:#B392F0&quot;&gt; IF&lt;/span&gt;&lt;span style=&quot;color:#D73A49;--shiki-dark:#F97583&quot;&gt; NOT&lt;/span&gt;&lt;span style=&quot;color:#D73A49;--shiki-dark:#F97583&quot;&gt; EXISTS&lt;/span&gt;&lt;span style=&quot;color:#24292E;--shiki-dark:#E1E4E8&quot;&gt; update_files_updated_at &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49;--shiki-dark:#F97583&quot;&gt;    AFTER&lt;/span&gt;&lt;span style=&quot;color:#D73A49;--shiki-dark:#F97583&quot;&gt; UPDATE&lt;/span&gt;&lt;span style=&quot;color:#D73A49;--shiki-dark:#F97583&quot;&gt; ON&lt;/span&gt;&lt;span style=&quot;color:#24292E;--shiki-dark:#E1E4E8&quot;&gt; files&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49;--shiki-dark:#F97583&quot;&gt;    BEGIN&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49;--shiki-dark:#F97583&quot;&gt;        UPDATE&lt;/span&gt;&lt;span style=&quot;color:#24292E;--shiki-dark:#E1E4E8&quot;&gt; files &lt;/span&gt;&lt;span style=&quot;color:#D73A49;--shiki-dark:#F97583&quot;&gt;SET&lt;/span&gt;&lt;span style=&quot;color:#24292E;--shiki-dark:#E1E4E8&quot;&gt; updated_at &lt;/span&gt;&lt;span style=&quot;color:#D73A49;--shiki-dark:#F97583&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#24292E;--shiki-dark:#E1E4E8&quot;&gt; CURRENT_TIMESTAMP &lt;/span&gt;&lt;span style=&quot;color:#D73A49;--shiki-dark:#F97583&quot;&gt;WHERE&lt;/span&gt;&lt;span style=&quot;color:#24292E;--shiki-dark:#E1E4E8&quot;&gt; id &lt;/span&gt;&lt;span style=&quot;color:#D73A49;--shiki-dark:#F97583&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#005CC5;--shiki-dark:#79B8FF&quot;&gt; NEW&lt;/span&gt;&lt;span style=&quot;color:#24292E;--shiki-dark:#E1E4E8&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color:#005CC5;--shiki-dark:#79B8FF&quot;&gt;id&lt;/span&gt;&lt;span style=&quot;color:#24292E;--shiki-dark:#E1E4E8&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49;--shiki-dark:#F97583&quot;&gt;    END&lt;/span&gt;&lt;span style=&quot;color:#24292E;--shiki-dark:#E1E4E8&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49;--shiki-dark:#F97583&quot;&gt;CREATE&lt;/span&gt;&lt;span style=&quot;color:#D73A49;--shiki-dark:#F97583&quot;&gt; TRIGGER&lt;/span&gt;&lt;span style=&quot;color:#6F42C1;--shiki-dark:#B392F0&quot;&gt; IF&lt;/span&gt;&lt;span style=&quot;color:#D73A49;--shiki-dark:#F97583&quot;&gt; NOT&lt;/span&gt;&lt;span style=&quot;color:#D73A49;--shiki-dark:#F97583&quot;&gt; EXISTS&lt;/span&gt;&lt;span style=&quot;color:#24292E;--shiki-dark:#E1E4E8&quot;&gt; update_settings_updated_at &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49;--shiki-dark:#F97583&quot;&gt;    AFTER&lt;/span&gt;&lt;span style=&quot;color:#D73A49;--shiki-dark:#F97583&quot;&gt; UPDATE&lt;/span&gt;&lt;span style=&quot;color:#D73A49;--shiki-dark:#F97583&quot;&gt; ON&lt;/span&gt;&lt;span style=&quot;color:#24292E;--shiki-dark:#E1E4E8&quot;&gt; settings&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49;--shiki-dark:#F97583&quot;&gt;    BEGIN&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49;--shiki-dark:#F97583&quot;&gt;        UPDATE&lt;/span&gt;&lt;span style=&quot;color:#24292E;--shiki-dark:#E1E4E8&quot;&gt; settings &lt;/span&gt;&lt;span style=&quot;color:#D73A49;--shiki-dark:#F97583&quot;&gt;SET&lt;/span&gt;&lt;span style=&quot;color:#24292E;--shiki-dark:#E1E4E8&quot;&gt; updated_at &lt;/span&gt;&lt;span style=&quot;color:#D73A49;--shiki-dark:#F97583&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#24292E;--shiki-dark:#E1E4E8&quot;&gt; CURRENT_TIMESTAMP &lt;/span&gt;&lt;span style=&quot;color:#D73A49;--shiki-dark:#F97583&quot;&gt;WHERE&lt;/span&gt;&lt;span style=&quot;color:#D73A49;--shiki-dark:#F97583&quot;&gt; key&lt;/span&gt;&lt;span style=&quot;color:#D73A49;--shiki-dark:#F97583&quot;&gt; =&lt;/span&gt;&lt;span style=&quot;color:#005CC5;--shiki-dark:#79B8FF&quot;&gt; NEW&lt;/span&gt;&lt;span style=&quot;color:#24292E;--shiki-dark:#E1E4E8&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color:#005CC5;--shiki-dark:#79B8FF&quot;&gt;key&lt;/span&gt;&lt;span style=&quot;color:#24292E;--shiki-dark:#E1E4E8&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49;--shiki-dark:#F97583&quot;&gt;    END&lt;/span&gt;&lt;span style=&quot;color:#24292E;--shiki-dark:#E1E4E8&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49;--shiki-dark:#F97583&quot;&gt;CREATE&lt;/span&gt;&lt;span style=&quot;color:#D73A49;--shiki-dark:#F97583&quot;&gt; TRIGGER&lt;/span&gt;&lt;span style=&quot;color:#6F42C1;--shiki-dark:#B392F0&quot;&gt; IF&lt;/span&gt;&lt;span style=&quot;color:#D73A49;--shiki-dark:#F97583&quot;&gt; NOT&lt;/span&gt;&lt;span style=&quot;color:#D73A49;--shiki-dark:#F97583&quot;&gt; EXISTS&lt;/span&gt;&lt;span style=&quot;color:#24292E;--shiki-dark:#E1E4E8&quot;&gt; update_index_metadata_updated_at &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49;--shiki-dark:#F97583&quot;&gt;    AFTER&lt;/span&gt;&lt;span style=&quot;color:#D73A49;--shiki-dark:#F97583&quot;&gt; UPDATE&lt;/span&gt;&lt;span style=&quot;color:#D73A49;--shiki-dark:#F97583&quot;&gt; ON&lt;/span&gt;&lt;span style=&quot;color:#24292E;--shiki-dark:#E1E4E8&quot;&gt; index_metadata&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49;--shiki-dark:#F97583&quot;&gt;    BEGIN&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49;--shiki-dark:#F97583&quot;&gt;        UPDATE&lt;/span&gt;&lt;span style=&quot;color:#24292E;--shiki-dark:#E1E4E8&quot;&gt; index_metadata &lt;/span&gt;&lt;span style=&quot;color:#D73A49;--shiki-dark:#F97583&quot;&gt;SET&lt;/span&gt;&lt;span style=&quot;color:#24292E;--shiki-dark:#E1E4E8&quot;&gt; updated_at &lt;/span&gt;&lt;span style=&quot;color:#D73A49;--shiki-dark:#F97583&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#24292E;--shiki-dark:#E1E4E8&quot;&gt; CURRENT_TIMESTAMP &lt;/span&gt;&lt;span style=&quot;color:#D73A49;--shiki-dark:#F97583&quot;&gt;WHERE&lt;/span&gt;&lt;span style=&quot;color:#D73A49;--shiki-dark:#F97583&quot;&gt; key&lt;/span&gt;&lt;span style=&quot;color:#D73A49;--shiki-dark:#F97583&quot;&gt; =&lt;/span&gt;&lt;span style=&quot;color:#005CC5;--shiki-dark:#79B8FF&quot;&gt; NEW&lt;/span&gt;&lt;span style=&quot;color:#24292E;--shiki-dark:#E1E4E8&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color:#005CC5;--shiki-dark:#79B8FF&quot;&gt;key&lt;/span&gt;&lt;span style=&quot;color:#24292E;--shiki-dark:#E1E4E8&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49;--shiki-dark:#F97583&quot;&gt;    END&lt;/span&gt;&lt;span style=&quot;color:#24292E;--shiki-dark:#E1E4E8&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49;--shiki-dark:#F97583&quot;&gt;CREATE&lt;/span&gt;&lt;span style=&quot;color:#D73A49;--shiki-dark:#F97583&quot;&gt; TRIGGER&lt;/span&gt;&lt;span style=&quot;color:#6F42C1;--shiki-dark:#B392F0&quot;&gt; IF&lt;/span&gt;&lt;span style=&quot;color:#D73A49;--shiki-dark:#F97583&quot;&gt; NOT&lt;/span&gt;&lt;span style=&quot;color:#D73A49;--shiki-dark:#F97583&quot;&gt; EXISTS&lt;/span&gt;&lt;span style=&quot;color:#24292E;--shiki-dark:#E1E4E8&quot;&gt; update_other_data_updated_at &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49;--shiki-dark:#F97583&quot;&gt;    AFTER&lt;/span&gt;&lt;span style=&quot;color:#D73A49;--shiki-dark:#F97583&quot;&gt; UPDATE&lt;/span&gt;&lt;span style=&quot;color:#D73A49;--shiki-dark:#F97583&quot;&gt; ON&lt;/span&gt;&lt;span style=&quot;color:#24292E;--shiki-dark:#E1E4E8&quot;&gt; other_data&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49;--shiki-dark:#F97583&quot;&gt;    BEGIN&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49;--shiki-dark:#F97583&quot;&gt;        UPDATE&lt;/span&gt;&lt;span style=&quot;color:#24292E;--shiki-dark:#E1E4E8&quot;&gt; other_data &lt;/span&gt;&lt;span style=&quot;color:#D73A49;--shiki-dark:#F97583&quot;&gt;SET&lt;/span&gt;&lt;span style=&quot;color:#24292E;--shiki-dark:#E1E4E8&quot;&gt; updated_at &lt;/span&gt;&lt;span style=&quot;color:#D73A49;--shiki-dark:#F97583&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#24292E;--shiki-dark:#E1E4E8&quot;&gt; CURRENT_TIMESTAMP &lt;/span&gt;&lt;span style=&quot;color:#D73A49;--shiki-dark:#F97583&quot;&gt;WHERE&lt;/span&gt;&lt;span style=&quot;color:#D73A49;--shiki-dark:#F97583&quot;&gt; key&lt;/span&gt;&lt;span style=&quot;color:#D73A49;--shiki-dark:#F97583&quot;&gt; =&lt;/span&gt;&lt;span style=&quot;color:#005CC5;--shiki-dark:#79B8FF&quot;&gt; NEW&lt;/span&gt;&lt;span style=&quot;color:#24292E;--shiki-dark:#E1E4E8&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color:#005CC5;--shiki-dark:#79B8FF&quot;&gt;key&lt;/span&gt;&lt;span style=&quot;color:#24292E;--shiki-dark:#E1E4E8&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49;--shiki-dark:#F97583&quot;&gt;    END&lt;/span&gt;&lt;span style=&quot;color:#24292E;--shiki-dark:#E1E4E8&quot;&gt;;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;插入初始的索引元数据&lt;/p&gt;
&lt;pre class=&quot;astro-code astro-code-themes github-light github-dark&quot; style=&quot;background-color:#fff;--shiki-dark-bg:#24292e;color:#24292e;--shiki-dark:#e1e4e8; overflow-x: auto; white-space: pre-wrap; word-wrap: break-word;&quot; tabindex=&quot;0&quot; data-language=&quot;sql&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49;--shiki-dark:#F97583&quot;&gt;INSERT&lt;/span&gt;&lt;span style=&quot;color:#D73A49;--shiki-dark:#F97583&quot;&gt; OR&lt;/span&gt;&lt;span style=&quot;color:#D73A49;--shiki-dark:#F97583&quot;&gt; REPLACE&lt;/span&gt;&lt;span style=&quot;color:#D73A49;--shiki-dark:#F97583&quot;&gt; INTO&lt;/span&gt;&lt;span style=&quot;color:#24292E;--shiki-dark:#E1E4E8&quot;&gt; index_metadata (&lt;/span&gt;&lt;span style=&quot;color:#D73A49;--shiki-dark:#F97583&quot;&gt;key&lt;/span&gt;&lt;span style=&quot;color:#24292E;--shiki-dark:#E1E4E8&quot;&gt;, last_updated, total_count, last_operation_id)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49;--shiki-dark:#F97583&quot;&gt;VALUES&lt;/span&gt;&lt;span style=&quot;color:#24292E;--shiki-dark:#E1E4E8&quot;&gt; (&lt;/span&gt;&lt;span style=&quot;color:#032F62;--shiki-dark:#9ECBFF&quot;&gt;&apos;main_index&apos;&lt;/span&gt;&lt;span style=&quot;color:#24292E;--shiki-dark:#E1E4E8&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#005CC5;--shiki-dark:#79B8FF&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;color:#24292E;--shiki-dark:#E1E4E8&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#005CC5;--shiki-dark:#79B8FF&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;color:#24292E;--shiki-dark:#E1E4E8&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#D73A49;--shiki-dark:#F97583&quot;&gt;NULL&lt;/span&gt;&lt;span style=&quot;color:#24292E;--shiki-dark:#E1E4E8&quot;&gt;);&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;初始化完成
{% endfolding %}
4. 点击 “执行”&lt;/p&gt;
&lt;h4 id=&quot;绑定-d1-到项目&quot;&gt;绑定 D1 到项目&lt;/h4&gt;
&lt;ol&gt;
&lt;li&gt;返回您的 Pages 项目&lt;/li&gt;
&lt;li&gt;选择 “设置” → “绑定”&lt;/li&gt;
&lt;li&gt;点击 “添加” → “D1 数据库”&lt;/li&gt;
&lt;li&gt;填写绑定信息：
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;变量名称&lt;/strong&gt;：&lt;code&gt;img_d1&lt;/code&gt;（必须是这个名称）&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;D1 数据库&lt;/strong&gt;：选择刚创建的数据库&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;点击 “保存”
&lt;img src=&quot;https://pic.seln.cn/file/jc/1767405783325_83bcb6b3ce244362bad9d8ff8e314322.jpg&quot; alt=&quot;image.png&quot; width=60% /&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;h2 id=&quot;-第四步重新部署&quot;&gt;🔄 第四步：重新部署&lt;/h2&gt;
&lt;p&gt;绑定数据库后需要重新部署以生效：&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;进入项目的 “部署” 页面&lt;/li&gt;
&lt;li&gt;找到最新的部署记录&lt;/li&gt;
&lt;li&gt;点击右侧的 “…” 菜单&lt;/li&gt;
&lt;li&gt;选择 “重试部署”&lt;/li&gt;
&lt;li&gt;等待部署完成&lt;/li&gt;
&lt;/ol&gt;
&lt;img src=&quot;https://pic.seln.cn/file/jc/1767405803094_dac7ad1c9467d8ffe261221d912de62e.jpg&quot; alt=&quot;redeploy.png&quot; width=60% /&gt;
&lt;h2 id=&quot;第五步绑定域名&quot;&gt;第五步：绑定域名&lt;/h2&gt;
&lt;p&gt;为你的项目配置一个域名，如使用cdn可不用配置&lt;/p&gt;
&lt;h1 id=&quot;加入eo-cdn&quot;&gt;加入EO CDN&lt;/h1&gt;
&lt;p&gt;Cloudflare本身的速度太慢，域名备案后套上CDN会更快，如没有备案域名忽略这步
ping值：
&lt;img src=&quot;https://pic.seln.cn/file/jc/1767405794925_e5fa455f55911eb601a3812f9fa37f59.jpg&quot; alt=&quot;image.png&quot; width=55% /&gt;&lt;/p&gt;
&lt;h2 id=&quot;操作&quot;&gt;操作&lt;/h2&gt;
&lt;p&gt;打开&lt;a href=&quot;https://console.cloud.tencent.com/edgeone/zones&quot;&gt;EdgeOne - 控制台&lt;/a&gt;并登陆，添加域名
&lt;img src=&quot;https://pic.seln.cn/file/jc/1767405802957_911cb3bf15f6c179495a0f9515c7baf2.jpg&quot; alt=&quot;image.png&quot; width=65% /&gt;
点击域名管理➡️添加域名
&lt;img src=&quot;https://pic.seln.cn/file/jc/1767406283508_297c2427c54a8d0955e32925b80e17ce.jpg&quot; alt=&quot;image.png&quot; width=60% /&gt;
Cloudflare page域名就是这个第一个域，直接填进去保存就行
&lt;img src=&quot;https://pic.seln.cn/file/jc/1767406300751_3a8093f101713711c3dfaefaaeec7dc8.jpg&quot; alt=&quot;image.png&quot; width=55% /&gt;&lt;/p&gt;
&lt;h1 id=&quot;配置存储渠道&quot;&gt;配置存储渠道&lt;/h1&gt;
&lt;p&gt;部署完成后访问您的域名，进入管理后台配置存储渠道。&lt;/p&gt;
&lt;h3 id=&quot;访问管理后台&quot;&gt;访问管理后台&lt;/h3&gt;
&lt;p&gt;访问 &lt;code&gt;https://你的域名/&lt;/code&gt;
&lt;img src=&quot;https://pic.seln.cn/file/jc/1767405808620_89d1ba37d05ebe91afc4758f9eb5ce4f.jpg&quot; alt=&quot;image.png&quot; width=46% /&gt;&lt;/p&gt;
&lt;h3 id=&quot;配置-telegram-渠道&quot;&gt;配置 Telegram 渠道&lt;/h3&gt;
&lt;h4 id=&quot;21-获取-tg_bot_token&quot;&gt;2.1 获取 TG_BOT_TOKEN&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;在 Telegram 中搜索 &lt;a href=&quot;https://t.me/BotFather&quot;&gt;@BotFather&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;发送 &lt;code&gt;/newbot&lt;/code&gt; 命令&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;先输入你要为机器人准备的英文名字&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;再输入机器人id，必须_bot结尾&lt;/p&gt;
&lt;img src=&quot;https://pic.seln.cn/file/jc/1767405812934_e2a28ae9928ca0dbcba808b19489a9eb.jpg&quot; alt=&quot;Screenshot_20251228_182807.jpg&quot; width=30% /&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;获得 Bot Token（格式：&lt;code&gt;123456789:ABCdefGHIjklMNOpqrsTUVwxyz&lt;/code&gt;）&lt;/p&gt;
&lt;img src=&quot;https://pic.seln.cn/file/jc/1767405819099_2a7e2df5443f92fc8caa0d7a9efdec49.jpg&quot; alt=&quot;telegram-bot-creation.png&quot; width=35% /&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;点击上图中被打码的链接，随便发点文字把bot添加到联系人&lt;/p&gt;
&lt;h4 id=&quot;22-获取-tg_chat_id&quot;&gt;2.2 获取 TG_CHAT_ID&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;创建一个新的 Telegram 频道（Channel）
&lt;img src=&quot;https://pic.seln.cn/file/jc/1767405814464_d2b1f7eb16b556b8000fc87fd07527fc.jpg&quot; alt=&quot;76ccb5f85cec445cc6a7aa030718f01f.jpg&quot; width=35% /&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;img src=&quot;https://pic.seln.cn/file/jc/1767405820685_66916ed62a02446d836b35fd54b61f33.jpg&quot; alt=&quot;2397c3b45c290a65b1a68918a5dd14a3.jpg&quot; width=35% /&gt;
点击右下角的笔➡️新建频道➡️随便填一个名字然后点右上角的确定➡️更改为私密频道
- 将创建的 Bot 添加为频道管理员
- 给予 Bot 消息管理的权限
点击创建的频道名➡️点击管理员（如是英文就是第二项）➡️点击添加管理员，搜索bot的名字将他拉进来，给bot所有权限
&lt;img src=&quot;https://cfbed.sanyue.de/images/deployment/telegram-channel-management-2.png&quot; alt=&quot;2397c3b45c290a65b1a68918a5dd14a3.jpg&quot; width=35% /&gt;
&lt;ul&gt;
&lt;li&gt;在频道中发送一条测试消息&lt;/li&gt;
&lt;li&gt;向 &lt;a href=&quot;https://t.me/VersaToolsBot&quot;&gt;@VersaToolsBot&lt;/a&gt; 转发这条消息&lt;/li&gt;
&lt;li&gt;获得频道 ID（示例：&lt;code&gt;-1001234567890&lt;/code&gt;）&lt;/li&gt;
&lt;/ul&gt;
&lt;img src=&quot;https://cfbed.sanyue.de/images/deployment/telegram-channel-id.png&quot; alt=&quot;2397c3b45c290a65b1a68918a5dd14a3.jpg&quot; width=30% /&gt;
&lt;h4 id=&quot;23-配置-telegram&quot;&gt;2.3 配置 Telegram&lt;/h4&gt;
&lt;ol&gt;
&lt;li&gt;左上角菜单栏进入 “系统设置” → “上传设置”&lt;/li&gt;
&lt;li&gt;找到 “Telegram 渠道配置”&lt;/li&gt;
&lt;li&gt;点击 “添加渠道”&lt;/li&gt;
&lt;li&gt;填入准备好的 Token 和 Chat ID：
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;渠道名称&lt;/strong&gt;：自定义名称（如：主渠道）&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Bot Token&lt;/strong&gt;：从 @BotFather 获得的 Token&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Chat ID&lt;/strong&gt;：频道 ID（有&lt;code&gt;-&lt;/code&gt;号时需要保留）&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;启用状态&lt;/strong&gt;：开启&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;点击 “保存设置”&lt;/li&gt;
&lt;/ol&gt;
&lt;img src=&quot;https://pic.seln.cn/file/jc/1767406498921_11541ba1fb80934d9f2300338eccbee0.jpg&quot; alt=&quot;image.png&quot; width=31% /&gt;
&lt;h3 id=&quot;配置-r2-渠道&quot;&gt;配置 R2 渠道&lt;/h3&gt;
&lt;p&gt;服务器部署时默认添加了 Cloudflare R2 存储方式，以下步骤仅针对 Cloudflare 部署方式：&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;在项目设置中绑定 R2 存储桶：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;选择 “设置” → “绑定”&lt;/li&gt;
&lt;li&gt;添加 “R2 存储桶”&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;变量名称&lt;/strong&gt;：&lt;code&gt;img_r2&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;R2 存储桶&lt;/strong&gt;：选择已创建的存储桶
r2的教程看这边：&lt;a href=&quot;https://hexo.seln.cn/posts/1f8d2eb1/&quot;&gt;Cloudflare的r2存储桶使用 | mccsjs&lt;/a&gt;
&lt;img src=&quot;https://pic.seln.cn/file/jc/1767405783325_83bcb6b3ce244362bad9d8ff8e314322.jpg&quot; alt=&quot;image.png&quot; width=60% /&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;在管理后台配置：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;进入 “系统设置” → “上传设置”&lt;/li&gt;
&lt;li&gt;配置 R2 渠道参数&lt;/li&gt;
&lt;li&gt;如需图像审查，填入 R2 公开访问链接
提示&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;请注意Cloudflare R2 的免费额度限制，超过后可能会产生费用。&lt;img src=&quot;https://cfbed.sanyue.de/images/deployment/r2-free-tier.png&quot; alt=&quot;注意&quot;&gt;&lt;/p&gt;
&lt;h1 id=&quot;-安全设置&quot;&gt;🔒 安全设置&lt;/h1&gt;
&lt;p&gt;安全相关设置，在管理后台的 “系统设置” → “安全设置” 中配置&lt;/p&gt;
&lt;h3 id=&quot;认证管理&quot;&gt;认证管理&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;用户端认证：用于 Web 端用户登录和 API 认证&lt;/li&gt;
&lt;li&gt;管理端认证： 管理员用户名和密码，用于访问管理后台&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&quot;上传管理&quot;&gt;上传管理&lt;/h3&gt;
&lt;h4 id=&quot;图像审查&quot;&gt;图像审查&lt;/h4&gt;
&lt;p&gt;审查渠道支持 &lt;code&gt;nsfwjs&lt;/code&gt; 和 &lt;code&gt;moderatecontent.com&lt;/code&gt;，可根据如下步骤自行配置。&lt;/p&gt;
&lt;h5 id=&quot;moderatecontentcom&quot;&gt;moderatecontent.com&lt;/h5&gt;
&lt;ul&gt;
&lt;li&gt;访问 &lt;a href=&quot;https://moderatecontent.com/&quot;&gt;ModerateContent&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;注册并获取免费 API Key（目前已不再支持免费注册）&lt;/li&gt;
&lt;li&gt;在管理后台 “系统设置” → “安全设置” 中填入 API Key&lt;/li&gt;
&lt;/ul&gt;
&lt;h1 id=&quot;安全设置&quot;&gt;安全设置&lt;/h1&gt;
&lt;p&gt;点开菜单➡️系统设置➡️安全设置➡️管理端认证
添加用户名和密码，给自己设置一个管理员账户&lt;/p&gt;
&lt;h1 id=&quot;-网页设置&quot;&gt;🌐 网页设置&lt;/h1&gt;
&lt;p&gt;前端网页相关设置，在管理后台的 “系统设置” → “网页设置” 中配置&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;字段名&lt;/th&gt;
&lt;th&gt;用途&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;siteTitle&lt;/td&gt;
&lt;td&gt;网站标题&lt;/td&gt;
&lt;td&gt;字符串&lt;/td&gt;
&lt;td&gt;只支持&lt;code&gt;字符串&lt;/code&gt;类型，设置为你自定义的网站标题&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;siteIcon&lt;/td&gt;
&lt;td&gt;网站图标&lt;/td&gt;
&lt;td&gt;字符串&lt;/td&gt;
&lt;td&gt;只支持&lt;code&gt;字符串&lt;/code&gt;类型，设置为你自定义的网站图标链接&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;ownerName&lt;/td&gt;
&lt;td&gt;图床名称&lt;/td&gt;
&lt;td&gt;字符串&lt;/td&gt;
&lt;td&gt;只支持&lt;code&gt;字符串&lt;/code&gt;类型，设置为你自定义的图床名称（默认为&lt;code&gt;Sanyue&lt;/code&gt;）&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;logoUrl&lt;/td&gt;
&lt;td&gt;图床Logo&lt;/td&gt;
&lt;td&gt;字符串&lt;/td&gt;
&lt;td&gt;只支持&lt;code&gt;字符串&lt;/code&gt;类型，设置为你自定义的图床Logo链接&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;bkInterval&lt;/td&gt;
&lt;td&gt;背景切换间隔&lt;/td&gt;
&lt;td&gt;正整数&lt;/td&gt;
&lt;td&gt;设置为背景图的轮播时间，默认&lt;code&gt;3000&lt;/code&gt;，单位&lt;code&gt;ms&lt;/code&gt;。  &lt;br&gt;例如你希望10s切换一次，设置为&lt;code&gt;10000&lt;/code&gt;即可。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;bkOpacity&lt;/td&gt;
&lt;td&gt;背景图透明度&lt;/td&gt;
&lt;td&gt;(0,1]的浮点数&lt;/td&gt;
&lt;td&gt;展示的背景图透明度，默认为&lt;code&gt;1&lt;/code&gt;。  &lt;br&gt;如果你觉得显示效果不佳，可以自定义，如&lt;code&gt;0.8&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;urlPrefix&lt;/td&gt;
&lt;td&gt;默认 URL 前缀&lt;/td&gt;
&lt;td&gt;字符串&lt;/td&gt;
&lt;td&gt;只支持&lt;code&gt;字符串&lt;/code&gt;类型，设置为自定义的全局默认链接前缀，该前缀会覆盖原始默认前缀，但不会覆盖用户自定义的链接前缀&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;announcement&lt;/td&gt;
&lt;td&gt;公告&lt;/td&gt;
&lt;td&gt;字符串&lt;/td&gt;
&lt;td&gt;只支持&lt;code&gt;字符串&lt;/code&gt;类型，可以为 HTML 格式，设置为你自定义的公告内容（如有）&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;defaultUploadChannel&lt;/td&gt;
&lt;td&gt;默认上传渠道&lt;/td&gt;
&lt;td&gt;字符串&lt;/td&gt;
&lt;td&gt;只支持&lt;code&gt;字符串&lt;/code&gt;类型，设置为你自定义的默认上传渠道，支持&lt;code&gt;telegram&lt;/code&gt;（Telegram 渠道）、&lt;code&gt;cfr2&lt;/code&gt;（Cloudflare R2）和&lt;code&gt;s3&lt;/code&gt;（S3 渠道）&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;defaultUploadNameType&lt;/td&gt;
&lt;td&gt;默认命名方式&lt;/td&gt;
&lt;td&gt;字符串&lt;/td&gt;
&lt;td&gt;只支持&lt;code&gt;字符串&lt;/code&gt;类型，设置为你自定义的默认上传文件命名方式，支持&lt;code&gt;default&lt;/code&gt;（默认）、&lt;code&gt;index&lt;/code&gt;（仅前缀）、&lt;code&gt;original&lt;/code&gt;（仅原名）和&lt;code&gt;short&lt;/code&gt;（短链接）&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;loginBkImg&lt;/td&gt;
&lt;td&gt;登录页背景图&lt;/td&gt;
&lt;td&gt;列表/字符串&lt;/td&gt;
&lt;td&gt;1、当字段类型为&lt;code&gt;列表&lt;/code&gt;时，列表中元素为需要添加到轮播列表中的图片链接（列表中只有一张图时即为固定背景），形如&lt;code&gt;[&quot;1.jpg&quot;,&quot;2.jpg&quot;]&lt;/code&gt;  &lt;br&gt;2、当字段类型为&lt;code&gt;字符串&lt;/code&gt;时，目前&lt;strong&gt;仅支持&lt;/strong&gt;字符串值为&lt;code&gt;bing&lt;/code&gt;，设置为该值时启用bing随机图片轮播模式。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;uploadBkImg&lt;/td&gt;
&lt;td&gt;上传页背景图&lt;/td&gt;
&lt;td&gt;列表/字符串&lt;/td&gt;
&lt;td&gt;同loginBkImg&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;footerLink&lt;/td&gt;
&lt;td&gt;页脚传送门链接&lt;/td&gt;
&lt;td&gt;字符串&lt;/td&gt;
&lt;td&gt;只支持&lt;code&gt;字符串&lt;/code&gt;类型，设置为你自定义的传送地址（如个人博客链接）&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;disableFooter&lt;/td&gt;
&lt;td&gt;隐藏页脚&lt;/td&gt;
&lt;td&gt;boolean&lt;/td&gt;
&lt;td&gt;支持&lt;code&gt;boolean&lt;/code&gt;类型，设为&lt;code&gt;true&lt;/code&gt;时禁用页脚，默认&lt;code&gt;false&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;adminLoginBkImg&lt;/td&gt;
&lt;td&gt;管理页背景图&lt;/td&gt;
&lt;td&gt;列表/字符串&lt;/td&gt;
&lt;td&gt;同loginBkImg&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h1 id=&quot;部署完成&quot;&gt;部署完成&lt;/h1&gt;
&lt;p&gt;结束，访问域名开始使用吧&lt;/p&gt;
</content:encoded><category>React</category><category>随笔</category></item><item><title>利用Cloudflare自建图床</title><link>https://blog.mccsjs.cn/posts/98876b6e</link><guid isPermaLink="true">https://blog.mccsjs.cn/posts/98876b6e</guid><description>摘要哦</description><pubDate>Tue, 21 Jul 2026 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;我所使用的是别人的开源项目，项目成品预览：&lt;a href=&quot;https://cfbed.1314883.xyz/&quot;&gt;CloudFlare ImgBed&lt;/a&gt;，认证码为：&lt;code&gt;cfbed&lt;/code&gt;。
注：请不要使用演示站点上传，图片数据无法保证
{% tip warning faa-horizontal animated-hover %}
本篇文章所有图片皆为自建图床+CDN效果，速度很快
{% endtip %}&lt;/p&gt;
&lt;h1 id=&quot;cloudflare部署&quot;&gt;Cloudflare部署&lt;/h1&gt;
&lt;h2 id=&quot;-第一步fork-项目&quot;&gt;📂 第一步：Fork 项目&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;访问 &lt;a href=&quot;https://github.com/MarSeventh/CloudFlare-ImgBed&quot;&gt;CloudFlare ImgBed 项目&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;点击右上角的 “Fork” 按钮
&lt;img src=&quot;https://pic.seln.cn/file/jc/1767405750891_146f5e4b4745c6f36fb8c613abc56cf7.jpg&quot; alt=&quot;image.png&quot; width=70% /&gt;
&lt;/li&gt;
&lt;li&gt;选择您的 GitHub 账户&lt;/li&gt;
&lt;li&gt;确认 Fork 完成&lt;/li&gt;
&lt;/ol&gt;
&lt;h2 id=&quot;️-第二步创建-pages-项目&quot;&gt;🏗️ 第二步：创建 Pages 项目&lt;/h2&gt;
&lt;h3 id=&quot;21-访问-cloudflare-dashboard&quot;&gt;2.1 访问 Cloudflare Dashboard&lt;/h3&gt;
&lt;ol&gt;
&lt;li&gt;登录 &lt;a href=&quot;https://dash.cloudflare.com/&quot;&gt;Cloudflare Dashboard&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;选择左侧菜单的 “计算和AI” -&amp;gt; “Workers &amp;amp; Pages”&lt;/li&gt;
&lt;li&gt;点击 “创建应用程序”&lt;/li&gt;
&lt;li&gt;在最下方 &lt;code&gt;Looking to deploy Pages?&lt;/code&gt; 选择 “Get started”
&lt;img src=&quot;https://pic.seln.cn/file/jc/1767405757570_66cd337965fc8af67091dc22fbb5a42a.jpg&quot; alt=&quot;pages-create.png&quot; width=70% /&gt;
&lt;/li&gt;
&lt;li&gt;在 “导入现有 Git 存储库” 处点击 “开始使用”
&lt;img src=&quot;https://pic.seln.cn/file/jc/1767405761040_ba6cd0c0c4a8329a388567aa5e8806ab.jpg&quot; alt=&quot;pages-create-1.png&quot; width=70% /&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;h3 id=&quot;22-连接-github-仓库&quot;&gt;2.2 连接 GitHub 仓库&lt;/h3&gt;
&lt;ol&gt;
&lt;li&gt;如果首次使用，需要授权 Cloudflare 访问 GitHub&lt;/li&gt;
&lt;li&gt;选择您 Fork 的 &lt;code&gt;CloudFlare-ImgBed&lt;/code&gt; 仓库&lt;/li&gt;
&lt;li&gt;点击 “开始设置”&lt;/li&gt;
&lt;/ol&gt;
&lt;h3 id=&quot;23-配置项目设置&quot;&gt;2.3 配置项目设置&lt;/h3&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;配置项&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;/td&gt;
&lt;td&gt;&lt;code&gt;cloudflare-imgbed&lt;/code&gt;（或自定义）&lt;/td&gt;
&lt;td&gt;项目标识符&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;生产分支&lt;/td&gt;
&lt;td&gt;&lt;code&gt;main&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;生产环境分支&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;构建命令&lt;/td&gt;
&lt;td&gt;&lt;code&gt;npm install&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;重要：构建命令&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;构建输出目录&lt;/td&gt;
&lt;td&gt;&lt;code&gt;/&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;保持默认&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;img src=&quot;https://pic.seln.cn/file/jc/1767405764256_7f82b467928622c4753977e497321ce6.jpg&quot; alt=&quot;pages-build-config.png&quot; width=70% /&gt;
&lt;h3 id=&quot;24-部署项目&quot;&gt;2.4 部署项目&lt;/h3&gt;
&lt;ol&gt;
&lt;li&gt;点击 “保存并部署”&lt;/li&gt;
&lt;li&gt;等待首次部署完成（约 2-3 分钟）&lt;/li&gt;
&lt;/ol&gt;
&lt;h2 id=&quot;️-第三步配置数据库&quot;&gt;🗄️ 第三步：配置数据库&lt;/h2&gt;
&lt;p&gt;注意：kv和d1只需存在一个，若两项都加可能有意料之外的问题&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;特点&lt;/th&gt;
&lt;th&gt;KV 数据库&lt;/th&gt;
&lt;th&gt;D1 数据库&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;读写性能&lt;/td&gt;
&lt;td&gt;高&lt;/td&gt;
&lt;td&gt;较低&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;免费额度&lt;/td&gt;
&lt;td&gt;少&lt;/td&gt;
&lt;td&gt;多&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&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;h3 id=&quot;创建-kv-命名空间&quot;&gt;创建 KV 命名空间&lt;/h3&gt;
&lt;ol&gt;
&lt;li&gt;在 Cloudflare Dashboard 中选择 “存储和数据库”&lt;/li&gt;
&lt;li&gt;点击 “Workers KV”&lt;/li&gt;
&lt;li&gt;点击 “创建实例”
&lt;img src=&quot;https://pic.seln.cn/file/jc/1767405763347_5bf936ac906141db10818bc533b29a3e.jpg&quot; alt=&quot;image.png&quot; width=75% /&gt;
&lt;/li&gt;
&lt;li&gt;输入命名空间名称：&lt;code&gt;img_url&lt;/code&gt;
&lt;img src=&quot;https://pic.seln.cn/file/jc/1767405766806_b52830873e9a09d36a8ca2f914199c9c.jpg&quot; alt=&quot;image.png&quot; width=75% /&gt;
&lt;/li&gt;
&lt;li&gt;点击 “创建”&lt;/li&gt;
&lt;/ol&gt;
&lt;h4 id=&quot;绑定-kv-到项目&quot;&gt;绑定 KV 到项目&lt;/h4&gt;
&lt;ol&gt;
&lt;li&gt;返回您的 Pages 项目&lt;/li&gt;
&lt;li&gt;选择 “设置” → “绑定”&lt;/li&gt;
&lt;li&gt;点击 “添加” → “KV 命名空间”&lt;/li&gt;
&lt;li&gt;填写绑定信息：
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;变量名称&lt;/strong&gt;：&lt;code&gt;img_url&lt;/code&gt;（必须是这个名称）&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;KV 命名空间&lt;/strong&gt;：选择刚创建的命名空间
&lt;img src=&quot;https://pic.seln.cn/file/jc/1767405766219_87cb7bd1d2c8e89e88f1d8ae93c8c002.jpg&quot; alt=&quot;image.png&quot; width=29% /&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;点击 “保存”&lt;/li&gt;
&lt;/ol&gt;
&lt;ul&gt;
&lt;li&gt;注意：绑定 KV 时，变量名称必须为 &lt;code&gt;img_url&lt;/code&gt;，这是项目预设的变量名，填错会出现无法进入管理界面等情况。&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 id=&quot;创建-d1-数据库&quot;&gt;创建 D1 数据库&lt;/h4&gt;
&lt;p&gt;注意：kv和d1只需存在一个，若两项都加可能有意料之外的问题&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;在 Cloudflare Dashboard 中选择 “存储和数据库”&lt;/li&gt;
&lt;li&gt;点击 “D1 SQL 数据库”&lt;/li&gt;
&lt;li&gt;点击 “创建数据库”
&lt;img src=&quot;https://pic.seln.cn/file/jc/1767405773723_3b8426163b8896face1d52c5c2d71348.jpg&quot; alt=&quot;image.png&quot; width=50% /&gt;
&lt;/li&gt;
&lt;li&gt;输入数据库名称：&lt;code&gt;img_d1&lt;/code&gt;（建议使用此名称）
&lt;img src=&quot;https://pic.seln.cn/file/jc/1767405776835_693e31b07316d9cf8f4f6a78b2d051cb.jpg&quot; alt=&quot;image.png&quot; width=50% /&gt;
&lt;/li&gt;
&lt;li&gt;不选择地区，点击 “创建”&lt;/li&gt;
&lt;/ol&gt;
&lt;h4 id=&quot;初始化-d1-数据库&quot;&gt;初始化 D1 数据库&lt;/h4&gt;
&lt;ol&gt;
&lt;li&gt;创建完成后，点击进入数据库详情页&lt;/li&gt;
&lt;li&gt;选择 “控制台” 选项卡
&lt;img src=&quot;https://pic.seln.cn/file/jc/1767405776104_595ac90bc110f72c84a40f54113bb60f.jpg&quot; alt=&quot;image.png&quot; width=50% /&gt;
&lt;/li&gt;
&lt;li&gt;在 SQL 输入框中逐段粘贴并执行初始化语句
填写示例：
&lt;img src=&quot;https://pic.seln.cn/file/jc/1767405787259_79707cfa9d39e7d23f412dff625d89f6.jpg&quot; alt=&quot;image.png&quot; width=60% /&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;{% folding blue, 太多了，请展开 %}
文件表 - 存储文件元数据&lt;/p&gt;
&lt;pre class=&quot;astro-code astro-code-themes github-light github-dark&quot; style=&quot;background-color:#fff;--shiki-dark-bg:#24292e;color:#24292e;--shiki-dark:#e1e4e8; overflow-x: auto; white-space: pre-wrap; word-wrap: break-word;&quot; tabindex=&quot;0&quot; data-language=&quot;sql&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49;--shiki-dark:#F97583&quot;&gt;CREATE&lt;/span&gt;&lt;span style=&quot;color:#D73A49;--shiki-dark:#F97583&quot;&gt; TABLE&lt;/span&gt;&lt;span style=&quot;color:#6F42C1;--shiki-dark:#B392F0&quot;&gt; IF&lt;/span&gt;&lt;span style=&quot;color:#D73A49;--shiki-dark:#F97583&quot;&gt; NOT&lt;/span&gt;&lt;span style=&quot;color:#D73A49;--shiki-dark:#F97583&quot;&gt; EXISTS&lt;/span&gt;&lt;span style=&quot;color:#24292E;--shiki-dark:#E1E4E8&quot;&gt; files (&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E;--shiki-dark:#E1E4E8&quot;&gt;    id &lt;/span&gt;&lt;span style=&quot;color:#D73A49;--shiki-dark:#F97583&quot;&gt;TEXT&lt;/span&gt;&lt;span style=&quot;color:#D73A49;--shiki-dark:#F97583&quot;&gt; PRIMARY KEY&lt;/span&gt;&lt;span style=&quot;color:#24292E;--shiki-dark:#E1E4E8&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49;--shiki-dark:#F97583&quot;&gt;    value&lt;/span&gt;&lt;span style=&quot;color:#D73A49;--shiki-dark:#F97583&quot;&gt; TEXT&lt;/span&gt;&lt;span style=&quot;color:#24292E;--shiki-dark:#E1E4E8&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E;--shiki-dark:#E1E4E8&quot;&gt;    metadata &lt;/span&gt;&lt;span style=&quot;color:#D73A49;--shiki-dark:#F97583&quot;&gt;TEXT&lt;/span&gt;&lt;span style=&quot;color:#D73A49;--shiki-dark:#F97583&quot;&gt; NOT NULL&lt;/span&gt;&lt;span style=&quot;color:#24292E;--shiki-dark:#E1E4E8&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E;--shiki-dark:#E1E4E8&quot;&gt;    file_name &lt;/span&gt;&lt;span style=&quot;color:#D73A49;--shiki-dark:#F97583&quot;&gt;TEXT&lt;/span&gt;&lt;span style=&quot;color:#24292E;--shiki-dark:#E1E4E8&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E;--shiki-dark:#E1E4E8&quot;&gt;    file_type &lt;/span&gt;&lt;span style=&quot;color:#D73A49;--shiki-dark:#F97583&quot;&gt;TEXT&lt;/span&gt;&lt;span style=&quot;color:#24292E;--shiki-dark:#E1E4E8&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E;--shiki-dark:#E1E4E8&quot;&gt;    file_size &lt;/span&gt;&lt;span style=&quot;color:#D73A49;--shiki-dark:#F97583&quot;&gt;TEXT&lt;/span&gt;&lt;span style=&quot;color:#24292E;--shiki-dark:#E1E4E8&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E;--shiki-dark:#E1E4E8&quot;&gt;    upload_ip &lt;/span&gt;&lt;span style=&quot;color:#D73A49;--shiki-dark:#F97583&quot;&gt;TEXT&lt;/span&gt;&lt;span style=&quot;color:#24292E;--shiki-dark:#E1E4E8&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E;--shiki-dark:#E1E4E8&quot;&gt;    upload_address &lt;/span&gt;&lt;span style=&quot;color:#D73A49;--shiki-dark:#F97583&quot;&gt;TEXT&lt;/span&gt;&lt;span style=&quot;color:#24292E;--shiki-dark:#E1E4E8&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E;--shiki-dark:#E1E4E8&quot;&gt;    list_type &lt;/span&gt;&lt;span style=&quot;color:#D73A49;--shiki-dark:#F97583&quot;&gt;TEXT&lt;/span&gt;&lt;span style=&quot;color:#24292E;--shiki-dark:#E1E4E8&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49;--shiki-dark:#F97583&quot;&gt;    timestamp&lt;/span&gt;&lt;span style=&quot;color:#D73A49;--shiki-dark:#F97583&quot;&gt; INTEGER&lt;/span&gt;&lt;span style=&quot;color:#24292E;--shiki-dark:#E1E4E8&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E;--shiki-dark:#E1E4E8&quot;&gt;    label &lt;/span&gt;&lt;span style=&quot;color:#D73A49;--shiki-dark:#F97583&quot;&gt;TEXT&lt;/span&gt;&lt;span style=&quot;color:#24292E;--shiki-dark:#E1E4E8&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E;--shiki-dark:#E1E4E8&quot;&gt;    directory &lt;/span&gt;&lt;span style=&quot;color:#D73A49;--shiki-dark:#F97583&quot;&gt;TEXT&lt;/span&gt;&lt;span style=&quot;color:#24292E;--shiki-dark:#E1E4E8&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E;--shiki-dark:#E1E4E8&quot;&gt;    channel &lt;/span&gt;&lt;span style=&quot;color:#D73A49;--shiki-dark:#F97583&quot;&gt;TEXT&lt;/span&gt;&lt;span style=&quot;color:#24292E;--shiki-dark:#E1E4E8&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E;--shiki-dark:#E1E4E8&quot;&gt;    channel_name &lt;/span&gt;&lt;span style=&quot;color:#D73A49;--shiki-dark:#F97583&quot;&gt;TEXT&lt;/span&gt;&lt;span style=&quot;color:#24292E;--shiki-dark:#E1E4E8&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E;--shiki-dark:#E1E4E8&quot;&gt;    tg_file_id &lt;/span&gt;&lt;span style=&quot;color:#D73A49;--shiki-dark:#F97583&quot;&gt;TEXT&lt;/span&gt;&lt;span style=&quot;color:#24292E;--shiki-dark:#E1E4E8&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E;--shiki-dark:#E1E4E8&quot;&gt;    tg_chat_id &lt;/span&gt;&lt;span style=&quot;color:#D73A49;--shiki-dark:#F97583&quot;&gt;TEXT&lt;/span&gt;&lt;span style=&quot;color:#24292E;--shiki-dark:#E1E4E8&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E;--shiki-dark:#E1E4E8&quot;&gt;    tg_bot_token &lt;/span&gt;&lt;span style=&quot;color:#D73A49;--shiki-dark:#F97583&quot;&gt;TEXT&lt;/span&gt;&lt;span style=&quot;color:#24292E;--shiki-dark:#E1E4E8&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E;--shiki-dark:#E1E4E8&quot;&gt;    is_chunked &lt;/span&gt;&lt;span style=&quot;color:#D73A49;--shiki-dark:#F97583&quot;&gt;BOOLEAN&lt;/span&gt;&lt;span style=&quot;color:#D73A49;--shiki-dark:#F97583&quot;&gt; DEFAULT&lt;/span&gt;&lt;span style=&quot;color:#24292E;--shiki-dark:#E1E4E8&quot;&gt; FALSE,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E;--shiki-dark:#E1E4E8&quot;&gt;    tags &lt;/span&gt;&lt;span style=&quot;color:#D73A49;--shiki-dark:#F97583&quot;&gt;TEXT&lt;/span&gt;&lt;span style=&quot;color:#24292E;--shiki-dark:#E1E4E8&quot;&gt;, &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E;--shiki-dark:#E1E4E8&quot;&gt;    created_at &lt;/span&gt;&lt;span style=&quot;color:#D73A49;--shiki-dark:#F97583&quot;&gt;DATETIME&lt;/span&gt;&lt;span style=&quot;color:#D73A49;--shiki-dark:#F97583&quot;&gt; DEFAULT&lt;/span&gt;&lt;span style=&quot;color:#24292E;--shiki-dark:#E1E4E8&quot;&gt; CURRENT_TIMESTAMP,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E;--shiki-dark:#E1E4E8&quot;&gt;    updated_at &lt;/span&gt;&lt;span style=&quot;color:#D73A49;--shiki-dark:#F97583&quot;&gt;DATETIME&lt;/span&gt;&lt;span style=&quot;color:#D73A49;--shiki-dark:#F97583&quot;&gt; DEFAULT&lt;/span&gt;&lt;span style=&quot;color:#24292E;--shiki-dark:#E1E4E8&quot;&gt; CURRENT_TIMESTAMP&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E;--shiki-dark:#E1E4E8&quot;&gt;);&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;系统配置表&lt;/p&gt;
&lt;pre class=&quot;astro-code astro-code-themes github-light github-dark&quot; style=&quot;background-color:#fff;--shiki-dark-bg:#24292e;color:#24292e;--shiki-dark:#e1e4e8; overflow-x: auto; white-space: pre-wrap; word-wrap: break-word;&quot; tabindex=&quot;0&quot; data-language=&quot;sql&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49;--shiki-dark:#F97583&quot;&gt;CREATE&lt;/span&gt;&lt;span style=&quot;color:#D73A49;--shiki-dark:#F97583&quot;&gt; TABLE&lt;/span&gt;&lt;span style=&quot;color:#6F42C1;--shiki-dark:#B392F0&quot;&gt; IF&lt;/span&gt;&lt;span style=&quot;color:#D73A49;--shiki-dark:#F97583&quot;&gt; NOT&lt;/span&gt;&lt;span style=&quot;color:#D73A49;--shiki-dark:#F97583&quot;&gt; EXISTS&lt;/span&gt;&lt;span style=&quot;color:#24292E;--shiki-dark:#E1E4E8&quot;&gt; settings (&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49;--shiki-dark:#F97583&quot;&gt;    key&lt;/span&gt;&lt;span style=&quot;color:#D73A49;--shiki-dark:#F97583&quot;&gt; TEXT&lt;/span&gt;&lt;span style=&quot;color:#D73A49;--shiki-dark:#F97583&quot;&gt; PRIMARY KEY&lt;/span&gt;&lt;span style=&quot;color:#24292E;--shiki-dark:#E1E4E8&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49;--shiki-dark:#F97583&quot;&gt;    value&lt;/span&gt;&lt;span style=&quot;color:#D73A49;--shiki-dark:#F97583&quot;&gt; TEXT&lt;/span&gt;&lt;span style=&quot;color:#D73A49;--shiki-dark:#F97583&quot;&gt; NOT NULL&lt;/span&gt;&lt;span style=&quot;color:#24292E;--shiki-dark:#E1E4E8&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E;--shiki-dark:#E1E4E8&quot;&gt;    category &lt;/span&gt;&lt;span style=&quot;color:#D73A49;--shiki-dark:#F97583&quot;&gt;TEXT&lt;/span&gt;&lt;span style=&quot;color:#24292E;--shiki-dark:#E1E4E8&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49;--shiki-dark:#F97583&quot;&gt;    description&lt;/span&gt;&lt;span style=&quot;color:#D73A49;--shiki-dark:#F97583&quot;&gt; TEXT&lt;/span&gt;&lt;span style=&quot;color:#24292E;--shiki-dark:#E1E4E8&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E;--shiki-dark:#E1E4E8&quot;&gt;    created_at &lt;/span&gt;&lt;span style=&quot;color:#D73A49;--shiki-dark:#F97583&quot;&gt;DATETIME&lt;/span&gt;&lt;span style=&quot;color:#D73A49;--shiki-dark:#F97583&quot;&gt; DEFAULT&lt;/span&gt;&lt;span style=&quot;color:#24292E;--shiki-dark:#E1E4E8&quot;&gt; CURRENT_TIMESTAMP,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E;--shiki-dark:#E1E4E8&quot;&gt;    updated_at &lt;/span&gt;&lt;span style=&quot;color:#D73A49;--shiki-dark:#F97583&quot;&gt;DATETIME&lt;/span&gt;&lt;span style=&quot;color:#D73A49;--shiki-dark:#F97583&quot;&gt; DEFAULT&lt;/span&gt;&lt;span style=&quot;color:#24292E;--shiki-dark:#E1E4E8&quot;&gt; CURRENT_TIMESTAMP&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E;--shiki-dark:#E1E4E8&quot;&gt;);&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;索引操作表&lt;/p&gt;
&lt;pre class=&quot;astro-code astro-code-themes github-light github-dark&quot; style=&quot;background-color:#fff;--shiki-dark-bg:#24292e;color:#24292e;--shiki-dark:#e1e4e8; overflow-x: auto; white-space: pre-wrap; word-wrap: break-word;&quot; tabindex=&quot;0&quot; data-language=&quot;sql&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49;--shiki-dark:#F97583&quot;&gt;CREATE&lt;/span&gt;&lt;span style=&quot;color:#D73A49;--shiki-dark:#F97583&quot;&gt; TABLE&lt;/span&gt;&lt;span style=&quot;color:#6F42C1;--shiki-dark:#B392F0&quot;&gt; IF&lt;/span&gt;&lt;span style=&quot;color:#D73A49;--shiki-dark:#F97583&quot;&gt; NOT&lt;/span&gt;&lt;span style=&quot;color:#D73A49;--shiki-dark:#F97583&quot;&gt; EXISTS&lt;/span&gt;&lt;span style=&quot;color:#24292E;--shiki-dark:#E1E4E8&quot;&gt; index_operations (&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E;--shiki-dark:#E1E4E8&quot;&gt;    id &lt;/span&gt;&lt;span style=&quot;color:#D73A49;--shiki-dark:#F97583&quot;&gt;TEXT&lt;/span&gt;&lt;span style=&quot;color:#D73A49;--shiki-dark:#F97583&quot;&gt; PRIMARY KEY&lt;/span&gt;&lt;span style=&quot;color:#24292E;--shiki-dark:#E1E4E8&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49;--shiki-dark:#F97583&quot;&gt;    type&lt;/span&gt;&lt;span style=&quot;color:#D73A49;--shiki-dark:#F97583&quot;&gt; TEXT&lt;/span&gt;&lt;span style=&quot;color:#D73A49;--shiki-dark:#F97583&quot;&gt; NOT NULL&lt;/span&gt;&lt;span style=&quot;color:#24292E;--shiki-dark:#E1E4E8&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49;--shiki-dark:#F97583&quot;&gt;    timestamp&lt;/span&gt;&lt;span style=&quot;color:#D73A49;--shiki-dark:#F97583&quot;&gt; INTEGER&lt;/span&gt;&lt;span style=&quot;color:#D73A49;--shiki-dark:#F97583&quot;&gt; NOT NULL&lt;/span&gt;&lt;span style=&quot;color:#24292E;--shiki-dark:#E1E4E8&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49;--shiki-dark:#F97583&quot;&gt;    data&lt;/span&gt;&lt;span style=&quot;color:#D73A49;--shiki-dark:#F97583&quot;&gt; TEXT&lt;/span&gt;&lt;span style=&quot;color:#D73A49;--shiki-dark:#F97583&quot;&gt; NOT NULL&lt;/span&gt;&lt;span style=&quot;color:#24292E;--shiki-dark:#E1E4E8&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E;--shiki-dark:#E1E4E8&quot;&gt;    processed &lt;/span&gt;&lt;span style=&quot;color:#D73A49;--shiki-dark:#F97583&quot;&gt;BOOLEAN&lt;/span&gt;&lt;span style=&quot;color:#D73A49;--shiki-dark:#F97583&quot;&gt; DEFAULT&lt;/span&gt;&lt;span style=&quot;color:#24292E;--shiki-dark:#E1E4E8&quot;&gt; FALSE,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E;--shiki-dark:#E1E4E8&quot;&gt;    created_at &lt;/span&gt;&lt;span style=&quot;color:#D73A49;--shiki-dark:#F97583&quot;&gt;DATETIME&lt;/span&gt;&lt;span style=&quot;color:#D73A49;--shiki-dark:#F97583&quot;&gt; DEFAULT&lt;/span&gt;&lt;span style=&quot;color:#24292E;--shiki-dark:#E1E4E8&quot;&gt; CURRENT_TIMESTAMP&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E;--shiki-dark:#E1E4E8&quot;&gt;);&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;其他数据表&lt;/p&gt;
&lt;pre class=&quot;astro-code astro-code-themes github-light github-dark&quot; style=&quot;background-color:#fff;--shiki-dark-bg:#24292e;color:#24292e;--shiki-dark:#e1e4e8; overflow-x: auto; white-space: pre-wrap; word-wrap: break-word;&quot; tabindex=&quot;0&quot; data-language=&quot;sql&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49;--shiki-dark:#F97583&quot;&gt;CREATE&lt;/span&gt;&lt;span style=&quot;color:#D73A49;--shiki-dark:#F97583&quot;&gt; TABLE&lt;/span&gt;&lt;span style=&quot;color:#6F42C1;--shiki-dark:#B392F0&quot;&gt; IF&lt;/span&gt;&lt;span style=&quot;color:#D73A49;--shiki-dark:#F97583&quot;&gt; NOT&lt;/span&gt;&lt;span style=&quot;color:#D73A49;--shiki-dark:#F97583&quot;&gt; EXISTS&lt;/span&gt;&lt;span style=&quot;color:#24292E;--shiki-dark:#E1E4E8&quot;&gt; other_data (&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49;--shiki-dark:#F97583&quot;&gt;    key&lt;/span&gt;&lt;span style=&quot;color:#D73A49;--shiki-dark:#F97583&quot;&gt; TEXT&lt;/span&gt;&lt;span style=&quot;color:#D73A49;--shiki-dark:#F97583&quot;&gt; PRIMARY KEY&lt;/span&gt;&lt;span style=&quot;color:#24292E;--shiki-dark:#E1E4E8&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49;--shiki-dark:#F97583&quot;&gt;    value&lt;/span&gt;&lt;span style=&quot;color:#D73A49;--shiki-dark:#F97583&quot;&gt; TEXT&lt;/span&gt;&lt;span style=&quot;color:#D73A49;--shiki-dark:#F97583&quot;&gt; NOT NULL&lt;/span&gt;&lt;span style=&quot;color:#24292E;--shiki-dark:#E1E4E8&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49;--shiki-dark:#F97583&quot;&gt;    type&lt;/span&gt;&lt;span style=&quot;color:#D73A49;--shiki-dark:#F97583&quot;&gt; TEXT&lt;/span&gt;&lt;span style=&quot;color:#24292E;--shiki-dark:#E1E4E8&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49;--shiki-dark:#F97583&quot;&gt;    description&lt;/span&gt;&lt;span style=&quot;color:#D73A49;--shiki-dark:#F97583&quot;&gt; TEXT&lt;/span&gt;&lt;span style=&quot;color:#24292E;--shiki-dark:#E1E4E8&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E;--shiki-dark:#E1E4E8&quot;&gt;    created_at &lt;/span&gt;&lt;span style=&quot;color:#D73A49;--shiki-dark:#F97583&quot;&gt;DATETIME&lt;/span&gt;&lt;span style=&quot;color:#D73A49;--shiki-dark:#F97583&quot;&gt; DEFAULT&lt;/span&gt;&lt;span style=&quot;color:#24292E;--shiki-dark:#E1E4E8&quot;&gt; CURRENT_TIMESTAMP,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E;--shiki-dark:#E1E4E8&quot;&gt;    updated_at &lt;/span&gt;&lt;span style=&quot;color:#D73A49;--shiki-dark:#F97583&quot;&gt;DATETIME&lt;/span&gt;&lt;span style=&quot;color:#D73A49;--shiki-dark:#F97583&quot;&gt; DEFAULT&lt;/span&gt;&lt;span style=&quot;color:#24292E;--shiki-dark:#E1E4E8&quot;&gt; CURRENT_TIMESTAMP&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E;--shiki-dark:#E1E4E8&quot;&gt;);&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;创建索引&lt;/p&gt;
&lt;pre class=&quot;astro-code astro-code-themes github-light github-dark&quot; style=&quot;background-color:#fff;--shiki-dark-bg:#24292e;color:#24292e;--shiki-dark:#e1e4e8; overflow-x: auto; white-space: pre-wrap; word-wrap: break-word;&quot; tabindex=&quot;0&quot; data-language=&quot;sql&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49;--shiki-dark:#F97583&quot;&gt;CREATE&lt;/span&gt;&lt;span style=&quot;color:#D73A49;--shiki-dark:#F97583&quot;&gt; INDEX&lt;/span&gt;&lt;span style=&quot;color:#6F42C1;--shiki-dark:#B392F0&quot;&gt; IF&lt;/span&gt;&lt;span style=&quot;color:#D73A49;--shiki-dark:#F97583&quot;&gt; NOT&lt;/span&gt;&lt;span style=&quot;color:#D73A49;--shiki-dark:#F97583&quot;&gt; EXISTS&lt;/span&gt;&lt;span style=&quot;color:#24292E;--shiki-dark:#E1E4E8&quot;&gt; idx_files_timestamp &lt;/span&gt;&lt;span style=&quot;color:#D73A49;--shiki-dark:#F97583&quot;&gt;ON&lt;/span&gt;&lt;span style=&quot;color:#24292E;--shiki-dark:#E1E4E8&quot;&gt; files(&lt;/span&gt;&lt;span style=&quot;color:#D73A49;--shiki-dark:#F97583&quot;&gt;timestamp&lt;/span&gt;&lt;span style=&quot;color:#D73A49;--shiki-dark:#F97583&quot;&gt; DESC&lt;/span&gt;&lt;span style=&quot;color:#24292E;--shiki-dark:#E1E4E8&quot;&gt;);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49;--shiki-dark:#F97583&quot;&gt;CREATE&lt;/span&gt;&lt;span style=&quot;color:#D73A49;--shiki-dark:#F97583&quot;&gt; INDEX&lt;/span&gt;&lt;span style=&quot;color:#6F42C1;--shiki-dark:#B392F0&quot;&gt; IF&lt;/span&gt;&lt;span style=&quot;color:#D73A49;--shiki-dark:#F97583&quot;&gt; NOT&lt;/span&gt;&lt;span style=&quot;color:#D73A49;--shiki-dark:#F97583&quot;&gt; EXISTS&lt;/span&gt;&lt;span style=&quot;color:#24292E;--shiki-dark:#E1E4E8&quot;&gt; idx_files_directory &lt;/span&gt;&lt;span style=&quot;color:#D73A49;--shiki-dark:#F97583&quot;&gt;ON&lt;/span&gt;&lt;span style=&quot;color:#24292E;--shiki-dark:#E1E4E8&quot;&gt; files(directory);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49;--shiki-dark:#F97583&quot;&gt;CREATE&lt;/span&gt;&lt;span style=&quot;color:#D73A49;--shiki-dark:#F97583&quot;&gt; INDEX&lt;/span&gt;&lt;span style=&quot;color:#6F42C1;--shiki-dark:#B392F0&quot;&gt; IF&lt;/span&gt;&lt;span style=&quot;color:#D73A49;--shiki-dark:#F97583&quot;&gt; NOT&lt;/span&gt;&lt;span style=&quot;color:#D73A49;--shiki-dark:#F97583&quot;&gt; EXISTS&lt;/span&gt;&lt;span style=&quot;color:#24292E;--shiki-dark:#E1E4E8&quot;&gt; idx_files_channel &lt;/span&gt;&lt;span style=&quot;color:#D73A49;--shiki-dark:#F97583&quot;&gt;ON&lt;/span&gt;&lt;span style=&quot;color:#24292E;--shiki-dark:#E1E4E8&quot;&gt; files(channel);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49;--shiki-dark:#F97583&quot;&gt;CREATE&lt;/span&gt;&lt;span style=&quot;color:#D73A49;--shiki-dark:#F97583&quot;&gt; INDEX&lt;/span&gt;&lt;span style=&quot;color:#6F42C1;--shiki-dark:#B392F0&quot;&gt; IF&lt;/span&gt;&lt;span style=&quot;color:#D73A49;--shiki-dark:#F97583&quot;&gt; NOT&lt;/span&gt;&lt;span style=&quot;color:#D73A49;--shiki-dark:#F97583&quot;&gt; EXISTS&lt;/span&gt;&lt;span style=&quot;color:#24292E;--shiki-dark:#E1E4E8&quot;&gt; idx_files_file_type &lt;/span&gt;&lt;span style=&quot;color:#D73A49;--shiki-dark:#F97583&quot;&gt;ON&lt;/span&gt;&lt;span style=&quot;color:#24292E;--shiki-dark:#E1E4E8&quot;&gt; files(file_type);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49;--shiki-dark:#F97583&quot;&gt;CREATE&lt;/span&gt;&lt;span style=&quot;color:#D73A49;--shiki-dark:#F97583&quot;&gt; INDEX&lt;/span&gt;&lt;span style=&quot;color:#6F42C1;--shiki-dark:#B392F0&quot;&gt; IF&lt;/span&gt;&lt;span style=&quot;color:#D73A49;--shiki-dark:#F97583&quot;&gt; NOT&lt;/span&gt;&lt;span style=&quot;color:#D73A49;--shiki-dark:#F97583&quot;&gt; EXISTS&lt;/span&gt;&lt;span style=&quot;color:#24292E;--shiki-dark:#E1E4E8&quot;&gt; idx_files_upload_ip &lt;/span&gt;&lt;span style=&quot;color:#D73A49;--shiki-dark:#F97583&quot;&gt;ON&lt;/span&gt;&lt;span style=&quot;color:#24292E;--shiki-dark:#E1E4E8&quot;&gt; files(upload_ip);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49;--shiki-dark:#F97583&quot;&gt;CREATE&lt;/span&gt;&lt;span style=&quot;color:#D73A49;--shiki-dark:#F97583&quot;&gt; INDEX&lt;/span&gt;&lt;span style=&quot;color:#6F42C1;--shiki-dark:#B392F0&quot;&gt; IF&lt;/span&gt;&lt;span style=&quot;color:#D73A49;--shiki-dark:#F97583&quot;&gt; NOT&lt;/span&gt;&lt;span style=&quot;color:#D73A49;--shiki-dark:#F97583&quot;&gt; EXISTS&lt;/span&gt;&lt;span style=&quot;color:#24292E;--shiki-dark:#E1E4E8&quot;&gt; idx_files_created_at &lt;/span&gt;&lt;span style=&quot;color:#D73A49;--shiki-dark:#F97583&quot;&gt;ON&lt;/span&gt;&lt;span style=&quot;color:#24292E;--shiki-dark:#E1E4E8&quot;&gt; files(created_at &lt;/span&gt;&lt;span style=&quot;color:#D73A49;--shiki-dark:#F97583&quot;&gt;DESC&lt;/span&gt;&lt;span style=&quot;color:#24292E;--shiki-dark:#E1E4E8&quot;&gt;);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49;--shiki-dark:#F97583&quot;&gt;CREATE&lt;/span&gt;&lt;span style=&quot;color:#D73A49;--shiki-dark:#F97583&quot;&gt; INDEX&lt;/span&gt;&lt;span style=&quot;color:#6F42C1;--shiki-dark:#B392F0&quot;&gt; IF&lt;/span&gt;&lt;span style=&quot;color:#D73A49;--shiki-dark:#F97583&quot;&gt; NOT&lt;/span&gt;&lt;span style=&quot;color:#D73A49;--shiki-dark:#F97583&quot;&gt; EXISTS&lt;/span&gt;&lt;span style=&quot;color:#24292E;--shiki-dark:#E1E4E8&quot;&gt; idx_files_tags &lt;/span&gt;&lt;span style=&quot;color:#D73A49;--shiki-dark:#F97583&quot;&gt;ON&lt;/span&gt;&lt;span style=&quot;color:#24292E;--shiki-dark:#E1E4E8&quot;&gt; files(tags);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49;--shiki-dark:#F97583&quot;&gt;CREATE&lt;/span&gt;&lt;span style=&quot;color:#D73A49;--shiki-dark:#F97583&quot;&gt; INDEX&lt;/span&gt;&lt;span style=&quot;color:#6F42C1;--shiki-dark:#B392F0&quot;&gt; IF&lt;/span&gt;&lt;span style=&quot;color:#D73A49;--shiki-dark:#F97583&quot;&gt; NOT&lt;/span&gt;&lt;span style=&quot;color:#D73A49;--shiki-dark:#F97583&quot;&gt; EXISTS&lt;/span&gt;&lt;span style=&quot;color:#24292E;--shiki-dark:#E1E4E8&quot;&gt; idx_settings_category &lt;/span&gt;&lt;span style=&quot;color:#D73A49;--shiki-dark:#F97583&quot;&gt;ON&lt;/span&gt;&lt;span style=&quot;color:#24292E;--shiki-dark:#E1E4E8&quot;&gt; settings(category);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49;--shiki-dark:#F97583&quot;&gt;CREATE&lt;/span&gt;&lt;span style=&quot;color:#D73A49;--shiki-dark:#F97583&quot;&gt; INDEX&lt;/span&gt;&lt;span style=&quot;color:#6F42C1;--shiki-dark:#B392F0&quot;&gt; IF&lt;/span&gt;&lt;span style=&quot;color:#D73A49;--shiki-dark:#F97583&quot;&gt; NOT&lt;/span&gt;&lt;span style=&quot;color:#D73A49;--shiki-dark:#F97583&quot;&gt; EXISTS&lt;/span&gt;&lt;span style=&quot;color:#24292E;--shiki-dark:#E1E4E8&quot;&gt; idx_index_operations_timestamp &lt;/span&gt;&lt;span style=&quot;color:#D73A49;--shiki-dark:#F97583&quot;&gt;ON&lt;/span&gt;&lt;span style=&quot;color:#24292E;--shiki-dark:#E1E4E8&quot;&gt; index_operations(&lt;/span&gt;&lt;span style=&quot;color:#D73A49;--shiki-dark:#F97583&quot;&gt;timestamp&lt;/span&gt;&lt;span style=&quot;color:#24292E;--shiki-dark:#E1E4E8&quot;&gt;);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49;--shiki-dark:#F97583&quot;&gt;CREATE&lt;/span&gt;&lt;span style=&quot;color:#D73A49;--shiki-dark:#F97583&quot;&gt; INDEX&lt;/span&gt;&lt;span style=&quot;color:#6F42C1;--shiki-dark:#B392F0&quot;&gt; IF&lt;/span&gt;&lt;span style=&quot;color:#D73A49;--shiki-dark:#F97583&quot;&gt; NOT&lt;/span&gt;&lt;span style=&quot;color:#D73A49;--shiki-dark:#F97583&quot;&gt; EXISTS&lt;/span&gt;&lt;span style=&quot;color:#24292E;--shiki-dark:#E1E4E8&quot;&gt; idx_index_operations_processed &lt;/span&gt;&lt;span style=&quot;color:#D73A49;--shiki-dark:#F97583&quot;&gt;ON&lt;/span&gt;&lt;span style=&quot;color:#24292E;--shiki-dark:#E1E4E8&quot;&gt; index_operations(processed);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49;--shiki-dark:#F97583&quot;&gt;CREATE&lt;/span&gt;&lt;span style=&quot;color:#D73A49;--shiki-dark:#F97583&quot;&gt; INDEX&lt;/span&gt;&lt;span style=&quot;color:#6F42C1;--shiki-dark:#B392F0&quot;&gt; IF&lt;/span&gt;&lt;span style=&quot;color:#D73A49;--shiki-dark:#F97583&quot;&gt; NOT&lt;/span&gt;&lt;span style=&quot;color:#D73A49;--shiki-dark:#F97583&quot;&gt; EXISTS&lt;/span&gt;&lt;span style=&quot;color:#24292E;--shiki-dark:#E1E4E8&quot;&gt; idx_index_operations_type &lt;/span&gt;&lt;span style=&quot;color:#D73A49;--shiki-dark:#F97583&quot;&gt;ON&lt;/span&gt;&lt;span style=&quot;color:#24292E;--shiki-dark:#E1E4E8&quot;&gt; index_operations(&lt;/span&gt;&lt;span style=&quot;color:#D73A49;--shiki-dark:#F97583&quot;&gt;type&lt;/span&gt;&lt;span style=&quot;color:#24292E;--shiki-dark:#E1E4E8&quot;&gt;);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49;--shiki-dark:#F97583&quot;&gt;CREATE&lt;/span&gt;&lt;span style=&quot;color:#D73A49;--shiki-dark:#F97583&quot;&gt; INDEX&lt;/span&gt;&lt;span style=&quot;color:#6F42C1;--shiki-dark:#B392F0&quot;&gt; IF&lt;/span&gt;&lt;span style=&quot;color:#D73A49;--shiki-dark:#F97583&quot;&gt; NOT&lt;/span&gt;&lt;span style=&quot;color:#D73A49;--shiki-dark:#F97583&quot;&gt; EXISTS&lt;/span&gt;&lt;span style=&quot;color:#24292E;--shiki-dark:#E1E4E8&quot;&gt; idx_other_data_type &lt;/span&gt;&lt;span style=&quot;color:#D73A49;--shiki-dark:#F97583&quot;&gt;ON&lt;/span&gt;&lt;span style=&quot;color:#24292E;--shiki-dark:#E1E4E8&quot;&gt; other_data(&lt;/span&gt;&lt;span style=&quot;color:#D73A49;--shiki-dark:#F97583&quot;&gt;type&lt;/span&gt;&lt;span style=&quot;color:#24292E;--shiki-dark:#E1E4E8&quot;&gt;);&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;创建触发器&lt;/p&gt;
&lt;pre class=&quot;astro-code astro-code-themes github-light github-dark&quot; style=&quot;background-color:#fff;--shiki-dark-bg:#24292e;color:#24292e;--shiki-dark:#e1e4e8; overflow-x: auto; white-space: pre-wrap; word-wrap: break-word;&quot; tabindex=&quot;0&quot; data-language=&quot;sql&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49;--shiki-dark:#F97583&quot;&gt;CREATE&lt;/span&gt;&lt;span style=&quot;color:#D73A49;--shiki-dark:#F97583&quot;&gt; TRIGGER&lt;/span&gt;&lt;span style=&quot;color:#6F42C1;--shiki-dark:#B392F0&quot;&gt; IF&lt;/span&gt;&lt;span style=&quot;color:#D73A49;--shiki-dark:#F97583&quot;&gt; NOT&lt;/span&gt;&lt;span style=&quot;color:#D73A49;--shiki-dark:#F97583&quot;&gt; EXISTS&lt;/span&gt;&lt;span style=&quot;color:#24292E;--shiki-dark:#E1E4E8&quot;&gt; update_files_updated_at &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49;--shiki-dark:#F97583&quot;&gt;    AFTER&lt;/span&gt;&lt;span style=&quot;color:#D73A49;--shiki-dark:#F97583&quot;&gt; UPDATE&lt;/span&gt;&lt;span style=&quot;color:#D73A49;--shiki-dark:#F97583&quot;&gt; ON&lt;/span&gt;&lt;span style=&quot;color:#24292E;--shiki-dark:#E1E4E8&quot;&gt; files&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49;--shiki-dark:#F97583&quot;&gt;    BEGIN&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49;--shiki-dark:#F97583&quot;&gt;        UPDATE&lt;/span&gt;&lt;span style=&quot;color:#24292E;--shiki-dark:#E1E4E8&quot;&gt; files &lt;/span&gt;&lt;span style=&quot;color:#D73A49;--shiki-dark:#F97583&quot;&gt;SET&lt;/span&gt;&lt;span style=&quot;color:#24292E;--shiki-dark:#E1E4E8&quot;&gt; updated_at &lt;/span&gt;&lt;span style=&quot;color:#D73A49;--shiki-dark:#F97583&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#24292E;--shiki-dark:#E1E4E8&quot;&gt; CURRENT_TIMESTAMP &lt;/span&gt;&lt;span style=&quot;color:#D73A49;--shiki-dark:#F97583&quot;&gt;WHERE&lt;/span&gt;&lt;span style=&quot;color:#24292E;--shiki-dark:#E1E4E8&quot;&gt; id &lt;/span&gt;&lt;span style=&quot;color:#D73A49;--shiki-dark:#F97583&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#005CC5;--shiki-dark:#79B8FF&quot;&gt; NEW&lt;/span&gt;&lt;span style=&quot;color:#24292E;--shiki-dark:#E1E4E8&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color:#005CC5;--shiki-dark:#79B8FF&quot;&gt;id&lt;/span&gt;&lt;span style=&quot;color:#24292E;--shiki-dark:#E1E4E8&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49;--shiki-dark:#F97583&quot;&gt;    END&lt;/span&gt;&lt;span style=&quot;color:#24292E;--shiki-dark:#E1E4E8&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49;--shiki-dark:#F97583&quot;&gt;CREATE&lt;/span&gt;&lt;span style=&quot;color:#D73A49;--shiki-dark:#F97583&quot;&gt; TRIGGER&lt;/span&gt;&lt;span style=&quot;color:#6F42C1;--shiki-dark:#B392F0&quot;&gt; IF&lt;/span&gt;&lt;span style=&quot;color:#D73A49;--shiki-dark:#F97583&quot;&gt; NOT&lt;/span&gt;&lt;span style=&quot;color:#D73A49;--shiki-dark:#F97583&quot;&gt; EXISTS&lt;/span&gt;&lt;span style=&quot;color:#24292E;--shiki-dark:#E1E4E8&quot;&gt; update_settings_updated_at &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49;--shiki-dark:#F97583&quot;&gt;    AFTER&lt;/span&gt;&lt;span style=&quot;color:#D73A49;--shiki-dark:#F97583&quot;&gt; UPDATE&lt;/span&gt;&lt;span style=&quot;color:#D73A49;--shiki-dark:#F97583&quot;&gt; ON&lt;/span&gt;&lt;span style=&quot;color:#24292E;--shiki-dark:#E1E4E8&quot;&gt; settings&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49;--shiki-dark:#F97583&quot;&gt;    BEGIN&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49;--shiki-dark:#F97583&quot;&gt;        UPDATE&lt;/span&gt;&lt;span style=&quot;color:#24292E;--shiki-dark:#E1E4E8&quot;&gt; settings &lt;/span&gt;&lt;span style=&quot;color:#D73A49;--shiki-dark:#F97583&quot;&gt;SET&lt;/span&gt;&lt;span style=&quot;color:#24292E;--shiki-dark:#E1E4E8&quot;&gt; updated_at &lt;/span&gt;&lt;span style=&quot;color:#D73A49;--shiki-dark:#F97583&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#24292E;--shiki-dark:#E1E4E8&quot;&gt; CURRENT_TIMESTAMP &lt;/span&gt;&lt;span style=&quot;color:#D73A49;--shiki-dark:#F97583&quot;&gt;WHERE&lt;/span&gt;&lt;span style=&quot;color:#D73A49;--shiki-dark:#F97583&quot;&gt; key&lt;/span&gt;&lt;span style=&quot;color:#D73A49;--shiki-dark:#F97583&quot;&gt; =&lt;/span&gt;&lt;span style=&quot;color:#005CC5;--shiki-dark:#79B8FF&quot;&gt; NEW&lt;/span&gt;&lt;span style=&quot;color:#24292E;--shiki-dark:#E1E4E8&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color:#005CC5;--shiki-dark:#79B8FF&quot;&gt;key&lt;/span&gt;&lt;span style=&quot;color:#24292E;--shiki-dark:#E1E4E8&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49;--shiki-dark:#F97583&quot;&gt;    END&lt;/span&gt;&lt;span style=&quot;color:#24292E;--shiki-dark:#E1E4E8&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49;--shiki-dark:#F97583&quot;&gt;CREATE&lt;/span&gt;&lt;span style=&quot;color:#D73A49;--shiki-dark:#F97583&quot;&gt; TRIGGER&lt;/span&gt;&lt;span style=&quot;color:#6F42C1;--shiki-dark:#B392F0&quot;&gt; IF&lt;/span&gt;&lt;span style=&quot;color:#D73A49;--shiki-dark:#F97583&quot;&gt; NOT&lt;/span&gt;&lt;span style=&quot;color:#D73A49;--shiki-dark:#F97583&quot;&gt; EXISTS&lt;/span&gt;&lt;span style=&quot;color:#24292E;--shiki-dark:#E1E4E8&quot;&gt; update_index_metadata_updated_at &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49;--shiki-dark:#F97583&quot;&gt;    AFTER&lt;/span&gt;&lt;span style=&quot;color:#D73A49;--shiki-dark:#F97583&quot;&gt; UPDATE&lt;/span&gt;&lt;span style=&quot;color:#D73A49;--shiki-dark:#F97583&quot;&gt; ON&lt;/span&gt;&lt;span style=&quot;color:#24292E;--shiki-dark:#E1E4E8&quot;&gt; index_metadata&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49;--shiki-dark:#F97583&quot;&gt;    BEGIN&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49;--shiki-dark:#F97583&quot;&gt;        UPDATE&lt;/span&gt;&lt;span style=&quot;color:#24292E;--shiki-dark:#E1E4E8&quot;&gt; index_metadata &lt;/span&gt;&lt;span style=&quot;color:#D73A49;--shiki-dark:#F97583&quot;&gt;SET&lt;/span&gt;&lt;span style=&quot;color:#24292E;--shiki-dark:#E1E4E8&quot;&gt; updated_at &lt;/span&gt;&lt;span style=&quot;color:#D73A49;--shiki-dark:#F97583&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#24292E;--shiki-dark:#E1E4E8&quot;&gt; CURRENT_TIMESTAMP &lt;/span&gt;&lt;span style=&quot;color:#D73A49;--shiki-dark:#F97583&quot;&gt;WHERE&lt;/span&gt;&lt;span style=&quot;color:#D73A49;--shiki-dark:#F97583&quot;&gt; key&lt;/span&gt;&lt;span style=&quot;color:#D73A49;--shiki-dark:#F97583&quot;&gt; =&lt;/span&gt;&lt;span style=&quot;color:#005CC5;--shiki-dark:#79B8FF&quot;&gt; NEW&lt;/span&gt;&lt;span style=&quot;color:#24292E;--shiki-dark:#E1E4E8&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color:#005CC5;--shiki-dark:#79B8FF&quot;&gt;key&lt;/span&gt;&lt;span style=&quot;color:#24292E;--shiki-dark:#E1E4E8&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49;--shiki-dark:#F97583&quot;&gt;    END&lt;/span&gt;&lt;span style=&quot;color:#24292E;--shiki-dark:#E1E4E8&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49;--shiki-dark:#F97583&quot;&gt;CREATE&lt;/span&gt;&lt;span style=&quot;color:#D73A49;--shiki-dark:#F97583&quot;&gt; TRIGGER&lt;/span&gt;&lt;span style=&quot;color:#6F42C1;--shiki-dark:#B392F0&quot;&gt; IF&lt;/span&gt;&lt;span style=&quot;color:#D73A49;--shiki-dark:#F97583&quot;&gt; NOT&lt;/span&gt;&lt;span style=&quot;color:#D73A49;--shiki-dark:#F97583&quot;&gt; EXISTS&lt;/span&gt;&lt;span style=&quot;color:#24292E;--shiki-dark:#E1E4E8&quot;&gt; update_other_data_updated_at &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49;--shiki-dark:#F97583&quot;&gt;    AFTER&lt;/span&gt;&lt;span style=&quot;color:#D73A49;--shiki-dark:#F97583&quot;&gt; UPDATE&lt;/span&gt;&lt;span style=&quot;color:#D73A49;--shiki-dark:#F97583&quot;&gt; ON&lt;/span&gt;&lt;span style=&quot;color:#24292E;--shiki-dark:#E1E4E8&quot;&gt; other_data&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49;--shiki-dark:#F97583&quot;&gt;    BEGIN&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49;--shiki-dark:#F97583&quot;&gt;        UPDATE&lt;/span&gt;&lt;span style=&quot;color:#24292E;--shiki-dark:#E1E4E8&quot;&gt; other_data &lt;/span&gt;&lt;span style=&quot;color:#D73A49;--shiki-dark:#F97583&quot;&gt;SET&lt;/span&gt;&lt;span style=&quot;color:#24292E;--shiki-dark:#E1E4E8&quot;&gt; updated_at &lt;/span&gt;&lt;span style=&quot;color:#D73A49;--shiki-dark:#F97583&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#24292E;--shiki-dark:#E1E4E8&quot;&gt; CURRENT_TIMESTAMP &lt;/span&gt;&lt;span style=&quot;color:#D73A49;--shiki-dark:#F97583&quot;&gt;WHERE&lt;/span&gt;&lt;span style=&quot;color:#D73A49;--shiki-dark:#F97583&quot;&gt; key&lt;/span&gt;&lt;span style=&quot;color:#D73A49;--shiki-dark:#F97583&quot;&gt; =&lt;/span&gt;&lt;span style=&quot;color:#005CC5;--shiki-dark:#79B8FF&quot;&gt; NEW&lt;/span&gt;&lt;span style=&quot;color:#24292E;--shiki-dark:#E1E4E8&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color:#005CC5;--shiki-dark:#79B8FF&quot;&gt;key&lt;/span&gt;&lt;span style=&quot;color:#24292E;--shiki-dark:#E1E4E8&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49;--shiki-dark:#F97583&quot;&gt;    END&lt;/span&gt;&lt;span style=&quot;color:#24292E;--shiki-dark:#E1E4E8&quot;&gt;;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;插入初始的索引元数据&lt;/p&gt;
&lt;pre class=&quot;astro-code astro-code-themes github-light github-dark&quot; style=&quot;background-color:#fff;--shiki-dark-bg:#24292e;color:#24292e;--shiki-dark:#e1e4e8; overflow-x: auto; white-space: pre-wrap; word-wrap: break-word;&quot; tabindex=&quot;0&quot; data-language=&quot;sql&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49;--shiki-dark:#F97583&quot;&gt;INSERT&lt;/span&gt;&lt;span style=&quot;color:#D73A49;--shiki-dark:#F97583&quot;&gt; OR&lt;/span&gt;&lt;span style=&quot;color:#D73A49;--shiki-dark:#F97583&quot;&gt; REPLACE&lt;/span&gt;&lt;span style=&quot;color:#D73A49;--shiki-dark:#F97583&quot;&gt; INTO&lt;/span&gt;&lt;span style=&quot;color:#24292E;--shiki-dark:#E1E4E8&quot;&gt; index_metadata (&lt;/span&gt;&lt;span style=&quot;color:#D73A49;--shiki-dark:#F97583&quot;&gt;key&lt;/span&gt;&lt;span style=&quot;color:#24292E;--shiki-dark:#E1E4E8&quot;&gt;, last_updated, total_count, last_operation_id)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49;--shiki-dark:#F97583&quot;&gt;VALUES&lt;/span&gt;&lt;span style=&quot;color:#24292E;--shiki-dark:#E1E4E8&quot;&gt; (&lt;/span&gt;&lt;span style=&quot;color:#032F62;--shiki-dark:#9ECBFF&quot;&gt;&apos;main_index&apos;&lt;/span&gt;&lt;span style=&quot;color:#24292E;--shiki-dark:#E1E4E8&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#005CC5;--shiki-dark:#79B8FF&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;color:#24292E;--shiki-dark:#E1E4E8&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#005CC5;--shiki-dark:#79B8FF&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;color:#24292E;--shiki-dark:#E1E4E8&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#D73A49;--shiki-dark:#F97583&quot;&gt;NULL&lt;/span&gt;&lt;span style=&quot;color:#24292E;--shiki-dark:#E1E4E8&quot;&gt;);&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;初始化完成
{% endfolding %}
4. 点击 “执行”&lt;/p&gt;
&lt;h4 id=&quot;绑定-d1-到项目&quot;&gt;绑定 D1 到项目&lt;/h4&gt;
&lt;ol&gt;
&lt;li&gt;返回您的 Pages 项目&lt;/li&gt;
&lt;li&gt;选择 “设置” → “绑定”&lt;/li&gt;
&lt;li&gt;点击 “添加” → “D1 数据库”&lt;/li&gt;
&lt;li&gt;填写绑定信息：
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;变量名称&lt;/strong&gt;：&lt;code&gt;img_d1&lt;/code&gt;（必须是这个名称）&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;D1 数据库&lt;/strong&gt;：选择刚创建的数据库&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;点击 “保存”
&lt;img src=&quot;https://pic.seln.cn/file/jc/1767405783325_83bcb6b3ce244362bad9d8ff8e314322.jpg&quot; alt=&quot;image.png&quot; width=60% /&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;h2 id=&quot;-第四步重新部署&quot;&gt;🔄 第四步：重新部署&lt;/h2&gt;
&lt;p&gt;绑定数据库后需要重新部署以生效：&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;进入项目的 “部署” 页面&lt;/li&gt;
&lt;li&gt;找到最新的部署记录&lt;/li&gt;
&lt;li&gt;点击右侧的 “…” 菜单&lt;/li&gt;
&lt;li&gt;选择 “重试部署”&lt;/li&gt;
&lt;li&gt;等待部署完成&lt;/li&gt;
&lt;/ol&gt;
&lt;img src=&quot;https://pic.seln.cn/file/jc/1767405803094_dac7ad1c9467d8ffe261221d912de62e.jpg&quot; alt=&quot;redeploy.png&quot; width=60% /&gt;
&lt;h2 id=&quot;第五步绑定域名&quot;&gt;第五步：绑定域名&lt;/h2&gt;
&lt;p&gt;为你的项目配置一个域名，如使用cdn可不用配置&lt;/p&gt;
&lt;h1 id=&quot;加入eo-cdn&quot;&gt;加入EO CDN&lt;/h1&gt;
&lt;p&gt;Cloudflare本身的速度太慢，域名备案后套上CDN会更快，如没有备案域名忽略这步
ping值：
&lt;img src=&quot;https://pic.seln.cn/file/jc/1767405794925_e5fa455f55911eb601a3812f9fa37f59.jpg&quot; alt=&quot;image.png&quot; width=55% /&gt;&lt;/p&gt;
&lt;h2 id=&quot;操作&quot;&gt;操作&lt;/h2&gt;
&lt;p&gt;打开&lt;a href=&quot;https://console.cloud.tencent.com/edgeone/zones&quot;&gt;EdgeOne - 控制台&lt;/a&gt;并登陆，添加域名
&lt;img src=&quot;https://pic.seln.cn/file/jc/1767405802957_911cb3bf15f6c179495a0f9515c7baf2.jpg&quot; alt=&quot;image.png&quot; width=65% /&gt;
点击域名管理➡️添加域名
&lt;img src=&quot;https://pic.seln.cn/file/jc/1767406283508_297c2427c54a8d0955e32925b80e17ce.jpg&quot; alt=&quot;image.png&quot; width=60% /&gt;
Cloudflare page域名就是这个第一个域，直接填进去保存就行
&lt;img src=&quot;https://pic.seln.cn/file/jc/1767406300751_3a8093f101713711c3dfaefaaeec7dc8.jpg&quot; alt=&quot;image.png&quot; width=55% /&gt;&lt;/p&gt;
&lt;h1 id=&quot;配置存储渠道&quot;&gt;配置存储渠道&lt;/h1&gt;
&lt;p&gt;部署完成后访问您的域名，进入管理后台配置存储渠道。&lt;/p&gt;
&lt;h3 id=&quot;访问管理后台&quot;&gt;访问管理后台&lt;/h3&gt;
&lt;p&gt;访问 &lt;code&gt;https://你的域名/&lt;/code&gt;
&lt;img src=&quot;https://pic.seln.cn/file/jc/1767405808620_89d1ba37d05ebe91afc4758f9eb5ce4f.jpg&quot; alt=&quot;image.png&quot; width=46% /&gt;&lt;/p&gt;
&lt;h3 id=&quot;配置-telegram-渠道&quot;&gt;配置 Telegram 渠道&lt;/h3&gt;
&lt;h4 id=&quot;21-获取-tg_bot_token&quot;&gt;2.1 获取 TG_BOT_TOKEN&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;在 Telegram 中搜索 &lt;a href=&quot;https://t.me/BotFather&quot;&gt;@BotFather&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;发送 &lt;code&gt;/newbot&lt;/code&gt; 命令&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;先输入你要为机器人准备的英文名字&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;再输入机器人id，必须_bot结尾&lt;/p&gt;
&lt;img src=&quot;https://pic.seln.cn/file/jc/1767405812934_e2a28ae9928ca0dbcba808b19489a9eb.jpg&quot; alt=&quot;Screenshot_20251228_182807.jpg&quot; width=30% /&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;获得 Bot Token（格式：&lt;code&gt;123456789:ABCdefGHIjklMNOpqrsTUVwxyz&lt;/code&gt;）&lt;/p&gt;
&lt;img src=&quot;https://pic.seln.cn/file/jc/1767405819099_2a7e2df5443f92fc8caa0d7a9efdec49.jpg&quot; alt=&quot;telegram-bot-creation.png&quot; width=35% /&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;点击上图中被打码的链接，随便发点文字把bot添加到联系人&lt;/p&gt;
&lt;h4 id=&quot;22-获取-tg_chat_id&quot;&gt;2.2 获取 TG_CHAT_ID&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;创建一个新的 Telegram 频道（Channel）
&lt;img src=&quot;https://pic.seln.cn/file/jc/1767405814464_d2b1f7eb16b556b8000fc87fd07527fc.jpg&quot; alt=&quot;76ccb5f85cec445cc6a7aa030718f01f.jpg&quot; width=35% /&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;img src=&quot;https://pic.seln.cn/file/jc/1767405820685_66916ed62a02446d836b35fd54b61f33.jpg&quot; alt=&quot;2397c3b45c290a65b1a68918a5dd14a3.jpg&quot; width=35% /&gt;
点击右下角的笔➡️新建频道➡️随便填一个名字然后点右上角的确定➡️更改为私密频道
- 将创建的 Bot 添加为频道管理员
- 给予 Bot 消息管理的权限
点击创建的频道名➡️点击管理员（如是英文就是第二项）➡️点击添加管理员，搜索bot的名字将他拉进来，给bot所有权限
&lt;img src=&quot;https://cfbed.sanyue.de/images/deployment/telegram-channel-management-2.png&quot; alt=&quot;2397c3b45c290a65b1a68918a5dd14a3.jpg&quot; width=35% /&gt;
&lt;ul&gt;
&lt;li&gt;在频道中发送一条测试消息&lt;/li&gt;
&lt;li&gt;向 &lt;a href=&quot;https://t.me/VersaToolsBot&quot;&gt;@VersaToolsBot&lt;/a&gt; 转发这条消息&lt;/li&gt;
&lt;li&gt;获得频道 ID（示例：&lt;code&gt;-1001234567890&lt;/code&gt;）&lt;/li&gt;
&lt;/ul&gt;
&lt;img src=&quot;https://cfbed.sanyue.de/images/deployment/telegram-channel-id.png&quot; alt=&quot;2397c3b45c290a65b1a68918a5dd14a3.jpg&quot; width=30% /&gt;
&lt;h4 id=&quot;23-配置-telegram&quot;&gt;2.3 配置 Telegram&lt;/h4&gt;
&lt;ol&gt;
&lt;li&gt;左上角菜单栏进入 “系统设置” → “上传设置”&lt;/li&gt;
&lt;li&gt;找到 “Telegram 渠道配置”&lt;/li&gt;
&lt;li&gt;点击 “添加渠道”&lt;/li&gt;
&lt;li&gt;填入准备好的 Token 和 Chat ID：
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;渠道名称&lt;/strong&gt;：自定义名称（如：主渠道）&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Bot Token&lt;/strong&gt;：从 @BotFather 获得的 Token&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Chat ID&lt;/strong&gt;：频道 ID（有&lt;code&gt;-&lt;/code&gt;号时需要保留）&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;启用状态&lt;/strong&gt;：开启&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;点击 “保存设置”&lt;/li&gt;
&lt;/ol&gt;
&lt;img src=&quot;https://pic.seln.cn/file/jc/1767406498921_11541ba1fb80934d9f2300338eccbee0.jpg&quot; alt=&quot;image.png&quot; width=31% /&gt;
&lt;h3 id=&quot;配置-r2-渠道&quot;&gt;配置 R2 渠道&lt;/h3&gt;
&lt;p&gt;服务器部署时默认添加了 Cloudflare R2 存储方式，以下步骤仅针对 Cloudflare 部署方式：&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;在项目设置中绑定 R2 存储桶：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;选择 “设置” → “绑定”&lt;/li&gt;
&lt;li&gt;添加 “R2 存储桶”&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;变量名称&lt;/strong&gt;：&lt;code&gt;img_r2&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;R2 存储桶&lt;/strong&gt;：选择已创建的存储桶
r2的教程看这边：&lt;a href=&quot;https://hexo.seln.cn/posts/1f8d2eb1/&quot;&gt;Cloudflare的r2存储桶使用 | mccsjs&lt;/a&gt;
&lt;img src=&quot;https://pic.seln.cn/file/jc/1767405783325_83bcb6b3ce244362bad9d8ff8e314322.jpg&quot; alt=&quot;image.png&quot; width=60% /&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;在管理后台配置：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;进入 “系统设置” → “上传设置”&lt;/li&gt;
&lt;li&gt;配置 R2 渠道参数&lt;/li&gt;
&lt;li&gt;如需图像审查，填入 R2 公开访问链接
提示&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;请注意Cloudflare R2 的免费额度限制，超过后可能会产生费用。&lt;img src=&quot;https://cfbed.sanyue.de/images/deployment/r2-free-tier.png&quot; alt=&quot;注意&quot;&gt;&lt;/p&gt;
&lt;h1 id=&quot;-安全设置&quot;&gt;🔒 安全设置&lt;/h1&gt;
&lt;p&gt;安全相关设置，在管理后台的 “系统设置” → “安全设置” 中配置&lt;/p&gt;
&lt;h3 id=&quot;认证管理&quot;&gt;认证管理&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;用户端认证：用于 Web 端用户登录和 API 认证&lt;/li&gt;
&lt;li&gt;管理端认证： 管理员用户名和密码，用于访问管理后台&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&quot;上传管理&quot;&gt;上传管理&lt;/h3&gt;
&lt;h4 id=&quot;图像审查&quot;&gt;图像审查&lt;/h4&gt;
&lt;p&gt;审查渠道支持 &lt;code&gt;nsfwjs&lt;/code&gt; 和 &lt;code&gt;moderatecontent.com&lt;/code&gt;，可根据如下步骤自行配置。&lt;/p&gt;
&lt;h5 id=&quot;moderatecontentcom&quot;&gt;moderatecontent.com&lt;/h5&gt;
&lt;ul&gt;
&lt;li&gt;访问 &lt;a href=&quot;https://moderatecontent.com/&quot;&gt;ModerateContent&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;注册并获取免费 API Key（目前已不再支持免费注册）&lt;/li&gt;
&lt;li&gt;在管理后台 “系统设置” → “安全设置” 中填入 API Key&lt;/li&gt;
&lt;/ul&gt;
&lt;h1 id=&quot;安全设置&quot;&gt;安全设置&lt;/h1&gt;
&lt;p&gt;点开菜单➡️系统设置➡️安全设置➡️管理端认证
添加用户名和密码，给自己设置一个管理员账户&lt;/p&gt;
&lt;h1 id=&quot;-网页设置&quot;&gt;🌐 网页设置&lt;/h1&gt;
&lt;p&gt;前端网页相关设置，在管理后台的 “系统设置” → “网页设置” 中配置&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;字段名&lt;/th&gt;
&lt;th&gt;用途&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;siteTitle&lt;/td&gt;
&lt;td&gt;网站标题&lt;/td&gt;
&lt;td&gt;字符串&lt;/td&gt;
&lt;td&gt;只支持&lt;code&gt;字符串&lt;/code&gt;类型，设置为你自定义的网站标题&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;siteIcon&lt;/td&gt;
&lt;td&gt;网站图标&lt;/td&gt;
&lt;td&gt;字符串&lt;/td&gt;
&lt;td&gt;只支持&lt;code&gt;字符串&lt;/code&gt;类型，设置为你自定义的网站图标链接&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;ownerName&lt;/td&gt;
&lt;td&gt;图床名称&lt;/td&gt;
&lt;td&gt;字符串&lt;/td&gt;
&lt;td&gt;只支持&lt;code&gt;字符串&lt;/code&gt;类型，设置为你自定义的图床名称（默认为&lt;code&gt;Sanyue&lt;/code&gt;）&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;logoUrl&lt;/td&gt;
&lt;td&gt;图床Logo&lt;/td&gt;
&lt;td&gt;字符串&lt;/td&gt;
&lt;td&gt;只支持&lt;code&gt;字符串&lt;/code&gt;类型，设置为你自定义的图床Logo链接&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;bkInterval&lt;/td&gt;
&lt;td&gt;背景切换间隔&lt;/td&gt;
&lt;td&gt;正整数&lt;/td&gt;
&lt;td&gt;设置为背景图的轮播时间，默认&lt;code&gt;3000&lt;/code&gt;，单位&lt;code&gt;ms&lt;/code&gt;。  &lt;br&gt;例如你希望10s切换一次，设置为&lt;code&gt;10000&lt;/code&gt;即可。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;bkOpacity&lt;/td&gt;
&lt;td&gt;背景图透明度&lt;/td&gt;
&lt;td&gt;(0,1]的浮点数&lt;/td&gt;
&lt;td&gt;展示的背景图透明度，默认为&lt;code&gt;1&lt;/code&gt;。  &lt;br&gt;如果你觉得显示效果不佳，可以自定义，如&lt;code&gt;0.8&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;urlPrefix&lt;/td&gt;
&lt;td&gt;默认 URL 前缀&lt;/td&gt;
&lt;td&gt;字符串&lt;/td&gt;
&lt;td&gt;只支持&lt;code&gt;字符串&lt;/code&gt;类型，设置为自定义的全局默认链接前缀，该前缀会覆盖原始默认前缀，但不会覆盖用户自定义的链接前缀&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;announcement&lt;/td&gt;
&lt;td&gt;公告&lt;/td&gt;
&lt;td&gt;字符串&lt;/td&gt;
&lt;td&gt;只支持&lt;code&gt;字符串&lt;/code&gt;类型，可以为 HTML 格式，设置为你自定义的公告内容（如有）&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;defaultUploadChannel&lt;/td&gt;
&lt;td&gt;默认上传渠道&lt;/td&gt;
&lt;td&gt;字符串&lt;/td&gt;
&lt;td&gt;只支持&lt;code&gt;字符串&lt;/code&gt;类型，设置为你自定义的默认上传渠道，支持&lt;code&gt;telegram&lt;/code&gt;（Telegram 渠道）、&lt;code&gt;cfr2&lt;/code&gt;（Cloudflare R2）和&lt;code&gt;s3&lt;/code&gt;（S3 渠道）&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;defaultUploadNameType&lt;/td&gt;
&lt;td&gt;默认命名方式&lt;/td&gt;
&lt;td&gt;字符串&lt;/td&gt;
&lt;td&gt;只支持&lt;code&gt;字符串&lt;/code&gt;类型，设置为你自定义的默认上传文件命名方式，支持&lt;code&gt;default&lt;/code&gt;（默认）、&lt;code&gt;index&lt;/code&gt;（仅前缀）、&lt;code&gt;original&lt;/code&gt;（仅原名）和&lt;code&gt;short&lt;/code&gt;（短链接）&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;loginBkImg&lt;/td&gt;
&lt;td&gt;登录页背景图&lt;/td&gt;
&lt;td&gt;列表/字符串&lt;/td&gt;
&lt;td&gt;1、当字段类型为&lt;code&gt;列表&lt;/code&gt;时，列表中元素为需要添加到轮播列表中的图片链接（列表中只有一张图时即为固定背景），形如&lt;code&gt;[&quot;1.jpg&quot;,&quot;2.jpg&quot;]&lt;/code&gt;  &lt;br&gt;2、当字段类型为&lt;code&gt;字符串&lt;/code&gt;时，目前&lt;strong&gt;仅支持&lt;/strong&gt;字符串值为&lt;code&gt;bing&lt;/code&gt;，设置为该值时启用bing随机图片轮播模式。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;uploadBkImg&lt;/td&gt;
&lt;td&gt;上传页背景图&lt;/td&gt;
&lt;td&gt;列表/字符串&lt;/td&gt;
&lt;td&gt;同loginBkImg&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;footerLink&lt;/td&gt;
&lt;td&gt;页脚传送门链接&lt;/td&gt;
&lt;td&gt;字符串&lt;/td&gt;
&lt;td&gt;只支持&lt;code&gt;字符串&lt;/code&gt;类型，设置为你自定义的传送地址（如个人博客链接）&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;disableFooter&lt;/td&gt;
&lt;td&gt;隐藏页脚&lt;/td&gt;
&lt;td&gt;boolean&lt;/td&gt;
&lt;td&gt;支持&lt;code&gt;boolean&lt;/code&gt;类型，设为&lt;code&gt;true&lt;/code&gt;时禁用页脚，默认&lt;code&gt;false&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;adminLoginBkImg&lt;/td&gt;
&lt;td&gt;管理页背景图&lt;/td&gt;
&lt;td&gt;列表/字符串&lt;/td&gt;
&lt;td&gt;同loginBkImg&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h1 id=&quot;部署完成&quot;&gt;部署完成&lt;/h1&gt;
&lt;p&gt;结束，访问域名开始使用吧&lt;/p&gt;
</content:encoded><category>React</category><category>Next.js</category></item><item><title>341413131</title><link>https://blog.mccsjs.cn/posts/d785f6ab</link><guid isPermaLink="true">https://blog.mccsjs.cn/posts/d785f6ab</guid><pubDate>Mon, 13 Jul 2026 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;adA发烧FFA费FQFRT欺负人多少人二点十分二个人Juba还是反攻倒算&lt;/p&gt;
&lt;pre class=&quot;astro-code astro-code-themes github-light github-dark&quot; style=&quot;background-color:#fff;--shiki-dark-bg:#24292e;color:#24292e;--shiki-dark:#e1e4e8; overflow-x: auto; white-space: pre-wrap; word-wrap: break-word;&quot; tabindex=&quot;0&quot; data-language=&quot;go&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49;--shiki-dark:#F97583&quot;&gt;package&lt;/span&gt;&lt;span style=&quot;color:#6F42C1;--shiki-dark:#B392F0&quot;&gt; main&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49;--shiki-dark:#F97583&quot;&gt;import&lt;/span&gt;&lt;span style=&quot;color:#032F62;--shiki-dark:#9ECBFF&quot;&gt; &quot;&lt;/span&gt;&lt;span style=&quot;color:#6F42C1;--shiki-dark:#B392F0&quot;&gt;fmt&lt;/span&gt;&lt;span style=&quot;color:#032F62;--shiki-dark:#9ECBFF&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49;--shiki-dark:#F97583&quot;&gt;func&lt;/span&gt;&lt;span style=&quot;color:#6F42C1;--shiki-dark:#B392F0&quot;&gt; main&lt;/span&gt;&lt;span style=&quot;color:#24292E;--shiki-dark:#E1E4E8&quot;&gt;() {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E;--shiki-dark:#E1E4E8&quot;&gt;fmt.&lt;/span&gt;&lt;span style=&quot;color:#6F42C1;--shiki-dark:#B392F0&quot;&gt;Println&lt;/span&gt;&lt;span style=&quot;color:#24292E;--shiki-dark:#E1E4E8&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#032F62;--shiki-dark:#9ECBFF&quot;&gt;&quot;Hello, World!&quot;&lt;/span&gt;&lt;span style=&quot;color:#24292E;--shiki-dark:#E1E4E8&quot;&gt;)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E;--shiki-dark:#E1E4E8&quot;&gt;}&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E;--shiki-dark:#E1E4E8&quot;&gt;adaf&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E;--shiki-dark:#E1E4E8&quot;&gt;fafaf&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E;--shiki-dark:#E1E4E8&quot;&gt;fafaf&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E;--shiki-dark:#E1E4E8&quot;&gt;afaf&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
</content:encoded></item></channel></rss>