<rss xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" version="2.0">
<channel>
<atom:link href="https://www.glsaone.xyz/feed" rel="self" type="application/rss+xml"/>
<title>龙司的小屋</title>
<link>https://www.glsaone.xyz</link>
<description>龙司的日常</description>
<language>zh-CN</language>
<copyright>© yhxglsa2016 </copyright>
<pubDate>Sat, 30 May 2026 18:39:41 GMT</pubDate>
<generator>Mix Space CMS (https://github.com/mx-space)</generator>
<docs>https://mx-space.js.org</docs>
<image>
    <url>https://avatars.githubusercontent.com/u/118035443?v=4</url>
    <title>龙司的小屋</title>
    <link>https://www.glsaone.xyz</link>
</image>
<item>
    <title>SyncClipboard | 剪贴板同步</title>
    <link>https://www.glsaone.xyz/posts/guide/SyncClipboard</link>
    <pubDate>Thu, 05 Mar 2026 09:57:59 GMT</pubDate>
    <description>前言
在接触 SyncClipboard 之前，我尝试过多种剪贴板同步方案：小米电脑管家（强制捆绑安</description>
    <content:encoded><![CDATA[
      <blockquote>该渲染由 marked 生成，可能存在排版问题，最佳体验请前往：<a href='https://www.glsaone.xyz/posts/guide/SyncClipboard'>https://www.glsaone.xyz/posts/guide/SyncClipboard</a></blockquote>
      <h1>前言</h1>
<p>在接触 SyncClipboard 之前，我尝试过多种剪贴板同步方案：小米电脑管家（强制捆绑安装）、微信输入法（要求所有设备统一输入法）等。但这些方案普遍存在稳定性问题——比如历史复制内容会随机失效、同步延迟明显等。最终我选择基于开源项目 SyncClipboard 自建服务，实现真正可控的跨平台剪贴板同步。</p>
<blockquote>
<p><strong>项目地址</strong>：<a href="https://github.com/Jeric-X/SyncClipboard">Jeric-X/SyncClipboard</a><br>一个支持跨平台剪贴板同步与历史记录管理的工具。
项目 README 文档覆盖详尽，遇到问题建议优先查阅官方文档。</p>
</blockquote>
<h2>服务端部署</h2>
<p>SyncClipboard 需要自建服务端，可根据使用场景灵活选择部署方式：</p>
<table>
<thead>
<tr>
<th>使用场景</th>
<th>推荐方案</th>
</tr>
</thead>
<tbody><tr>
<td>纯局域网环境</td>
<td>NAS Docker 部署 / Windows 客户端内置服务器</td>
</tr>
<tr>
<td>公网访问</td>
<td>云服务器 Docker 部署 / 第三方 WebDAV 服务（如坚果云）</td>
</tr>
</tbody></table>
<p>以下以<strong>公网服务器 Docker 部署</strong>为例：</p>
<h3>1. 创建 compose 文件</h3>
<pre><code class="language-yaml">services:
  syncclipboard-server:
    image: jericx/syncclipboard-server:latest
    container_name: syncclipboard-server
    restart: unless-stopped
    ports:
      - "5033:5033"
    environment:
      - SYNCCLIPBOARD_USERNAME=your_username
      - SYNCCLIPBOARD_PASSWORD=your_password
    volumes:
      - /data/syncclipboard-server:/app/data</code></pre><p><strong>注意</strong>：请提前修改 <code>ports</code> 映射端口及账户密码。</p>
<h3>2. 启动服务</h3>
<pre><code class="language-bash">docker compose up -d</code></pre><h3>3. 安全建议</h3>
<p>公网部署强烈建议配置 <strong>SSL 反向代理</strong>（如 Nginx/Caddy），避免明文传输敏感数据。</p>
<hr>
<h2>客户端配置</h2>
<h3>Windows 客户端</h3>
<h4>下载地址</h4>
<p><a href="https://github.com/Jeric-X/SyncClipboard/releases">发行版 · Jeric-X/SyncClipboard</a> （下载最新发行版即可）</p>
<h4>基础配置</h4>
<p>1.添加账号选择对应账号类型，输入服务器地址和对应的用户名密码
</p>
<p>2.点击服务状态查看对应服务状态
</p>
<p>3.到此处剪贴板已经可以同步使用了，其余配置可以自行摸索或查看项目的<a href="https://github.com/Jeric-X/SyncClipboard/blob/master/README.md">REDME文档</a> 进行探索</p>
<h3>Android 客户端</h3>
<p>软件推荐：<a href="https://github.com/Waboodoo/HTTP-Shortcuts">HTTP Request Shortcuts</a>，<a href="https://github.com/bling-yshs/sync-clipboard-flutter">Sync Clipboard Flutter</a>，<a href="https://github.com/aiselp/AutoX">Autox.js</a>，<a href="https://github.com/pppscn/SmsForwarder">SmsForwarder</a>， <a href="https://tasker.joaoapps.com/">Tasker</a>
本文使用Sync Clipboard Flutter 作为示例进行演示
1.打开软件后如图，填写对应的服务器地址和账户密码

2.若对应服务器地址未开启 HTTPS 则打开设置中的信任不安全的 HTTPS证书选项

3.此时剪贴板已经可以正常使用，可以使用调试选项中的按钮进行测试
 
4.本应用支持从控制中心快捷上传或下载，所以可以在控制中心加入对应按钮
</p>

      <p style='text-align: right'>
      <a href='https://www.glsaone.xyz/posts/guide/SyncClipboard#comments'>看完了？说点什么呢</a>
      </p>
    ]]>
    </content:encoded>
  <guid isPermaLink="false">69a953a705f2f37681c8586b</guid>
  <category>posts</category>
<category>教程</category>
 </item>
  <item>
    <title>📱 小米 Watch S3 eSIM 版本偷渡升级降级教程</title>
    <link>https://www.glsaone.xyz/posts/guide/WatchS3</link>
    <pubDate>Mon, 26 May 2025 11:18:03 GMT</pubDate>
    <description>📦 准备文件
1️⃣ notify for Xiaomi（20.2.2）
2️⃣ 小米运动健康
3</description>
    <content:encoded><![CDATA[
      <blockquote>该渲染由 marked 生成，可能存在排版问题，最佳体验请前往：<a href='https://www.glsaone.xyz/posts/guide/WatchS3'>https://www.glsaone.xyz/posts/guide/WatchS3</a></blockquote>
      <h2>📦 准备文件</h2>
<p>1️⃣ <strong>notify for Xiaomi（20.2.2）</strong>
2️⃣ <strong>小米运动健康</strong>
3️⃣ <strong>MT 管理器</strong>
4️⃣ <strong>watchs3 固件包</strong></p>
<p><a href="https://www.123684.com/s/78OeVv-IdND?%E6%8F%90%E5%8F%96%E7%A0%81:1ikt">https://www.123684.com/s/78OeVv-IdND?提取码:1ikt</a></p>
<h2>🔑 获取 Token 值作为配对密钥</h2>
<h3>🚩 第一步</h3>
<p>打开小米健康，右下角进入“我的”，点击“关于”，连击 10 下小米运动健康上方的图标，直到出现下方弹出提示。</p>
<p></p>
<h3>🚩 第二步</h3>
<p>通过 MT 管理器打开 <code>/storage/emulated/0/Download/wearablelog</code>，打开压缩包中的 <code>XiaomiFit.main.log</code> 文件。</p>
<p></p>
<p>使用搜索功能查找 <code>token</code>，黄色框中的内容就是配对密钥，记下来记得去掉引号。</p>
<p></p>
<h2>🔗 使用 notify for Xiaomi 进行连接</h2>
<p>在运行软件前，在手表上选择“连接新手机”，运行 <code>notify for Xiaomi</code> 软件，同意所有权限。由于目前没有 eSIM 设备类型，所以我们选择 S3 进行连接。</p>
<p></p>
<p>选择“小米运动健康已安装”，关闭官方 app 权限（个人建议直接清除小米运动健康数据，以防小米运动健康连接手表），然后填入配对密钥，下一步个人信息随便填写，记得把隐私勾上，然后下一步即可。</p>
<p></p>
<p>在刷写固件时需确保手表已经连接上手机，由于我们在手表上选择了“连接新手机”，所以如果 <code>notify for Xiaomi</code> 连接上手表，此时手机能显示步数，手表二维码应该已经消失。</p>
<p></p>
<h2>🛠️ 使用 notify for Xiaomi 刷写固件</h2>
<p>确保设备连接成功后，点击右下角“设备”，选择“升级固件”，然后选择固件，待软件检测固件有效后安装即可。手表会先进入传输固件包，后面重启后会自动安装。</p>
<p></p>
<h2>🔄 重新使用小米运动健康连接手表</h2>
<p>手表更新固件成功后，可以清除 <code>notify for Xiaomi</code> 数据，使用小米运动健康重新连接手表。此时有部分手表原先设置会被关闭，例如通知设置等需要重新开启。</p>

      <p style='text-align: right'>
      <a href='https://www.glsaone.xyz/posts/guide/WatchS3#comments'>看完了？说点什么呢</a>
      </p>
    ]]>
    </content:encoded>
  <guid isPermaLink="false">68344deb5a168c7b56aa6eef</guid>
  <category>posts</category>
<category>教程</category>
 </item>
  <item>
    <title>Mix-Space 前端Shiro/Shiroi搭建</title>
    <link>https://www.glsaone.xyz/posts/guide/Mix-Space-Shiro</link>
    <pubDate>Sun, 09 Mar 2025 06:58:36 GMT</pubDate>
    <description>一个极简主义的个人网站，纸的纯净和雪的清新。

https://github.com/Innei/S</description>
    <content:encoded><![CDATA[
      <blockquote>该渲染由 marked 生成，可能存在排版问题，最佳体验请前往：<a href='https://www.glsaone.xyz/posts/guide/Mix-Space-Shiro'>https://www.glsaone.xyz/posts/guide/Mix-Space-Shiro</a></blockquote>
      <blockquote>
<p>一个极简主义的个人网站，纸的纯净和雪的清新。</p>
</blockquote>
<p><a href="https://github.com/Innei/Shiro">https://github.com/Innei/Shiro</a><br>前端主题 shiro 分为开源版和闭源版本<br>开源版：<a href="https://github.com/Innei/Shiro">Innei/Shiro</a><br>闭源版：<a href="https://github.com/innei-dev/Shiroi">innei-dev/Shiroi</a><br>闭源版需要赞助后获得权限后阅览，
作者赞助渠道：<a href="https://github.com/sponsors/Innei/">Github Sponsors</a> <a href="https://innei.in/sponsor">赞助 - 静かな森</a></p>
<h2>二·准备</h2>
<p>在进行这之后的操作之前需确认后端 Core 安装完成。<a href="https://www.glsaone.xyz/posts/guide/Mix-Space-Core">Mix Space 后端搭建</a></p>
<h3>配置系统环境</h3>
<p>下面有多个安装 shiro 的方式。<br>需注意使用 Docker 安装可不必安装下列环境</p>
<p>1.刷新系统包缓存与安装常用/必备软件包</p>
<pre><code class="language-">apt update && apt install git curl vim wget git-lfs -y</code></pre><p>2.安装 NVM</p>
<pre><code class="language-">curl https://raw.githubusercontent.com/creationix/nvm/master/install.sh | bash</code></pre><p>3.运行 source ~/.profile 命令将环境变量重新加载到当前会话中。</p>
<pre><code class="language-">source ~/.profile</code></pre><p>4.列出 Node.JS 的可用版本。</p>
<pre><code class="language-">nvm ls-remote</code></pre><p>5.确定版本后，运行 nvm install <em>version</em> 命令下载并安装它。例如，安装 Node.JS 20.12.2 ， <strong>强烈推荐 V20.12.2 版本</strong></p>
<pre><code class="language-"># 安装nvm install 20.12.2# 检查版本node -v</code></pre><p>6.安装 pnpm pm2</p>
<pre><code class="language-">npm install -g pnpm pm2</code></pre><p>7.安装 sharp</p>
<pre><code class="language-">npm i -g sharppnpm add sharp

# 配置sharp环境变量
# vim ~/.bashrc
# 在底部加上
# export NEXT_SHARP_PATH=/root/node_modules/sharp</code></pre><h3>设置主题配置</h3>
<p>进入 Mix Space 后端，进入「配置与云函数」页面，点击右上角的新增按钮，在编辑页面中，填入以下设置：</p>
<ul>
<li>名称：shiro</li>
<li>引用：theme</li>
<li>数据类型：JSON</li>
<li>数据：（在下方进行复制）</li>
<li></li>
</ul>
<details>
  <summary> 主题配置 </summary>
 ```json
 {
  "footer": {
    "otherInfo": {
      "date": "2020- {{now}} ",
      "icp": {
        "text": "萌 ICP 备 20236136 号",
        "link": "https://icp.gov.moe/?keyword=20236136"
      }
    },
    "linkSections": [
      {
        "name": "关于",
        "links": [
          {
            "name": "关于本站",
            "href": "/about-site"
          },
          {
            "name": "关于我",
            "href": "/about"
          },
          {
            "name": "关于此项目",
            "href": "https://github.com/innei/Shiro",
            "external": true
          }
        ]
      },
      {
        "name": "更多",
        "links": [
          {
            "name": "时间线",
            "href": "/timeline"
          },
          {
            "name": "友链",
            "href": "/friends"
          },
          {
            "name": "监控",
            "href": "https://status.innei.in/status/main",
            "external": true
          }
        ]
      },
      {
        "name": "联系",
        "links": [
          {
            "name": "写留言",
            "href": "/message"
          },
          {
            "name": "发邮件",
            "href": "mailto: i@innei.ren ",
            "external": true
          },
          {
            "name": "GitHub",
            "href": "https://github.com/innei",
            "external": true
          }
        ]
      }
    ]
  },
  "config": {
    "color": {
      "light": [
        " #33A6B8 ",
        " #FF6666 ",
        " #26A69A ",
        " #fb7287 ",
        " #69a6cc ",
        " #F11A7B ",
        " #78C1F3 ",
        " #FF6666 ",
        " #7ACDF6 "
      ],
      "dark": [
        " #F596AA ",
        " #A0A7D4 ",
        " #ff7b7b ",
        " #99D8CF ",
        " #838BC6 ",
        " #FFE5AD ",
        " #9BE8D8 ",
        " #A1CCD1 ",
        " #EAAEBA "
      ]
    },
 
<pre><code class="language-undefined">"bg": [
  "https://github.com/Innei/static/blob/master/images/F0q8mwwaIAEtird.jpeg?raw=true",
  "https://github.com/Innei/static/blob/master/images/IMG_2111.jpeg.webp.jpg?raw=true"
],
"custom": {
  "css": [],
  "styles": [],
  "js": [],
  "scripts": []
},
"site": {
  "favicon": "/innei.svg",
  "faviconDark": "/innei-dark.svg"
},
"hero": {
  "title": {
    "template": [
      {
        "type": "h1",
        "text": "Hi, I'm ",
        "class": "font-light text-4xl"
      },
      {
        "type": "h1",
        "text": "Innei",
        "class": "font-medium mx-2 text-4xl"
      },
      {
        "type": "h1",
        "text": "👋。",
        "class": "font-light text-4xl"
      },
      {
        "type": "br"
      },
      {
        "type": "h1",
        "text": "A NodeJS Full Stack ",
        "class": "font-light text-4xl"
      },
      {
        "type": "code",
        "text": "&lt;Developer /&gt;",
        "class": "font-medium mx-2 text-3xl rounded p-1 bg-gray-200 dark:bg-gray-800/0 hover:dark:bg-gray-800/100 bg-opacity-0 hover:bg-opacity-100 transition-background duration-200"
      },
      {
        "type": "span",
        "class": "inline-block w-[1px] h-8 -bottom-2 relative bg-gray-800/80 dark:bg-gray-200/80 opacity-0 group-hover:opacity-100 transition-opacity duration-200 group-hover:animation-blink"
      }
    ]
  },
  "description": "An independent developer coding with love."
},
"module": {
  "activity": {
    "enable": true,
    "endpoint": "/fn/ps/update"
  },
  "donate": {
    "enable": true,
    "link": "https://afdian.net/@Innei",
    "qrcode": [
      "https://cdn.jsdelivr.net/gh/Innei/img-bed@master/20191211132347.png",
      "https://cdn.innei.ren/bed/2023/0424213144.png"
    ]
  },
  "bilibili": {
    "liveId": 1434499
  }
}</code></pre><p>  }
}</p>
<pre><code class="language-"></details>

[相关配置项讲解](https://mx-space.js.org/docs/themes/shiro/config)

### 配置 .env 文件
```env
# 后端API地址
NEXT_PUBLIC_API_URL=https://api.example.com/api/v2
# 后端网关地址
NEXT_PUBLIC_GATEWAY_URL=https://api.example.com
# TMDB信息获取
TMDB_API_KEY=
# GitHub token，用来获取前端版本哈希
GH_TOKEN=</code></pre><p><a href="https://post.smzdm.com/p/a5op4w33/">TMDB_API获取教程</a><br><a href="https://blog.csdn.net/joe0235/article/details/119757147">GH_TOKEN获取教程</a></p>
<h2>三·安装使用与更新</h2>
<h3>Docker</h3>
<p>开源版可以使用 docker-compose 进行安装，但需要注意的是 Docker 安装的 shiro 版本可能不是最新版<br><a href="https://github.com/Innei/Shiro/actions/workflows/release-docker.yml">Innei-Shiro-Docker</a> 此处能查看 docker 构建版本，进行比较选择安装</p>
<h4>Docker 安装</h4>
<pre><code class="language-shell">mkdir shiro
cd shiro
wget https://raw.githubusercontent.com/Innei/Shiro/main/docker-compose.yml
wget https://raw.githubusercontent.com/Innei/Shiro/main/.env.template .env

vim .env # 修改你的 ENV 变量</code></pre><h4>Docker 启动</h4>
<pre><code class="language-shell">docker compose up -d</code></pre><h4>Docker 更新</h4>
<pre><code class="language-shell">docker compose pull 
# 后续更新镜像</code></pre><h3>预构建安装使用</h3>
<p>在 <code>https://github.com/Innei/Shiro/releases</code> 中下载最新预构建项目</p>
<pre><code class="language-shell"># 解压到需要的文件夹
cd standalone
vim .env # 修改你的 ENV 变量
export PORT=2323
node server.js</code></pre><h3>构建 Shiro 项目</h3>
<h4>拉取 shiro 项目</h4>
<pre><code class="language-shell">cd /opt/mx-space
 # 根据需求创建前端路径
git clone https://github.com/Innei/Shiro.git
 # 将项目下载</code></pre><h4>配置 .env 文件</h4>
<p>将准备步骤中配置好的 env 内容填入其中</p>
<pre><code class="language-shell">cd /opt/mx-space/Shiro
mv .env.template .env
vim .env</code></pre><h4>构建项目</h4>
<pre><code class="language-">cd /opt/mx-space/Shiro
pnpm i && pnpm build</code></pre><h4>启动项目</h4>
<p>1、直接前台启动，在Shiro根目录直接运行 <code>pnpm prod:pm2</code>，可使用 nohup 或其他使其后台运行<br>2、使用 Screen 实现后台保活 (推荐)</p>
<pre><code class="language-shell">apt install screen -y
# Debian/Ubuntu安装
Screenscreen -R shiro
# 新建shiro会话
cd /opt/mx-space/Shiro
npx next start -p 2323
# pnpm prod:pm2
# 启动shiroi</code></pre><p>启动完成后 按 Ctrl+A+D 即可退出并挂起 shiro 对话，完成 Shiro 后台运行。<br>**注意：**两种启动方式重启 servers 后都需重新启动下 Shiro</p>
<h3>Github Action 安装（闭源版特有）</h3>
<p><a href="https://github.com/innei-dev/shiroi-deploy-action">https://github.com/innei-dev/shiroi-deploy-action</a>
将 shiroi-deploy-action 项目 fork 到自己仓库中</p>
<h4>Secret 填写</h4>
<p>打开fork之后的库<br>  Settings -&gt; Secrets and variables -&gt; Actions<br>依次添加以下<code>secret</code>
配置</p>
<ul>
<li><code>HOST</code> 服务器地址</li>
<li><code>USER</code> 服务器用户名</li>
<li><code>PASSWORD</code> 服务器密码</li>
<li><code>PORT</code> 服务器 SSH 端口</li>
<li><code>KEY</code> 服务器 SSH Key（可选，密码 key 二选一）</li>
<li><code>GH_PAT</code> 可访问 Shiroi 仓库的 Github Token</li>
</ul>
<h4>配置 shiroi 的系统环境</h4>
<pre><code class="language-">cd ~
mkdir shiro
cd shiro
touch .env
vim .env</code></pre><p>env 文件内容的<a href="https://github.com/innei-dev/Shiroi/blob/main/.env.template">模板</a>，将相关内容填写到模板后环境配置完成</p>
<h4>运行 Github Action</h4>
<p>修改 fork 库中的 build_hash 文件为一个随机的初始哈希值
再次回到工作流就会发现开始自动部署了</p>
<h2>四·反向代理</h2>
<h3>OpenResty 设置反向代理</h3>
<p>以 1Panel+OpenResty 为例：  </p>
<ul>
<li>新建静态网站，填写对应域名</li>
<li>配置 SSL 证书开启 HTTPS</li>
<li>在配置文件最后一个 <code>}</code> 的上方另起一行，粘贴如下配置，并保存。</li>
</ul>
<h4>双域名设置</h4>
<details>
  <summary> 双域名代理配置 </summary>
 ```nginx
 ## 反向代理开始 
location ~* \.(gif|png|jpg|css|js|woff|woff2|svg|webp)$ {
  proxy_pass http://127.0.0.1:2323;
  proxy_set_header Host $host;
  proxy_set_header X-Real-IP $remote_addr;
  proxy_set_header X-Forwarded-Proto $scheme;
  proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
  proxy_set_header REMOTE-HOST $remote_addr;
  expires 30d;
}
location ~* \/(feed|sitemap|atom.xml) {
  proxy_pass http://127.0.0.1:2333/$1;
  proxy_set_header Host $host;
  proxy_set_header X-Real-IP $remote_addr;
  proxy_set_header X-Forwarded-Proto $scheme;
  proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
  proxy_set_header REMOTE-HOST $remote_addr;
  add_header X-Cache $upstream_cache_status;
  add_header Cache-Control max-age=60;
}
location / {
  proxy_pass http://127.0.0.1:2323;
  proxy_set_header Host $host;
  proxy_set_header X-Real-IP $remote_addr;
  proxy_set_header X-Forwarded-Proto $scheme;
  proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
  proxy_set_header REMOTE-HOST $remote_addr;
  add_header X-Cache $upstream_cache_status;
  add_header Cache-Control no-cache;
  proxy_intercept_errors on;
}
## 反向代理结束
  ```
</details>

<h4>单域名设置</h4>
<details>
  <summary> 单域名代理配置 </summary>
 ```nginx
	 ## 反向代理开始，直接复制官方文档的
	## WebSocket 地址
	location /socket.io {
	    proxy_set_header Upgrade $http_upgrade; 
	    proxy_set_header Connection "Upgrade"; 
	    proxy_buffering off; 
	    proxy_set_header Host $host; 
	    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; 
	    proxy_set_header X-Forwarded-Proto $scheme; 
	    proxy_pass http://127.0.0.1:2333/socket.io; 
	}
	## API 地址
	location /api/v2 {
	    proxy_pass http://127.0.0.1:2333/api/v2; 
	}
	## 简读 render 地址
	location /render {
	    proxy_pass http://127.0.0.1:2333/render; 
	}
	## 前端地址
	location / {
	    proxy_pass http://127.0.0.1:2323; 
	}
	## 后台地址
	location /proxy {
	    proxy_pass http://127.0.0.1:2333/proxy;
	}
	location /qaqdmin {
	    proxy_pass http://127.0.0.1:2333/proxy/qaqdmin;
	}
	## RSS 地址
	location ~* \/(feed|sitemap|atom.xml) {
	    proxy_pass http://127.0.0.1:2333/$1; 
	}
	## 反向代理结束
  ```
</details>


<h2>五·一些问题</h2>
<h3>Github Action 报错</h3>
<p>unzip :command not found<br>npm :command not found<br>pm2 :command not found  </p>
<p>

其中 Unzip 是 linux 未安装导致运行下列指令安装即可</p>
<pre><code class="language-shell">apt-get install zip</code></pre><p>如果 npm 和 pm2 未安装则根据本文最开始重新安装即可<br>若 npm 和 pm2 安装后能使用 npm 命令 但使用 sudo npm 命令便会报 command not found<br>则根据下列指令进行解决</p>
<p>输入 which npm 可以得到/root/.nvm/versions/node/v20.12.2/bin/npm，这个是普通用户的 bin 目录<br>而 sudo 执行的是/usr/bin 目录，这是 root 用户的目录<br>所以使用 sudo 命令是识别不到这个命令的，我们可以使用以下方法来处理这个问题</p>
<pre><code class="language-shell">sudo ln -s /root/.nvm/versions/node/v20.12.2/bin/npm /usr/bin/npm

sudo ln -s /root/.nvm/versions/node/v20.12.2/bin/pm2 /usr/bin/pm2

sudo ln -s /root/.nvm/versions/node/v20.12.2/bin/node /usr/bin/node
## node也需要使用这个方法进行处理才能完整解决</code></pre><h2>六·特别鸣谢</h2>
<p>在搭建Mix-space前后端的过程中，我得到了<a href="https://www.vlo.cc">玖月大佬</a>的极大帮助。无论是技术难题的解答还是宝贵的建议，都让我受益匪浅。在此，我想向玖月表达最诚挚的感谢！他的无私分享和耐心指导不仅帮助我克服了许多难题。</p>
<h2>七·参考文献</h2>
<p><a href="https://mx-space.js.org/">Mix Space - An Alternative Personal Space - Mix Space 文档</a><br><a href="https://www.vlo.cc/posts/jc/mix-deploy">Mix-Space部署最新后端Core - 华岁云小屋</a></p>

      <p style='text-align: right'>
      <a href='https://www.glsaone.xyz/posts/guide/Mix-Space-Shiro#comments'>看完了？说点什么呢</a>
      </p>
    ]]>
    </content:encoded>
  <guid isPermaLink="false">67cd3c1c5592b1c9f21c974e</guid>
  <category>posts</category>
