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 found

404

This page could not be found.

\ No newline at end of file +404: This page could not be found

404

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
系统开发
前言

开发指南

+

接下来,我们就可以开始启动后端的开发环境了。

-
pnpm run dev

© 2024 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

\ No newline at end of file +
pnpm run dev

© 2024 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

\ No newline at end of file diff --git a/development/admin.html b/development/admin.html index aee2e840..6f72cce2 100644 --- a/development/admin.html +++ b/development/admin.html @@ -9,7 +9,7 @@ .dark { --nextra-primary-hue: 204deg; } -
系统开发
后台单独部署

后台单独部署

+
系统开发
后台单独部署

后台单独部署

在正常情况下,你不需要单独部署后台,因为后台已经被打包到了后端中。

如果你有以下需求:

@@ -47,4 +47,4 @@

JWT_SECRET=7294c34e0b28ad28 #此处填写一个长度不小于 16 个字符,不大于 32 个字符的字符串 ALLOWED_ORIGINS=test.cn,www.test.cn,admin.test.cn

然后重新启动 Core 即可:

-
docker compose up -d

© 2024 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

\ No newline at end of file +
docker compose up -d

© 2024 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

\ No newline at end of file diff --git a/development/frontend.html b/development/frontend.html index b02d7962..79baa67d 100644 --- a/development/frontend.html +++ b/development/frontend.html @@ -9,7 +9,7 @@ .dark { --nextra-primary-hue: 204deg; } -
系统开发
前端开发指南

前端开发指南

+

© 2024 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

\ No newline at end of file +

详见:api-client (opens in a new tab)


© 2024 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

\ No newline at end of file diff --git a/docs.html b/docs.html index 2e26c761..d26f7dc0 100644 --- a/docs.html +++ b/docs.html @@ -9,7 +9,7 @@ .dark { --nextra-primary-hue: 204deg; } -
部署文档
引言

Mix Space

+
部署文档
引言

Mix Space

Mix Space 是一个一款简洁而不简单的个人博客系统,它够快,够现代。你可以利用它构建一个属于自己的个人空间,记录生活,分享知识。

⚠️

在本章节,我们将完成的是 后端 的安装,而 前端 的安装则需要你阅读 前端主题文档

为什么分开部署?请查看本页 一些你需要知道的事情 小节。

@@ -35,4 +35,4 @@

所以,Mix Space 由两部分组成:后端前端。如果你没法理解的话,建议询问 Bing AI, ChatGPT 等人工智能以此来了解它们、以及知道它们的区别。(比如这样询问 ChatGPT) (opens in a new tab)

总之你需要知道的便是:这不是像 TypechoWordPress 这样的「一步曲」就搞定的系统,而是需要 「两步曲」 才能完成安装。

💡

但万幸的是,我们开发者已经为你准备好了一切,你只需要按照文档推荐的步骤来操作即可,即使你不是开发者,也可以轻松完成安装。

-

知道了这些,你就可以避免掉大部分的问题了,开始安装体验吧!


© 2024 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

\ No newline at end of file +

知道了这些,你就可以避免掉大部分的问题了,开始安装体验吧!


© 2024 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

\ No newline at end of file diff --git a/docs/advanced.html b/docs/advanced.html index 495119da..88fd3181 100644 --- a/docs/advanced.html +++ b/docs/advanced.html @@ -9,7 +9,7 @@ .dark { --nextra-primary-hue: 204deg; } -
部署文档
进阶部署

进阶部署

+
部署文档
进阶部署

进阶部署

🚫

在您进行进阶部署前,我们给予最后的警告:如果你不是开发者,或者不想折腾,请不要选择进阶部署,因为它需要你具备一定的开发能力。

由于自身技术原因导致的问题,我们将不会提供任何技术支持。情节严重者,我们将永久拉黑您的账号。

要求

@@ -52,4 +52,4 @@

环境变量

配置选项

4. 启动

  1. 进入 ./apps/core/out,创建一个 ecosystem.config.js 文件
  2. 将上方复制的内容黏贴进去,然后执行以下命令启动服务
  3. -
pm2 start ecosystem.config.js

5. 反向代理 or ...

剩下的就是你的事了,你可以使用 Nginx (opens in a new tab) 或者 Caddy (opens in a new tab) 等反向代理工具,也可以使用 Cloudflare (opens in a new tab) 等 CDN 服务。本文不再赘述。


