diff --git a/404.html b/404.html
index 92515e0a..50eb3121 100644
--- a/404.html
+++ b/404.html
@@ -1 +1 @@
-
404: This page could not be found404
This page could not be found.
\ No newline at end of file
+404: This page could not be found404
This page could not be found.
\ No newline at end of file
diff --git a/_next/static/TGqLAYavXKuPmjzFf_JIq/_buildManifest.js b/_next/static/B1sqIJXJqdLQNubd1utpR/_buildManifest.js
similarity index 95%
rename from _next/static/TGqLAYavXKuPmjzFf_JIq/_buildManifest.js
rename to _next/static/B1sqIJXJqdLQNubd1utpR/_buildManifest.js
index dff7ee6b..b95bd2f9 100644
--- a/_next/static/TGqLAYavXKuPmjzFf_JIq/_buildManifest.js
+++ b/_next/static/B1sqIJXJqdLQNubd1utpR/_buildManifest.js
@@ -1 +1 @@
-self.__BUILD_MANIFEST=function(s,e){return{__rewrites:{beforeFiles:[],afterFiles:[{source:"/:path*/_meta",destination:"/404"}],fallback:[]},"/":[s,e,"static/chunks/992-5ec01f685f19e567.js","static/css/3330a8017d761a75.css","static/chunks/pages/index-ca8e50ee8c0ea06c.js"],"/_error":["static/chunks/pages/_error-9e4f9965f3bcca97.js"],"/development":[s,e,"static/chunks/pages/development-dedacf898758a93f.js"],"/development/admin":[s,e,"static/chunks/pages/development/admin-8d47ab82459cd3a6.js"],"/development/frontend":[s,e,"static/chunks/pages/development/frontend-3c440d65a6a0b12d.js"],"/docs":[s,e,"static/chunks/pages/docs-94b578e3ef6f3522.js"],"/docs/advanced":[s,e,"static/chunks/pages/docs/advanced-9b7ed5482bc49782.js"],"/docs/community":[s,e,"static/chunks/pages/docs/community-2312ea6ad3e39016.js"],"/docs/docker":[s,e,"static/chunks/pages/docs/docker-e2804c768f417821.js"],"/docs/extra":[s,e,"static/chunks/pages/docs/extra-519351d2d43d8c4d.js"],"/docs/features":[s,e,"static/chunks/pages/docs/features-655e06d9156f1e22.js"],"/docs/scripts":[s,e,"static/chunks/pages/docs/scripts-17778c36b670c411.js"],"/themes":[s,e,"static/chunks/pages/themes-d87e572fc1a0af00.js"],"/themes/kami":[s,e,"static/chunks/pages/themes/kami-93d912ec420a38e8.js"],"/themes/shiro":[s,e,"static/chunks/pages/themes/shiro-7a3d90124327a61d.js"],"/themes/shiro/config":[s,e,"static/chunks/pages/themes/shiro/config-35d5230e51a9bec1.js"],"/themes/shiro/extra":[s,e,"static/chunks/pages/themes/shiro/extra-6b05c6bb795ddb6c.js"],"/themes/yun":[s,e,"static/chunks/pages/themes/yun-983e2dee3fcd77ce.js"],"/usage":[s,e,"static/chunks/pages/usage-8213019008706f1f.js"],"/usage/backup":[s,e,"static/chunks/pages/usage/backup-a037405453a4bbc6.js"],"/usage/search":[s,e,"static/chunks/pages/usage/search-9e604e2b872758f6.js"],"/usage/security":[s,e,"static/chunks/pages/usage/security-2518862bbeea13bb.js"],"/usage/serverless":[s,e,"static/chunks/pages/usage/serverless-843903cf2b0ca44e.js"],"/usage/update":[s,e,"static/chunks/pages/usage/update-59251aab03491499.js"],"/usage/xlog":[s,e,"static/chunks/pages/usage/xlog-32569b55921d5f37.js"],sortedPages:["/","/_app","/_error","/development","/development/admin","/development/frontend","/docs","/docs/advanced","/docs/community","/docs/docker","/docs/extra","/docs/features","/docs/scripts","/themes","/themes/kami","/themes/shiro","/themes/shiro/config","/themes/shiro/extra","/themes/yun","/usage","/usage/backup","/usage/search","/usage/security","/usage/serverless","/usage/update","/usage/xlog"]}}("static/css/dd97a0b6df2b52c4.css","static/chunks/163-76c826300a2a0cdd.js"),self.__BUILD_MANIFEST_CB&&self.__BUILD_MANIFEST_CB();
\ No newline at end of file
+self.__BUILD_MANIFEST=function(s,e){return{__rewrites:{beforeFiles:[],afterFiles:[{source:"/:path*/_meta",destination:"/404"}],fallback:[]},"/":[s,e,"static/chunks/992-5ec01f685f19e567.js","static/css/3330a8017d761a75.css","static/chunks/pages/index-ca8e50ee8c0ea06c.js"],"/_error":["static/chunks/pages/_error-9e4f9965f3bcca97.js"],"/development":[s,e,"static/chunks/pages/development-dedacf898758a93f.js"],"/development/admin":[s,e,"static/chunks/pages/development/admin-8d47ab82459cd3a6.js"],"/development/frontend":[s,e,"static/chunks/pages/development/frontend-3c440d65a6a0b12d.js"],"/docs":[s,e,"static/chunks/pages/docs-94b578e3ef6f3522.js"],"/docs/advanced":[s,e,"static/chunks/pages/docs/advanced-9b7ed5482bc49782.js"],"/docs/community":[s,e,"static/chunks/pages/docs/community-2312ea6ad3e39016.js"],"/docs/docker":[s,e,"static/chunks/pages/docs/docker-e2804c768f417821.js"],"/docs/extra":[s,e,"static/chunks/pages/docs/extra-519351d2d43d8c4d.js"],"/docs/features":[s,e,"static/chunks/pages/docs/features-655e06d9156f1e22.js"],"/docs/scripts":[s,e,"static/chunks/pages/docs/scripts-17778c36b670c411.js"],"/themes":[s,e,"static/chunks/pages/themes-d87e572fc1a0af00.js"],"/themes/kami":[s,e,"static/chunks/pages/themes/kami-93d912ec420a38e8.js"],"/themes/shiro":[s,e,"static/chunks/pages/themes/shiro-7a3d90124327a61d.js"],"/themes/shiro/config":[s,e,"static/chunks/pages/themes/shiro/config-85dfb1c604789d89.js"],"/themes/shiro/extra":[s,e,"static/chunks/pages/themes/shiro/extra-6b05c6bb795ddb6c.js"],"/themes/yun":[s,e,"static/chunks/pages/themes/yun-983e2dee3fcd77ce.js"],"/usage":[s,e,"static/chunks/pages/usage-8213019008706f1f.js"],"/usage/backup":[s,e,"static/chunks/pages/usage/backup-a037405453a4bbc6.js"],"/usage/search":[s,e,"static/chunks/pages/usage/search-9e604e2b872758f6.js"],"/usage/security":[s,e,"static/chunks/pages/usage/security-2518862bbeea13bb.js"],"/usage/serverless":[s,e,"static/chunks/pages/usage/serverless-843903cf2b0ca44e.js"],"/usage/update":[s,e,"static/chunks/pages/usage/update-59251aab03491499.js"],"/usage/xlog":[s,e,"static/chunks/pages/usage/xlog-32569b55921d5f37.js"],sortedPages:["/","/_app","/_error","/development","/development/admin","/development/frontend","/docs","/docs/advanced","/docs/community","/docs/docker","/docs/extra","/docs/features","/docs/scripts","/themes","/themes/kami","/themes/shiro","/themes/shiro/config","/themes/shiro/extra","/themes/yun","/usage","/usage/backup","/usage/search","/usage/security","/usage/serverless","/usage/update","/usage/xlog"]}}("static/css/dd97a0b6df2b52c4.css","static/chunks/163-76c826300a2a0cdd.js"),self.__BUILD_MANIFEST_CB&&self.__BUILD_MANIFEST_CB();
\ No newline at end of file
diff --git a/_next/static/TGqLAYavXKuPmjzFf_JIq/_ssgManifest.js b/_next/static/B1sqIJXJqdLQNubd1utpR/_ssgManifest.js
similarity index 100%
rename from _next/static/TGqLAYavXKuPmjzFf_JIq/_ssgManifest.js
rename to _next/static/B1sqIJXJqdLQNubd1utpR/_ssgManifest.js
diff --git a/_next/static/chunks/nextra-data-en-US.json b/_next/static/chunks/nextra-data-en-US.json
index 18d350fa..5a637f9e 100644
--- a/_next/static/chunks/nextra-data-en-US.json
+++ b/_next/static/chunks/nextra-data-en-US.json
@@ -1 +1 @@
-{"/development/admin":{"title":"后台单独部署","data":{"":"在正常情况下,你不需要单独部署后台,因为后台已经被打包到了后端中。如果你有以下需求:\n想使用其他域名作为后台地址\n想使用其他端口作为后台地址\n\n那么你可以选择单独部署后台,或者你可以参考 反向代理配置。","拉取源文件#拉取源文件":"","修改配置文件#修改配置文件":"进入到后台源码目录,找到 .env.production 文件,取消对应配置项的注释,然后修改为你的配置。例如:\n\n其他可以定义的配置在文件 /src/configs.ts 中。","构建#构建":"构建 mx-admin 需要的内存至少为 2 Gib,如果你服务器内存不足,你可以在本地构建成功后,将产物上传到服务器。在 Windows 系统上,mx-admin 无法正常构建,你可以使用 WSL2 或者 Linux 系统。","部署产物#部署产物":"构建生成的产物在 dist 目录下,你可以直接把它们移动到你准备好的后台网站的根目录下。假设你准备的后台网站域名是 admin.test.cn,网站根目录为 /var/www/admin.test.cn/,那么,你把 dist 目录下的所有文件移动到 /var/www/admin.test.cn/ 目录下即可。","修改后端配置#修改后端配置":"编辑 Core 的 .env 文件,修改 ALLOWED_ORIGINS ,添加你的后台域名。示例域名为 admin.test.cn 。例如:\n\n然后重新启动 Core 即可:"}},"/development/frontend":{"title":"前端开发指南","data":{"":"为什么要写这一节?我希望不再是只有 Kami 一个风格,能有更多主题可供选择。\n此系统采用了前后端分离的形式,并没有提供模板渲染的选择,所以前端项目可以使用任何框架和架构设计。但是虽然开发比较自由,但是也存在诸多不便,比如接口调用和数据定义,路由约定上。所以在这一节,具体讲讲如何开发前端项目。","路由约定#路由约定":"Kami 是由 NextJS、React 开发的,作为最最原始的项目,至今(截止 2021.12)已有近两年的历史,经过这些时间的沉淀,我希望前端项目路由的组织上能够遵守这一个约定。\n路由的约定能很大程度保证网站因更换不同前端主题导致 SEO 异常,死链接等问题。\n约定如下:\nPath\tDescrition\tMark\t/\t主页\t强制要求\t/posts\t博文列表\t强制要求\t/posts/:category/:slug\t博文详情页\t强制要求\t/pages/:slug\t独立页面详情页\t强制要求\t/notes/:nid\t日记详情页\t强制要求\t/feed\tRSS 订阅\t强制要求\t/:category/:slug\t302 -> /posts/:category/:slug\t建议\t/category/:slug\t分类中文章列表页\t建议\t/notes\t日记列表或者跳转最新日记页\t建议\t/notes/latest\t最新日记详情页\t建议\t/friends\t友链\t建议\t/says\t一言详情页\t可选\t/sitemap\t站点地图\t建议\t/timeline\t时间线\t可选\t/recently\t动态页\t可选\t/favorite/:type\t附加页\t可选\t/projects\t项目页\t可选\t/projects/:id\t项目详情页\t可选","框架上的选择与建议#框架上的选择与建议":"建议选择附带 SSR 功能的现代化框架:\nReact:NextJS, RakkasJS, umi\nVue: Vite (vite-ssr), NuxtJS\n\n小程序:\nReact: Remax, taro\nVue: uni-app","接口调用与-sdk-的使用#接口调用与 SDK 的使用":"考虑到单独编写接口定义和返回类型太麻烦,这里提供一个 SDK 方便开发。\nSDK 仍在 beta 阶段,未来接口可能出现变化。\n详见:api-client"}},"/development":{"title":"开发指南","data":{"":"为了方便开发者快速上手,我们提供了一些开发指南,帮助开发者快速了解和使用我们的产品。","项目技术栈#项目技术栈":"React\nNestJS\nTypeScript\nMongoDB\nRedis\nDocker\n\n你可以点击上面的链接了解更多有关这些技术的信息。","启动开发环境#启动开发环境":"此系统采用了前后端分离的形式,因此需要分别启动前端和后端的开发环境。但是由于不同的前端不同写法,我们认为作为一名开发者都应该知道如何 「举一反三」, 并且不同的前端可能步骤会 大相径庭 ,因此我们不会提供如何启动前端开发环境的指南。\n有关前端开发设计指南,你可以在侧边栏中找到。\n你需要确定好你的开发环境中已经安装了以下工具:\nNode.js (>= 16)\nPNPM\nMongoDB\nRedis\nGit","启动后端#启动后端":"首先,你需要克隆本仓库到你的本地(你可能需要 fork 一份到你的仓库中,并且使用 --depth=1 来加速克隆):\n\n然后,你需要安装依赖,我们使用了 PNPM 作为包管理器,并不建议你使用其他的管理器安装。\n在您提交相关 PR 时,我们也会检查您是否使用了 PNPM,如果没有,我们将会拒绝您的 PR(一个项目多个 lock 总不是一个好的选择)。\n\n\n接下来,我们就可以开始启动后端的开发环境了。"}},"/docs/advanced":{"title":"进阶部署","data":{"":"在您进行进阶部署前,我们给予最后的警告:如果你不是开发者,或者不想折腾,请不要选择进阶部署,因为它需要你具备一定的开发能力。由于自身技术原因导致的问题,我们将不会提供任何技术支持。情节严重者,我们将永久拉黑您的账号。","要求#要求":"已安装 Node.js 16.0.0 或以上版本\n已安装 Git, PNPM, PM2\n已安装 MongoDB, Redis 并正常运行","1-克隆并安装#1. 克隆并安装":"","2-构建--bundle#2. 构建 & Bundle":"","3-配置-ecosystemconfigjs#3. 配置 ecosystem.config.js":"","4-启动#4. 启动":"进入 ./apps/core/out,创建一个 ecosystem.config.js 文件\n将上方复制的内容黏贴进去,然后执行以下命令启动服务","5-反向代理-or-#5. 反向代理 or ...":"剩下的就是你的事了,你可以使用 Nginx 或者 Caddy 等反向代理工具,也可以使用 Cloudflare 等 CDN 服务。本文不再赘述。"}},"/docs/community":{"title":"社区部署教程","data":{"":"以下是社区用户分享的部署方式,你可以参考他们的部署方式,但我们不保证它们的可用性。如果你也有教程想要与大家分享的,欢迎您向文档提交 Pull Request 以分享您的部署方式。"}},"/docs/docker":{"title":"Docker 部署","data":{"":"","安装-docker#安装 Docker":"如果你的服务器在国内,建议使用阿里云的镜像加速,安装命令如下:\n\n在国外,可以直接使用官方脚本安装:\n\n如果您成功安装了 Docker 和 Docker-Compose,可以通过以下命令查看版本:","拉取配置文件#拉取配置文件":"","配置-core-启动配置文件#配置 Core 启动配置文件":"在下方的表格里填入你的配置,然后点击复制,创建一个 .env 文件,将复制的内容粘贴进去,保存即可。\n鼠标悬停在下方的表格中,可以查看对应的配置项名字。\n\n\n\nJWT 密钥:需要填写长度不小于 16 个字符,不大于 32 个字符的字符串,用于加密用户的 JWT,务必保存好自己的密钥,不要泄露给他人。\n被允许的域名:需要填写被允许的域名,通常是前端的域名,如果允许多个域名访问,用英文逗号,分隔。\n是否开启加密:如果你确定要开启加密,将 false 改为 true,开启加密后,你需要在下方填写加密密钥。\n加密密钥:如果你不知道这是什么,那么不建议开启此功能,具体内容可参考 https://mx-space.js.org/usage/security.html\n\n\n若开启加密,则需注意密钥长度必须为 64 位且只有小写字母和数字,不然会在初始化时报错。注意这是不可逆的,务必保存自己的秘钥。所以并不是非常推荐使用,除非你真的需要加密\nAPI Key.密钥可以通过 openssl rand -hex 32 命令生成。请务必牢记。","启动-core#启动 Core":"","完成#完成":"恭喜你完成了 Core 部署,不过仅仅如此是不够的,你需要配置好反向代理之后登录后台进行初始化,这里不再赘述。除此之外,如引言所述还需要部署一个前端主题用于展示,请参考 前端主题文档 继续完成部署前端主题的步骤。","相关链接#相关链接":""}},"/docs/extra":{"title":"拓展内容","data":{"":"此部分内容将说明一些额外的操作流程,根据自己需要进行配置。","反向代理#反向代理":"在这里提供双域名(前端和后端各用一个域名)与单域名(前后端共用一个域名)的配置步骤。当然不管使用哪种方法,都建议用控制面板(如宝塔、1Panel 等)的使用面板提供的反代功能单独粘贴对应的反代配置部分完成配置(需要删掉开头和结尾的 server 块),手写反代配置的大佬随意。","双域名#双域名":"这里假定前端域名为 www.example.com,后端为 server.example.com。以下是后端 server.example.com 反代配置部分\n\n前端 www.example.com 反代部分\n\n\n如果您使用此部分示例配置 Nginx 反向代理,您的:\nAPI 地址为 https://server.example.com/api/v2\n前端(Kami/Shiro)地址为 https://www.example.com\nGateWay 为 https://server.example.com\n本地后台为 https://server.example.com/proxy/qaqdmin","单域名#单域名":"以下配置文件以 Nginx 为例,请自行修改 SSL 证书路径以及自己的网站域名。若使用 Caddy 进行配置可参考 Caddyfile 文件示例进行相应修改。\n\n完整示例如下\n\n\n如果您使用此部分示例配置 Nginx 反向代理,您的:\nAPI 地址为 https://www.example.com/api/v2\n前端(Kami/Shiro)地址为 https://www.example.com\nGateWay 为 https://www.example.com\n本地后台为 https://www.example.com/proxy/qaqdmin","配置其他-redis-服务#配置其他 Redis 服务":"如果你需要使用来自 (远端 / 非容器) 的 Redis 服务,你可以通过使用 argv 来动态传入对应的配置项。支持传入如下值:\nredis_host Redis 服务地址,域名、IP 都可以\nredis_port Redis 服务端口\nredis_password Redis 服务密码\n\n在默认情况下,我们认为这样已经足够了。","对于进阶部署#对于进阶部署":"针对这种部署方式,我们可以修改 ecosystem.config.js 在 12 行,也就是 script 这一项,添加你需要传入的值,如下所示:\n\n当你修改完成,你需要重新构建,并重启服务:","配置其他-mongodb-服务#配置其他 MongoDB 服务":"如果你需要使用来自 (远端 / 非容器) 的 MongoDB 服务,你可以通过使用 argv 来动态传入对应的配置项。支持传入如下值:\ncollection_name 数据库集合名字\ndb_host MongoDB 服务地址,域名、IP 都可以\ndb_port MongoDB 服务端口\ndb_user MongoDB 服务用户名\ndb_password MongoDB 服务密码\n\n\n如果你需要使用密码登录,你不仅仅需要传入 password,还需要传入 user,建议你对数据库集合划分好用户权限","对于进阶部署-1#对于进阶部署":"和 Redis 一样,我们可以修改 ecosystem.config.js 在 12 行,也就是 script 这一项,添加你需要传入的值,如下所示:\n\n当你修改完成,你需要重新构建,并重启服务:"}},"/docs/features":{"title":"主要功能","data":{"":"","日记#日记":"作为个人空间,日记是必不可少的功能。Mix Space 的日记功能非常强大,它支持:\n标记「回顾日记」,并自动将其归档到「回顾日记」页面\n私人日记密码保护,只有知道密码的人才能查看\n定时发布,可以将日记定时发布到未来的某个时间点","评论#评论":"评论是一个网站的重要组成部分,Mix Space 的评论功能非常强大,它支持:\n反垃圾评论,使用 Mix Space 的反垃圾评论系统配合多种自定义规则,可以有效的防止垃圾评论\n邮件通知,当有人评论时,会发送邮件通知给文章作者","xlog-集成#xLog 集成":"通过 Mix Space 的 xLog 功能,你可以将你的博客文章同步到 xLog 平台。并且当你没有为文章写摘要的时候,可以直接使用 xLog 平台生成的摘要,当然你也可以使用自己的 GPT API Key 去调用 GPT 生成文章摘要。\nxLog 是面向所有人的最棒的链上、开源的博客社区。","文件管理#文件管理":"你可以使用 Mix Space 上传文件,然后在任意地方中使用,比如文章中,或者是日记中。你可以使用 Markdown 语法插入图片,也可以使用 HTML 语法插入图片。","通知#通知":"Mix Space 支持多种通知方式,让你不错过任何一条重要的通知。\n邮件通知,当有人评论时,会发送邮件通知给文章作者\nBark 通知支持","友链#友链":"Mix Space 的友链系统支持自助申请,你可以在后台设置是否需要审核,如果需要审核,你可以在后台设置通过 OR 拒绝理由。并且在后台可以看到友链的可用性检查结果。","计划任务#计划任务":"Mix Space 有着强大的计划任务功能,它们都被统一管理,你可以在后台执行计划任务:\n备份数据库\n清除缓存、访问记录、临时文件\n推送百度搜索\n推送 Algolia 搜索\n删除过期的数据\netc...","其他#其他":"Mix Space 还有很多其他功能,比如:\n动态化配置前端,你可以在后台设置前端的配置,比如网站名称,网站描述,网站图标等等\n云函数,你可以在后台设置云函数,让你的网站更加强大\nAlgolia Search,你可以在后台设置 Algolia Search,让你的网站支持站内搜索功能\n项目展示功能,你可以向访客展示你的项目,展现你的技术能力\n迁移,Mix Space 支持从 Markdown 导入文章,也支持导出文章为 Markdown。"}},"/docs":{"title":"引言","data":{"":"Mix Space 是一个一款简洁而不简单的个人博客系统,它够快,够现代。你可以利用它构建一个属于自己的个人空间,记录生活,分享知识。\n在本章节,我们将完成的是 后端 的安装,而 前端 的安装则需要你阅读 前端主题文档。\n\n为什么分开部署?请查看本页 一些你需要知道的事情 小节。","系统要求#系统要求":"Linux / macOS\nLinux 内核版本 >= 4.19\nMemory >= 1G","快速开始#快速开始":"我们提供了三种部署方式,并且社区也提供了更多的部署方式,你可以根据自己的喜好选择一种部署方式。\n\n\n\n\n\n\n\n\n\n\n\n\n还有更多部署方式吗?欢迎您向文档提交 Pull Request 以分享您的部署方式。按上方后端部署文档完成你的部署后,你可以通过下面的方式继续部署 Mix Space 前端 (为什么分开部署?请查看 一些你需要知道的事情)","一些你需要知道的事情#一些你需要知道的事情":"","遇到报错怎么办#遇到报错怎么办?":"新时代新风气,我们遇到了一个人工智能蓬勃发展的时代,所以在你遇到了问题的时候请先询问 Bing AI, ChatGPT 等人工智能,它们会帮助你解决大部分问题。如果你遇到了一些人工智能解决不了的问题,那么请再次阅读文档,如果文档依旧没有解决你的问题,那么请在对应仓库的 GitHub Issues 中提出你的问题,我们会尽快解决。","mix-space-的组成结构#Mix Space 的组成结构":"所以,Mix Space 由两部分组成:后端 和 前端。如果你没法理解的话,建议询问 Bing AI, ChatGPT 等人工智能以此来了解它们、以及知道它们的区别。(比如这样询问 ChatGPT)总之你需要知道的便是:这不是像 Typecho、WordPress 这样的「一步曲」就搞定的系统,而是需要 「两步曲」 才能完成安装。\n但万幸的是,我们开发者已经为你准备好了一切,你只需要按照文档推荐的步骤来操作即可,即使你不是开发者,也可以轻松完成安装。\n知道了这些,你就可以避免掉大部分的问题了,开始安装体验吧!"}},"/docs/scripts":{"title":"预设脚本部署","data":{"":"经用户反馈,我们发现预设脚本部署的方式存在一些问题,因此我们建议您使用其他部署方式。"}},"/":{"title":"Mix Space - An Alternative Personal Space.","data":{"":"An Alternative Personal Space.\n\n一个替代个人空间的新方式\n\n\n5 分钟拥有自己的 Mix Space →\n\n\n\n\n\n\n\n\n\n\n\n\n\n几分钟内创建强大的现代博客网站。\n\n\n\n\n部署一行完成.\n\nMix Space 有多种部署方式,您可以选择最适合您的方式来部署您的 Mix Space。采用 Docker 部署,您可以在几分钟内部署您的博客,而不需要任何专业知识。使用预设脚本部署亦是如此。\n\n\n\n\n\n\n\n\n\n/\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n全平台黑暗模式\n\n\n\n\nMarkdown + 自定义语法, 丰富您的内容。\n\nMix Space 支持自定义 Markdown 内语法,您可以使用自定义语法来丰富您的内容。\n\n\n\n\n\n\n\n\n\n\n无限扩展、无限可能,实现歌单解析,追番列表等功能。\n\n\n\n数据统计面板\n\nMix Space 支持访客统计,您可以在后台查看您的 网站访问量,访问来源,访问设备等信息。\n\n\n\n记录生活点滴\n\nMix Space 不仅是博客,更是记录生活点滴的个人空间。您可以在 Mix Space 分享您的多彩缤纷的生活。\n\n\n\n强大的友链系统,促进你与老友的联系。\n\nMix Space 的友链系统强大且全面,在后台你可以检测你的老友是否还「健在」 有了 Mix Space,你的友链一切尽在掌握。\n\n\n\n更多特性...\n\n文件管理 / WebSocket / 友链支持 / 计划任务 / 数据迁移... 更多新特性等待您的探索。\n\n拥有你自己的 Mix Space →"}},"/themes":{"title":"前端主题","data":{"":""}},"/themes/kami":{"title":"Kami 主题","data":{"":"下一个代替项目将会是 Shiro,当它完成之时,我便不再投入任何精力到 Kami 中。迎接未来总需要舍弃一些东西,非常感谢大家三年来使用 Kami,不管你是谁,都需要对你说声谢谢。—— Innei\n\n由于 Kami 主题已不再维护并 Achieved ,该部分文档将会保持最小程度的更新;值得注意的是,使用 Kami 要求服务器的 Linux 内核版本不小于 4.19。","目前发现的与新版-core-的冲突#目前发现的与新版 Core 的冲突":"由于 Kami 已不再维护,如果你想继续使用,你需要自行解决 Core 版本更新带来的 BREAKING CHANGE 导致的 kami 功能丢失问题。\n点赞接口不兼容,已迁移至 Activity Module - Source\n阅读计数不再自动 increase, 已抽离至 Ack Module - Source","检查内核版本#检查内核版本":"如果你的内核版本小于 4.19,请升级内核。或者使用最新的 Ubuntu / Debian 。","克隆项目#克隆项目":"","安装依赖#安装依赖":"","配置-env#配置 ENV":"复制 .env.example 为 .env\n编辑 .env 文件,它看起来应该是这个样子的","开始构建#开始构建":"","启动前端#启动前端":"","更新#更新":"分为对 Kami 进行魔改和未魔改两种情况。","未魔改#未魔改":"该方法适合于对 Kami 源代码没有做改动的用户。\n直接在 kami 文件夹下执行 git pull origin master:\n\n安装依赖、构建、启动前端:\n\n\n你应该理解的是,即便是你没有对 Kami 进行任何魔改,仍有可能出现代码不能自动合并的问题,对于这种情况,建议参考下面的已魔改部分完成升级。","已魔改#已魔改":"此方法适用于对前端魔改后的升级,我们认为你修改了 'kami/src' 里面的源代码,这样的话,容易出现合并冲突,建议手动替换。\n将 kami 文件夹改为任意名字,例如修改为 kami.d,然后拉取 kami 前端仓库,更新到稳定版本:\n\n然后将更新前之前配置时修改过的文件,如在 kami.d 中的 .env 和 public 文件夹复制到 kami,将你的修改的部分依次修改替换完成。安装依赖、构建、启动前端:"}},"/themes/shiro/config":{"title":"配置项","data":{"":"","页脚信息footer#页脚信息(footer)":"此部分定义页脚的部分信息,主要包括备案、建站年份和页脚导航三部分。","备案otherinfoicp#备案(otherInfo.icp)":"此部分未在默认配置中提供。以下为参照写法:\n\n如何使用: 根据参照写法,修改位于 text 的备案号以及备案号所指向的链接 link。","建站年份otherinfodate#建站年份(otherInfo.date)":"如何使用: {{now}} 指向当前年份,其他略。","页脚导航linksections#页脚导航(linkSections)":"分类包括 name 和 links 两个字段,对应分类名字及其下链接,其下链接又分为 name、href、external 三个字段,对应链接名字,指向链接和是否外链三个属性。如何使用: 根据自己需要增删或修改特定链接及分类,需要注意如果指向外链的话需要加一行 \"external\": true。","站点信息-configsite#站点信息 (config.site)":"此部分包含了网站的基础信息设置,例如 favicon(网站图标)的配置。","favicon#Favicon":"favicon: 设置网站在浅色模式下使用的图标。\nfaviconDark: 设置网站在深色模式下使用的图标。","hero-部分-confighero#Hero 部分 (config.hero)":"hero 部分定义了网站首页的主要欢迎信息或介绍部分,这是访问者首次进入网站时看到的部分。","title-模板-titletemplate#Title 模板 (title.template)":"包括多个元素(如 h1, code, span),每个元素都可以自定义文本内容和样式(通过 CSS 类)。如何使用: 修改 text 和 class 字段来自定义标题的文本内容和样式。你可以通过添加或删除元素来调整标题的结构。","描述-description#描述 (description)":"提供了对 hero 部分的简短描述。如何使用: 直接修改 description 的值以更改介绍文本。","模块-configmodule#模块 (config.module)":"此部分配置了网站的一些特定功能模块,比如活动跟踪、捐赠支持、社交媒体链接等。","实时活动-activity-模块#实时活动 (activity) 模块":"enable: 控制模块是否启用。\nendpoint: 指定活动更新的服务器端点。\n\n如何使用: 若需开启活动跟踪功能,将 enable 设为 true 并设置 endpoint 为处理活动数据的服务器地址。","捐赠-donate-模块#捐赠 (donate) 模块":"enable: 控制捐赠模块是否启用。\nlink: 提供捐赠页面的链接。\nqrcode: 提供一或多个捐赠二维码图片的链接。\n\n如何使用: 启用捐赠功能,并提供捐赠链接或捐赠二维码,以便支持者可以直接进行捐赠。","社交媒体-bilibili-模块#社交媒体 (bilibili) 模块":"liveId: b 站直播间 ID","openpanel-#OpenPanel ":"enable: 控制 OpenPanel 功能是否启用。\nid: OpenPanel 的 ID。\nurl: OpenPanel 的访问地址。\n\n如何使用: 如果你使用 OpenPanel 提供交互式面板或其他功能,通过这些配置连接并显示面板。"}},"/themes/shiro/extra":{"title":"额外功能","data":{"":"","扩展的-markdown-语法#扩展的 Markdown 语法":"参考 https://shiro.innei.in/#/markdown对于 LinkCard 的解析,某些需要你填写 API Key,以下的键值都是填写在 .env 环境变量中\nGitHub,默认直接用浏览器访问,可能受到 rate limit,可以填写 GH_TOKEN 以保证 API 可达性。\nTMDB,必须填写 TMDB_API_KEY 才可以正确解析 tmdb 的链接。参考 https://post.smzdm.com/p/a5op4w33/ 这里获取 TOKEN","我的动态#我的动态":"Shiro 主题中,有一个可以在顶部显示博主当前正在做的事情的功能,这个功能是通过云函数和 ProcessReporter 软件实现的。\n\n\n\n\n\n\n非常感谢 Innei, timochan, TNXG 的贡献,目前 ProcessReporter 已支持全平台!","配置云函数#配置云函数":"进入后台,点击左侧菜单栏的「其他 -> 配置与云函数」,然后点击新建按钮,在选项卡中填入以下信息:\n名称:update\n引用:ps\n数据类型:Function\n请求方式:POST\n\n这个地方还需要设置一个密钥,在 Secret 中填入 key,在 Value 中填入你自己的密钥。\n这个密钥将用于验证你的软件是否有权限更新博主的动态,所以请务必设置一个复杂的密钥。密钥在后面的步骤中还需要用到,所以请务必记住。\n上方没有提到的选项都不需要填写,然后在右侧的代码编辑器中填入下面链接中的代码:\n\n点击保存按钮,云函数就配置完成了。\n请关注此代码的更新,它可能会随时变化,你需要及时更新它们","配置主题配置#配置主题配置":"继续在「配置与云函数」页面,找到「theme -> shiro」配置,点击编辑,进入编辑页面,在代码中找到 module,加入 activity 配置,如下:(高亮部分)","配置软件#配置软件":"前往对应着你的电脑系统的软件的 GitHub 仓库,下载并打开 ProcessReporter。\n\n\n\n\n\n由于不同平台有不同的使用方法,不同的软件我们会在下方具体讲述。","processreporter-mac#ProcessReporter Mac":"打开软件后,你会发现你的系统菜单栏中多了一个图标,点击图标,然后点击「设置」,在弹出的窗口中填入你的信息:\nEndpoint:{你的API地址}/fn/ps/update (请将 {你的API地址} 替换为你的 API 地址,如:https://api.example.com/api/v2)\nAPI Key:填入你刚刚在云函数中设置的密钥\n\n如果你希望软件在开机时自动启动,可以勾选「Launch at login」选项。接着关闭窗口,再次点击菜单栏中的图标,点击「Enable」即可。如果一切正常,刷新一下你的博客你就可以在博客顶部看到你的动态了。","processreporter-windows#ProcessReporter Windows":"Windows 版本的使用问题,请前往 TNXG/ProcessReporterWinpy 查看。","使用-gui-版本#使用 GUI 版本":"在 Releases 页面下载 ProcessReporterWinpy_Launcher.exe\n,配置好 config.yml 文件,然后运行 ProcessReporterWinpy_Launcher.exe 即可。config.yml 配置具体配置项以及说明请参考 TNXG/ProcessReporterWinpy。","使用预编译的二进制文件#使用预编译的二进制文件":"在 Releases 页面下载 ProcessReporterWinpy.exe,配置好 config.yml 文件后,在终端运行即可,示例如下\n\nconfig.yml 配置具体配置项以及说明请参考 TNXG/ProcessReporterWinpy。","使用源代码#使用源代码":"下载代码后,修改 config.yml 文件,填入你的信息:\napi_url:{你的API地址}/fn/ps/update (请将 {你的API地址} 替换为你的 API 地址,如:https://api.example.com/api/v2)\napi_key:填入你刚刚在云函数中设置的密钥\nreport_time: 上报间隔(单位:秒)\n\n接着运行程序即可。如果一切正常,刷新一下你的博客你就可以在博客顶部看到你的动态了。","processreporter-linux#ProcessReporter Linux":"在仓库的 Releases 页面下载对应的二进制包,解压运行即可,具体请参照项目的 README 进行配置运行。安装完成后,新建 .env.process 文件,填入你的信息:\n\n然后执行程序即可。如果一切正常,刷新一下你的博客你就可以在博客顶部看到你的动态了。如果有什么疑问,可以去阅读该项目的 README","个人状态展示#个人状态展示":"设置当前的状态。","配置云函数-1#配置云函数":"进入后台,点击左侧菜单栏的「其他 -> 配置与云函数」,然后点击新建按钮,在选项卡中填入以下信息:\n名称:status\n引用:shiro\n数据类型:Function\n请求方式:ALL\n\n这个地方还需要设置一个密钥,在 Secret 中填入 key,在 Value 中填入你自己的密钥。\n这个密钥将用于验证你的软件是否有权限更新当前状态,所以请务必设置一个复杂的密钥。密钥在后面的步骤中还需要用到,所以请务必记住。\n上方没有提到的选项都不需要填写,然后在右侧的代码编辑器中填入下面链接中的代码:\n\n点击保存按钮,云函数就配置完成了。\n请关注此代码的更新,它可能会随时变化,你需要及时更新它们","设置状态#设置状态":"在主页登录之后,你可以点击此头像的右下方设置状态。APP 集成正在开发中.."}},"/themes/shiro":{"title":"Shiro 主题","data":{"":"","demo#Demo":"","前提要求#前提要求":"你已安装 Mix Space 后端并且已启动\n你已注册 Vercel 和 GitHub 账号\n你已注册 Clerk 账号\n\n\n请注意,Shiro 主题的部署教程与初版有所不同,如果你已经部署过 Shiro\n主题,请重新阅读本文档(尤其是填入配置文件环节,配置有所变化),并阅读最后一节\n「移除 Edge Config」。","安装#安装":"","克隆仓库#克隆仓库":"登陆 GitHub 账号,打开 Innei/Shiro,点击右上角的 Fork 按钮,将仓库克隆到你的账号下。","打开-vercel-创建项目#打开 Vercel 创建项目":"登陆 Vercel 账号,点击右上角的 New Project 按钮,选择 Import Git Repository,选择你刚刚 Fork 的仓库,点击 Import 按钮,即可进入到项目配置页面。","打开-clerk-创建项目#打开 Clerk 创建项目":"打开 Clerk 仪表盘 点击 Add application 按钮,填入你的博客名称,并配置信息,点击 Create application 按钮,即可完成配置。\n请你务必记住你的 Clerk 页面的公钥和私钥,稍后将会用到。","设置主题配置#设置主题配置":"进入 Mix Space 后台,进入「配置与云函数」页面,点击右上角的新增按钮,在编辑页面中,填入以下设置:\n名称:shiro\n引用:theme\n数据类型:JSON\n数据:(点击下方的按钮复制)\n\n\n\n请注意,这份配置你需要自行修改成符合你的需求的配置。直接使用下面的配置可能会导致你的博客无法按照你的预期运行。\n\n下面的配置可能不全,更多配置项的信息请移步 配置项\n阅读更多。\n\n\n\n点击按钮保存配置,随后继续进行下面的步骤。","配置环境变量#配置环境变量":"在下方的配置表格中,填入你的环境变量,然后点击复制按钮,将环境变量复制到剪贴板中。","键入环境变量--开始部署#键入环境变量 & 开始部署":"在刚刚进入的 Vercel 项目配置页面中,点击 Environment Variables,然后键盘上的 Ctrl + V 将环境变量粘贴到输入框中,然后点击 Deploy 按钮,等待部署完成。","clerk-登录与-mix-space-后端绑定#Clerk 登录与 Mix Space 后端绑定":"如果你遇到在 Shiro 登录之后,无法评论遇到 \"和主人重名\" 的报错,是因为 Clerk 的用户名和 Mix Space 后端的用户名重复了,你需要绑定本系统和 Clerk 的用户。让某个 Clerk 用户具有管理员权限。具体操作方法:\n升级 Mix Space Core 到 4.7.0 以上版本。\n打开 Clerk 对于此项目的控制台:\n\nPEM 的获取方式:https://clerk.com/docs/backend-requests/handling/manual-jwt\nKey:\n\n在 Shiro 用 clerk 登录后,通过 console 抓取请求:\n\n你的 clerk User Id 获取方式:Refer: https://github.com/Innei/Shiro/issues/137","完成#完成!":"至此,你已完成了 Shiro 主题的部署,你可以访问你的博客了。有关配置域名的教程,请参考 Vercel 文档。","移除-edge-config#移除 Edge Config":"在后续的 Shiro 更新中,Edge Config 将不再被使用。你可能需要移除 Edge Config,以防止不必要的资源使用。进入 Vercel 部署此项目的仪表盘,点击上方的 Storage,进入设置页面,点击左侧的 Projects,将链接的项目取消链接,接着点击左侧的 Settings,点击右侧的 Delete Edge Config 按钮,即可完成删除。","更新#更新":"按照文档的部署方法使用 Vercel 托管的话,只需要在自己 Fork 的项目上 Sync Fork 即可(如图)。如果自己有魔改某些内容的话不要点击 Discard Changes,会把自己的魔改搞没了。"}},"/themes/yun":{"title":"Yun 主题","data":{"":"由于 Yun 主题将不再维护,此文档将不再更新,但是你仍然可以使用它。","克隆项目#克隆项目":"","安装依赖#安装依赖":"","配置服务#配置服务":"如果你部署 Mix Space 后端与部署 Yun 前端在同一台服务器,并且后端监听的端口为 2333,那么你可以跳过这一步。\n\n前往 ./server/constant.ts\n\n\n\n修改为你的后端 API 地址。","开始构建#开始构建":"","启动前端#启动前端":""}},"/usage/backup":{"title":"备份与回滚","data":{"":"在 Mix Space 中内有备份功能,并且每日默认自动备份,数据无价请定期手动下载备份包。","备份#备份":"在后端中 其他 - 备份 中点击立即备份,即备份到绝对目录:~/mx-space/core/data/mx-space/backup/20xx-xx-xx_xx:xx:xx/backup-20xx-xx-xx_xx:xx:xx.zip","自动备份#自动备份":"目前该功能仅支持备份到腾讯云 COS,暂不支持其他云服务。当然,你也可以通过设置计划任务等方法达到和此功能一样的效果。设置入口:设定 - 系统 - 备份,填入 COS 对应参数即可。","回滚#回滚":"该操作涉及修改数据库,请多备份几个工作日的 backup,数据无价请谨慎操作!一般情况下回滚只会导致 analyze 数据页丢失 IP & PV 的数据。\n\nLinux 和 macOS 可直接上传备份包,并且无需修改包名一致即可回滚,以下操作仅针对使用 Windows 用户访问后端回滚的情况。\n在后端中 其他 - 备份 中点击立即备份,将之前在电脑里的 backup.zip 上传到刚刚生成的备份目录里进行重命名替换。例:假如刚刚生成的备份是 backup-2022-09-01_23:33:33.zip 将想进行回滚的备份包 backup-2022-01-14_05:14:19.zip 修改为刚刚生成的备份一样的名字:\n\n\n不要在 Windows 下重命名,Windows 不支持将英文冒号作为文件名的一部分\n替换完成会提示“数据库有变动,将在 x 秒后重载页面”,重载先检查文章评论等有没有丢失。"}},"/usage":{"title":"使用指南","data":{"":"本章节将会带您了解 Mix Space 的一些功能,以及如何使用它们。\n温馨提示:此指南需要一定的基础知识 & 理解能力,请准备好哦~","官方指南#官方指南":"","社区使用指南#社区使用指南":""}},"/usage/search":{"title":"Algolia Search","data":{"":"","介绍#介绍":"Algolia 是一个数据库实时搜索服务,能够提供毫秒级的数据库搜索服务,并且其服务能以 API 的形式方便地布局到网页、客户端、APP 等多种场景。像 VuePress 官方文档就是使用的 Algolia 搜索,使用 Algolia 搜索最大的好处就是方便,它会自动爬取网站的页面内容并构建索引,你只用申请一个 Algolia 服务,在网站上添加一些代码,就可以实现一个全文搜索功能。","使用#使用":"在这之前,你需要先在 Algolia 官网注册一个账号,或者直接用第三方登录。","新建应用#新建应用":"登录 Algolia 账号,进入控制台,在左上角点击 Applications 下列表,点击 New Application,填写应用名称,选择 BUILD 订阅(免费),选择好数据中心,点击 Create Application,即可创建一个应用。一些额外说明的地方都在图片上标注了,可参考下面的图片。","创建索引index#创建索引(Index)":"在新建应用之后,你会直接跳转到如下图所示的界面,只需要在输入框中输入一个索引名称,点击 Create Index,即可创建一个索引。请记住你所创建的索引名称(Index Name),后面的步骤会用到。","获取相关变量#获取相关变量":"接下来,在左下角找到齿轮图标,进入设置,在右侧找到 API Keys,进入,这里有两个变量需要复制下来备用,分别是 Application ID 和 Admin API Key,请复制下这两个变量的值,后面的步骤会用到。","后台配置#后台配置":"进入后台,设定->系统->Algolia Search,将“开启 Algolia Search”开关打开,将前面准备的 IndexName、Application ID(AppID) 和 Admin API Key(ApiKey) 填入对应的框中,右上角保存即可。\n至此,Algolia 搜索的配置就完成了。稍等一会,就可以尝试在主页用 Ctrl + K 调用 Algolia 进行站内搜索了。"}},"/usage/security":{"title":"Key 加密与安全性","data":{"":"在 v3.41.0 后续版本,加入了敏感 Key 加密功能。默认为关。为什么需要 Key 加密。假设黑客通过某种手段数据库被脱库。如果开启了 Key 加密,即便是拿到了全部数据也不能解密某些关键数据,例如配置项中的各类 API Key。但是,也需要谨慎开启此功能,开启后你需要记住加密秘钥。否则,你也将会永远丢失这些数据。","如何开启#如何开启":"你可以附加 --encrypt_enable 来启动服务。如:\n\n可以通过附加 --encrypt_key 来指定加密密钥,长度必须为 64 位,且只有小写字母和数字。请牢记此密钥。或者通过环境变量 MX_ENCRYPT_KEY 也可以指定密钥。\n若开启加密,则需注意密钥长度必须为 64 位且只有小写字母和数字,不然会在初始化时报错。注意这是不可逆的,务必保存自己的秘钥。\nAPI Key.\n密钥可以通过 openssl rand -hex 32 命令生成。请务必牢记。\nMX_ENCRYPT_KEY --encrypt_key 不是必须的,默认取机器的\nmachine-id。\n\n此操作时不可逆的,操作前请备份数据库。","自动化加密配置进阶指令非必要#自动化加密配置(进阶指令)(非必要)":"此操作时不可逆的,操作前请备份数据库。","疑难解答#疑难解答":"如果出现 Invalid key length,请你确定是否开启了此功能,并且 key 的长度是否为 64 位长度。"}},"/usage/serverless":{"title":"云函数","data":{"":"","介绍#介绍":"云函数是 Mix Space 中的一个重要功能,它极大地辅助了使用者在 Mix Space 中的体验。通过云函数,Mix Space 可以额外实现实现歌单解析,追番列表等等的功能。你可以在此处看到 Mix Space 目前收录的云函数 Snappets","使用#使用":"有一些前端主题需要使用云函数,这个时候你需要进入到云函数设置界面,将云函数代码填入到对应的位置。","1-进入云函数设置界面#1. 进入云函数设置界面":"进入后台管理,点击左侧菜单栏的 其他 - 云函数,即可进入云函数管理页面。","2-下载扩展包#2. 下载扩展包":"在右上方,点击 下载拓展包,你将会看到一个弹窗。","3-导入#3. 导入":"请在弹窗内请找到对应的主题的云函数代码,点击导入,即可完成下载对应的云函数代码。\n接下来,你可以在云函数管理页面看到你刚刚导入的云函数代码。","开发者文档#开发者文档":""}},"/usage/update":{"title":"更新 Mix Space","data":{"":"开头介绍就说过,Mx-Space 分为前端和后端两个部分,因此,更新的时候二者也需要分开更新。","core后端更新#Core(后端)更新":"根据部署方式的不同,更新方式也有不同。","docker-部署#Docker 部署":"进入 core 所在文件夹,然后 docker compose pull && docker compose up -d","进阶部署#进阶部署":"进入克隆 core 的文件夹,执行 git pull origin master 拉取新版本源码,随后正常进行 pnpm i -> pnpm build -> pnpm bundle。随后 进入 ./apps/core/out,执行以下命令启动服务 pm2 start ecosystem.config.js","前端更新#前端更新":"请根据自己所部署的主题跳转到对应的更新部分完成更新。"}},"/usage/xlog":{"title":"xLog 集成","data":{"":"","介绍#介绍":"此功能需要:\nCore: >=3.43.1\n\nxLog 功能可以将你的博客同步到 xLog 平台。具体就是 此文章已经由它的创作者签名并安全地存储在区块链上。当你没有为文章写摘要的时候,可以使用 xLog 平台生成的摘要,当然你也可以使用自己的 GPT API Key 去调用 GPT 去生成摘要。","使用#使用":"在 系统 - 第三方服务集成,填写 xLog SiteId 即可,然后去 xLog 平台去升级为钱包登录即可。钱包的注册方法请根据 xLog 的引导一步步注册。SiteId 是一个字符串,可以在 xLog 平台的设置 - 域名找到;例如 example.xlog.app,即 SiteId = example。当你完成钱包的注册,并使用钱包登录 xLog 平台的时候,就完成设置工作了。接下来你发布文章的时候,会自动的进行同步和签名;当然,需要经过你的同意。"}}}
\ No newline at end of file
+{"/development/admin":{"title":"后台单独部署","data":{"":"在正常情况下,你不需要单独部署后台,因为后台已经被打包到了后端中。如果你有以下需求:\n想使用其他域名作为后台地址\n想使用其他端口作为后台地址\n\n那么你可以选择单独部署后台,或者你可以参考 反向代理配置。","拉取源文件#拉取源文件":"","修改配置文件#修改配置文件":"进入到后台源码目录,找到 .env.production 文件,取消对应配置项的注释,然后修改为你的配置。例如:\n\n其他可以定义的配置在文件 /src/configs.ts 中。","构建#构建":"构建 mx-admin 需要的内存至少为 2 Gib,如果你服务器内存不足,你可以在本地构建成功后,将产物上传到服务器。在 Windows 系统上,mx-admin 无法正常构建,你可以使用 WSL2 或者 Linux 系统。","部署产物#部署产物":"构建生成的产物在 dist 目录下,你可以直接把它们移动到你准备好的后台网站的根目录下。假设你准备的后台网站域名是 admin.test.cn,网站根目录为 /var/www/admin.test.cn/,那么,你把 dist 目录下的所有文件移动到 /var/www/admin.test.cn/ 目录下即可。","修改后端配置#修改后端配置":"编辑 Core 的 .env 文件,修改 ALLOWED_ORIGINS ,添加你的后台域名。示例域名为 admin.test.cn 。例如:\n\n然后重新启动 Core 即可:"}},"/development/frontend":{"title":"前端开发指南","data":{"":"为什么要写这一节?我希望不再是只有 Kami 一个风格,能有更多主题可供选择。\n此系统采用了前后端分离的形式,并没有提供模板渲染的选择,所以前端项目可以使用任何框架和架构设计。但是虽然开发比较自由,但是也存在诸多不便,比如接口调用和数据定义,路由约定上。所以在这一节,具体讲讲如何开发前端项目。","路由约定#路由约定":"Kami 是由 NextJS、React 开发的,作为最最原始的项目,至今(截止 2021.12)已有近两年的历史,经过这些时间的沉淀,我希望前端项目路由的组织上能够遵守这一个约定。\n路由的约定能很大程度保证网站因更换不同前端主题导致 SEO 异常,死链接等问题。\n约定如下:\nPath\tDescrition\tMark\t/\t主页\t强制要求\t/posts\t博文列表\t强制要求\t/posts/:category/:slug\t博文详情页\t强制要求\t/pages/:slug\t独立页面详情页\t强制要求\t/notes/:nid\t日记详情页\t强制要求\t/feed\tRSS 订阅\t强制要求\t/:category/:slug\t302 -> /posts/:category/:slug\t建议\t/category/:slug\t分类中文章列表页\t建议\t/notes\t日记列表或者跳转最新日记页\t建议\t/notes/latest\t最新日记详情页\t建议\t/friends\t友链\t建议\t/says\t一言详情页\t可选\t/sitemap\t站点地图\t建议\t/timeline\t时间线\t可选\t/recently\t动态页\t可选\t/favorite/:type\t附加页\t可选\t/projects\t项目页\t可选\t/projects/:id\t项目详情页\t可选","框架上的选择与建议#框架上的选择与建议":"建议选择附带 SSR 功能的现代化框架:\nReact:NextJS, RakkasJS, umi\nVue: Vite (vite-ssr), NuxtJS\n\n小程序:\nReact: Remax, taro\nVue: uni-app","接口调用与-sdk-的使用#接口调用与 SDK 的使用":"考虑到单独编写接口定义和返回类型太麻烦,这里提供一个 SDK 方便开发。\nSDK 仍在 beta 阶段,未来接口可能出现变化。\n详见:api-client"}},"/development":{"title":"开发指南","data":{"":"为了方便开发者快速上手,我们提供了一些开发指南,帮助开发者快速了解和使用我们的产品。","项目技术栈#项目技术栈":"React\nNestJS\nTypeScript\nMongoDB\nRedis\nDocker\n\n你可以点击上面的链接了解更多有关这些技术的信息。","启动开发环境#启动开发环境":"此系统采用了前后端分离的形式,因此需要分别启动前端和后端的开发环境。但是由于不同的前端不同写法,我们认为作为一名开发者都应该知道如何 「举一反三」, 并且不同的前端可能步骤会 大相径庭 ,因此我们不会提供如何启动前端开发环境的指南。\n有关前端开发设计指南,你可以在侧边栏中找到。\n你需要确定好你的开发环境中已经安装了以下工具:\nNode.js (>= 16)\nPNPM\nMongoDB\nRedis\nGit","启动后端#启动后端":"首先,你需要克隆本仓库到你的本地(你可能需要 fork 一份到你的仓库中,并且使用 --depth=1 来加速克隆):\n\n然后,你需要安装依赖,我们使用了 PNPM 作为包管理器,并不建议你使用其他的管理器安装。\n在您提交相关 PR 时,我们也会检查您是否使用了 PNPM,如果没有,我们将会拒绝您的 PR(一个项目多个 lock 总不是一个好的选择)。\n\n\n接下来,我们就可以开始启动后端的开发环境了。"}},"/docs/community":{"title":"社区部署教程","data":{"":"以下是社区用户分享的部署方式,你可以参考他们的部署方式,但我们不保证它们的可用性。如果你也有教程想要与大家分享的,欢迎您向文档提交 Pull Request 以分享您的部署方式。"}},"/docs/advanced":{"title":"进阶部署","data":{"":"在您进行进阶部署前,我们给予最后的警告:如果你不是开发者,或者不想折腾,请不要选择进阶部署,因为它需要你具备一定的开发能力。由于自身技术原因导致的问题,我们将不会提供任何技术支持。情节严重者,我们将永久拉黑您的账号。","要求#要求":"已安装 Node.js 16.0.0 或以上版本\n已安装 Git, PNPM, PM2\n已安装 MongoDB, Redis 并正常运行","1-克隆并安装#1. 克隆并安装":"","2-构建--bundle#2. 构建 & Bundle":"","3-配置-ecosystemconfigjs#3. 配置 ecosystem.config.js":"","4-启动#4. 启动":"进入 ./apps/core/out,创建一个 ecosystem.config.js 文件\n将上方复制的内容黏贴进去,然后执行以下命令启动服务","5-反向代理-or-#5. 反向代理 or ...":"剩下的就是你的事了,你可以使用 Nginx 或者 Caddy 等反向代理工具,也可以使用 Cloudflare 等 CDN 服务。本文不再赘述。"}},"/docs/docker":{"title":"Docker 部署","data":{"":"","安装-docker#安装 Docker":"如果你的服务器在国内,建议使用阿里云的镜像加速,安装命令如下:\n\n在国外,可以直接使用官方脚本安装:\n\n如果您成功安装了 Docker 和 Docker-Compose,可以通过以下命令查看版本:","拉取配置文件#拉取配置文件":"","配置-core-启动配置文件#配置 Core 启动配置文件":"在下方的表格里填入你的配置,然后点击复制,创建一个 .env 文件,将复制的内容粘贴进去,保存即可。\n鼠标悬停在下方的表格中,可以查看对应的配置项名字。\n\n\n\nJWT 密钥:需要填写长度不小于 16 个字符,不大于 32 个字符的字符串,用于加密用户的 JWT,务必保存好自己的密钥,不要泄露给他人。\n被允许的域名:需要填写被允许的域名,通常是前端的域名,如果允许多个域名访问,用英文逗号,分隔。\n是否开启加密:如果你确定要开启加密,将 false 改为 true,开启加密后,你需要在下方填写加密密钥。\n加密密钥:如果你不知道这是什么,那么不建议开启此功能,具体内容可参考 https://mx-space.js.org/usage/security.html\n\n\n若开启加密,则需注意密钥长度必须为 64 位且只有小写字母和数字,不然会在初始化时报错。注意这是不可逆的,务必保存自己的秘钥。所以并不是非常推荐使用,除非你真的需要加密\nAPI Key.密钥可以通过 openssl rand -hex 32 命令生成。请务必牢记。","启动-core#启动 Core":"","完成#完成":"恭喜你完成了 Core 部署,不过仅仅如此是不够的,你需要配置好反向代理之后登录后台进行初始化,这里不再赘述。除此之外,如引言所述还需要部署一个前端主题用于展示,请参考 前端主题文档 继续完成部署前端主题的步骤。","相关链接#相关链接":""}},"/docs/extra":{"title":"拓展内容","data":{"":"此部分内容将说明一些额外的操作流程,根据自己需要进行配置。","反向代理#反向代理":"在这里提供双域名(前端和后端各用一个域名)与单域名(前后端共用一个域名)的配置步骤。当然不管使用哪种方法,都建议用控制面板(如宝塔、1Panel 等)的使用面板提供的反代功能单独粘贴对应的反代配置部分完成配置(需要删掉开头和结尾的 server 块),手写反代配置的大佬随意。","双域名#双域名":"这里假定前端域名为 www.example.com,后端为 server.example.com。以下是后端 server.example.com 反代配置部分\n\n前端 www.example.com 反代部分\n\n\n如果您使用此部分示例配置 Nginx 反向代理,您的:\nAPI 地址为 https://server.example.com/api/v2\n前端(Kami/Shiro)地址为 https://www.example.com\nGateWay 为 https://server.example.com\n本地后台为 https://server.example.com/proxy/qaqdmin","单域名#单域名":"以下配置文件以 Nginx 为例,请自行修改 SSL 证书路径以及自己的网站域名。若使用 Caddy 进行配置可参考 Caddyfile 文件示例进行相应修改。\n\n完整示例如下\n\n\n如果您使用此部分示例配置 Nginx 反向代理,您的:\nAPI 地址为 https://www.example.com/api/v2\n前端(Kami/Shiro)地址为 https://www.example.com\nGateWay 为 https://www.example.com\n本地后台为 https://www.example.com/proxy/qaqdmin","配置其他-redis-服务#配置其他 Redis 服务":"如果你需要使用来自 (远端 / 非容器) 的 Redis 服务,你可以通过使用 argv 来动态传入对应的配置项。支持传入如下值:\nredis_host Redis 服务地址,域名、IP 都可以\nredis_port Redis 服务端口\nredis_password Redis 服务密码\n\n在默认情况下,我们认为这样已经足够了。","对于进阶部署#对于进阶部署":"针对这种部署方式,我们可以修改 ecosystem.config.js 在 12 行,也就是 script 这一项,添加你需要传入的值,如下所示:\n\n当你修改完成,你需要重新构建,并重启服务:","配置其他-mongodb-服务#配置其他 MongoDB 服务":"如果你需要使用来自 (远端 / 非容器) 的 MongoDB 服务,你可以通过使用 argv 来动态传入对应的配置项。支持传入如下值:\ncollection_name 数据库集合名字\ndb_host MongoDB 服务地址,域名、IP 都可以\ndb_port MongoDB 服务端口\ndb_user MongoDB 服务用户名\ndb_password MongoDB 服务密码\n\n\n如果你需要使用密码登录,你不仅仅需要传入 password,还需要传入 user,建议你对数据库集合划分好用户权限","对于进阶部署-1#对于进阶部署":"和 Redis 一样,我们可以修改 ecosystem.config.js 在 12 行,也就是 script 这一项,添加你需要传入的值,如下所示:\n\n当你修改完成,你需要重新构建,并重启服务:"}},"/docs/features":{"title":"主要功能","data":{"":"","日记#日记":"作为个人空间,日记是必不可少的功能。Mix Space 的日记功能非常强大,它支持:\n标记「回顾日记」,并自动将其归档到「回顾日记」页面\n私人日记密码保护,只有知道密码的人才能查看\n定时发布,可以将日记定时发布到未来的某个时间点","评论#评论":"评论是一个网站的重要组成部分,Mix Space 的评论功能非常强大,它支持:\n反垃圾评论,使用 Mix Space 的反垃圾评论系统配合多种自定义规则,可以有效的防止垃圾评论\n邮件通知,当有人评论时,会发送邮件通知给文章作者","xlog-集成#xLog 集成":"通过 Mix Space 的 xLog 功能,你可以将你的博客文章同步到 xLog 平台。并且当你没有为文章写摘要的时候,可以直接使用 xLog 平台生成的摘要,当然你也可以使用自己的 GPT API Key 去调用 GPT 生成文章摘要。\nxLog 是面向所有人的最棒的链上、开源的博客社区。","文件管理#文件管理":"你可以使用 Mix Space 上传文件,然后在任意地方中使用,比如文章中,或者是日记中。你可以使用 Markdown 语法插入图片,也可以使用 HTML 语法插入图片。","通知#通知":"Mix Space 支持多种通知方式,让你不错过任何一条重要的通知。\n邮件通知,当有人评论时,会发送邮件通知给文章作者\nBark 通知支持","友链#友链":"Mix Space 的友链系统支持自助申请,你可以在后台设置是否需要审核,如果需要审核,你可以在后台设置通过 OR 拒绝理由。并且在后台可以看到友链的可用性检查结果。","计划任务#计划任务":"Mix Space 有着强大的计划任务功能,它们都被统一管理,你可以在后台执行计划任务:\n备份数据库\n清除缓存、访问记录、临时文件\n推送百度搜索\n推送 Algolia 搜索\n删除过期的数据\netc...","其他#其他":"Mix Space 还有很多其他功能,比如:\n动态化配置前端,你可以在后台设置前端的配置,比如网站名称,网站描述,网站图标等等\n云函数,你可以在后台设置云函数,让你的网站更加强大\nAlgolia Search,你可以在后台设置 Algolia Search,让你的网站支持站内搜索功能\n项目展示功能,你可以向访客展示你的项目,展现你的技术能力\n迁移,Mix Space 支持从 Markdown 导入文章,也支持导出文章为 Markdown。"}},"/docs":{"title":"引言","data":{"":"Mix Space 是一个一款简洁而不简单的个人博客系统,它够快,够现代。你可以利用它构建一个属于自己的个人空间,记录生活,分享知识。\n在本章节,我们将完成的是 后端 的安装,而 前端 的安装则需要你阅读 前端主题文档。\n\n为什么分开部署?请查看本页 一些你需要知道的事情 小节。","系统要求#系统要求":"Linux / macOS\nLinux 内核版本 >= 4.19\nMemory >= 1G","快速开始#快速开始":"我们提供了三种部署方式,并且社区也提供了更多的部署方式,你可以根据自己的喜好选择一种部署方式。\n\n\n\n\n\n\n\n\n\n\n\n\n还有更多部署方式吗?欢迎您向文档提交 Pull Request 以分享您的部署方式。按上方后端部署文档完成你的部署后,你可以通过下面的方式继续部署 Mix Space 前端 (为什么分开部署?请查看 一些你需要知道的事情)","一些你需要知道的事情#一些你需要知道的事情":"","遇到报错怎么办#遇到报错怎么办?":"新时代新风气,我们遇到了一个人工智能蓬勃发展的时代,所以在你遇到了问题的时候请先询问 Bing AI, ChatGPT 等人工智能,它们会帮助你解决大部分问题。如果你遇到了一些人工智能解决不了的问题,那么请再次阅读文档,如果文档依旧没有解决你的问题,那么请在对应仓库的 GitHub Issues 中提出你的问题,我们会尽快解决。","mix-space-的组成结构#Mix Space 的组成结构":"所以,Mix Space 由两部分组成:后端 和 前端。如果你没法理解的话,建议询问 Bing AI, ChatGPT 等人工智能以此来了解它们、以及知道它们的区别。(比如这样询问 ChatGPT)总之你需要知道的便是:这不是像 Typecho、WordPress 这样的「一步曲」就搞定的系统,而是需要 「两步曲」 才能完成安装。\n但万幸的是,我们开发者已经为你准备好了一切,你只需要按照文档推荐的步骤来操作即可,即使你不是开发者,也可以轻松完成安装。\n知道了这些,你就可以避免掉大部分的问题了,开始安装体验吧!"}},"/docs/scripts":{"title":"预设脚本部署","data":{"":"经用户反馈,我们发现预设脚本部署的方式存在一些问题,因此我们建议您使用其他部署方式。"}},"/":{"title":"Mix Space - An Alternative Personal Space.","data":{"":"An Alternative Personal Space.\n\n一个替代个人空间的新方式\n\n\n5 分钟拥有自己的 Mix Space →\n\n\n\n\n\n\n\n\n\n\n\n\n\n几分钟内创建强大的现代博客网站。\n\n\n\n\n部署一行完成.\n\nMix Space 有多种部署方式,您可以选择最适合您的方式来部署您的 Mix Space。采用 Docker 部署,您可以在几分钟内部署您的博客,而不需要任何专业知识。使用预设脚本部署亦是如此。\n\n\n\n\n\n\n\n\n\n/\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n全平台黑暗模式\n\n\n\n\nMarkdown + 自定义语法, 丰富您的内容。\n\nMix Space 支持自定义 Markdown 内语法,您可以使用自定义语法来丰富您的内容。\n\n\n\n\n\n\n\n\n\n\n无限扩展、无限可能,实现歌单解析,追番列表等功能。\n\n\n\n数据统计面板\n\nMix Space 支持访客统计,您可以在后台查看您的 网站访问量,访问来源,访问设备等信息。\n\n\n\n记录生活点滴\n\nMix Space 不仅是博客,更是记录生活点滴的个人空间。您可以在 Mix Space 分享您的多彩缤纷的生活。\n\n\n\n强大的友链系统,促进你与老友的联系。\n\nMix Space 的友链系统强大且全面,在后台你可以检测你的老友是否还「健在」 有了 Mix Space,你的友链一切尽在掌握。\n\n\n\n更多特性...\n\n文件管理 / WebSocket / 友链支持 / 计划任务 / 数据迁移... 更多新特性等待您的探索。\n\n拥有你自己的 Mix Space →"}},"/themes":{"title":"前端主题","data":{"":""}},"/themes/kami":{"title":"Kami 主题","data":{"":"下一个代替项目将会是 Shiro,当它完成之时,我便不再投入任何精力到 Kami 中。迎接未来总需要舍弃一些东西,非常感谢大家三年来使用 Kami,不管你是谁,都需要对你说声谢谢。—— Innei\n\n由于 Kami 主题已不再维护并 Achieved ,该部分文档将会保持最小程度的更新;值得注意的是,使用 Kami 要求服务器的 Linux 内核版本不小于 4.19。","目前发现的与新版-core-的冲突#目前发现的与新版 Core 的冲突":"由于 Kami 已不再维护,如果你想继续使用,你需要自行解决 Core 版本更新带来的 BREAKING CHANGE 导致的 kami 功能丢失问题。\n点赞接口不兼容,已迁移至 Activity Module - Source\n阅读计数不再自动 increase, 已抽离至 Ack Module - Source","检查内核版本#检查内核版本":"如果你的内核版本小于 4.19,请升级内核。或者使用最新的 Ubuntu / Debian 。","克隆项目#克隆项目":"","安装依赖#安装依赖":"","配置-env#配置 ENV":"复制 .env.example 为 .env\n编辑 .env 文件,它看起来应该是这个样子的","开始构建#开始构建":"","启动前端#启动前端":"","更新#更新":"分为对 Kami 进行魔改和未魔改两种情况。","未魔改#未魔改":"该方法适合于对 Kami 源代码没有做改动的用户。\n直接在 kami 文件夹下执行 git pull origin master:\n\n安装依赖、构建、启动前端:\n\n\n你应该理解的是,即便是你没有对 Kami 进行任何魔改,仍有可能出现代码不能自动合并的问题,对于这种情况,建议参考下面的已魔改部分完成升级。","已魔改#已魔改":"此方法适用于对前端魔改后的升级,我们认为你修改了 'kami/src' 里面的源代码,这样的话,容易出现合并冲突,建议手动替换。\n将 kami 文件夹改为任意名字,例如修改为 kami.d,然后拉取 kami 前端仓库,更新到稳定版本:\n\n然后将更新前之前配置时修改过的文件,如在 kami.d 中的 .env 和 public 文件夹复制到 kami,将你的修改的部分依次修改替换完成。安装依赖、构建、启动前端:"}},"/themes/shiro/config":{"title":"配置项","data":{"":"","页脚信息-footer#页脚信息 (footer)":"此部分定义页脚的部分信息,主要包括备案、建站年份和页脚导航三部分。","备案-otherinfoicp#备案 (otherInfo.icp)":"此部分未在默认配置中提供。以下为参照写法:\n\n如何使用: 根据参照写法,修改位于 text 的备案号以及备案号所指向的链接 link。","建站年份-otherinfodate#建站年份 (otherInfo.date)":"如何使用: {{now}} 指向当前年份,其他略。","页脚导航-linksections#页脚导航 (linkSections)":"分类包括 name 和 links 两个字段,对应分类名字及其下链接,其下链接又分为 name、href、external 三个字段,对应链接名字,指向链接和是否外链三个属性。如何使用: 根据自己需要增删或修改特定链接及分类,需要注意如果指向外链的话需要加一行 \"external\": true。","站点信息-configsite#站点信息 (config.site)":"此部分包含了网站的基础信息设置,例如 favicon(网站图标)的配置。","favicon#Favicon":"favicon: 设置网站在浅色模式下使用的图标。\nfaviconDark: 设置网站在深色模式下使用的图标。","hero-部分-confighero#Hero 部分 (config.hero)":"hero 部分定义了网站首页的主要欢迎信息或介绍部分,这是访问者首次进入网站时看到的部分。","title-模板-titletemplate#Title 模板 (title.template)":"包括多个元素(如 h1, code, span),每个元素都可以自定义文本内容和样式(通过 CSS 类)。如何使用: 修改 text 和 class 字段来自定义标题的文本内容和样式。你可以通过添加或删除元素来调整标题的结构。","描述-description#描述 (description)":"提供了对主页 hero 部分的简短描述。如何使用: 直接修改 description 的值以更改介绍文本。","自定义脚本-configcustom#自定义脚本 (config.custom)":"可以配置自定义的 CSS, Script。","scripts-scripts#Scripts (scripts)":"自定义 JS 脚本。接受一个字符串数组。","styles-styles#Styles (styles)":"自定义 CSS。接受一个字符串数组。","javascript-tag-js#JavaScript tag (js)":"接受一个 Script Props 参数数组。","css-href-link-css#CSS href link (css)":"加载外部 CSS,接受一个 CSS 外部样式表链接数组。","模块-configmodule#模块 (config.module)":"此部分配置了网站的一些特定功能模块,比如活动跟踪、捐赠支持、社交媒体链接等。","实时活动-activity-模块#实时活动 (activity) 模块":"enable: 控制模块是否启用。\nendpoint: 指定活动更新的服务器端点。\n\n如何使用: 若需开启活动跟踪功能,将 enable 设为 true 并设置 endpoint 为处理活动数据的服务器地址。","捐赠-donate-模块#捐赠 (donate) 模块":"enable: 控制捐赠模块是否启用。\nlink: 提供捐赠页面的链接。\nqrcode: 提供一或多个捐赠二维码图片的链接。\n\n如何使用: 启用捐赠功能,并提供捐赠链接或捐赠二维码,以便支持者可以直接进行捐赠。","社交媒体-bilibili-模块#社交媒体 (bilibili) 模块":"liveId: b 站直播间 ID","openpanel-#OpenPanel ":"enable: 控制 OpenPanel 功能是否启用。\nid: OpenPanel 的 ID。\nurl: OpenPanel 的访问地址。\n\n如何使用: 如果你使用 OpenPanel 提供交互式面板或其他功能,通过这些配置连接并显示面板。"}},"/themes/shiro/extra":{"title":"额外功能","data":{"":"","扩展的-markdown-语法#扩展的 Markdown 语法":"参考 https://shiro.innei.in/#/markdown对于 LinkCard 的解析,某些需要你填写 API Key,以下的键值都是填写在 .env 环境变量中\nGitHub,默认直接用浏览器访问,可能受到 rate limit,可以填写 GH_TOKEN 以保证 API 可达性。\nTMDB,必须填写 TMDB_API_KEY 才可以正确解析 tmdb 的链接。参考 https://post.smzdm.com/p/a5op4w33/ 这里获取 TOKEN","我的动态#我的动态":"Shiro 主题中,有一个可以在顶部显示博主当前正在做的事情的功能,这个功能是通过云函数和 ProcessReporter 软件实现的。\n\n\n\n\n\n\n非常感谢 Innei, timochan, TNXG 的贡献,目前 ProcessReporter 已支持全平台!","配置云函数#配置云函数":"进入后台,点击左侧菜单栏的「其他 -> 配置与云函数」,然后点击新建按钮,在选项卡中填入以下信息:\n名称:update\n引用:ps\n数据类型:Function\n请求方式:POST\n\n这个地方还需要设置一个密钥,在 Secret 中填入 key,在 Value 中填入你自己的密钥。\n这个密钥将用于验证你的软件是否有权限更新博主的动态,所以请务必设置一个复杂的密钥。密钥在后面的步骤中还需要用到,所以请务必记住。\n上方没有提到的选项都不需要填写,然后在右侧的代码编辑器中填入下面链接中的代码:\n\n点击保存按钮,云函数就配置完成了。\n请关注此代码的更新,它可能会随时变化,你需要及时更新它们","配置主题配置#配置主题配置":"继续在「配置与云函数」页面,找到「theme -> shiro」配置,点击编辑,进入编辑页面,在代码中找到 module,加入 activity 配置,如下:(高亮部分)","配置软件#配置软件":"前往对应着你的电脑系统的软件的 GitHub 仓库,下载并打开 ProcessReporter。\n\n\n\n\n\n由于不同平台有不同的使用方法,不同的软件我们会在下方具体讲述。","processreporter-mac#ProcessReporter Mac":"打开软件后,你会发现你的系统菜单栏中多了一个图标,点击图标,然后点击「设置」,在弹出的窗口中填入你的信息:\nEndpoint:{你的API地址}/fn/ps/update (请将 {你的API地址} 替换为你的 API 地址,如:https://api.example.com/api/v2)\nAPI Key:填入你刚刚在云函数中设置的密钥\n\n如果你希望软件在开机时自动启动,可以勾选「Launch at login」选项。接着关闭窗口,再次点击菜单栏中的图标,点击「Enable」即可。如果一切正常,刷新一下你的博客你就可以在博客顶部看到你的动态了。","processreporter-windows#ProcessReporter Windows":"Windows 版本的使用问题,请前往 TNXG/ProcessReporterWinpy 查看。","使用-gui-版本#使用 GUI 版本":"在 Releases 页面下载 ProcessReporterWinpy_Launcher.exe\n,配置好 config.yml 文件,然后运行 ProcessReporterWinpy_Launcher.exe 即可。config.yml 配置具体配置项以及说明请参考 TNXG/ProcessReporterWinpy。","使用预编译的二进制文件#使用预编译的二进制文件":"在 Releases 页面下载 ProcessReporterWinpy.exe,配置好 config.yml 文件后,在终端运行即可,示例如下\n\nconfig.yml 配置具体配置项以及说明请参考 TNXG/ProcessReporterWinpy。","使用源代码#使用源代码":"下载代码后,修改 config.yml 文件,填入你的信息:\napi_url:{你的API地址}/fn/ps/update (请将 {你的API地址} 替换为你的 API 地址,如:https://api.example.com/api/v2)\napi_key:填入你刚刚在云函数中设置的密钥\nreport_time: 上报间隔(单位:秒)\n\n接着运行程序即可。如果一切正常,刷新一下你的博客你就可以在博客顶部看到你的动态了。","processreporter-linux#ProcessReporter Linux":"在仓库的 Releases 页面下载对应的二进制包,解压运行即可,具体请参照项目的 README 进行配置运行。安装完成后,新建 .env.process 文件,填入你的信息:\n\n然后执行程序即可。如果一切正常,刷新一下你的博客你就可以在博客顶部看到你的动态了。如果有什么疑问,可以去阅读该项目的 README","个人状态展示#个人状态展示":"设置当前的状态。","配置云函数-1#配置云函数":"进入后台,点击左侧菜单栏的「其他 -> 配置与云函数」,然后点击新建按钮,在选项卡中填入以下信息:\n名称:status\n引用:shiro\n数据类型:Function\n请求方式:ALL\n\n这个地方还需要设置一个密钥,在 Secret 中填入 key,在 Value 中填入你自己的密钥。\n这个密钥将用于验证你的软件是否有权限更新当前状态,所以请务必设置一个复杂的密钥。密钥在后面的步骤中还需要用到,所以请务必记住。\n上方没有提到的选项都不需要填写,然后在右侧的代码编辑器中填入下面链接中的代码:\n\n点击保存按钮,云函数就配置完成了。\n请关注此代码的更新,它可能会随时变化,你需要及时更新它们","设置状态#设置状态":"在主页登录之后,你可以点击此头像的右下方设置状态。APP 集成正在开发中.."}},"/themes/shiro":{"title":"Shiro 主题","data":{"":"","demo#Demo":"","前提要求#前提要求":"你已安装 Mix Space 后端并且已启动\n你已注册 Vercel 和 GitHub 账号\n你已注册 Clerk 账号\n\n\n请注意,Shiro 主题的部署教程与初版有所不同,如果你已经部署过 Shiro\n主题,请重新阅读本文档(尤其是填入配置文件环节,配置有所变化),并阅读最后一节\n「移除 Edge Config」。","安装#安装":"","克隆仓库#克隆仓库":"登陆 GitHub 账号,打开 Innei/Shiro,点击右上角的 Fork 按钮,将仓库克隆到你的账号下。","打开-vercel-创建项目#打开 Vercel 创建项目":"登陆 Vercel 账号,点击右上角的 New Project 按钮,选择 Import Git Repository,选择你刚刚 Fork 的仓库,点击 Import 按钮,即可进入到项目配置页面。","打开-clerk-创建项目#打开 Clerk 创建项目":"打开 Clerk 仪表盘 点击 Add application 按钮,填入你的博客名称,并配置信息,点击 Create application 按钮,即可完成配置。\n请你务必记住你的 Clerk 页面的公钥和私钥,稍后将会用到。","设置主题配置#设置主题配置":"进入 Mix Space 后台,进入「配置与云函数」页面,点击右上角的新增按钮,在编辑页面中,填入以下设置:\n名称:shiro\n引用:theme\n数据类型:JSON\n数据:(点击下方的按钮复制)\n\n\n\n请注意,这份配置你需要自行修改成符合你的需求的配置。直接使用下面的配置可能会导致你的博客无法按照你的预期运行。\n\n下面的配置可能不全,更多配置项的信息请移步 配置项\n阅读更多。\n\n\n\n点击按钮保存配置,随后继续进行下面的步骤。","配置环境变量#配置环境变量":"在下方的配置表格中,填入你的环境变量,然后点击复制按钮,将环境变量复制到剪贴板中。","键入环境变量--开始部署#键入环境变量 & 开始部署":"在刚刚进入的 Vercel 项目配置页面中,点击 Environment Variables,然后键盘上的 Ctrl + V 将环境变量粘贴到输入框中,然后点击 Deploy 按钮,等待部署完成。","clerk-登录与-mix-space-后端绑定#Clerk 登录与 Mix Space 后端绑定":"如果你遇到在 Shiro 登录之后,无法评论遇到 \"和主人重名\" 的报错,是因为 Clerk 的用户名和 Mix Space 后端的用户名重复了,你需要绑定本系统和 Clerk 的用户。让某个 Clerk 用户具有管理员权限。具体操作方法:\n升级 Mix Space Core 到 4.7.0 以上版本。\n打开 Clerk 对于此项目的控制台:\n\nPEM 的获取方式:https://clerk.com/docs/backend-requests/handling/manual-jwt\nKey:\n\n在 Shiro 用 clerk 登录后,通过 console 抓取请求:\n\n你的 clerk User Id 获取方式:Refer: https://github.com/Innei/Shiro/issues/137","完成#完成!":"至此,你已完成了 Shiro 主题的部署,你可以访问你的博客了。有关配置域名的教程,请参考 Vercel 文档。","移除-edge-config#移除 Edge Config":"在后续的 Shiro 更新中,Edge Config 将不再被使用。你可能需要移除 Edge Config,以防止不必要的资源使用。进入 Vercel 部署此项目的仪表盘,点击上方的 Storage,进入设置页面,点击左侧的 Projects,将链接的项目取消链接,接着点击左侧的 Settings,点击右侧的 Delete Edge Config 按钮,即可完成删除。","更新#更新":"按照文档的部署方法使用 Vercel 托管的话,只需要在自己 Fork 的项目上 Sync Fork 即可(如图)。如果自己有魔改某些内容的话不要点击 Discard Changes,会把自己的魔改搞没了。"}},"/themes/yun":{"title":"Yun 主题","data":{"":"由于 Yun 主题将不再维护,此文档将不再更新,但是你仍然可以使用它。","克隆项目#克隆项目":"","安装依赖#安装依赖":"","配置服务#配置服务":"如果你部署 Mix Space 后端与部署 Yun 前端在同一台服务器,并且后端监听的端口为 2333,那么你可以跳过这一步。\n\n前往 ./server/constant.ts\n\n\n\n修改为你的后端 API 地址。","开始构建#开始构建":"","启动前端#启动前端":""}},"/usage/backup":{"title":"备份与回滚","data":{"":"在 Mix Space 中内有备份功能,并且每日默认自动备份,数据无价请定期手动下载备份包。","备份#备份":"在后端中 其他 - 备份 中点击立即备份,即备份到绝对目录:~/mx-space/core/data/mx-space/backup/20xx-xx-xx_xx:xx:xx/backup-20xx-xx-xx_xx:xx:xx.zip","自动备份#自动备份":"目前该功能仅支持备份到腾讯云 COS,暂不支持其他云服务。当然,你也可以通过设置计划任务等方法达到和此功能一样的效果。设置入口:设定 - 系统 - 备份,填入 COS 对应参数即可。","回滚#回滚":"该操作涉及修改数据库,请多备份几个工作日的 backup,数据无价请谨慎操作!一般情况下回滚只会导致 analyze 数据页丢失 IP & PV 的数据。\n\nLinux 和 macOS 可直接上传备份包,并且无需修改包名一致即可回滚,以下操作仅针对使用 Windows 用户访问后端回滚的情况。\n在后端中 其他 - 备份 中点击立即备份,将之前在电脑里的 backup.zip 上传到刚刚生成的备份目录里进行重命名替换。例:假如刚刚生成的备份是 backup-2022-09-01_23:33:33.zip 将想进行回滚的备份包 backup-2022-01-14_05:14:19.zip 修改为刚刚生成的备份一样的名字:\n\n\n不要在 Windows 下重命名,Windows 不支持将英文冒号作为文件名的一部分\n替换完成会提示“数据库有变动,将在 x 秒后重载页面”,重载先检查文章评论等有没有丢失。"}},"/usage":{"title":"使用指南","data":{"":"本章节将会带您了解 Mix Space 的一些功能,以及如何使用它们。\n温馨提示:此指南需要一定的基础知识 & 理解能力,请准备好哦~","官方指南#官方指南":"","社区使用指南#社区使用指南":""}},"/usage/search":{"title":"Algolia Search","data":{"":"","介绍#介绍":"Algolia 是一个数据库实时搜索服务,能够提供毫秒级的数据库搜索服务,并且其服务能以 API 的形式方便地布局到网页、客户端、APP 等多种场景。像 VuePress 官方文档就是使用的 Algolia 搜索,使用 Algolia 搜索最大的好处就是方便,它会自动爬取网站的页面内容并构建索引,你只用申请一个 Algolia 服务,在网站上添加一些代码,就可以实现一个全文搜索功能。","使用#使用":"在这之前,你需要先在 Algolia 官网注册一个账号,或者直接用第三方登录。","新建应用#新建应用":"登录 Algolia 账号,进入控制台,在左上角点击 Applications 下列表,点击 New Application,填写应用名称,选择 BUILD 订阅(免费),选择好数据中心,点击 Create Application,即可创建一个应用。一些额外说明的地方都在图片上标注了,可参考下面的图片。","创建索引index#创建索引(Index)":"在新建应用之后,你会直接跳转到如下图所示的界面,只需要在输入框中输入一个索引名称,点击 Create Index,即可创建一个索引。请记住你所创建的索引名称(Index Name),后面的步骤会用到。","获取相关变量#获取相关变量":"接下来,在左下角找到齿轮图标,进入设置,在右侧找到 API Keys,进入,这里有两个变量需要复制下来备用,分别是 Application ID 和 Admin API Key,请复制下这两个变量的值,后面的步骤会用到。","后台配置#后台配置":"进入后台,设定->系统->Algolia Search,将“开启 Algolia Search”开关打开,将前面准备的 IndexName、Application ID(AppID) 和 Admin API Key(ApiKey) 填入对应的框中,右上角保存即可。\n至此,Algolia 搜索的配置就完成了。稍等一会,就可以尝试在主页用 Ctrl + K 调用 Algolia 进行站内搜索了。"}},"/usage/security":{"title":"Key 加密与安全性","data":{"":"在 v3.41.0 后续版本,加入了敏感 Key 加密功能。默认为关。为什么需要 Key 加密。假设黑客通过某种手段数据库被脱库。如果开启了 Key 加密,即便是拿到了全部数据也不能解密某些关键数据,例如配置项中的各类 API Key。但是,也需要谨慎开启此功能,开启后你需要记住加密秘钥。否则,你也将会永远丢失这些数据。","如何开启#如何开启":"你可以附加 --encrypt_enable 来启动服务。如:\n\n可以通过附加 --encrypt_key 来指定加密密钥,长度必须为 64 位,且只有小写字母和数字。请牢记此密钥。或者通过环境变量 MX_ENCRYPT_KEY 也可以指定密钥。\n若开启加密,则需注意密钥长度必须为 64 位且只有小写字母和数字,不然会在初始化时报错。注意这是不可逆的,务必保存自己的秘钥。\nAPI Key.\n密钥可以通过 openssl rand -hex 32 命令生成。请务必牢记。\nMX_ENCRYPT_KEY --encrypt_key 不是必须的,默认取机器的\nmachine-id。\n\n此操作时不可逆的,操作前请备份数据库。","自动化加密配置进阶指令非必要#自动化加密配置(进阶指令)(非必要)":"此操作时不可逆的,操作前请备份数据库。","疑难解答#疑难解答":"如果出现 Invalid key length,请你确定是否开启了此功能,并且 key 的长度是否为 64 位长度。"}},"/usage/serverless":{"title":"云函数","data":{"":"","介绍#介绍":"云函数是 Mix Space 中的一个重要功能,它极大地辅助了使用者在 Mix Space 中的体验。通过云函数,Mix Space 可以额外实现实现歌单解析,追番列表等等的功能。你可以在此处看到 Mix Space 目前收录的云函数 Snappets","使用#使用":"有一些前端主题需要使用云函数,这个时候你需要进入到云函数设置界面,将云函数代码填入到对应的位置。","1-进入云函数设置界面#1. 进入云函数设置界面":"进入后台管理,点击左侧菜单栏的 其他 - 云函数,即可进入云函数管理页面。","2-下载扩展包#2. 下载扩展包":"在右上方,点击 下载拓展包,你将会看到一个弹窗。","3-导入#3. 导入":"请在弹窗内请找到对应的主题的云函数代码,点击导入,即可完成下载对应的云函数代码。\n接下来,你可以在云函数管理页面看到你刚刚导入的云函数代码。","开发者文档#开发者文档":""}},"/usage/update":{"title":"更新 Mix Space","data":{"":"开头介绍就说过,Mx-Space 分为前端和后端两个部分,因此,更新的时候二者也需要分开更新。","core后端更新#Core(后端)更新":"根据部署方式的不同,更新方式也有不同。","docker-部署#Docker 部署":"进入 core 所在文件夹,然后 docker compose pull && docker compose up -d","进阶部署#进阶部署":"进入克隆 core 的文件夹,执行 git pull origin master 拉取新版本源码,随后正常进行 pnpm i -> pnpm build -> pnpm bundle。随后 进入 ./apps/core/out,执行以下命令启动服务 pm2 start ecosystem.config.js","前端更新#前端更新":"请根据自己所部署的主题跳转到对应的更新部分完成更新。"}},"/usage/xlog":{"title":"xLog 集成","data":{"":"","介绍#介绍":"此功能需要:\nCore: >=3.43.1\n\nxLog 功能可以将你的博客同步到 xLog 平台。具体就是 此文章已经由它的创作者签名并安全地存储在区块链上。当你没有为文章写摘要的时候,可以使用 xLog 平台生成的摘要,当然你也可以使用自己的 GPT API Key 去调用 GPT 去生成摘要。","使用#使用":"在 系统 - 第三方服务集成,填写 xLog SiteId 即可,然后去 xLog 平台去升级为钱包登录即可。钱包的注册方法请根据 xLog 的引导一步步注册。SiteId 是一个字符串,可以在 xLog 平台的设置 - 域名找到;例如 example.xlog.app,即 SiteId = example。当你完成钱包的注册,并使用钱包登录 xLog 平台的时候,就完成设置工作了。接下来你发布文章的时候,会自动的进行同步和签名;当然,需要经过你的同意。"}}}
\ No newline at end of file
diff --git a/_next/static/chunks/pages/themes/shiro/config-35d5230e51a9bec1.js b/_next/static/chunks/pages/themes/shiro/config-35d5230e51a9bec1.js
deleted file mode 100644
index be9e5b06..00000000
--- a/_next/static/chunks/pages/themes/shiro/config-35d5230e51a9bec1.js
+++ /dev/null
@@ -1 +0,0 @@
-(self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[561],{1329:function(e,n,i){(window.__NEXT_P=window.__NEXT_P||[]).push(["/themes/shiro/config",function(){return i(8830)}])},8160:function(e,n,i){"use strict";i.d(n,{g:function(){return r}});var t=i(1527),s=i(5341);let a=e=>{let{children:n,className:i}=e;return(0,t.jsx)("div",{className:(0,s.Z)("inline-block text-xs text-white p-1 rounded-md bg-cyan-600 dark:bg-cyan-500",i),children:n})},r=()=>(0,t.jsx)(a,{className:"absolute translate-y-2 translate-x-2 z-[10]",children:(0,t.jsx)("span",{title:"此功能仅闭源版本提供",children:"闭源版本"})})},8076:function(e,n,i){"use strict";var t=i(1527),s=i(5903),a=i.n(s);i(959);var r=i(7634),d=i(1689);let o=(0,t.jsxs)("span",{className:"jsx-ce537a1fc447edae",children:[(0,t.jsx)("img",{src:"/logo.png",className:"jsx-ce537a1fc447edae"}),"Mix Space",(0,t.jsx)(a(),{id:"ce537a1fc447edae",children:"span.jsx-ce537a1fc447edae{padding:.5rem .5rem .5rem 0;-webkit-mask-image:-webkit-linear-gradient(30deg,black 25%,rgba(0,0,0,.2)50%,black 75%);mask-image:-webkit-linear-gradient(30deg,black 25%,rgba(0,0,0,.2)50%,black 75%);mask-image:-moz-linear-gradient(30deg,black 25%,rgba(0,0,0,.2)50%,black 75%);mask-image:-o-linear-gradient(30deg,black 25%,rgba(0,0,0,.2)50%,black 75%);mask-image:linear-gradient(60deg,black 25%,rgba(0,0,0,.2)50%,black 75%);-webkit-mask-size:400%;mask-size:400%;-webkit-mask-position:0%;mask-position:0%;display:-webkit-box;display:-webkit-flex;display:-moz-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-webkit-align-items:center;-moz-box-align:center;-ms-flex-align:center;align-items:center;font-size:16px;font-weight:600}img.jsx-ce537a1fc447edae{margin-right:8px;height:24px}span.jsx-ce537a1fc447edae:hover{-webkit-mask-position:100%;mask-position:100%;-webkit-transition:mask-position 1s ease,-webkit-mask-position 1s ease;-moz-transition:mask-position 1s ease,-webkit-mask-position 1s ease;-o-transition:mask-position 1s ease,-webkit-mask-position 1s ease;transition:mask-position 1s ease,-webkit-mask-position 1s ease}"})]}),l={logo:o,head:function(){let{title:e}=(0,r.ZR)();return(0,t.jsxs)(t.Fragment,{children:[(0,t.jsx)("link",{rel:"dns-prefetch",href:"//pan.vinua.cn"}),(0,t.jsx)("meta",{name:"msapplication-TileColor",content:"#fff"}),(0,t.jsx)("meta",{name:"theme-color",content:"#fff"}),(0,t.jsx)("meta",{name:"viewport",content:"width=device-width, initial-scale=1.0"}),(0,t.jsx)("meta",{httpEquiv:"Content-Language",content:"en"}),(0,t.jsx)("meta",{name:"description",content:"A flexible, modular CMS Blog System."}),(0,t.jsx)("meta",{name:"og:description",content:"A flexible, modular CMS Blog System."}),(0,t.jsx)("meta",{name:"twitter:card",content:"summary_large_image"}),(0,t.jsx)("meta",{name:"twitter:site:domain",content:"mog.js.org"}),(0,t.jsx)("meta",{name:"twitter:url",content:"https://mog.js.org"}),(0,t.jsx)("meta",{name:"og:title",content:e?e+" | Mix Space":"Mix Space"}),(0,t.jsx)("meta",{name:"apple-mobile-web-app-title",content:"Mix Space"}),(0,t.jsx)("link",{rel:"icon",href:"/favicon.svg",type:"image/svg+xml"}),(0,t.jsx)("link",{rel:"icon",href:"/favicon.png",type:"image/png"})]})},project:{link:"https://github.com/mx-space/core"},docsRepositoryBase:"https://github.com/mx-space/docs/blob/main",footer:{text:(0,t.jsx)("div",{className:"flex w-full flex-col items-center sm:items-start",children:(0,t.jsxs)("p",{className:"text-xs",children:["\xa9 ",new Date().getFullYear()," This project is licensed under AGPLv3 with additional terms, and this documentation is licensed under CC BY 4.0. All licensed. 2021-present Mix Space Team"]})})},useNextSeoProps(){let{asPath:e}=(0,d.useRouter)();if("/"!==e)return{titleTemplate:"%s | Mix Space"}},editLink:{text:"Edit this page on GitHub →"},banner:{key:"theme-shiro",text:(0,t.jsx)("a",{href:"https://mx-space.js.org/themes/shiro",target:"_blank",children:"\uD83C\uDFA8 New Mix Space theme `Shiro` is released. Read more →"})}};n.Z=l},8830:function(e,n,i){"use strict";i.r(n);var t=i(1527),s=i(985),a=i(7634),r=i(8076);i(9941),i(1365);var d=i(6736);i(8823);var o=i(8160);let l={MDXContent:function(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},{wrapper:n}=Object.assign({},(0,d.ah)(),e.components);return n?(0,t.jsx)(n,{...e,children:(0,t.jsx)(c,{...e})}):c(e)},pageOpts:{filePath:"pages/themes/shiro/config.mdx",route:"/themes/shiro/config",headings:[{depth:1,value:"配置项",id:"配置项"},{depth:2,value:"页脚信息(footer)",id:"页脚信息footer"},{depth:3,value:"备案(otherInfo.icp)",id:"备案otherinfoicp"},{depth:3,value:"建站年份(otherInfo.date)",id:"建站年份otherinfodate"},{depth:3,value:"页脚导航(linkSections)",id:"页脚导航linksections"},{depth:2,value:"站点信息 (config.site)",id:"站点信息-configsite"},{depth:3,value:"Favicon",id:"favicon"},{depth:2,value:"Hero 部分 (config.hero)",id:"hero-部分-confighero"},{depth:3,value:"Title 模板 (title.template)",id:"title-模板-titletemplate"},{depth:3,value:"描述 (description)",id:"描述-description"},{depth:2,value:"模块 (config.module)",id:"模块-configmodule"},{depth:3,value:"实时活动 (activity) 模块",id:"实时活动-activity-模块"},{depth:3,value:"捐赠 (donate) 模块",id:"捐赠-donate-模块"},{depth:3,value:"社交媒体 (bilibili) 模块",id:"社交媒体-bilibili-模块"},{depth:3,value:"OpenPanel ",id:"openpanel-"}],pageMap:[{kind:"Meta",data:{index:{type:"page",title:"Mix Space",display:"hidden",theme:{layout:"raw"}},docs:{type:"page",title:"部署文档"},usage:{type:"page",title:"使用指南"},themes:{type:"page",title:"前端主题",theme:{layout:"raw"}},development:{title:"系统开发",type:"page"}}},{kind:"Folder",name:"development",route:"/development",children:[{kind:"Meta",data:{index:"前言",frontend:"前端开发指南",admin:"后台单独部署"}},{kind:"MdxPage",name:"admin",route:"/development/admin"},{kind:"MdxPage",name:"frontend",route:"/development/frontend"},{kind:"MdxPage",name:"index",route:"/development"}]},{kind:"Folder",name:"docs",route:"/docs",children:[{kind:"Meta",data:{index:"引言",features:"主要功能","-- advanced":{type:"separator",title:"部署"},docker:"Docker 部署",scripts:"预设脚本部署",advanced:"进阶部署",extra:"相关内容",community:"社区分享"}},{kind:"MdxPage",name:"advanced",route:"/docs/advanced"},{kind:"MdxPage",name:"community",route:"/docs/community"},{kind:"MdxPage",name:"docker",route:"/docs/docker"},{kind:"MdxPage",name:"extra",route:"/docs/extra"},{kind:"MdxPage",name:"features",route:"/docs/features"},{kind:"MdxPage",name:"index",route:"/docs",frontMatter:{title:"引言"}},{kind:"MdxPage",name:"scripts",route:"/docs/scripts"}]},{kind:"MdxPage",name:"index",route:"/",frontMatter:{title:"Mix Space - An Alternative Personal Space."}},{kind:"Folder",name:"themes",route:"/themes",children:[{kind:"Meta",data:{index:{title:"主题目录"},shiro:{title:"部署 Shiro 主题",theme:{layout:"default"}},kami:{title:"部署 Kami 主题",theme:{layout:"default"}},yun:{title:"部署 Yun 主题",theme:{layout:"default"}}}},{kind:"MdxPage",name:"index",route:"/themes",frontMatter:{title:"前端主题"}},{kind:"MdxPage",name:"kami",route:"/themes/kami"},{kind:"Folder",name:"shiro",route:"/themes/shiro",children:[{kind:"Meta",data:{index:"部署主题",extra:"额外功能",config:"配置项"}},{kind:"MdxPage",name:"config",route:"/themes/shiro/config"},{kind:"MdxPage",name:"extra",route:"/themes/shiro/extra"},{kind:"MdxPage",name:"index",route:"/themes/shiro"}]},{kind:"MdxPage",name:"yun",route:"/themes/yun"}]},{kind:"Folder",name:"usage",route:"/usage",children:[{kind:"Meta",data:{index:"使用指南","-- built-in":{type:"separator",title:"官方指南"},serverless:"云函数",xlog:"xLog 集成",search:"Algolia Search",backup:"备份与回滚",update:"更新 Mix Space",security:"Key 加密与安全性","-- community":{type:"separator",title:"社区使用指南"}}},{kind:"MdxPage",name:"backup",route:"/usage/backup"},{kind:"MdxPage",name:"index",route:"/usage"},{kind:"MdxPage",name:"search",route:"/usage/search"},{kind:"MdxPage",name:"security",route:"/usage/security"},{kind:"MdxPage",name:"serverless",route:"/usage/serverless"},{kind:"MdxPage",name:"update",route:"/usage/update"},{kind:"MdxPage",name:"xlog",route:"/usage/xlog"}]}],flexsearch:{codeblocks:!1},title:"配置项"},pageNextRoute:"/themes/shiro/config",nextraLayout:a.ZP,themeConfig:r.Z};function c(e){let n=Object.assign({h1:"h1",h2:"h2",code:"code",p:"p",h3:"h3",pre:"pre",span:"span",strong:"strong",ul:"ul",li:"li",a:"a"},(0,d.ah)(),e.components);return(0,t.jsxs)(t.Fragment,{children:[(0,t.jsx)(n.h1,{children:"配置项"}),"\n",(0,t.jsxs)(n.h2,{id:"页脚信息footer",children:["页脚信息(",(0,t.jsx)(n.code,{children:"footer"}),")"]}),"\n",(0,t.jsx)(n.p,{children:"此部分定义页脚的部分信息,主要包括备案、建站年份和页脚导航三部分。"}),"\n",(0,t.jsxs)(n.h3,{id:"备案otherinfoicp",children:["备案(",(0,t.jsx)(n.code,{children:"otherInfo.icp"}),")"]}),"\n",(0,t.jsx)(n.p,{children:"此部分未在默认配置中提供。以下为参照写法:"}),"\n",(0,t.jsx)(n.pre,{"data-language":"json","data-theme":"default",hasCopyCode:!0,children:(0,t.jsxs)(n.code,{"data-language":"json","data-theme":"default",children:[(0,t.jsxs)(n.span,{className:"line",children:[(0,t.jsx)(n.span,{style:{color:"var(--shiki-token-string-expression)"},children:'"icp"'}),(0,t.jsx)(n.span,{style:{color:"var(--shiki-color-text)"},children:": {"})]}),"\n",(0,t.jsxs)(n.span,{className:"line",children:[(0,t.jsx)(n.span,{style:{color:"var(--shiki-color-text)"},children:" "}),(0,t.jsx)(n.span,{style:{color:"var(--shiki-token-keyword)"},children:'"text"'}),(0,t.jsx)(n.span,{style:{color:"var(--shiki-token-punctuation)"},children:":"}),(0,t.jsx)(n.span,{style:{color:"var(--shiki-color-text)"},children:" "}),(0,t.jsx)(n.span,{style:{color:"var(--shiki-token-string-expression)"},children:'"浙ICP备20028356号"'}),(0,t.jsx)(n.span,{style:{color:"var(--shiki-token-punctuation)"},children:","})]}),"\n",(0,t.jsxs)(n.span,{className:"line",children:[(0,t.jsx)(n.span,{style:{color:"var(--shiki-color-text)"},children:" "}),(0,t.jsx)(n.span,{style:{color:"var(--shiki-token-keyword)"},children:'"link"'}),(0,t.jsx)(n.span,{style:{color:"var(--shiki-token-punctuation)"},children:":"}),(0,t.jsx)(n.span,{style:{color:"var(--shiki-color-text)"},children:" "}),(0,t.jsx)(n.span,{style:{color:"var(--shiki-token-string-expression)"},children:'"https://beian.miit.gov.cn"'})]}),"\n",(0,t.jsx)(n.span,{className:"line",children:(0,t.jsx)(n.span,{style:{color:"var(--shiki-color-text)"},children:" }"})})]})}),"\n",(0,t.jsxs)(n.p,{children:[(0,t.jsx)(n.strong,{children:"如何使用"}),": 根据参照写法,修改位于 ",(0,t.jsx)(n.code,{children:"text"})," 的备案号以及备案号所指向的链接 ",(0,t.jsx)(n.code,{children:"link"}),"。"]}),"\n",(0,t.jsxs)(n.h3,{id:"建站年份otherinfodate",children:["建站年份(",(0,t.jsx)(n.code,{children:"otherInfo.date"}),")"]}),"\n",(0,t.jsxs)(n.p,{children:[(0,t.jsx)(n.strong,{children:"如何使用"}),": ",(0,t.jsx)(n.code,{children:"{{now}}"})," 指向当前年份,其他略。"]}),"\n",(0,t.jsxs)(n.h3,{id:"页脚导航linksections",children:["页脚导航(",(0,t.jsx)(n.code,{children:"linkSections"}),")"]}),"\n",(0,t.jsxs)(n.p,{children:["分类包括 ",(0,t.jsx)(n.code,{children:"name"})," 和 ",(0,t.jsx)(n.code,{children:"links"})," 两个字段,对应分类名字及其下链接,其下链接又分为 ",(0,t.jsx)(n.code,{children:"name"}),"、",(0,t.jsx)(n.code,{children:"href"}),"、",(0,t.jsx)(n.code,{children:"external"})," 三个字段,对应链接名字,指向链接和是否外链三个属性。"]}),"\n",(0,t.jsxs)(n.p,{children:[(0,t.jsx)(n.strong,{children:"如何使用"}),": 根据自己需要增删或修改特定链接及分类,需要注意如果指向外链的话需要加一行 ",(0,t.jsx)(n.code,{children:'"external": true'}),"。"]}),"\n",(0,t.jsxs)(n.h2,{id:"站点信息-configsite",children:["站点信息 (",(0,t.jsx)(n.code,{children:"config.site"}),")"]}),"\n",(0,t.jsx)(n.p,{children:"此部分包含了网站的基础信息设置,例如 favicon(网站图标)的配置。"}),"\n",(0,t.jsx)(n.h3,{id:"favicon",children:"Favicon"}),"\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsxs)(n.li,{children:[(0,t.jsx)(n.strong,{children:(0,t.jsx)(n.code,{children:"favicon"})}),": 设置网站在浅色模式下使用的图标。"]}),"\n",(0,t.jsxs)(n.li,{children:[(0,t.jsx)(n.strong,{children:(0,t.jsx)(n.code,{children:"faviconDark"})}),": 设置网站在深色模式下使用的图标。"]}),"\n"]}),"\n",(0,t.jsxs)(n.h2,{id:"hero-部分-confighero",children:["Hero 部分 (",(0,t.jsx)(n.code,{children:"config.hero"}),")"]}),"\n",(0,t.jsxs)(n.p,{children:[(0,t.jsx)(n.code,{children:"hero"})," 部分定义了网站首页的主要欢迎信息或介绍部分,这是访问者首次进入网站时看到的部分。"]}),"\n",(0,t.jsxs)(n.h3,{id:"title-模板-titletemplate",children:["Title 模板 (",(0,t.jsx)(n.code,{children:"title.template"}),")"]}),"\n",(0,t.jsxs)(n.p,{children:["包括多个元素(如 ",(0,t.jsx)(n.code,{children:"h1"}),", ",(0,t.jsx)(n.code,{children:"code"}),", ",(0,t.jsx)(n.code,{children:"span"}),"),每个元素都可以自定义文本内容和样式(通过 CSS 类)。"]}),"\n",(0,t.jsxs)(n.p,{children:[(0,t.jsx)(n.strong,{children:"如何使用"}),": 修改 ",(0,t.jsx)(n.code,{children:"text"})," 和 ",(0,t.jsx)(n.code,{children:"class"})," 字段来自定义标题的文本内容和样式。你可以通过添加或删除元素来调整标题的结构。"]}),"\n",(0,t.jsxs)(n.h3,{id:"描述-description",children:["描述 (",(0,t.jsx)(n.code,{children:"description"}),")"]}),"\n",(0,t.jsxs)(n.p,{children:["提供了对 ",(0,t.jsx)(n.code,{children:"hero"})," 部分的简短描述。"]}),"\n",(0,t.jsxs)(n.p,{children:[(0,t.jsx)(n.strong,{children:"如何使用"}),": 直接修改 ",(0,t.jsx)(n.code,{children:"description"})," 的值以更改介绍文本。"]}),"\n",(0,t.jsxs)(n.h2,{id:"模块-configmodule",children:["模块 (",(0,t.jsx)(n.code,{children:"config.module"}),")"]}),"\n",(0,t.jsx)(n.p,{children:"此部分配置了网站的一些特定功能模块,比如活动跟踪、捐赠支持、社交媒体链接等。"}),"\n",(0,t.jsxs)(n.h3,{id:"实时活动-activity-模块",children:["实时活动 (",(0,t.jsx)(n.code,{children:"activity"}),") 模块"]}),"\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsxs)(n.li,{children:[(0,t.jsx)(n.strong,{children:(0,t.jsx)(n.code,{children:"enable"})}),": 控制模块是否启用。"]}),"\n",(0,t.jsxs)(n.li,{children:[(0,t.jsx)(n.strong,{children:(0,t.jsx)(n.code,{children:"endpoint"})}),": 指定活动更新的服务器端点。"]}),"\n"]}),"\n",(0,t.jsxs)(n.p,{children:[(0,t.jsx)(n.strong,{children:"如何使用"}),": 若需开启活动跟踪功能,将 ",(0,t.jsx)(n.code,{children:"enable"})," 设为 ",(0,t.jsx)(n.code,{children:"true"})," 并设置 ",(0,t.jsx)(n.code,{children:"endpoint"})," 为处理活动数据的服务器地址。"]}),"\n",(0,t.jsxs)(n.h3,{id:"捐赠-donate-模块",children:["捐赠 (",(0,t.jsx)(n.code,{children:"donate"}),") 模块"]}),"\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsxs)(n.li,{children:[(0,t.jsx)(n.strong,{children:(0,t.jsx)(n.code,{children:"enable"})}),": 控制捐赠模块是否启用。"]}),"\n",(0,t.jsxs)(n.li,{children:[(0,t.jsx)(n.strong,{children:(0,t.jsx)(n.code,{children:"link"})}),": 提供捐赠页面的链接。"]}),"\n",(0,t.jsxs)(n.li,{children:[(0,t.jsx)(n.strong,{children:(0,t.jsx)(n.code,{children:"qrcode"})}),": 提供一或多个捐赠二维码图片的链接。"]}),"\n"]}),"\n",(0,t.jsxs)(n.p,{children:[(0,t.jsx)(n.strong,{children:"如何使用"}),": 启用捐赠功能,并提供捐赠链接或捐赠二维码,以便支持者可以直接进行捐赠。"]}),"\n",(0,t.jsxs)(n.h3,{id:"社交媒体-bilibili-模块",children:["社交媒体 (",(0,t.jsx)(n.code,{children:"bilibili"}),") 模块"]}),"\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsxs)(n.li,{children:[(0,t.jsx)(n.strong,{children:(0,t.jsx)(n.code,{children:"liveId"})}),": b 站直播间 ID"]}),"\n"]}),"\n","\n",(0,t.jsxs)(n.h3,{id:"openpanel-",children:[(0,t.jsx)(n.a,{href:"https://openpanel.dev",children:"OpenPanel"})," ",(0,t.jsx)(o.g,{})]}),"\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsxs)(n.li,{children:[(0,t.jsx)(n.strong,{children:(0,t.jsx)(n.code,{children:"enable"})}),": 控制 OpenPanel 功能是否启用。"]}),"\n",(0,t.jsxs)(n.li,{children:[(0,t.jsx)(n.strong,{children:(0,t.jsx)(n.code,{children:"id"})}),": OpenPanel 的 ID。"]}),"\n",(0,t.jsxs)(n.li,{children:[(0,t.jsx)(n.strong,{children:(0,t.jsx)(n.code,{children:"url"})}),": OpenPanel 的访问地址。"]}),"\n"]}),"\n",(0,t.jsxs)(n.p,{children:[(0,t.jsx)(n.strong,{children:"如何使用"}),": 如果你使用 OpenPanel 提供交互式面板或其他功能,通过这些配置连接并显示面板。"]})]})}n.default=(0,s.j)(l)},5341:function(e,n,i){"use strict";n.Z=function(){for(var e,n,i=0,t="";i{let{children:n,className:i}=e;return(0,s.jsx)("div",{className:(0,t.Z)("inline-block text-xs text-white p-1 rounded-md bg-cyan-600 dark:bg-cyan-500",i),children:n})},a=()=>(0,s.jsx)(r,{className:"absolute translate-y-2 translate-x-2 z-[10]",children:(0,s.jsx)("span",{title:"此功能仅闭源版本提供",children:"闭源版本"})})},8076:function(e,n,i){"use strict";var s=i(1527),t=i(5903),r=i.n(t);i(959);var a=i(7634),d=i(1689);let c=(0,s.jsxs)("span",{className:"jsx-ce537a1fc447edae",children:[(0,s.jsx)("img",{src:"/logo.png",className:"jsx-ce537a1fc447edae"}),"Mix Space",(0,s.jsx)(r(),{id:"ce537a1fc447edae",children:"span.jsx-ce537a1fc447edae{padding:.5rem .5rem .5rem 0;-webkit-mask-image:-webkit-linear-gradient(30deg,black 25%,rgba(0,0,0,.2)50%,black 75%);mask-image:-webkit-linear-gradient(30deg,black 25%,rgba(0,0,0,.2)50%,black 75%);mask-image:-moz-linear-gradient(30deg,black 25%,rgba(0,0,0,.2)50%,black 75%);mask-image:-o-linear-gradient(30deg,black 25%,rgba(0,0,0,.2)50%,black 75%);mask-image:linear-gradient(60deg,black 25%,rgba(0,0,0,.2)50%,black 75%);-webkit-mask-size:400%;mask-size:400%;-webkit-mask-position:0%;mask-position:0%;display:-webkit-box;display:-webkit-flex;display:-moz-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-webkit-align-items:center;-moz-box-align:center;-ms-flex-align:center;align-items:center;font-size:16px;font-weight:600}img.jsx-ce537a1fc447edae{margin-right:8px;height:24px}span.jsx-ce537a1fc447edae:hover{-webkit-mask-position:100%;mask-position:100%;-webkit-transition:mask-position 1s ease,-webkit-mask-position 1s ease;-moz-transition:mask-position 1s ease,-webkit-mask-position 1s ease;-o-transition:mask-position 1s ease,-webkit-mask-position 1s ease;transition:mask-position 1s ease,-webkit-mask-position 1s ease}"})]}),l={logo:c,head:function(){let{title:e}=(0,a.ZR)();return(0,s.jsxs)(s.Fragment,{children:[(0,s.jsx)("link",{rel:"dns-prefetch",href:"//pan.vinua.cn"}),(0,s.jsx)("meta",{name:"msapplication-TileColor",content:"#fff"}),(0,s.jsx)("meta",{name:"theme-color",content:"#fff"}),(0,s.jsx)("meta",{name:"viewport",content:"width=device-width, initial-scale=1.0"}),(0,s.jsx)("meta",{httpEquiv:"Content-Language",content:"en"}),(0,s.jsx)("meta",{name:"description",content:"A flexible, modular CMS Blog System."}),(0,s.jsx)("meta",{name:"og:description",content:"A flexible, modular CMS Blog System."}),(0,s.jsx)("meta",{name:"twitter:card",content:"summary_large_image"}),(0,s.jsx)("meta",{name:"twitter:site:domain",content:"mog.js.org"}),(0,s.jsx)("meta",{name:"twitter:url",content:"https://mog.js.org"}),(0,s.jsx)("meta",{name:"og:title",content:e?e+" | Mix Space":"Mix Space"}),(0,s.jsx)("meta",{name:"apple-mobile-web-app-title",content:"Mix Space"}),(0,s.jsx)("link",{rel:"icon",href:"/favicon.svg",type:"image/svg+xml"}),(0,s.jsx)("link",{rel:"icon",href:"/favicon.png",type:"image/png"})]})},project:{link:"https://github.com/mx-space/core"},docsRepositoryBase:"https://github.com/mx-space/docs/blob/main",footer:{text:(0,s.jsx)("div",{className:"flex w-full flex-col items-center sm:items-start",children:(0,s.jsxs)("p",{className:"text-xs",children:["\xa9 ",new Date().getFullYear()," This project is licensed under AGPLv3 with additional terms, and this documentation is licensed under CC BY 4.0. All licensed. 2021-present Mix Space Team"]})})},useNextSeoProps(){let{asPath:e}=(0,d.useRouter)();if("/"!==e)return{titleTemplate:"%s | Mix Space"}},editLink:{text:"Edit this page on GitHub →"},banner:{key:"theme-shiro",text:(0,s.jsx)("a",{href:"https://mx-space.js.org/themes/shiro",target:"_blank",children:"\uD83C\uDFA8 New Mix Space theme `Shiro` is released. Read more →"})}};n.Z=l},8830:function(e,n,i){"use strict";i.r(n);var s=i(1527),t=i(985),r=i(7634),a=i(8076);i(9941),i(1365);var d=i(6736);i(8823);var c=i(8160);let l={MDXContent:function(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},{wrapper:n}=Object.assign({},(0,d.ah)(),e.components);return n?(0,s.jsx)(n,{...e,children:(0,s.jsx)(o,{...e})}):o(e)},pageOpts:{filePath:"pages/themes/shiro/config.mdx",route:"/themes/shiro/config",headings:[{depth:1,value:"配置项",id:"配置项"},{depth:2,value:"页脚信息 (footer)",id:"页脚信息-footer"},{depth:3,value:"备案 (otherInfo.icp)",id:"备案-otherinfoicp"},{depth:3,value:"建站年份 (otherInfo.date)",id:"建站年份-otherinfodate"},{depth:3,value:"页脚导航 (linkSections)",id:"页脚导航-linksections"},{depth:2,value:"站点信息 (config.site)",id:"站点信息-configsite"},{depth:3,value:"Favicon",id:"favicon"},{depth:2,value:"Hero 部分 (config.hero)",id:"hero-部分-confighero"},{depth:3,value:"Title 模板 (title.template)",id:"title-模板-titletemplate"},{depth:3,value:"描述 (description)",id:"描述-description"},{depth:2,value:"自定义脚本 (config.custom)",id:"自定义脚本-configcustom"},{depth:3,value:"Scripts (scripts)",id:"scripts-scripts"},{depth:3,value:"Styles (styles)",id:"styles-styles"},{depth:3,value:"JavaScript tag (js)",id:"javascript-tag-js"},{depth:3,value:"CSS href link (css)",id:"css-href-link-css"},{depth:2,value:"模块 (config.module)",id:"模块-configmodule"},{depth:3,value:"实时活动 (activity) 模块",id:"实时活动-activity-模块"},{depth:3,value:"捐赠 (donate) 模块",id:"捐赠-donate-模块"},{depth:3,value:"社交媒体 (bilibili) 模块",id:"社交媒体-bilibili-模块"},{depth:3,value:"OpenPanel ",id:"openpanel-"}],pageMap:[{kind:"Meta",data:{index:{type:"page",title:"Mix Space",display:"hidden",theme:{layout:"raw"}},docs:{type:"page",title:"部署文档"},usage:{type:"page",title:"使用指南"},themes:{type:"page",title:"前端主题",theme:{layout:"raw"}},development:{title:"系统开发",type:"page"}}},{kind:"Folder",name:"development",route:"/development",children:[{kind:"Meta",data:{index:"前言",frontend:"前端开发指南",admin:"后台单独部署"}},{kind:"MdxPage",name:"admin",route:"/development/admin"},{kind:"MdxPage",name:"frontend",route:"/development/frontend"},{kind:"MdxPage",name:"index",route:"/development"}]},{kind:"Folder",name:"docs",route:"/docs",children:[{kind:"Meta",data:{index:"引言",features:"主要功能","-- advanced":{type:"separator",title:"部署"},docker:"Docker 部署",scripts:"预设脚本部署",advanced:"进阶部署",extra:"相关内容",community:"社区分享"}},{kind:"MdxPage",name:"advanced",route:"/docs/advanced"},{kind:"MdxPage",name:"community",route:"/docs/community"},{kind:"MdxPage",name:"docker",route:"/docs/docker"},{kind:"MdxPage",name:"extra",route:"/docs/extra"},{kind:"MdxPage",name:"features",route:"/docs/features"},{kind:"MdxPage",name:"index",route:"/docs",frontMatter:{title:"引言"}},{kind:"MdxPage",name:"scripts",route:"/docs/scripts"}]},{kind:"MdxPage",name:"index",route:"/",frontMatter:{title:"Mix Space - An Alternative Personal Space."}},{kind:"Folder",name:"themes",route:"/themes",children:[{kind:"Meta",data:{index:{title:"主题目录"},shiro:{title:"部署 Shiro 主题",theme:{layout:"default"}},kami:{title:"部署 Kami 主题",theme:{layout:"default"}},yun:{title:"部署 Yun 主题",theme:{layout:"default"}}}},{kind:"MdxPage",name:"index",route:"/themes",frontMatter:{title:"前端主题"}},{kind:"MdxPage",name:"kami",route:"/themes/kami"},{kind:"Folder",name:"shiro",route:"/themes/shiro",children:[{kind:"Meta",data:{index:"部署主题",extra:"额外功能",config:"配置项"}},{kind:"MdxPage",name:"config",route:"/themes/shiro/config"},{kind:"MdxPage",name:"extra",route:"/themes/shiro/extra"},{kind:"MdxPage",name:"index",route:"/themes/shiro"}]},{kind:"MdxPage",name:"yun",route:"/themes/yun"}]},{kind:"Folder",name:"usage",route:"/usage",children:[{kind:"Meta",data:{index:"使用指南","-- built-in":{type:"separator",title:"官方指南"},serverless:"云函数",xlog:"xLog 集成",search:"Algolia Search",backup:"备份与回滚",update:"更新 Mix Space",security:"Key 加密与安全性","-- community":{type:"separator",title:"社区使用指南"}}},{kind:"MdxPage",name:"backup",route:"/usage/backup"},{kind:"MdxPage",name:"index",route:"/usage"},{kind:"MdxPage",name:"search",route:"/usage/search"},{kind:"MdxPage",name:"security",route:"/usage/security"},{kind:"MdxPage",name:"serverless",route:"/usage/serverless"},{kind:"MdxPage",name:"update",route:"/usage/update"},{kind:"MdxPage",name:"xlog",route:"/usage/xlog"}]}],flexsearch:{codeblocks:!1},title:"配置项"},pageNextRoute:"/themes/shiro/config",nextraLayout:r.ZP,themeConfig:a.Z};function o(e){let n=Object.assign({h1:"h1",h2:"h2",code:"code",p:"p",h3:"h3",pre:"pre",span:"span",strong:"strong",ul:"ul",li:"li",a:"a"},(0,d.ah)(),e.components);return(0,s.jsxs)(s.Fragment,{children:[(0,s.jsx)(n.h1,{children:"配置项"}),"\n",(0,s.jsxs)(n.h2,{id:"页脚信息-footer",children:["页脚信息 (",(0,s.jsx)(n.code,{children:"footer"}),")"]}),"\n",(0,s.jsx)(n.p,{children:"此部分定义页脚的部分信息,主要包括备案、建站年份和页脚导航三部分。"}),"\n",(0,s.jsxs)(n.h3,{id:"备案-otherinfoicp",children:["备案 (",(0,s.jsx)(n.code,{children:"otherInfo.icp"}),")"]}),"\n",(0,s.jsx)(n.p,{children:"此部分未在默认配置中提供。以下为参照写法:"}),"\n",(0,s.jsx)(n.pre,{"data-language":"json","data-theme":"default",hasCopyCode:!0,children:(0,s.jsxs)(n.code,{"data-language":"json","data-theme":"default",children:[(0,s.jsxs)(n.span,{className:"line",children:[(0,s.jsx)(n.span,{style:{color:"var(--shiki-token-string-expression)"},children:'"icp"'}),(0,s.jsx)(n.span,{style:{color:"var(--shiki-color-text)"},children:": {"})]}),"\n",(0,s.jsxs)(n.span,{className:"line",children:[(0,s.jsx)(n.span,{style:{color:"var(--shiki-color-text)"},children:" "}),(0,s.jsx)(n.span,{style:{color:"var(--shiki-token-keyword)"},children:'"text"'}),(0,s.jsx)(n.span,{style:{color:"var(--shiki-token-punctuation)"},children:":"}),(0,s.jsx)(n.span,{style:{color:"var(--shiki-color-text)"},children:" "}),(0,s.jsx)(n.span,{style:{color:"var(--shiki-token-string-expression)"},children:'"浙 ICP 备 20028356 号"'}),(0,s.jsx)(n.span,{style:{color:"var(--shiki-token-punctuation)"},children:","})]}),"\n",(0,s.jsxs)(n.span,{className:"line",children:[(0,s.jsx)(n.span,{style:{color:"var(--shiki-color-text)"},children:" "}),(0,s.jsx)(n.span,{style:{color:"var(--shiki-token-keyword)"},children:'"link"'}),(0,s.jsx)(n.span,{style:{color:"var(--shiki-token-punctuation)"},children:":"}),(0,s.jsx)(n.span,{style:{color:"var(--shiki-color-text)"},children:" "}),(0,s.jsx)(n.span,{style:{color:"var(--shiki-token-string-expression)"},children:'"https://beian.miit.gov.cn"'})]}),"\n",(0,s.jsx)(n.span,{className:"line",children:(0,s.jsx)(n.span,{style:{color:"var(--shiki-color-text)"},children:"}"})})]})}),"\n",(0,s.jsxs)(n.p,{children:[(0,s.jsx)(n.strong,{children:"如何使用"}),": 根据参照写法,修改位于 ",(0,s.jsx)(n.code,{children:"text"})," 的备案号以及备案号所指向的链接 ",(0,s.jsx)(n.code,{children:"link"}),"。"]}),"\n",(0,s.jsxs)(n.h3,{id:"建站年份-otherinfodate",children:["建站年份 (",(0,s.jsx)(n.code,{children:"otherInfo.date"}),")"]}),"\n",(0,s.jsxs)(n.p,{children:[(0,s.jsx)(n.strong,{children:"如何使用"}),": ",(0,s.jsx)(n.code,{children:"{{now}}"})," 指向当前年份,其他略。"]}),"\n",(0,s.jsxs)(n.h3,{id:"页脚导航-linksections",children:["页脚导航 (",(0,s.jsx)(n.code,{children:"linkSections"}),")"]}),"\n",(0,s.jsxs)(n.p,{children:["分类包括 ",(0,s.jsx)(n.code,{children:"name"})," 和 ",(0,s.jsx)(n.code,{children:"links"})," 两个字段,对应分类名字及其下链接,其下链接又分为 ",(0,s.jsx)(n.code,{children:"name"}),"、",(0,s.jsx)(n.code,{children:"href"}),"、",(0,s.jsx)(n.code,{children:"external"})," 三个字段,对应链接名字,指向链接和是否外链三个属性。"]}),"\n",(0,s.jsxs)(n.p,{children:[(0,s.jsx)(n.strong,{children:"如何使用"}),": 根据自己需要增删或修改特定链接及分类,需要注意如果指向外链的话需要加一行 ",(0,s.jsx)(n.code,{children:'"external": true'}),"。"]}),"\n",(0,s.jsxs)(n.h2,{id:"站点信息-configsite",children:["站点信息 (",(0,s.jsx)(n.code,{children:"config.site"}),")"]}),"\n",(0,s.jsx)(n.p,{children:"此部分包含了网站的基础信息设置,例如 favicon(网站图标)的配置。"}),"\n",(0,s.jsx)(n.h3,{id:"favicon",children:"Favicon"}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsxs)(n.li,{children:[(0,s.jsx)(n.strong,{children:(0,s.jsx)(n.code,{children:"favicon"})}),": 设置网站在浅色模式下使用的图标。"]}),"\n",(0,s.jsxs)(n.li,{children:[(0,s.jsx)(n.strong,{children:(0,s.jsx)(n.code,{children:"faviconDark"})}),": 设置网站在深色模式下使用的图标。"]}),"\n"]}),"\n",(0,s.jsxs)(n.h2,{id:"hero-部分-confighero",children:["Hero 部分 (",(0,s.jsx)(n.code,{children:"config.hero"}),")"]}),"\n",(0,s.jsxs)(n.p,{children:[(0,s.jsx)(n.code,{children:"hero"})," 部分定义了网站首页的主要欢迎信息或介绍部分,这是访问者首次进入网站时看到的部分。"]}),"\n",(0,s.jsxs)(n.h3,{id:"title-模板-titletemplate",children:["Title 模板 (",(0,s.jsx)(n.code,{children:"title.template"}),")"]}),"\n",(0,s.jsxs)(n.p,{children:["包括多个元素(如 ",(0,s.jsx)(n.code,{children:"h1"}),", ",(0,s.jsx)(n.code,{children:"code"}),", ",(0,s.jsx)(n.code,{children:"span"}),"),每个元素都可以自定义文本内容和样式(通过 CSS 类)。"]}),"\n",(0,s.jsxs)(n.p,{children:[(0,s.jsx)(n.strong,{children:"如何使用"}),": 修改 ",(0,s.jsx)(n.code,{children:"text"})," 和 ",(0,s.jsx)(n.code,{children:"class"})," 字段来自定义标题的文本内容和样式。你可以通过添加或删除元素来调整标题的结构。"]}),"\n",(0,s.jsxs)(n.h3,{id:"描述-description",children:["描述 (",(0,s.jsx)(n.code,{children:"description"}),")"]}),"\n",(0,s.jsxs)(n.p,{children:["提供了对主页 ",(0,s.jsx)(n.code,{children:"hero"})," 部分的简短描述。"]}),"\n",(0,s.jsxs)(n.p,{children:[(0,s.jsx)(n.strong,{children:"如何使用"}),": 直接修改 ",(0,s.jsx)(n.code,{children:"description"})," 的值以更改介绍文本。"]}),"\n",(0,s.jsxs)(n.h2,{id:"自定义脚本-configcustom",children:["自定义脚本 (",(0,s.jsx)(n.code,{children:"config.custom"}),")"]}),"\n",(0,s.jsx)(n.p,{children:"可以配置自定义的 CSS, Script。"}),"\n",(0,s.jsxs)(n.h3,{id:"scripts-scripts",children:["Scripts (",(0,s.jsx)(n.code,{children:"scripts"}),")"]}),"\n",(0,s.jsx)(n.p,{children:"自定义 JS 脚本。接受一个字符串数组。"}),"\n",(0,s.jsxs)(n.h3,{id:"styles-styles",children:["Styles (",(0,s.jsx)(n.code,{children:"styles"}),")"]}),"\n",(0,s.jsx)(n.p,{children:"自定义 CSS。接受一个字符串数组。"}),"\n",(0,s.jsxs)(n.h3,{id:"javascript-tag-js",children:["JavaScript tag (",(0,s.jsx)(n.code,{children:"js"}),")"]}),"\n",(0,s.jsxs)(n.p,{children:["接受一个 ",(0,s.jsx)(n.a,{href:"https://nextjs.org/docs/app/api-reference/components/script#props",children:"Script"})," Props 参数数组。"]}),"\n",(0,s.jsxs)(n.h3,{id:"css-href-link-css",children:["CSS href link (",(0,s.jsx)(n.code,{children:"css"}),")"]}),"\n",(0,s.jsx)(n.p,{children:"加载外部 CSS,接受一个 CSS 外部样式表链接数组。"}),"\n",(0,s.jsxs)(n.h2,{id:"模块-configmodule",children:["模块 (",(0,s.jsx)(n.code,{children:"config.module"}),")"]}),"\n",(0,s.jsx)(n.p,{children:"此部分配置了网站的一些特定功能模块,比如活动跟踪、捐赠支持、社交媒体链接等。"}),"\n",(0,s.jsxs)(n.h3,{id:"实时活动-activity-模块",children:["实时活动 (",(0,s.jsx)(n.code,{children:"activity"}),") 模块"]}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsxs)(n.li,{children:[(0,s.jsx)(n.strong,{children:(0,s.jsx)(n.code,{children:"enable"})}),": 控制模块是否启用。"]}),"\n",(0,s.jsxs)(n.li,{children:[(0,s.jsx)(n.strong,{children:(0,s.jsx)(n.code,{children:"endpoint"})}),": 指定活动更新的服务器端点。"]}),"\n"]}),"\n",(0,s.jsxs)(n.p,{children:[(0,s.jsx)(n.strong,{children:"如何使用"}),": 若需开启活动跟踪功能,将 ",(0,s.jsx)(n.code,{children:"enable"})," 设为 ",(0,s.jsx)(n.code,{children:"true"})," 并设置 ",(0,s.jsx)(n.code,{children:"endpoint"})," 为处理活动数据的服务器地址。"]}),"\n",(0,s.jsxs)(n.h3,{id:"捐赠-donate-模块",children:["捐赠 (",(0,s.jsx)(n.code,{children:"donate"}),") 模块"]}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsxs)(n.li,{children:[(0,s.jsx)(n.strong,{children:(0,s.jsx)(n.code,{children:"enable"})}),": 控制捐赠模块是否启用。"]}),"\n",(0,s.jsxs)(n.li,{children:[(0,s.jsx)(n.strong,{children:(0,s.jsx)(n.code,{children:"link"})}),": 提供捐赠页面的链接。"]}),"\n",(0,s.jsxs)(n.li,{children:[(0,s.jsx)(n.strong,{children:(0,s.jsx)(n.code,{children:"qrcode"})}),": 提供一或多个捐赠二维码图片的链接。"]}),"\n"]}),"\n",(0,s.jsxs)(n.p,{children:[(0,s.jsx)(n.strong,{children:"如何使用"}),": 启用捐赠功能,并提供捐赠链接或捐赠二维码,以便支持者可以直接进行捐赠。"]}),"\n",(0,s.jsxs)(n.h3,{id:"社交媒体-bilibili-模块",children:["社交媒体 (",(0,s.jsx)(n.code,{children:"bilibili"}),") 模块"]}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsxs)(n.li,{children:[(0,s.jsx)(n.strong,{children:(0,s.jsx)(n.code,{children:"liveId"})}),": b 站直播间 ID"]}),"\n"]}),"\n","\n",(0,s.jsxs)(n.h3,{id:"openpanel-",children:[(0,s.jsx)(n.a,{href:"https://openpanel.dev",children:"OpenPanel"})," ",(0,s.jsx)(c.g,{})]}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsxs)(n.li,{children:[(0,s.jsx)(n.strong,{children:(0,s.jsx)(n.code,{children:"enable"})}),": 控制 OpenPanel 功能是否启用。"]}),"\n",(0,s.jsxs)(n.li,{children:[(0,s.jsx)(n.strong,{children:(0,s.jsx)(n.code,{children:"id"})}),": OpenPanel 的 ID。"]}),"\n",(0,s.jsxs)(n.li,{children:[(0,s.jsx)(n.strong,{children:(0,s.jsx)(n.code,{children:"url"})}),": OpenPanel 的访问地址。"]}),"\n"]}),"\n",(0,s.jsxs)(n.p,{children:[(0,s.jsx)(n.strong,{children:"如何使用"}),": 如果你使用 OpenPanel 提供交互式面板或其他功能,通过这些配置连接并显示面板。"]})]})}n.default=(0,t.j)(l)},5341:function(e,n,i){"use strict";n.Z=function(){for(var e,n,i=0,s="";i