<category>教程</category>
 </item>
  <item>
    <title>Mix Space 后端搭建</title>
    <link>https://www.glsaone.xyz/posts/guide/Mix-Space-Core</link>
    <pubDate>Sat, 08 Mar 2025 16:49:23 GMT</pubDate>
    <description>一·项目简介与准备
简介

Mix Space 是一个一款简洁而不简单的个人博客系统，它够快，够现代</description>
    <content:encoded><![CDATA[
      <blockquote>该渲染由 marked 生成，可能存在排版问题，最佳体验请前往：<a href='https://www.glsaone.xyz/posts/guide/Mix-Space-Core'>https://www.glsaone.xyz/posts/guide/Mix-Space-Core</a></blockquote>
      <h2>一·项目简介与准备</h2>
<h3>简介</h3>
<blockquote>
<p>Mix Space 是一个一款简洁而不简单的个人博客系统，它够快，够现代。你可以利用它构建一个属于自己的个人空间，记录生活，分享知识。</p>
<p><a href="https://github.com/mx-space/core">https://github.com/mx-space/core</a></p>
</blockquote>
<div class="container">
<a href="https://image.glsaone.xyz/shiro/%E6%95%99%E7%A8%8B/%E9%A6%96%E9%A1%B52.png?2">https://image.glsaone.xyz/shiro/%E6%95%99%E7%A8%8B/%E9%A6%96%E9%A1%B52.png?2</a>
<a href="https://image.glsaone.xyz/shiro/%E6%95%99%E7%A8%8B/%E9%A6%96%E9%A1%B53.png?3'image">https://image.glsaone.xyz/shiro/%E6%95%99%E7%A8%8B/%E9%A6%96%E9%A1%B53.png?3&#39;image</a>&#39;</div><h3>要求</h3>
<p>系统：Linux（Ubuntu/Debian）</p>
<p>推荐配置要求：CPU2核及以上 内存4GB及以上</p>
<h3>准备</h3>
<p>国内服务器需提前进行 ICP 备案以便公网访问。<br><a href="https://beian.miit.gov.cn/">ICP/IP地址/域名信息备案管理系统</a><br>SSL 证书申请（阿里云免费）</p>
<h2>二·安装 1panel</h2>
<p>在这里我们使用在线安装</p>
<pre><code class="language-shell">## Ubuntu
curl -sSL https://resource.fit2cloud.com/1panel/package/quick_start.sh -o quick_start.sh && sudo bash quick_start.sh
## Debian 
curl -sSL https://resource.fit2cloud.com/1panel/package/quick_start.sh -o quick_start.sh && bash quick_start.sh</code></pre><p>其余设备指令可看这里<a href="https://1panel.cn/docs/installation/online_installation/">在线安装 - 1Panel 文档</a></p>
<p>在安装过程中会填写下列相关内容</p>
<pre><code class="language-shell">## 设置 1Panel 安装目录（默认为/opt）
默认目录是/opt，如果没有特殊要求，回车即可，当然也可以自定义设置成自己目录。
## 设置 1Panel 端口（默认为20410）：
根据自己需求设置，但需要开启服务器防火墙端口
## 设置1Panel安全入口（默认为1ca7f81e6d）：
根据自己需求进行设置，安全入口就是使用ip地址登录时端口后面的后缀
## 设置1Panel面板用户默认为244118a93b）
这里设置用户名和密码</code></pre><p>保存1Panel登录地址、安全入口、用户名和密码信息。<br>远程连接到云服务器后，执行 <code>1pctl user-info</code> 命令可获取安全入口（entrance）。<br>修改密码可执行命令: <code>1pctl update password</code>。<br>安装成功后，控制台会打印面板访问信息，可通过浏览器访问 1Panel：<code>http://目标服务器 IP 地址:目标端口/安全入口</code>。</p>
<p>在 1panel 中配置容器的镜像加速

在镜像加速中设置 <code>https://docker.1panel.live</code><br>随后在应用商店中安装openresty 作为反代工具</p>
<h2>三·安装 Core 后端</h2>
<h3>安装 Docker</h3>
<p>首先安装并更新一些必要的软件包</p>
<pre><code class="language-shell">apt update
apt upgrade -y
apt install curl vim wget gnupg dpkg apt-transport-https lsb-release ca-certificates</code></pre><p>安装 Docker
由于 Docker 官方仓库位于国外，如果服务器在国内使用阿里云的源进行安装</p>
<pre><code class="language-shell">curl -fsSL https://get.docker.com | bash -s docker --mirror Aliyun</code></pre><p>若服务器在国外可直接使用 Docker 官方指令进行安装</p>
<pre><code class="language-shell">curl -fsSL https://get.docker.com | bash -s docker</code></pre><p>Docker 安装完成后使用以下指令进行验证</p>
<pre><code class="language-shell">docker -v
## Docker version 28.0.1, build 068a01e
docker-compose version
## Docker Compose version v2.33.1</code></pre><h3>使用 Docker 进行部署</h3>
<h4>拉取 Core配置文件</h4>
<pre><code class="language-shell">cd /opt && mkdir -p mx-space/core && cd $_
## 创建/opt/mx-space/core文件夹
wget https://fastly.jsdelivr.net/gh/mx-space/core@master/docker-compose.yml
## 拉取配置文件</code></pre><h4>修改 Core配置文件</h4>
<p>使用 vim 进行文件修改</p>
<pre><code class="language-shell">cd /opt/mx-space/core
vim docker-compose.yml</code></pre><p>或在 1panel 中系统-文件-/opt/mx-space/core/docker-compose.yml 进行编辑</p>
<pre><code class="language-yml">## 配置文件的一部分
services:
  app:
    container_name: mx-server
    image: innei/mx-server:latest
    environment:
      - TZ=Asia/Shanghai
      - NODE_ENV=production
      - DB_HOST=mongo
      - REDIS_HOST=redis
      - ALLOWED_ORIGINS=localhost
      - JWT_SECRET=YOUR_SUPER_SECURED_JWT_SECRET_STRING</code></pre><p>在 <code>docker-compose.yml</code> 中的 <code>environment</code> 字段填入对应内容，使其符合 yaml 语法，保存即可。</p>
<ul>
<li><strong><code>JWT 密钥：JWT_SECRET</code></strong>：需要填写长度不小于 16 个字符，不大于 32 个字符的字符串，用于加密用户的 JWT，务必保存好自己的密钥，不要泄露给他人。</li>
<li><strong><code>被允许的域名：ALLOWED_ORIGINS</code></strong>：需要填写被允许的域名，通常是前端的域名，如果允许多个域名访问，用英文逗号，分隔。</li>
<li><strong><code>是否开启加密：ENCRYPT_ENABLE</code></strong>：如果你确定要开启加密，则在配置文件中加入对应内容，开启加密后，你需要在下方填写加密密钥。</li>
<li><strong><code>加密密钥：ENCRYPT_KEY</code></strong>：如果你不知道这是什么，那么不建议开启此功能，具体内容可参考 <a href="https://mx-space.js.org/docs/usage/security.html">Key 加密与安全性</a>
关于 JWT 密钥可以使用 <a href="https://www.toolhelper.cn/DigestAlgorithm/MD5">MD5 转换</a>将你熟悉的文字加密作为 JWT 密钥
域名通常为前端域名：例如 <code>www.glsaone.xyz</code> , <code>glsaone.xyz</code>,localhost
loacalhost 作为 前端Api 调用需填入</li>
</ul>
<p>在相关内容填写完毕记得保存</p>
<h3>启动 Core 文件</h3>
<pre><code class="language-shell">cd /opt/mx-space/core
docker-compose pull && docker compose up -d</code></pre><p>此时后端已经启动完成，我们需要设置反向代理以进行正常访问</p>
<h2>四·反向代理</h2>
<h3>OpenResty 设置反向代理</h3>
<p>以1Panel+OpenResty为例：  </p>
<ul>
<li>新建静态网站，填写对应域名</li>
<li>配置SSL证书开启HTTPS</li>
<li>在配置文件最后一个<code>}</code>的上方另起一行，粘贴如下配置，并保存。</li>
</ul>
<h4>双域名设置</h4>
<p>这里假定前端后端域名均为 <code>www.example.com</code>。</p>
<details>
  <summary> 双域名代理配置 </summary>
 ```nginx
 ## 反向代理开始
## WebSocket
location /socket.io {
    proxy_pass http://127.0.0.1:2333/socket.io; 
    proxy_set_header Host $host; 
    proxy_set_header X-Real-IP $remote_addr; 
    proxy_set_header X-Forwarded-Proto $scheme;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; 
    proxy_set_header REMOTE-HOST $remote_addr; 
    proxy_set_header Upgrade $http_upgrade; 
    proxy_set_header Connection "upgrade"; 
    proxy_buffering off; 
    proxy_http_version 1.1; 
    add_header Cache-Control no-cache; 
}
## Others
location / {
    proxy_pass http://127.0.0.1:2333; 
    proxy_set_header Host $host; 
    proxy_set_header X-Real-IP $remote_addr; 
    proxy_set_header X-Forwarded-Proto $scheme;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; 
    proxy_set_header REMOTE-HOST $remote_addr; 
    add_header X-Cache $upstream_cache_status; 
}
## 反向代理结束
  ```
</details>
如果您使用此部分示例配置 Nginx 反向代理，您的：
- API 地址为 `https://server.example.com/api/v2`
- 前端（Shiro）地址为 `https://www.example.com`
- GateWay 为 `https://server.example.com`
- 本地后台为 `https://server.example.com/proxy/qaqdmin`

<h4>单域名设置</h4>
<p>这里假定前端域名为 <code>www.example.com</code>，后端也为 <code>www.example.com</code>。</p>
<details>
  <summary> 单域名代理配置 </summary>
 ```nginx
 ## 反向代理开始，直接复制官方文档的
    ## WebSocket 地址
    location /socket.io {
        proxy_set_header Upgrade $http_upgrade; 
        proxy_set_header Connection "Upgrade"; 
        proxy_buffering off; 
        proxy_set_header Host $host; 
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; 
        proxy_set_header X-Forwarded-Proto $scheme; 
        proxy_pass http://127.0.0.1:2333/socket.io; 
    }
    ## API 地址
    location /api/v2 {
        proxy_pass http://127.0.0.1:2333/api/v2; 
    }
    ## 简读 render 地址
    location /render {
        proxy_pass http://127.0.0.1:2333/render; 
    }
    ## 前端地址
    location / {
        proxy_pass http://127.0.0.1:2323; 
    }
    ## 后台地址
    location /proxy {
        proxy_pass http://127.0.0.1:2333/proxy;
    }
    location /qaqdmin {
        proxy_pass http://127.0.0.1:2333/proxy/qaqdmin;
    }
    ## RSS 地址
    location ~* \/(feed|sitemap|atom.xml) {
        proxy_pass http://127.0.0.1:2333/$1; 
    }
    ## 反向代理结束
  ```
</details>
如果您使用此部分示例配置 Nginx 反向代理，您的：
- API 地址为 `https://www.example.com/api/v2`
- 前端（Shiro）地址为 `https://www.example.com`
- GateWay 为 `https://www.example.com`
- 本地后台为 `https://www.example.com/proxy/qaqdmin`

<h3>Core 初始化</h3>
<p>反向代理配置完成，访问后端 <code>https://www.example.com/proxy/qaqdmin</code><br>根据页面提示完成初始化， 若完成后未正确跳转后台，<br>再次进入 <code>https://www.example.com/proxy/qaqdmin</code> 即可。</p>
<h3>Core 更新</h3>
<p>使用 Docker 服务进行更新</p>
<pre><code class="language-shell">cd /opt/mx-space/core
docker compose pull && docker compose up -d</code></pre><h2>五·特别鸣谢</h2>
<p>在搭建Mix-space前后端的过程中，我得到了<a href="https://www.vlo.cc">玖月大佬</a>的极大帮助。无论是技术难题的解答还是宝贵的建议，都让我受益匪浅。在此，我想向玖月表达最诚挚的感谢！他的无私分享和耐心指导不仅帮助我克服了许多难题。</p>
<h2>六·参考文献</h2>
<p><a href="https://mx-space.js.org/">Mix Space - An Alternative Personal Space - Mix Space 文档</a><br><a href="https://www.vlo.cc/posts/jc/mix-deploy">Mix-Space部署最新后端Core - 华岁云小屋</a></p>

      <p style='text-align: right'>
      <a href='https://www.glsaone.xyz/posts/guide/Mix-Space-Core#comments'>看完了？说点什么呢</a>
      </p>
    ]]>
    </content:encoded>
  <guid isPermaLink="false">67cc75134ebc25f703176c89</guid>
  <category>posts</category>
<category>教程</category>
 </item>
  
</channel>
</rss>