© 2024 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

\ No newline at end of file +
pm2 start ecosystem.config.js

5. 反向代理 or ...

剩下的就是你的事了,你可以使用 Nginx (opens in a new tab) 或者 Caddy (opens in a new tab) 等反向代理工具,也可以使用 Cloudflare (opens in a new tab) 等 CDN 服务。本文不再赘述。


© 2024 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

\ No newline at end of file diff --git a/docs/community.html b/docs/community.html index 4a38f3e3..09cd396d 100644 --- a/docs/community.html +++ b/docs/community.html @@ -9,8 +9,8 @@ .dark { --nextra-primary-hue: 204deg; } -
部署文档
社区分享

社区部署教程

+

© 2024 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

\ No newline at end of file +

© 2024 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

\ No newline at end of file diff --git a/docs/docker.html b/docs/docker.html index 215ea3a2..c9fed17e 100644 --- a/docs/docker.html +++ b/docs/docker.html @@ -9,7 +9,7 @@ .dark { --nextra-primary-hue: 204deg; } -
部署文档
Docker 部署

Docker 部署

+
部署文档
Docker 部署

Docker 部署

安装 Docker

如果你的服务器在国内,建议使用阿里云的镜像加速,安装命令如下:

curl -fsSL https://get.docker.com | bash -s docker --mirror Aliyun

在国外,可以直接使用官方脚本安装:

curl -fsSL https://get.docker.com | bash -s docker

如果您成功安装了 Docker 和 Docker-Compose,可以通过以下命令查看版本:

docker -v
  
@@ -26,4 +26,4 @@
 
⚠️

若开启加密,则需注意密钥长度必须为 64 位且只有小写字母和数字,不然会在初始化时报错。注意这是不可逆的,务必保存自己的秘钥。所以并不是非常推荐使用,除非你真的需要加密 API Key.

密钥可以通过 openssl rand -hex 32 命令生成。请务必牢记。

启动 Core

docker compose up -d

完成

恭喜你完成了 Core 部署,不过仅仅如此是不够的,你需要配置好反向代理之后登录后台进行初始化,这里不再赘述。除此之外,如引言所述还需要部署一个前端主题用于展示,请参考 前端主题文档 (opens in a new tab) 继续完成部署前端主题的步骤。

相关链接

-

© 2024 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

\ No newline at end of file +

© 2024 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

\ No newline at end of file diff --git a/docs/extra.html b/docs/extra.html index 4411151b..07cace96 100644 --- a/docs/extra.html +++ b/docs/extra.html @@ -9,7 +9,7 @@ .dark { --nextra-primary-hue: 204deg; } -
部署文档
相关内容

拓展内容

+

当你修改完成,你需要重新构建,并重启服务:

pnpm bundle
-pnpm prod:pm2

© 2024 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

\ No newline at end of file +pnpm prod:pm2

© 2024 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

\ No newline at end of file diff --git a/docs/features.html b/docs/features.html index 1af1509c..b694571e 100644 --- a/docs/features.html +++ b/docs/features.html @@ -9,7 +9,7 @@ .dark { --nextra-primary-hue: 204deg; } -
部署文档
主要功能

主要功能

+
部署文档
主要功能

主要功能

日记

作为个人空间,日记是必不可少的功能。Mix Space 的日记功能非常强大,它支持:

    @@ -56,4 +56,4 @@

    Algolia Search,你可以在后台设置 Algolia Search,让你的网站支持站内搜索功能
  • 项目展示功能,你可以向访客展示你的项目,展现你的技术能力
  • 迁移,Mix Space 支持从 Markdown 导入文章,也支持导出文章为 Markdown。
  • -


© 2024 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

\ No newline at end of file +

© 2024 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

\ No newline at end of file diff --git a/docs/scripts.html b/docs/scripts.html index 6136f1b6..30c0ec4a 100644 --- a/docs/scripts.html +++ b/docs/scripts.html @@ -9,6 +9,6 @@ .dark { --nextra-primary-hue: 204deg; } -
部署文档
预设脚本部署

预设脚本部署

+

© 2024 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

\ No newline at end of file +
⚠️

经用户反馈,我们发现预设脚本部署的方式存在一些问题,因此我们建议您使用其他部署方式。


