diff --git a/404.html b/404.html index 7955302d..c2ddcf87 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/q6vnYXmQjKt4ngHOQiFe7/_buildManifest.js b/_next/static/1zO73xAILQeCTg3qgONcH/_buildManifest.js similarity index 93% rename from _next/static/q6vnYXmQjKt4ngHOQiFe7/_buildManifest.js rename to _next/static/1zO73xAILQeCTg3qgONcH/_buildManifest.js index 35044221..e5583b8e 100644 --- a/_next/static/q6vnYXmQjKt4ngHOQiFe7/_buildManifest.js +++ b/_next/static/1zO73xAILQeCTg3qgONcH/_buildManifest.js @@ -1 +1 @@ -self.__BUILD_MANIFEST=function(s){return{__rewrites:{beforeFiles:[],afterFiles:[{source:"/:path*/_meta",destination:"/404"}],fallback:[]},"/":[s,"static/chunks/343-9b9bc361294c2765.js","static/css/e68b73cab80c6d1b.css","static/chunks/pages/index-598eb6a65ebd0988.js"],"/_error":["static/chunks/pages/_error-b56819d0c5bcf883.js"],"/development":[s,"static/chunks/pages/development-5535cb8a1ecdacff.js"],"/development/frontend":[s,"static/chunks/pages/development/frontend-381fe0bb96f99443.js"],"/docs":[s,"static/chunks/pages/docs-be9cdbe6ca1dff45.js"],"/docs/advanced":[s,"static/chunks/pages/docs/advanced-c5de161a49e71f03.js"],"/docs/community":[s,"static/chunks/pages/docs/community-e8fbadc4aa043be7.js"],"/docs/docker":[s,"static/chunks/pages/docs/docker-65c96e9ed5728fb4.js"],"/docs/features":[s,"static/chunks/pages/docs/features-4eda84378b96b0b5.js"],"/docs/scripts":[s,"static/chunks/pages/docs/scripts-e16f6a5ca885660e.js"],"/themes":[s,"static/chunks/pages/themes-a65cd342485614a7.js"],"/themes/kami":[s,"static/chunks/pages/themes/kami-e5a27cc90eef2ca8.js"],"/themes/shiro":[s,"static/chunks/pages/themes/shiro-5d05126d70ab3573.js"],"/themes/shiro/extra":[s,"static/chunks/pages/themes/shiro/extra-b4fc3bc9faeaf031.js"],"/themes/yun":[s,"static/chunks/pages/themes/yun-60cf591672d2d522.js"],"/usage":[s,"static/chunks/pages/usage-a2fab104296cfc4f.js"],"/usage/macros":[s,"static/chunks/pages/usage/macros-4ad1725a69b4f6e0.js"],"/usage/search":[s,"static/chunks/pages/usage/search-9815091c1e91d7a8.js"],"/usage/serverless":[s,"static/chunks/pages/usage/serverless-58c28758c861f13b.js"],"/usage/xlog":[s,"static/chunks/pages/usage/xlog-81491f4aa1e04149.js"],sortedPages:["/","/_app","/_error","/development","/development/frontend","/docs","/docs/advanced","/docs/community","/docs/docker","/docs/features","/docs/scripts","/themes","/themes/kami","/themes/shiro","/themes/shiro/extra","/themes/yun","/usage","/usage/macros","/usage/search","/usage/serverless","/usage/xlog"]}}("static/chunks/48-c59c1f922cbfc0f3.js"),self.__BUILD_MANIFEST_CB&&self.__BUILD_MANIFEST_CB(); \ No newline at end of file +self.__BUILD_MANIFEST=function(s){return{__rewrites:{beforeFiles:[],afterFiles:[{source:"/:path*/_meta",destination:"/404"}],fallback:[]},"/":[s,"static/chunks/343-9b9bc361294c2765.js","static/css/e68b73cab80c6d1b.css","static/chunks/pages/index-598eb6a65ebd0988.js"],"/_error":["static/chunks/pages/_error-b56819d0c5bcf883.js"],"/development":[s,"static/chunks/pages/development-5535cb8a1ecdacff.js"],"/development/frontend":[s,"static/chunks/pages/development/frontend-381fe0bb96f99443.js"],"/docs":[s,"static/chunks/pages/docs-be9cdbe6ca1dff45.js"],"/docs/advanced":[s,"static/chunks/pages/docs/advanced-c5de161a49e71f03.js"],"/docs/community":[s,"static/chunks/pages/docs/community-e8fbadc4aa043be7.js"],"/docs/docker":[s,"static/chunks/pages/docs/docker-70b2d570f212d9df.js"],"/docs/features":[s,"static/chunks/pages/docs/features-4eda84378b96b0b5.js"],"/docs/scripts":[s,"static/chunks/pages/docs/scripts-e16f6a5ca885660e.js"],"/themes":[s,"static/chunks/pages/themes-a65cd342485614a7.js"],"/themes/kami":[s,"static/chunks/pages/themes/kami-e5a27cc90eef2ca8.js"],"/themes/shiro":[s,"static/chunks/pages/themes/shiro-5d05126d70ab3573.js"],"/themes/shiro/extra":[s,"static/chunks/pages/themes/shiro/extra-b4fc3bc9faeaf031.js"],"/themes/yun":[s,"static/chunks/pages/themes/yun-60cf591672d2d522.js"],"/usage":[s,"static/chunks/pages/usage-a2fab104296cfc4f.js"],"/usage/macros":[s,"static/chunks/pages/usage/macros-4ad1725a69b4f6e0.js"],"/usage/search":[s,"static/chunks/pages/usage/search-9815091c1e91d7a8.js"],"/usage/serverless":[s,"static/chunks/pages/usage/serverless-58c28758c861f13b.js"],"/usage/xlog":[s,"static/chunks/pages/usage/xlog-81491f4aa1e04149.js"],sortedPages:["/","/_app","/_error","/development","/development/frontend","/docs","/docs/advanced","/docs/community","/docs/docker","/docs/features","/docs/scripts","/themes","/themes/kami","/themes/shiro","/themes/shiro/extra","/themes/yun","/usage","/usage/macros","/usage/search","/usage/serverless","/usage/xlog"]}}("static/chunks/48-c59c1f922cbfc0f3.js"),self.__BUILD_MANIFEST_CB&&self.__BUILD_MANIFEST_CB(); \ No newline at end of file diff --git a/_next/static/q6vnYXmQjKt4ngHOQiFe7/_ssgManifest.js b/_next/static/1zO73xAILQeCTg3qgONcH/_ssgManifest.js similarity index 100% rename from _next/static/q6vnYXmQjKt4ngHOQiFe7/_ssgManifest.js rename to _next/static/1zO73xAILQeCTg3qgONcH/_ssgManifest.js diff --git a/_next/static/chunks/nextra-data-en-US.json b/_next/static/chunks/nextra-data-en-US.json index e54b223a..c3bcb591 100644 --- a/_next/static/chunks/nextra-data-en-US.json +++ b/_next/static/chunks/nextra-data-en-US.json @@ -1 +1 @@ -{"/_app":{"title":" App","data":{"":""}},"/_app":{"title":" App","data":{"":""}},"/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/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/feature/security.html\n\n\n若开启加密,则需注意密钥长度必须为 64 位,不然会在初始化时报错。注意这是不可逆的,务必保存自己的秘钥。所以并不是非常推荐使用,除非你真的需要加密,","启动-core#启动 Core":"","完成#完成":"恭喜你完成了 Core 部署,不过仅仅如此是不够的,你需要对 Core 进行初始化等等,尽情探索吧!"}},"/docs/features":{"title":"主要功能","data":{"":"","mix-space--markdown--html#Mix Space + Markdown > HTML":"Mix Space 的 Markdown 除了支持标准的 Markdown 语法和 GFM 外,还支持「文本宏」,它可以让你在文章中使用动态数据,比如:\n\n在经过 Mix Space 处理后,会被替换成:\n\n这种简易的以 [[ 开头, ]] 结尾的语法,非常便于使用。你甚至可以使用任意 JS 代码去执行一个函数,也可以是一个 JS 语句。了解更多有关文本宏的信息 功能 - 文本宏","日记#日记":"作为个人空间,日记是必不可少的功能。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终端功能,你可以在后台进入终端,执行一些命令,比如清除缓存,备份数据等等\n云函数,你可以在后台设置云函数,让你的网站更加强大\nAlgolia Search,你可以在后台设置 Algolia Search,让你的网站支持站内搜索功能\n项目展示功能,你可以向访客展示你的项目,展现你的技术能力\n迁移,Mix Space 支持从 Markdown 导入文章,也支持导出文章为 Markdown。"}},"/docs":{"title":"引言","data":{"":"Mix Space 是一个一款简洁而不简单的个人博客系统,它够快,够现代。你可以利用它构建一个属于自己的个人空间,记录生活,分享知识。在本章节,我们将完成的是 后端 的安装,而 前端 的安装则需要你阅读 前端主题文档。\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/kami":{"title":"Kami 主题","data":{"":"下一个代替项目将会是 Shiro,当它完成之时,我便不再投入任何精力到 Kami 中。迎接未来总需要舍弃一些东西,非常感谢大家三年来使用 Kami,不管你是谁,都需要对你说声谢谢。—— Innei\n\n由于 Kami 主题将不再维护,该部分文档将会保持最小程度的更新;值得注意的是,使用 Kami 要求服务器的 Linux 内核版本不小于 4.19。","检查内核版本#检查内核版本":"如果你的内核版本小于 4.19,请升级内核。或者使用最新的 Ubuntu / Debian 。","克隆项目#克隆项目":"","安装依赖#安装依赖":"","配置-env#配置 ENV":"复制 .env.example 为 .env\n编辑 .env 文件,它看起来应该是这个样子的","开始构建#开始构建":"","启动前端#启动前端":"","反向代理#反向代理":"以下配置文件以 Nginx 为例,若使用 Caddy 进行配置可参考 Caddyfile 文件示例进行相应修改。\n\n完整示例如下","完成#完成":"如果您按照文档示例配置 Nginx 反向代理,您要时刻记住,您的:\nAPI 地址为 https://www.example.com/api/v2\nKami 地址为 https://www.example.com\nGateWay 为 https://www.example.com\n后台为 https://www.example.com/qaqdmin\n本地后台为 https://www.example.com/proxy/qaqdmin"}},"/themes/shiro/extra":{"title":"额外功能","data":{"":"","我的动态#我的动态":"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点击保存按钮,云函数就配置完成了。","配置主题配置#配置主题配置":"继续在「配置与云函数」页面,找到「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"}},"/themes/shiro":{"title":"Shiro 主题","data":{"":"","demo#Demo":"","前提要求#前提要求":"你已安装 Mix Space 后端并且已启动\n你已注册 Vercel 和 GitHub 账号\n你已注册 Clerk 账号\n\n\n请注意,Shiro 主题的部署教程与初版有所不同,如果你已经部署过 Shiro 主题,请重新阅读本文档(尤其是填入配置文件环节,配置有所变化),并阅读最后一节「移除 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点击按钮保存配置,随后继续进行下面的步骤。","配置环境变量#配置环境变量":"在下方的配置表格中,填入你的环境变量,然后点击复制按钮,将环境变量复制到剪贴板中。","键入环境变量--开始部署#键入环境变量 & 开始部署":"在刚刚进入的 Vercel 项目配置页面中,点击 Environment Variables,然后键盘上的 Ctrl + V 将环境变量粘贴到输入框中,然后点击 Deploy 按钮,等待部署完成。","完成#完成!":"至此,你已完成了 Shiro 主题的部署,你可以访问你的博客了。有关配置域名的教程,请参考 Vercel 文档。","移除-edge-config#移除 Edge Config":"在后续的 Shiro 更新中, Edge Config 将不再被使用。你可能需要移除 Edge Config,以防止不必要的资源使用。进入 Vercel 部署此项目的仪表盘,点击上方的 Storage,进入设置页面,点击左侧的 Projects,将链接的项目取消链接,接着点击左侧的 Settings,点击右侧的 Delete Edge Config 按钮,即可完成删除。"}},"/usage":{"title":"使用指南","data":{"":"本章节将会带您了解 Mix Space 的一些功能,以及如何使用它们。\n温馨提示:此指南需要一定的基础知识 & 理解能力,请准备好哦~","官方指南#官方指南":"","社区使用指南#社区使用指南":""}},"/usage/macros":{"title":"文本宏","data":{"":"这是一个实验性特征,可能会造成系统的不稳定。经过测试,使用大量文本宏会造成请求文章的接口变慢。","简介#简介":"使用此功能需要先在后台中开启,设置 - 系统 - 文本设定 - 文本宏替换。\nRequired: mx-server >=3.26.0文本宏是一个以 [[ ]] 包裹的语法,例如 [[ $created ]] 是一个合法的语法。在文章中可以插入文本宏,和 Markdown 一样,但是这个语法不是用 Markdown 解析和渲染,而是直接会在服务端进行替换。因此可以通过这个特征在文章中插入一些来自服务端的数据,也可以执行一些函数。例如说一篇文章的标题为「实例标题」,他的正文内容为:\n\n将会输出:\n\n又比如说:\n\n将会输出:\n\n这是一个动态的数据,dayjs 函数由服务端提供。\n所有的函数方法均在服务端执行,请注意内存的泄露造成系统的不稳定。","语法格式#语法格式":"以 [[ 开头, ]] 结尾,注意一个空格是必须的。","访问变量#访问变量":"访问变量使用 $ 前缀。目前可以访问的变量有:当前记录的所有字段(数据库记录值)比如说:title created slug nid _id ..你可以像这样来调用变量:[[ $created ]]","使用函数#使用函数":"函数的执行行为和云函数的执行行为保持一致。\n执行函数使用 # 前缀。你可以使用任意 JS 代码去执行一个函数,也可以是一个 JS 语句。如:\n\n使用内置方法。如:\n\n内置方法目前有:\ndayjs —— 日期处理\nformatNow(time: Date | string): string —— 相对时间\ncenter(text: string): string —— 居中\nright(text: string): string —— 居右\nopacity(text: string, opacity: number): string —— 透明文本\nblur(text: string, blur: number): string —— 高斯模糊化文字\ncolor(text: string, color: string): string —— 给文字上色\nsize(text: string): string —— 给文字上色"}},"/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/serverless":{"title":"云函数","data":{"":"","介绍#介绍":"云函数是 Mix Space 中的一个重要功能,它极大地辅助了使用者在 Mix Space 中的体验。通过云函数,Mix Space 可以额外实现实现歌单解析,追番列表等等的功能。你可以在此处看到 Mix Space 目前收录的云函数 Snappets","使用#使用":"有一些前端主题需要使用云函数,这个时候你需要进入到云函数设置界面,将云函数代码填入到对应的位置。","1-进入云函数设置界面#1. 进入云函数设置界面":"进入后台管理,点击左侧菜单栏的 其他 - 云函数,即可进入云函数管理页面。","2-下载扩展包#2. 下载扩展包":"在右上方,点击 下载拓展包,你将会看到一个弹窗。","3-导入#3. 导入":"请在弹窗内请找到对应的主题的云函数代码,点击导入,即可完成下载对应的云函数代码。\n接下来,你可以在云函数管理页面看到你刚刚导入的云函数代码。","开发者文档#开发者文档":""}},"/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 平台的时候,就完成设置工作了。接下来你发布文章的时候,会自动的进行同步和签名;当然,需要经过你的同意。"}},"/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 服务。本文不再赘述。"}},"/themes":{"title":"前端主题","data":{"":""}},"/themes/yun":{"title":"Yun 主题","data":{"":"由于 Yun 主题将不再维护,此文档将不再更新,但是你仍然可以使用它。","克隆项目#克隆项目":"","安装依赖#安装依赖":"","配置服务#配置服务":"如果你部署 Mix Space 后端与部署 Yun 前端在同一台服务器,并且后端监听的端口为 2333,那么你可以跳过这一步。\n\n前往 ./server/constant.ts\n\n\n\n修改为你的后端 API 地址。","开始构建#开始构建":"","启动前端#启动前端":""}}} \ No newline at end of file +{"/_app":{"title":" App","data":{"":""}},"/_app":{"title":" App","data":{"":""}},"/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/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/feature/security.html\n\n\n若开启加密,则需注意密钥长度必须为 64 位,不然会在初始化时报错。注意这是不可逆的,务必保存自己的秘钥。所以并不是非常推荐使用,除非你真的需要加密,","启动-core#启动 Core":"","完成#完成":"恭喜你完成了 Core 部署,不过仅仅如此是不够的,你需要进入后台对 Core 进行初始化等操作(在反向代理之后进行),这里不再赘述。除此之外,如引言所述还需要部署一个前端主题用于展示,请参考 前端主题文档 继续完成部署前端主题的步骤。"}},"/docs/features":{"title":"主要功能","data":{"":"","mix-space--markdown--html#Mix Space + Markdown > HTML":"Mix Space 的 Markdown 除了支持标准的 Markdown 语法和 GFM 外,还支持「文本宏」,它可以让你在文章中使用动态数据,比如:\n\n在经过 Mix Space 处理后,会被替换成:\n\n这种简易的以 [[ 开头, ]] 结尾的语法,非常便于使用。你甚至可以使用任意 JS 代码去执行一个函数,也可以是一个 JS 语句。了解更多有关文本宏的信息 功能 - 文本宏","日记#日记":"作为个人空间,日记是必不可少的功能。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终端功能,你可以在后台进入终端,执行一些命令,比如清除缓存,备份数据等等\n云函数,你可以在后台设置云函数,让你的网站更加强大\nAlgolia Search,你可以在后台设置 Algolia Search,让你的网站支持站内搜索功能\n项目展示功能,你可以向访客展示你的项目,展现你的技术能力\n迁移,Mix Space 支持从 Markdown 导入文章,也支持导出文章为 Markdown。"}},"/docs":{"title":"引言","data":{"":"Mix Space 是一个一款简洁而不简单的个人博客系统,它够快,够现代。你可以利用它构建一个属于自己的个人空间,记录生活,分享知识。在本章节,我们将完成的是 后端 的安装,而 前端 的安装则需要你阅读 前端主题文档。\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/kami":{"title":"Kami 主题","data":{"":"下一个代替项目将会是 Shiro,当它完成之时,我便不再投入任何精力到 Kami 中。迎接未来总需要舍弃一些东西,非常感谢大家三年来使用 Kami,不管你是谁,都需要对你说声谢谢。—— Innei\n\n由于 Kami 主题将不再维护,该部分文档将会保持最小程度的更新;值得注意的是,使用 Kami 要求服务器的 Linux 内核版本不小于 4.19。","检查内核版本#检查内核版本":"如果你的内核版本小于 4.19,请升级内核。或者使用最新的 Ubuntu / Debian 。","克隆项目#克隆项目":"","安装依赖#安装依赖":"","配置-env#配置 ENV":"复制 .env.example 为 .env\n编辑 .env 文件,它看起来应该是这个样子的","开始构建#开始构建":"","启动前端#启动前端":"","反向代理#反向代理":"以下配置文件以 Nginx 为例,若使用 Caddy 进行配置可参考 Caddyfile 文件示例进行相应修改。\n\n完整示例如下","完成#完成":"如果您按照文档示例配置 Nginx 反向代理,您要时刻记住,您的:\nAPI 地址为 https://www.example.com/api/v2\nKami 地址为 https://www.example.com\nGateWay 为 https://www.example.com\n后台为 https://www.example.com/qaqdmin\n本地后台为 https://www.example.com/proxy/qaqdmin"}},"/themes/shiro/extra":{"title":"额外功能","data":{"":"","我的动态#我的动态":"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点击保存按钮,云函数就配置完成了。","配置主题配置#配置主题配置":"继续在「配置与云函数」页面,找到「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"}},"/themes/shiro":{"title":"Shiro 主题","data":{"":"","demo#Demo":"","前提要求#前提要求":"你已安装 Mix Space 后端并且已启动\n你已注册 Vercel 和 GitHub 账号\n你已注册 Clerk 账号\n\n\n请注意,Shiro 主题的部署教程与初版有所不同,如果你已经部署过 Shiro 主题,请重新阅读本文档(尤其是填入配置文件环节,配置有所变化),并阅读最后一节「移除 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点击按钮保存配置,随后继续进行下面的步骤。","配置环境变量#配置环境变量":"在下方的配置表格中,填入你的环境变量,然后点击复制按钮,将环境变量复制到剪贴板中。","键入环境变量--开始部署#键入环境变量 & 开始部署":"在刚刚进入的 Vercel 项目配置页面中,点击 Environment Variables,然后键盘上的 Ctrl + V 将环境变量粘贴到输入框中,然后点击 Deploy 按钮,等待部署完成。","完成#完成!":"至此,你已完成了 Shiro 主题的部署,你可以访问你的博客了。有关配置域名的教程,请参考 Vercel 文档。","移除-edge-config#移除 Edge Config":"在后续的 Shiro 更新中, Edge Config 将不再被使用。你可能需要移除 Edge Config,以防止不必要的资源使用。进入 Vercel 部署此项目的仪表盘,点击上方的 Storage,进入设置页面,点击左侧的 Projects,将链接的项目取消链接,接着点击左侧的 Settings,点击右侧的 Delete Edge Config 按钮,即可完成删除。"}},"/usage":{"title":"使用指南","data":{"":"本章节将会带您了解 Mix Space 的一些功能,以及如何使用它们。\n温馨提示:此指南需要一定的基础知识 & 理解能力,请准备好哦~","官方指南#官方指南":"","社区使用指南#社区使用指南":""}},"/usage/macros":{"title":"文本宏","data":{"":"这是一个实验性特征,可能会造成系统的不稳定。经过测试,使用大量文本宏会造成请求文章的接口变慢。","简介#简介":"使用此功能需要先在后台中开启,设置 - 系统 - 文本设定 - 文本宏替换。\nRequired: mx-server >=3.26.0文本宏是一个以 [[ ]] 包裹的语法,例如 [[ $created ]] 是一个合法的语法。在文章中可以插入文本宏,和 Markdown 一样,但是这个语法不是用 Markdown 解析和渲染,而是直接会在服务端进行替换。因此可以通过这个特征在文章中插入一些来自服务端的数据,也可以执行一些函数。例如说一篇文章的标题为「实例标题」,他的正文内容为:\n\n将会输出:\n\n又比如说:\n\n将会输出:\n\n这是一个动态的数据,dayjs 函数由服务端提供。\n所有的函数方法均在服务端执行,请注意内存的泄露造成系统的不稳定。","语法格式#语法格式":"以 [[ 开头, ]] 结尾,注意一个空格是必须的。","访问变量#访问变量":"访问变量使用 $ 前缀。目前可以访问的变量有:当前记录的所有字段(数据库记录值)比如说:title created slug nid _id ..你可以像这样来调用变量:[[ $created ]]","使用函数#使用函数":"函数的执行行为和云函数的执行行为保持一致。\n执行函数使用 # 前缀。你可以使用任意 JS 代码去执行一个函数,也可以是一个 JS 语句。如:\n\n使用内置方法。如:\n\n内置方法目前有:\ndayjs —— 日期处理\nformatNow(time: Date | string): string —— 相对时间\ncenter(text: string): string —— 居中\nright(text: string): string —— 居右\nopacity(text: string, opacity: number): string —— 透明文本\nblur(text: string, blur: number): string —— 高斯模糊化文字\ncolor(text: string, color: string): string —— 给文字上色\nsize(text: string): string —— 给文字上色"}},"/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/serverless":{"title":"云函数","data":{"":"","介绍#介绍":"云函数是 Mix Space 中的一个重要功能,它极大地辅助了使用者在 Mix Space 中的体验。通过云函数,Mix Space 可以额外实现实现歌单解析,追番列表等等的功能。你可以在此处看到 Mix Space 目前收录的云函数 Snappets","使用#使用":"有一些前端主题需要使用云函数,这个时候你需要进入到云函数设置界面,将云函数代码填入到对应的位置。","1-进入云函数设置界面#1. 进入云函数设置界面":"进入后台管理,点击左侧菜单栏的 其他 - 云函数,即可进入云函数管理页面。","2-下载扩展包#2. 下载扩展包":"在右上方,点击 下载拓展包,你将会看到一个弹窗。","3-导入#3. 导入":"请在弹窗内请找到对应的主题的云函数代码,点击导入,即可完成下载对应的云函数代码。\n接下来,你可以在云函数管理页面看到你刚刚导入的云函数代码。","开发者文档#开发者文档":""}},"/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 平台的时候,就完成设置工作了。接下来你发布文章的时候,会自动的进行同步和签名;当然,需要经过你的同意。"}},"/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 服务。本文不再赘述。"}},"/themes":{"title":"前端主题","data":{"":""}},"/themes/yun":{"title":"Yun 主题","data":{"":"由于 Yun 主题将不再维护,此文档将不再更新,但是你仍然可以使用它。","克隆项目#克隆项目":"","安装依赖#安装依赖":"","配置服务#配置服务":"如果你部署 Mix Space 后端与部署 Yun 前端在同一台服务器,并且后端监听的端口为 2333,那么你可以跳过这一步。\n\n前往 ./server/constant.ts\n\n\n\n修改为你的后端 API 地址。","开始构建#开始构建":"","启动前端#启动前端":""}}} \ No newline at end of file diff --git a/_next/static/chunks/pages/docs/docker-65c96e9ed5728fb4.js b/_next/static/chunks/pages/docs/docker-70b2d570f212d9df.js similarity index 64% rename from _next/static/chunks/pages/docs/docker-65c96e9ed5728fb4.js rename to _next/static/chunks/pages/docs/docker-70b2d570f212d9df.js index 1c25ecff..90f761f3 100644 --- a/_next/static/chunks/pages/docs/docker-65c96e9ed5728fb4.js +++ b/_next/static/chunks/pages/docs/docker-70b2d570f212d9df.js @@ -1 +1 @@ -(self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[813],{874:function(e,s,t){"use strict";var r=t(6935),n={"text/plain":"Text","text/html":"Url",default:"Text"};e.exports=function(e,s){var t,o,l,a,i,c,d,h,p=!1;s||(s={}),l=s.debug||!1;try{if(i=r(),c=document.createRange(),d=document.getSelection(),(h=document.createElement("span")).textContent=e,h.ariaHidden="true",h.style.all="unset",h.style.position="fixed",h.style.top=0,h.style.clip="rect(0, 0, 0, 0)",h.style.whiteSpace="pre",h.style.webkitUserSelect="text",h.style.MozUserSelect="text",h.style.msUserSelect="text",h.style.userSelect="text",h.addEventListener("copy",function(t){if(t.stopPropagation(),s.format){if(t.preventDefault(),void 0===t.clipboardData){l&&console.warn("unable to use e.clipboardData"),l&&console.warn("trying IE specific stuff"),window.clipboardData.clearData();var r=n[s.format]||n.default;window.clipboardData.setData(r,e)}else t.clipboardData.clearData(),t.clipboardData.setData(s.format,e)}s.onCopy&&(t.preventDefault(),s.onCopy(t.clipboardData))}),document.body.appendChild(h),c.selectNodeContents(h),d.addRange(c),!document.execCommand("copy"))throw Error("copy command was unsuccessful");p=!0}catch(r){l&&console.error("unable to copy using execCommand: ",r),l&&console.warn("trying IE specific stuff");try{window.clipboardData.setData(s.format||"text",e),s.onCopy&&s.onCopy(window.clipboardData),p=!0}catch(r){l&&console.error("unable to copy using clipboardData: ",r),l&&console.error("falling back to prompt"),t="message"in s?s.message:"Copy to clipboard: #{key}, Enter",o=(/mac os x/i.test(navigator.userAgent)?"⌘":"Ctrl")+"+C",a=t.replace(/#{\s*key\s*}/g,o),window.prompt(a,e)}}finally{d&&("function"==typeof d.removeRange?d.removeRange(c):d.removeAllRanges()),h&&document.body.removeChild(h),i()}return p}},635:function(e,s,t){(window.__NEXT_P=window.__NEXT_P||[]).push(["/docs/docker",function(){return t(9069)}])},584:function(e,s,t){"use strict";t.d(s,{C:function(){return a}});var r=t(1527),n=t(959),o=t(874),l=t.n(o);function a(e){let{variableNames:s}=e,[t,o]=(0,n.useState)(Array(s.length).fill("")),a=(e,s)=>{let r=[...t];r[e]=s,o(r)};return(0,r.jsxs)("div",{className:"p-4 mt-2",children:[s.map((e,s)=>(0,r.jsxs)("div",{className:"flex items-center space-x-4 mb-4",children:[(0,r.jsx)("input",{type:"text",className:"border rounded px-2 py-2 w-1/2 bg-transparent focus:outline-none focus:border-black hover:border-white-400 transition duration-300 font-[400] font-sans text-sm cursor-not-allowed",value:e.name||e.key,"data-tip":e.key,onMouseOver:e=>{e.target.style.color="transparent",setTimeout(()=>{e.target.style.color="inherit",e.target.value=e.target.dataset.tip},300)},onMouseLeave:s=>{s.target.style.color="transparent",setTimeout(()=>{s.target.style.color="inherit",s.target.value=e.name||e.key},300)},disabled:!0}),(0,r.jsx)("input",{type:"text",className:"border rounded px-2 py-2 w-1/2 focus:outline-none focus:border-black hover:border-gray-400 transition duration-300 font-[400] font-sans text-sm",style:{outline:"none",boxShadow:"none"},placeholder:"Enter value...",value:t[s],onChange:e=>a(s,e.target.value)})]},"".concat(e.key))),(0,r.jsxs)("div",{className:"flex items-center justify-between mb-4",children:[(0,r.jsx)("h2",{className:"sr-only",children:"环境变量配置"}),(0,r.jsx)("button",{type:"button",className:"border bg-black w-full text-white px-4 py-2 rounded-lg text-sm transform transition-all duration-300 focus:outline-none hover:bg-gray-700",onClick:()=>{let e=s.map((e,s)=>"".concat(e.key,"=").concat(t[s])).join("\n");l()(e)},children:"复制"})]})]})}},9069:function(e,s,t){"use strict";t.r(s);var r=t(1527),n=t(2027),o=t(6736);t(421);var l=t(9173),a=t(584);function i(e){let s=Object.assign({h1:"h1",h3:"h3",p:"p",pre:"pre",code:"code",span:"span",blockquote:"blockquote",ul:"ul",li:"li",strong:"strong",a:"a"},(0,o.ah)(),e.components);return(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)(s.h1,{children:"Docker 部署"}),"\n","\n",(0,r.jsxs)(l.Rg,{children:[(0,r.jsx)(s.h3,{id:"安装-docker",children:"安装 Docker"}),(0,r.jsx)(s.p,{children:"如果你的服务器在国内,建议使用阿里云的镜像加速,安装命令如下:"}),(0,r.jsx)(s.pre,{"data-language":"bash","data-theme":"default",hasCopyCode:!0,children:(0,r.jsx)(s.code,{"data-language":"bash","data-theme":"default",children:(0,r.jsxs)(s.span,{className:"line",children:[(0,r.jsx)(s.span,{style:{color:"var(--shiki-token-function)"},children:"curl"}),(0,r.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" "}),(0,r.jsx)(s.span,{style:{color:"var(--shiki-token-string)"},children:"-fsSL"}),(0,r.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" "}),(0,r.jsx)(s.span,{style:{color:"var(--shiki-token-string)"},children:"https://get.docker.com"}),(0,r.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" "}),(0,r.jsx)(s.span,{style:{color:"var(--shiki-token-keyword)"},children:"|"}),(0,r.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" "}),(0,r.jsx)(s.span,{style:{color:"var(--shiki-token-function)"},children:"bash"}),(0,r.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" "}),(0,r.jsx)(s.span,{style:{color:"var(--shiki-token-string)"},children:"-s"}),(0,r.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" "}),(0,r.jsx)(s.span,{style:{color:"var(--shiki-token-string)"},children:"docker"}),(0,r.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" "}),(0,r.jsx)(s.span,{style:{color:"var(--shiki-token-string)"},children:"--mirror"}),(0,r.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" "}),(0,r.jsx)(s.span,{style:{color:"var(--shiki-token-string)"},children:"Aliyun"})]})})}),(0,r.jsx)(s.p,{children:"在国外,可以直接使用官方脚本安装:"}),(0,r.jsx)(s.pre,{"data-language":"bash","data-theme":"default",hasCopyCode:!0,children:(0,r.jsx)(s.code,{"data-language":"bash","data-theme":"default",children:(0,r.jsxs)(s.span,{className:"line",children:[(0,r.jsx)(s.span,{style:{color:"var(--shiki-token-function)"},children:"curl"}),(0,r.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" "}),(0,r.jsx)(s.span,{style:{color:"var(--shiki-token-string)"},children:"-fsSL"}),(0,r.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" "}),(0,r.jsx)(s.span,{style:{color:"var(--shiki-token-string)"},children:"https://get.docker.com"}),(0,r.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" "}),(0,r.jsx)(s.span,{style:{color:"var(--shiki-token-keyword)"},children:"|"}),(0,r.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" "}),(0,r.jsx)(s.span,{style:{color:"var(--shiki-token-function)"},children:"bash"}),(0,r.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" "}),(0,r.jsx)(s.span,{style:{color:"var(--shiki-token-string)"},children:"-s"}),(0,r.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" "}),(0,r.jsx)(s.span,{style:{color:"var(--shiki-token-string)"},children:"docker"})]})})}),(0,r.jsx)(s.p,{children:"如果您成功安装了 Docker 和 Docker-Compose,可以通过以下命令查看版本:"}),(0,r.jsx)(s.pre,{"data-language":"bash","data-theme":"default",hasCopyCode:!0,children:(0,r.jsxs)(s.code,{"data-language":"bash","data-theme":"default",children:[(0,r.jsxs)(s.span,{className:"line",children:[(0,r.jsx)(s.span,{style:{color:"var(--shiki-token-function)"},children:"docker"}),(0,r.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" "}),(0,r.jsx)(s.span,{style:{color:"var(--shiki-token-string)"},children:"-v"})]}),"\n",(0,r.jsx)(s.span,{className:"line",children:" "}),"\n",(0,r.jsxs)(s.span,{className:"line",children:[(0,r.jsx)(s.span,{style:{color:"var(--shiki-token-function)"},children:"docker"}),(0,r.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" "}),(0,r.jsx)(s.span,{style:{color:"var(--shiki-token-string)"},children:"compose"}),(0,r.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" "}),(0,r.jsx)(s.span,{style:{color:"var(--shiki-token-string)"},children:"version"})]})]})}),(0,r.jsx)(s.h3,{id:"拉取配置文件",children:"拉取配置文件"}),(0,r.jsx)(s.pre,{"data-language":"bash","data-theme":"default",hasCopyCode:!0,children:(0,r.jsxs)(s.code,{"data-language":"bash","data-theme":"default",children:[(0,r.jsxs)(s.span,{className:"line",children:[(0,r.jsx)(s.span,{style:{color:"var(--shiki-token-function)"},children:"cd"}),(0,r.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" "}),(0,r.jsx)(s.span,{style:{color:"var(--shiki-token-punctuation)"},children:"&&"}),(0,r.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" "}),(0,r.jsx)(s.span,{style:{color:"var(--shiki-token-function)"},children:"mkdir"}),(0,r.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" "}),(0,r.jsx)(s.span,{style:{color:"var(--shiki-token-string)"},children:"-p"}),(0,r.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" "}),(0,r.jsx)(s.span,{style:{color:"var(--shiki-token-string)"},children:"mx-space/core"}),(0,r.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" "}),(0,r.jsx)(s.span,{style:{color:"var(--shiki-token-punctuation)"},children:"&&"}),(0,r.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" "}),(0,r.jsx)(s.span,{style:{color:"var(--shiki-token-function)"},children:"cd"}),(0,r.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" $_"})]}),"\n",(0,r.jsx)(s.span,{className:"line",children:" "}),"\n",(0,r.jsx)(s.span,{className:"line",children:(0,r.jsx)(s.span,{style:{color:"var(--shiki-token-comment)"},children:"# 拉取docker-compose.yml 文件"})}),"\n",(0,r.jsxs)(s.span,{className:"line",children:[(0,r.jsx)(s.span,{style:{color:"var(--shiki-token-function)"},children:"wget"}),(0,r.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" "}),(0,r.jsx)(s.span,{style:{color:"var(--shiki-token-string)"},children:"https://fastly.jsdelivr.net/gh/mx-space/core@master/docker-compose.yml"})]})]})}),(0,r.jsx)(s.h3,{id:"配置-core-启动配置文件",children:"配置 Core 启动配置文件"}),(0,r.jsxs)(s.p,{children:["在下方的表格里填入你的配置,然后点击复制,创建一个 ",(0,r.jsx)(s.code,{children:".env"})," 文件,将复制的内容粘贴进去,保存即可。"]}),(0,r.jsxs)(s.blockquote,{children:["\n",(0,r.jsx)(s.p,{children:"鼠标悬停在下方的表格中,可以查看对应的配置项名字。"}),"\n"]}),(0,r.jsx)(a.C,{variableNames:[{key:"JWT_SECRET",name:"[JWT 密钥] 长度不小于 16 个字符,不大于 32 个字符"},{key:"ALLOWED_ORIGINS",name:"[被允许的域名] 如果允许多个域名访问,用英文逗号,分隔"},{key:"ENCRYPT_ENABLE",name:"[是否开启加密] true 为开启,false 为关闭"},{key:"ENCRYPT_KEY",name:"[加密密钥] 详情请见下方提示"}]}),(0,r.jsxs)(s.ul,{children:["\n",(0,r.jsxs)(s.li,{children:[(0,r.jsx)(s.strong,{children:(0,r.jsx)(s.code,{children:"JWT 密钥"})}),":需要填写长度不小于 16 个字符,不大于 32 个字符的字符串,用于加密用户的 JWT,务必保存好自己的密钥,不要泄露给他人。"]}),"\n",(0,r.jsxs)(s.li,{children:[(0,r.jsx)(s.strong,{children:(0,r.jsx)(s.code,{children:"被允许的域名"})}),":需要填写被允许的域名,通常是前端的域名,如果允许多个域名访问,用英文逗号,分隔。"]}),"\n",(0,r.jsxs)(s.li,{children:[(0,r.jsx)(s.strong,{children:(0,r.jsx)(s.code,{children:"是否开启加密"})}),":如果你确定要开启加密,将 false 改为 true,开启加密后,你需要在下方填写加密密钥。"]}),"\n",(0,r.jsxs)(s.li,{children:[(0,r.jsx)(s.strong,{children:(0,r.jsx)(s.code,{children:"加密密钥"})}),":具体内容可参考 ",(0,r.jsx)(s.a,{href:"https://mx-space.js.org/feature/security.html",children:"https://mx-space.js.org/feature/security.html"})]}),"\n"]}),(0,r.jsx)(l.UW,{type:"warning",children:(0,r.jsxs)(s.p,{children:["若开启加密,则需注意密钥长度",(0,r.jsx)(s.strong,{children:"必须为 64 位"}),",不然会在初始化时报错。注意这是",(0,r.jsx)(s.strong,{children:"不可逆"}),"的,务必保存自己的秘钥。所以并不是非常推荐使用,除非你真的需要加密,"]})}),(0,r.jsx)(s.h3,{id:"启动-core",children:"启动 Core"}),(0,r.jsx)(s.pre,{"data-language":"bash","data-theme":"default",hasCopyCode:!0,children:(0,r.jsx)(s.code,{"data-language":"bash","data-theme":"default",children:(0,r.jsxs)(s.span,{className:"line",children:[(0,r.jsx)(s.span,{style:{color:"var(--shiki-token-function)"},children:"docker"}),(0,r.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" "}),(0,r.jsx)(s.span,{style:{color:"var(--shiki-token-string)"},children:"compose"}),(0,r.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" "}),(0,r.jsx)(s.span,{style:{color:"var(--shiki-token-string)"},children:"up"}),(0,r.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" "}),(0,r.jsx)(s.span,{style:{color:"var(--shiki-token-string)"},children:"-d"})]})})}),(0,r.jsx)(s.h3,{id:"完成",children:"完成"}),(0,r.jsx)(s.p,{children:"恭喜你完成了 Core 部署,不过仅仅如此是不够的,你需要对 Core 进行初始化等等,尽情探索吧!"})]})]})}s.default=(0,n.j)({MDXContent:function(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},{wrapper:s}=Object.assign({},(0,o.ah)(),e.components);return s?(0,r.jsx)(s,{...e,children:(0,r.jsx)(i,{...e})}):i(e)},pageOpts:{filePath:"pages/docs/docker.mdx",route:"/docs/docker",headings:[{depth:1,value:"Docker 部署",id:"docker-部署"},{depth:3,value:"安装 Docker",id:"安装-docker"},{depth:3,value:"拉取配置文件",id:"拉取配置文件"},{depth:3,value:"配置 Core 启动配置文件",id:"配置-core-启动配置文件"},{depth:3,value:"启动 Core",id:"启动-core"},{depth:3,value:"完成",id:"完成"}],title:"Docker 部署"},pageNextRoute:"/docs/docker"})},6935:function(e){e.exports=function(){var e=document.getSelection();if(!e.rangeCount)return function(){};for(var s=document.activeElement,t=[],r=0;r{let r=[...t];r[e]=s,o(r)};return(0,r.jsxs)("div",{className:"p-4 mt-2",children:[s.map((e,s)=>(0,r.jsxs)("div",{className:"flex items-center space-x-4 mb-4",children:[(0,r.jsx)("input",{type:"text",className:"border rounded px-2 py-2 w-1/2 bg-transparent focus:outline-none focus:border-black hover:border-white-400 transition duration-300 font-[400] font-sans text-sm cursor-not-allowed",value:e.name||e.key,"data-tip":e.key,onMouseOver:e=>{e.target.style.color="transparent",setTimeout(()=>{e.target.style.color="inherit",e.target.value=e.target.dataset.tip},300)},onMouseLeave:s=>{s.target.style.color="transparent",setTimeout(()=>{s.target.style.color="inherit",s.target.value=e.name||e.key},300)},disabled:!0}),(0,r.jsx)("input",{type:"text",className:"border rounded px-2 py-2 w-1/2 focus:outline-none focus:border-black hover:border-gray-400 transition duration-300 font-[400] font-sans text-sm",style:{outline:"none",boxShadow:"none"},placeholder:"Enter value...",value:t[s],onChange:e=>a(s,e.target.value)})]},"".concat(e.key))),(0,r.jsxs)("div",{className:"flex items-center justify-between mb-4",children:[(0,r.jsx)("h2",{className:"sr-only",children:"环境变量配置"}),(0,r.jsx)("button",{type:"button",className:"border bg-black w-full text-white px-4 py-2 rounded-lg text-sm transform transition-all duration-300 focus:outline-none hover:bg-gray-700",onClick:()=>{let e=s.map((e,s)=>"".concat(e.key,"=").concat(t[s])).join("\n");l()(e)},children:"复制"})]})]})}},9069:function(e,s,t){"use strict";t.r(s);var r=t(1527),n=t(2027),o=t(6736);t(421);var l=t(9173),a=t(584);function i(e){let s=Object.assign({h1:"h1",h3:"h3",p:"p",pre:"pre",code:"code",span:"span",blockquote:"blockquote",ul:"ul",li:"li",strong:"strong",a:"a"},(0,o.ah)(),e.components);return(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)(s.h1,{children:"Docker 部署"}),"\n","\n",(0,r.jsxs)(l.Rg,{children:[(0,r.jsx)(s.h3,{id:"安装-docker",children:"安装 Docker"}),(0,r.jsx)(s.p,{children:"如果你的服务器在国内,建议使用阿里云的镜像加速,安装命令如下:"}),(0,r.jsx)(s.pre,{"data-language":"bash","data-theme":"default",hasCopyCode:!0,children:(0,r.jsx)(s.code,{"data-language":"bash","data-theme":"default",children:(0,r.jsxs)(s.span,{className:"line",children:[(0,r.jsx)(s.span,{style:{color:"var(--shiki-token-function)"},children:"curl"}),(0,r.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" "}),(0,r.jsx)(s.span,{style:{color:"var(--shiki-token-string)"},children:"-fsSL"}),(0,r.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" "}),(0,r.jsx)(s.span,{style:{color:"var(--shiki-token-string)"},children:"https://get.docker.com"}),(0,r.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" "}),(0,r.jsx)(s.span,{style:{color:"var(--shiki-token-keyword)"},children:"|"}),(0,r.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" "}),(0,r.jsx)(s.span,{style:{color:"var(--shiki-token-function)"},children:"bash"}),(0,r.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" "}),(0,r.jsx)(s.span,{style:{color:"var(--shiki-token-string)"},children:"-s"}),(0,r.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" "}),(0,r.jsx)(s.span,{style:{color:"var(--shiki-token-string)"},children:"docker"}),(0,r.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" "}),(0,r.jsx)(s.span,{style:{color:"var(--shiki-token-string)"},children:"--mirror"}),(0,r.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" "}),(0,r.jsx)(s.span,{style:{color:"var(--shiki-token-string)"},children:"Aliyun"})]})})}),(0,r.jsx)(s.p,{children:"在国外,可以直接使用官方脚本安装:"}),(0,r.jsx)(s.pre,{"data-language":"bash","data-theme":"default",hasCopyCode:!0,children:(0,r.jsx)(s.code,{"data-language":"bash","data-theme":"default",children:(0,r.jsxs)(s.span,{className:"line",children:[(0,r.jsx)(s.span,{style:{color:"var(--shiki-token-function)"},children:"curl"}),(0,r.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" "}),(0,r.jsx)(s.span,{style:{color:"var(--shiki-token-string)"},children:"-fsSL"}),(0,r.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" "}),(0,r.jsx)(s.span,{style:{color:"var(--shiki-token-string)"},children:"https://get.docker.com"}),(0,r.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" "}),(0,r.jsx)(s.span,{style:{color:"var(--shiki-token-keyword)"},children:"|"}),(0,r.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" "}),(0,r.jsx)(s.span,{style:{color:"var(--shiki-token-function)"},children:"bash"}),(0,r.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" "}),(0,r.jsx)(s.span,{style:{color:"var(--shiki-token-string)"},children:"-s"}),(0,r.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" "}),(0,r.jsx)(s.span,{style:{color:"var(--shiki-token-string)"},children:"docker"})]})})}),(0,r.jsx)(s.p,{children:"如果您成功安装了 Docker 和 Docker-Compose,可以通过以下命令查看版本:"}),(0,r.jsx)(s.pre,{"data-language":"bash","data-theme":"default",hasCopyCode:!0,children:(0,r.jsxs)(s.code,{"data-language":"bash","data-theme":"default",children:[(0,r.jsxs)(s.span,{className:"line",children:[(0,r.jsx)(s.span,{style:{color:"var(--shiki-token-function)"},children:"docker"}),(0,r.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" "}),(0,r.jsx)(s.span,{style:{color:"var(--shiki-token-string)"},children:"-v"})]}),"\n",(0,r.jsx)(s.span,{className:"line",children:" "}),"\n",(0,r.jsxs)(s.span,{className:"line",children:[(0,r.jsx)(s.span,{style:{color:"var(--shiki-token-function)"},children:"docker"}),(0,r.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" "}),(0,r.jsx)(s.span,{style:{color:"var(--shiki-token-string)"},children:"compose"}),(0,r.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" "}),(0,r.jsx)(s.span,{style:{color:"var(--shiki-token-string)"},children:"version"})]})]})}),(0,r.jsx)(s.h3,{id:"拉取配置文件",children:"拉取配置文件"}),(0,r.jsx)(s.pre,{"data-language":"bash","data-theme":"default",hasCopyCode:!0,children:(0,r.jsxs)(s.code,{"data-language":"bash","data-theme":"default",children:[(0,r.jsxs)(s.span,{className:"line",children:[(0,r.jsx)(s.span,{style:{color:"var(--shiki-token-function)"},children:"cd"}),(0,r.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" "}),(0,r.jsx)(s.span,{style:{color:"var(--shiki-token-punctuation)"},children:"&&"}),(0,r.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" "}),(0,r.jsx)(s.span,{style:{color:"var(--shiki-token-function)"},children:"mkdir"}),(0,r.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" "}),(0,r.jsx)(s.span,{style:{color:"var(--shiki-token-string)"},children:"-p"}),(0,r.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" "}),(0,r.jsx)(s.span,{style:{color:"var(--shiki-token-string)"},children:"mx-space/core"}),(0,r.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" "}),(0,r.jsx)(s.span,{style:{color:"var(--shiki-token-punctuation)"},children:"&&"}),(0,r.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" "}),(0,r.jsx)(s.span,{style:{color:"var(--shiki-token-function)"},children:"cd"}),(0,r.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" $_"})]}),"\n",(0,r.jsx)(s.span,{className:"line",children:" "}),"\n",(0,r.jsx)(s.span,{className:"line",children:(0,r.jsx)(s.span,{style:{color:"var(--shiki-token-comment)"},children:"# 拉取 docker-compose.yml 文件"})}),"\n",(0,r.jsxs)(s.span,{className:"line",children:[(0,r.jsx)(s.span,{style:{color:"var(--shiki-token-function)"},children:"wget"}),(0,r.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" "}),(0,r.jsx)(s.span,{style:{color:"var(--shiki-token-string)"},children:"https://fastly.jsdelivr.net/gh/mx-space/core@master/docker-compose.yml"})]})]})}),(0,r.jsx)(s.h3,{id:"配置-core-启动配置文件",children:"配置 Core 启动配置文件"}),(0,r.jsxs)(s.p,{children:["在下方的表格里填入你的配置,然后点击复制,创建一个 ",(0,r.jsx)(s.code,{children:".env"})," 文件,将复制的内容粘贴进去,保存即可。"]}),(0,r.jsxs)(s.blockquote,{children:["\n",(0,r.jsx)(s.p,{children:"鼠标悬停在下方的表格中,可以查看对应的配置项名字。"}),"\n"]}),(0,r.jsx)(a.C,{variableNames:[{key:"JWT_SECRET",name:"[JWT 密钥] 长度不小于 16 个字符,不大于 32 个字符"},{key:"ALLOWED_ORIGINS",name:"[被允许的域名] 如果允许多个域名访问,用英文逗号,分隔"},{key:"ENCRYPT_ENABLE",name:"[是否开启加密] true 为开启,false 为关闭"},{key:"ENCRYPT_KEY",name:"[加密密钥] 详情请见下方提示"}]}),(0,r.jsxs)(s.ul,{children:["\n",(0,r.jsxs)(s.li,{children:[(0,r.jsx)(s.strong,{children:(0,r.jsx)(s.code,{children:"JWT 密钥"})}),":需要填写长度不小于 16 个字符,不大于 32 个字符的字符串,用于加密用户的 JWT,务必保存好自己的密钥,不要泄露给他人。"]}),"\n",(0,r.jsxs)(s.li,{children:[(0,r.jsx)(s.strong,{children:(0,r.jsx)(s.code,{children:"被允许的域名"})}),":需要填写被允许的域名,通常是前端的域名,如果允许多个域名访问,用英文逗号,分隔。"]}),"\n",(0,r.jsxs)(s.li,{children:[(0,r.jsx)(s.strong,{children:(0,r.jsx)(s.code,{children:"是否开启加密"})}),":如果你确定要开启加密,将 false 改为 true,开启加密后,你需要在下方填写加密密钥。"]}),"\n",(0,r.jsxs)(s.li,{children:[(0,r.jsx)(s.strong,{children:(0,r.jsx)(s.code,{children:"加密密钥"})}),":具体内容可参考 ",(0,r.jsx)(s.a,{href:"https://mx-space.js.org/feature/security.html",children:"https://mx-space.js.org/feature/security.html"})]}),"\n"]}),(0,r.jsx)(l.UW,{type:"warning",children:(0,r.jsxs)(s.p,{children:["若开启加密,则需注意密钥长度",(0,r.jsx)(s.strong,{children:"必须为 64 位"}),",不然会在初始化时报错。注意这是",(0,r.jsx)(s.strong,{children:"不可逆"}),"的,务必保存自己的秘钥。所以并不是非常推荐使用,除非你真的需要加密,"]})}),(0,r.jsx)(s.h3,{id:"启动-core",children:"启动 Core"}),(0,r.jsx)(s.pre,{"data-language":"bash","data-theme":"default",hasCopyCode:!0,children:(0,r.jsx)(s.code,{"data-language":"bash","data-theme":"default",children:(0,r.jsxs)(s.span,{className:"line",children:[(0,r.jsx)(s.span,{style:{color:"var(--shiki-token-function)"},children:"docker"}),(0,r.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" "}),(0,r.jsx)(s.span,{style:{color:"var(--shiki-token-string)"},children:"compose"}),(0,r.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" "}),(0,r.jsx)(s.span,{style:{color:"var(--shiki-token-string)"},children:"up"}),(0,r.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" "}),(0,r.jsx)(s.span,{style:{color:"var(--shiki-token-string)"},children:"-d"})]})})}),(0,r.jsx)(s.h3,{id:"完成",children:"完成"}),(0,r.jsxs)(s.p,{children:["恭喜你完成了 Core 部署,不过仅仅如此是不够的,你需要进入后台对 Core 进行初始化等操作(在反向代理之后进行),这里不再赘述。除此之外,如引言所述还需要部署一个",(0,r.jsx)(s.strong,{children:"前端"}),"主题用于展示,请参考 ",(0,r.jsx)(s.a,{href:"https://mx-space.js.org/themes",children:"前端主题文档"})," 继续完成部署前端主题的步骤。"]})]})]})}s.default=(0,n.j)({MDXContent:function(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},{wrapper:s}=Object.assign({},(0,o.ah)(),e.components);return s?(0,r.jsx)(s,{...e,children:(0,r.jsx)(i,{...e})}):i(e)},pageOpts:{filePath:"pages/docs/docker.mdx",route:"/docs/docker",headings:[{depth:1,value:"Docker 部署",id:"docker-部署"},{depth:3,value:"安装 Docker",id:"安装-docker"},{depth:3,value:"拉取配置文件",id:"拉取配置文件"},{depth:3,value:"配置 Core 启动配置文件",id:"配置-core-启动配置文件"},{depth:3,value:"启动 Core",id:"启动-core"},{depth:3,value:"完成",id:"完成"}],title:"Docker 部署"},pageNextRoute:"/docs/docker"})},6935:function(e){e.exports=function(){var e=document.getSelection();if(!e.rangeCount)return function(){};for(var s=document.activeElement,t=[],r=0;r
系统开发
前言

开发指南

+
系统开发
前言

开发指南

为了方便开发者快速上手,我们提供了一些开发指南,帮助开发者快速了解和使用我们的产品。

项目技术栈

    @@ -41,4 +41,4 @@

    cd core
     pnpm i

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

-
pnpm run dev

© 2023 This project is licensed under AGPLv3 licensed. 2021 Innei

\ No newline at end of file +
pnpm run dev

© 2023 This project is licensed under AGPLv3 licensed. 2021 Innei

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

前端开发指南

+
系统开发
前端开发指南

前端开发指南

为什么要写这一节?

我希望不再是只有 Kami 一个风格,能有更多主题可供选择。

@@ -38,4 +38,4 @@

SDK 仍在 beta 阶段,未来接口可能出现变化。

-

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


© 2023 This project is licensed under AGPLv3 licensed. 2021 Innei

\ No newline at end of file +

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


© 2023 This project is licensed under AGPLv3 licensed. 2021 Innei

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

Mix Space

+
部署文档
引言

Mix Space

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

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

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

@@ -29,4 +29,4 @@

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

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

💡

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

-

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


© 2023 This project is licensed under AGPLv3 licensed. 2021 Innei

\ No newline at end of file +

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


© 2023 This project is licensed under AGPLv3 licensed. 2021 Innei

\ No newline at end of file diff --git a/docs/advanced.html b/docs/advanced.html index 05a3ae73..2490115a 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 服务。本文不再赘述。


© 2023 This project is licensed under AGPLv3 licensed. 2021 Innei

\ 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 服务。本文不再赘述。


© 2023 This project is licensed under AGPLv3 licensed. 2021 Innei

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

社区部署教程

+

© 2023 This project is licensed under AGPLv3 licensed. 2021 Innei

\ No newline at end of file +

© 2023 This project is licensed under AGPLv3 licensed. 2021 Innei

\ No newline at end of file diff --git a/docs/docker.html b/docs/docker.html index d8d7a7e7..4862ecc5 100644 --- a/docs/docker.html +++ b/docs/docker.html @@ -9,13 +9,13 @@ .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
  
 docker compose version

拉取配置文件

cd && mkdir -p mx-space/core && cd $_
  
-# 拉取docker-compose.yml 文件
+# 拉取 docker-compose.yml 文件
 wget https://fastly.jsdelivr.net/gh/mx-space/core@master/docker-compose.yml

配置 Core 启动配置文件

在下方的表格里填入你的配置,然后点击复制,创建一个 .env 文件,将复制的内容粘贴进去,保存即可。

鼠标悬停在下方的表格中,可以查看对应的配置项名字。

环境变量配置

    @@ -23,4 +23,4 @@
  • 被允许的域名:需要填写被允许的域名,通常是前端的域名,如果允许多个域名访问,用英文逗号,分隔。
  • 是否开启加密:如果你确定要开启加密,将 false 改为 true,开启加密后,你需要在下方填写加密密钥。
  • 加密密钥:具体内容可参考 https://mx-space.js.org/feature/security.html (opens in a new tab)
  • -
⚠️

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

启动 Core

docker compose up -d

完成

恭喜你完成了 Core 部署,不过仅仅如此是不够的,你需要对 Core 进行初始化等等,尽情探索吧!


© 2023 This project is licensed under AGPLv3 licensed. 2021 Innei

\ No newline at end of file +
⚠️

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

启动 Core

docker compose up -d

完成

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


© 2023 This project is licensed under AGPLv3 licensed. 2021 Innei

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

主要功能

+
部署文档
主要功能

主要功能

Mix Space + Markdown > HTML

Mix Space 的 Markdown 除了支持标准的 Markdown 语法和 GFM 外,还支持「文本宏」,它可以让你在文章中使用动态数据,比如:

<p align="right">更新于 [[ #dayjs($modified).format('YY-MM') ]]</p>
@@ -64,4 +64,4 @@

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


    © 2023 This project is licensed under AGPLv3 licensed. 2021 Innei

    \ No newline at end of file +

    © 2023 This project is licensed under AGPLv3 licensed. 2021 Innei

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

    预设脚本部署

    +
    部署文档
    预设脚本部署

    预设脚本部署

    -
    ⚠️

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


    © 2023 This project is licensed under AGPLv3 licensed. 2021 Innei

    \ No newline at end of file +
    ⚠️

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


    © 2023 This project is licensed under AGPLv3 licensed. 2021 Innei

    \ No newline at end of file diff --git a/index.html b/index.html index 1daed846..b0fe6403 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 →


    © 2023 This project is licensed under AGPLv3 licensed. 2021 Innei

    \ 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 →


    © 2023 This project is licensed under AGPLv3 licensed. 2021 Innei

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

    前端主题

    +

    前端主题

    基于 Mix Space 后端 API 开发的前端主题
    点击查看主题部署指南

    -

    © 2023 This project is licensed under AGPLv3 licensed. 2021 Innei

    \ No newline at end of file +

    © 2023 This project is licensed under AGPLv3 licensed. 2021 Innei

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

    Kami 主题

    +
    -

    © 2023 This project is licensed under AGPLv3 licensed. 2021 Innei

    \ No newline at end of file +

    © 2023 This project is licensed under AGPLv3 licensed. 2021 Innei

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

    Shiro 主题

    +
    前端主题
    部署 Shiro 主题
    部署主题

    Shiro 主题

    Demo

    @@ -153,4 +153,4 @@

    移除 Edge Config

    在后续的 Shiro 更新中, Edge Config 将不再被使用。你可能需要移除 Edge Config,以防止不必要的资源使用。

    进入 Vercel 部署此项目的仪表盘,点击上方的 Storage,进入设置页面,点击左侧的 Projects,将链接的项目取消链接,接着点击左侧的 Settings,点击右侧的 Delete Edge Config 按钮,即可完成删除。

    -

    © 2023 This project is licensed under AGPLv3 licensed. 2021 Innei

    \ No newline at end of file +

    © 2023 This project is licensed under AGPLv3 licensed. 2021 Innei

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

    额外功能

    +

    然后执行程序即可。如果一切正常,刷新一下你的博客你就可以在博客顶部看到你的动态了。

    如果有什么疑问,可以去阅读该项目的 README (opens in a new tab)

    -

    © 2023 This project is licensed under AGPLv3 licensed. 2021 Innei

    \ No newline at end of file +

    © 2023 This project is licensed under AGPLv3 licensed. 2021 Innei

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

    Yun 主题

    +
    前端主题
    部署 Yun 主题

    Yun 主题

    @@ -20,4 +20,4 @@ export const isDev = !isProduction export const apiBase = isDev ? 'https://api.innei.ren/v2/' - : 'http://localhost:2333/api/v2/'

    修改为你的后端 API 地址。

    开始构建

    pnpm build

    启动前端

    pnpm pm2

    © 2023 This project is licensed under AGPLv3 licensed. 2021 Innei

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

    修改为你的后端 API 地址。

    开始构建

    pnpm build

    启动前端

    pnpm pm2

    © 2023 This project is licensed under AGPLv3 licensed. 2021 Innei

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

    使用指南

    +

    © 2023 This project is licensed under AGPLv3 licensed. 2021 Innei

    \ No newline at end of file +

    社区使用指南


    © 2023 This project is licensed under AGPLv3 licensed. 2021 Innei

    \ No newline at end of file diff --git a/usage/macros.html b/usage/macros.html index 591849d0..891e489d 100644 --- a/usage/macros.html +++ b/usage/macros.html @@ -9,7 +9,7 @@ .dark { --nextra-primary-hue: 204deg; } -
    使用指南
    文本宏

    文本宏

    +
    使用指南
    文本宏

    文本宏

    ⚠️

    这是一个实验性特征,可能会造成系统的不稳定。

    经过测试,使用大量文本宏会造成请求文章的接口变慢。

    简介

    @@ -49,4 +49,4 @@

    blur(text: string, blur: number): string —— 高斯模糊化文字
  • color(text: string, color: string): string —— 给文字上色
  • size(text: string): string —— 给文字上色
  • -


    © 2023 This project is licensed under AGPLv3 licensed. 2021 Innei

    \ No newline at end of file +

    © 2023 This project is licensed under AGPLv3 licensed. 2021 Innei

    \ No newline at end of file diff --git a/usage/search.html b/usage/search.html index 58ebac79..74364cc9 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 进行站内搜索了。


    © 2023 This project is licensed under AGPLv3 licensed. 2021 Innei

    \ No newline at end of file +

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


    © 2023 This project is licensed under AGPLv3 licensed. 2021 Innei

    \ No newline at end of file diff --git a/usage/serverless.html b/usage/serverless.html index cee46550..7ca4c27e 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. 导入

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

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

    开发者文档

    -

    © 2023 This project is licensed under AGPLv3 licensed. 2021 Innei

    \ No newline at end of file +

    © 2023 This project is licensed under AGPLv3 licensed. 2021 Innei

    \ No newline at end of file diff --git a/usage/xlog.html b/usage/xlog.html index af404c95..b6b3198f 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 平台的时候,就完成设置工作了。

      -

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


    © 2023 This project is licensed under AGPLv3 licensed. 2021 Innei

    \ No newline at end of file +

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


    © 2023 This project is licensed under AGPLv3 licensed. 2021 Innei

    \ No newline at end of file