© 2024 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

\ No newline at end of file diff --git a/index.html b/index.html index cc7c3900..9ed96e64 100644 --- a/index.html +++ b/index.html @@ -9,4 +9,4 @@ .dark { --nextra-primary-hue: 204deg; } -

An Alternative Personal Space.

一个替代个人空间的新方式

5 分钟拥有自己的 Mix Space

BackgroundBackground (Dark)

几分钟内创建
强大的现代博客网站。

部署
一行完成.

Mix Space 有多种部署方式,您可以选择最适合您的方式来部署您的 Mix Space。采用 Docker 部署,您可以在几分钟内部署您的博客,而不需要任何专业知识。使用预设脚本部署亦是如此。

bash <(curl -s https://fastly.jsdelivr.net/gh/mx-space/docker@master/install.sh)>
/
git clone https://github.com/mx-space/docker --depth=1 && cd docker && bash install.sh

全平台
黑暗模式

Markdown + 自定义语法,
丰富您的内容。

Mix Space 支持自定义 Markdown 内语法,您可以使用自定义语法来丰富您的内容。

Macros

无限扩展、无限可能,
实现歌单解析,追番列表等功能。

数据统计面板

Mix Space 支持访客统计,
您可以在后台查看您的 网站访问量访问来源访问设备等信息。

记录生活点滴

Mix Space 不仅是博客,更是记录生活点滴的个人空间。您可以在 Mix Space 分享您的多彩缤纷的生活。

强大的友链系统,
促进你与老友的联系。

Mix Space 的友链系统强大且全面,在后台你可以检测你的老友是否还「健在」
有了 Mix Space,你的友链一切尽在掌握。

更多特性...

文件管理 / WebSocket / 友链支持 / 计划任务 / 数据迁移... 更多新特性等待您的探索。

拥有你自己的 Mix Space →


© 2024 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

\ No newline at end of file +

An Alternative Personal Space.

一个替代个人空间的新方式

5 分钟拥有自己的 Mix Space

BackgroundBackground (Dark)

几分钟内创建
强大的现代博客网站。

部署
一行完成.

Mix Space 有多种部署方式,您可以选择最适合您的方式来部署您的 Mix Space。采用 Docker 部署,您可以在几分钟内部署您的博客,而不需要任何专业知识。使用预设脚本部署亦是如此。

bash <(curl -s https://fastly.jsdelivr.net/gh/mx-space/docker@master/install.sh)>
/
git clone https://github.com/mx-space/docker --depth=1 && cd docker && bash install.sh

全平台
黑暗模式

Markdown + 自定义语法,
丰富您的内容。

Mix Space 支持自定义 Markdown 内语法,您可以使用自定义语法来丰富您的内容。

Macros

无限扩展、无限可能,
实现歌单解析,追番列表等功能。

数据统计面板

Mix Space 支持访客统计,
您可以在后台查看您的 网站访问量访问来源访问设备等信息。

记录生活点滴

Mix Space 不仅是博客,更是记录生活点滴的个人空间。您可以在 Mix Space 分享您的多彩缤纷的生活。

强大的友链系统,
促进你与老友的联系。

Mix Space 的友链系统强大且全面,在后台你可以检测你的老友是否还「健在」
有了 Mix Space,你的友链一切尽在掌握。

更多特性...

文件管理 / WebSocket / 友链支持 / 计划任务 / 数据迁移... 更多新特性等待您的探索。

拥有你自己的 Mix Space →


© 2024 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

\ No newline at end of file diff --git a/themes.html b/themes.html index c503e66c..e670d3be 100644 --- a/themes.html +++ b/themes.html @@ -9,8 +9,8 @@ .dark { --nextra-primary-hue: 204deg; } -

前端主题

+

© 2024 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

\ No newline at end of file +

© 2024 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

\ No newline at end of file diff --git a/themes/kami.html b/themes/kami.html index 3018786d..b56d1db5 100644 --- a/themes/kami.html +++ b/themes/kami.html @@ -9,7 +9,7 @@ .dark { --nextra-primary-hue: 204deg; } -
前端主题
部署 Kami 主题

Kami 主题

+
-

© 2024 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

\ No newline at end of file +

© 2024 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

\ No newline at end of file diff --git a/themes/shiro.html b/themes/shiro.html index 76fcad88..b68af65d 100644 --- a/themes/shiro.html +++ b/themes/shiro.html @@ -9,7 +9,7 @@ .dark { --nextra-primary-hue: 204deg; } -
前端主题
部署 Shiro 主题
部署主题

Shiro 主题

+

© 2024 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

\ No newline at end of file +

© 2024 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

\ No newline at end of file diff --git a/themes/shiro/config.html b/themes/shiro/config.html index 695323b5..27bfc5ab 100644 --- a/themes/shiro/config.html +++ b/themes/shiro/config.html @@ -9,19 +9,19 @@ .dark { --nextra-primary-hue: 204deg; } -
前端主题
部署 Shiro 主题
配置项

配置项

-

页脚信息(footer)

+
前端主题
部署 Shiro 主题
配置项

配置项

+

页脚信息 (footer)

此部分定义页脚的部分信息,主要包括备案、建站年份和页脚导航三部分。

-

备案(otherInfo.icp)

+

备案 (otherInfo.icp)

此部分未在默认配置中提供。以下为参照写法:

"icp": {
-        "text": "浙ICP备20028356号",
-        "link": "https://beian.miit.gov.cn"
-      }
+ "text": "浙 ICP 备 20028356 号", + "link": "https://beian.miit.gov.cn" +}

如何使用: 根据参照写法,修改位于 text 的备案号以及备案号所指向的链接 link

-

建站年份(otherInfo.date

+

建站年份 (otherInfo.date)

如何使用: {{now}} 指向当前年份,其他略。

-

页脚导航(linkSections

+

页脚导航 (linkSections)

分类包括 namelinks 两个字段,对应分类名字及其下链接,其下链接又分为 namehrefexternal 三个字段,对应链接名字,指向链接和是否外链三个属性。

如何使用: 根据自己需要增删或修改特定链接及分类,需要注意如果指向外链的话需要加一行 "external": true

站点信息 (config.site)

@@ -37,8 +37,18 @@

包括多个元素(如 h1, code, span),每个元素都可以自定义文本内容和样式(通过 CSS 类)。

如何使用: 修改 textclass 字段来自定义标题的文本内容和样式。你可以通过添加或删除元素来调整标题的结构。

描述 (description)

-

提供了对 hero 部分的简短描述。

+

提供了对主页 hero 部分的简短描述。

如何使用: 直接修改 description 的值以更改介绍文本。

+

自定义脚本 (config.custom)

+

可以配置自定义的 CSS, Script。

+

Scripts (scripts)

+

自定义 JS 脚本。接受一个字符串数组。

+

Styles (styles)

+

自定义 CSS。接受一个字符串数组。

+

JavaScript tag (js)

+

接受一个 Script (opens in a new tab) Props 参数数组。

+

CSS href link (css)

+

加载外部 CSS,接受一个 CSS 外部样式表链接数组。

模块 (config.module)

此部分配置了网站的一些特定功能模块,比如活动跟踪、捐赠支持、社交媒体链接等。

实时活动 (activity) 模块

@@ -65,4 +75,4 @@

id: OpenPanel 的 ID。
  • url: OpenPanel 的访问地址。
  • -

    如何使用: 如果你使用 OpenPanel 提供交互式面板或其他功能,通过这些配置连接并显示面板。


    © 2024 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

    \ No newline at end of file +

    如何使用: 如果你使用 OpenPanel 提供交互式面板或其他功能,通过这些配置连接并显示面板。


    © 2024 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

    \ No newline at end of file diff --git a/themes/shiro/extra.html b/themes/shiro/extra.html index 2c6779b9..b97a2f6b 100644 --- a/themes/shiro/extra.html +++ b/themes/shiro/extra.html @@ -9,7 +9,7 @@ .dark { --nextra-primary-hue: 204deg; } -
    前端主题
    部署 Shiro 主题
    额外功能

    额外功能

    +

    设置状态

    在主页登录之后,你可以点击此头像的右下方设置状态。

    -

    APP 集成正在开发中..


    © 2024 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

    \ No newline at end of file +

    APP 集成正在开发中..


    © 2024 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

    \ No newline at end of file diff --git a/themes/yun.html b/themes/yun.html index fbe4fada..0cfe5e83 100644 --- a/themes/yun.html +++ b/themes/yun.html @@ -9,7 +9,7 @@ .dark { --nextra-primary-hue: 204deg; } -
    前端主题
    部署 Yun 主题

    Yun 主题

    +

    修改为你的后端 API 地址。

    开始构建

    pnpm build

    启动前端

    pnpm pm2

    © 2024 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

    \ No newline at end of file + : 'http://localhost:2333/api/v2/'

    修改为你的后端 API 地址。

    开始构建

    pnpm build

    启动前端

    pnpm pm2

    © 2024 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

    \ No newline at end of file diff --git a/usage.html b/usage.html index 97da2ac2..fd6edb9b 100644 --- a/usage.html +++ b/usage.html @@ -9,11 +9,11 @@ .dark { --nextra-primary-hue: 204deg; } -
    使用指南
    使用指南

    使用指南

    +

    © 2024 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

    \ No newline at end of file +

    社区使用指南


    © 2024 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

    \ No newline at end of file diff --git a/usage/backup.html b/usage/backup.html index 74b7b5c7..87a3ca1f 100644 --- a/usage/backup.html +++ b/usage/backup.html @@ -9,7 +9,7 @@ .dark { --nextra-primary-hue: 204deg; } -
    使用指南
    备份与回滚

    备份与回滚

    +
    使用指南
    备份与回滚

    备份与回滚

    在 Mix Space 中内有备份功能,并且每日默认自动备份,数据无价请定期手动下载备份包。

    备份

    在后端中 其他 - 备份 中点击立即备份,即备份到绝对目录:

    @@ -24,4 +24,4 @@

    例:假如刚刚生成的备份是 backup-2022-09-01_23:33:33.zip 将想进行回滚的备份包 backup-2022-01-14_05:14:19.zip 修改为刚刚生成的备份一样的名字:

    mv ~/mx-space/core/data/mx-space/backup/2022-01-14_05:14:19/backup-2022-01-14_05:14:19.zip backup-2022-09-01_23:33:33.zip
    ⚠️

    不要在 Windows 下重命名,Windows 不支持将英文冒号作为文件名的一部分

    -

    替换完成会提示“数据库有变动,将在 x 秒后重载页面”,重载先检查文章评论等有没有丢失。


    © 2024 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

    \ No newline at end of file +

    替换完成会提示“数据库有变动,将在 x 秒后重载页面”,重载先检查文章评论等有没有丢失。


    © 2024 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

    \ No newline at end of file diff --git a/usage/search.html b/usage/search.html index ed8da852..65b395c6 100644 --- a/usage/search.html +++ b/usage/search.html @@ -9,7 +9,7 @@ .dark { --nextra-primary-hue: 204deg; } -
    使用指南
    Algolia Search

    Algolia Search

    +
    使用指南
    Algolia Search

    Algolia Search

    介绍

    Algolia 是一个数据库实时搜索服务,能够提供毫秒级的数据库搜索服务,并且其服务能以 API 的形式方便地布局到网页、客户端、APP 等多种场景。

    @@ -17,4 +17,4 @@

    使用

    在这之前,你需要先在 Algolia 官网注册一个账号,或者直接用第三方登录。

    新建应用

    登录 Algolia 账号,进入控制台,在左上角点击 Applications 下列表,点击 New Application,填写应用名称,选择 BUILD 订阅(免费),选择好数据中心,点击 Create Application,即可创建一个应用。

    一些额外说明的地方都在图片上标注了,可参考下面的图片。

    创建索引(Index)

    在新建应用之后,你会直接跳转到如下图所示的界面,只需要在输入框中输入一个索引名称,点击 Create Index,即可创建一个索引。

    请记住你所创建的索引名称(Index Name),后面的步骤会用到。

    获取相关变量

    接下来,在左下角找到齿轮图标,进入设置,在右侧找到 API Keys,进入,这里有两个变量需要复制下来备用,分别是 Application IDAdmin API Key,请复制下这两个变量的值,后面的步骤会用到。

    后台配置

    进入后台,设定->系统->Algolia Search,将“开启 Algolia Search”开关打开,将前面准备的 IndexNameApplication ID(AppID)Admin API Key(ApiKey) 填入对应的框中,右上角保存即可。

    -

    至此,Algolia 搜索的配置就完成了。稍等一会,就可以尝试在主页用 Ctrl + K 调用 Algolia 进行站内搜索了。


    © 2024 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

    \ No newline at end of file +

    至此,Algolia 搜索的配置就完成了。稍等一会,就可以尝试在主页用 Ctrl + K 调用 Algolia 进行站内搜索了。


    © 2024 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

    \ No newline at end of file diff --git a/usage/security.html b/usage/security.html index 55e7afba..b16f098f 100644 --- a/usage/security.html +++ b/usage/security.html @@ -9,7 +9,7 @@ .dark { --nextra-primary-hue: 204deg; } -
    使用指南
    Key 加密与安全性

    Key 加密与安全性

    +

    疑难解答

    -

    如果出现 Invalid key length,请你确定是否开启了此功能,并且 key 的长度是否为 64 位长度。


    © 2024 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

    \ No newline at end of file +

    如果出现 Invalid key length,请你确定是否开启了此功能,并且 key 的长度是否为 64 位长度。


    © 2024 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

    \ No newline at end of file diff --git a/usage/serverless.html b/usage/serverless.html index 22879952..3cffd35f 100644 --- a/usage/serverless.html +++ b/usage/serverless.html @@ -9,7 +9,7 @@ .dark { --nextra-primary-hue: 204deg; } -
    使用指南
    云函数

    云函数

    +
    使用指南
    云函数

    云函数

    介绍

    云函数是 Mix Space 中的一个重要功能,它极大地辅助了使用者在 Mix Space 中的体验。通过云函数,Mix Space 可以额外实现实现歌单解析,追番列表等等的功能。

    @@ -20,4 +20,4 @@

    1. 进入云函数设置界面

    进入后台管理,点击左侧菜单栏的 其他 - 云函数,即可进入云函数管理页面。

    2. 下载扩展包

    在右上方,点击 下载拓展包,你将会看到一个弹窗。

    3. 导入

    请在弹窗内请找到对应的主题的云函数代码,点击导入,即可完成下载对应的云函数代码。

    接下来,你可以在云函数管理页面看到你刚刚导入的云函数代码。

    开发者文档

    -

    © 2024 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

    \ No newline at end of file +

    © 2024 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

    \ No newline at end of file diff --git a/usage/update.html b/usage/update.html index ff09c84e..6a875aca 100644 --- a/usage/update.html +++ b/usage/update.html @@ -9,7 +9,7 @@ .dark { --nextra-primary-hue: 204deg; } -
    使用指南
    更新 Mix Space

    更新 Mix Space

    +
    使用指南
    更新 Mix Space

    更新 Mix Space

    开头介绍就说过,Mx-Space 分为前端和后端两个部分,因此,更新的时候二者也需要分开更新。

    Core(后端)更新

    @@ -21,4 +21,4 @@

    随后 进入 ./apps/core/out,执行以下命令启动服务 pm2 start ecosystem.config.js

    前端更新

    请根据自己所部署的主题跳转到对应的更新部分完成更新。

    -

    © 2024 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

    \ No newline at end of file +

    © 2024 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

    \ No newline at end of file diff --git a/usage/xlog.html b/usage/xlog.html index c23bfd19..c0f83013 100644 --- a/usage/xlog.html +++ b/usage/xlog.html @@ -9,7 +9,7 @@ .dark { --nextra-primary-hue: 204deg; } -
    使用指南
    xLog 集成

    xLog 集成

    +
    使用指南
    xLog 集成

    xLog 集成

    介绍

    此功能需要:

      @@ -22,4 +22,4 @@

      在 系统 - 第三方服务集成,填写 xLog SiteId 即可,然后去 xLog 平台去升级为钱包登录即可。钱包的注册方法请根据 xLog 的引导一步步注册。

      SiteId 是一个字符串,可以在 xLog 平台的设置 - 域名找到;例如 example.xlog.app,即 SiteId = example

      当你完成钱包的注册,并使用钱包登录 xLog 平台的时候,就完成设置工作了。

      -

      接下来你发布文章的时候,会自动的进行同步和签名;当然,需要经过你的同意。


    © 2024 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

    \ No newline at end of file +

    接下来你发布文章的时候,会自动的进行同步和签名;当然,需要经过你的同意。


    © 2024 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

    \ No newline at end of file