<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>服务端 on lategege 的技术博客</title><link>https://lategege.com/categories/%E6%9C%8D%E5%8A%A1%E7%AB%AF/</link><description>Recent content in 服务端 on lategege 的技术博客</description><generator>Hugo -- gohugo.io</generator><language>zh-cn</language><lastBuildDate>Thu, 12 Mar 2026 08:39:19 +0000</lastBuildDate><atom:link href="https://lategege.com/categories/%E6%9C%8D%E5%8A%A1%E7%AB%AF/index.xml" rel="self" type="application/rss+xml"/><item><title>OpenClaw 部署实战系列五(群晖chat多Agent配置)</title><link>https://lategege.com/p/openclaw-%E9%83%A8%E7%BD%B2%E5%AE%9E%E6%88%98%E7%B3%BB%E5%88%97%E4%BA%94-%E7%BE%A4%E6%99%96chat%E5%A4%9Aagent%E9%85%8D%E7%BD%AE/</link><pubDate>Thu, 12 Mar 2026 08:39:19 +0000</pubDate><guid>https://lategege.com/p/openclaw-%E9%83%A8%E7%BD%B2%E5%AE%9E%E6%88%98%E7%B3%BB%E5%88%97%E4%BA%94-%E7%BE%A4%E6%99%96chat%E5%A4%9Aagent%E9%85%8D%E7%BD%AE/</guid><description>&lt;p&gt;下面给出一个 &lt;strong&gt;“多 agent 对应群晖多 bot（多账号）”&lt;/strong&gt; 的 OpenClaw 配置示例，并结合 &lt;strong&gt;Multi-Agent Routing&lt;/strong&gt; 与 &lt;strong&gt;Synology Chat 插件&lt;/strong&gt; 的官方说明编写。你可以直接复制为 &lt;code&gt;~/.openclaw/openclaw.json&lt;/code&gt; 的骨架，再替换为自己的 token 与 webhook。 &lt;/p&gt;
&lt;hr/&gt;
&lt;h1&gt;OpenClaw 多 Agent 对应群晖多 Bot 配置示例&lt;/h1&gt;
&lt;blockquote&gt;
&lt;p&gt;目标： &lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;每个 &lt;strong&gt;Synology Chat Bot（Incoming/Outgoing Webhook）&lt;/strong&gt; 对应一个 &lt;strong&gt;OpenClaw Agent&lt;/strong&gt; &lt;/li&gt;
&lt;li&gt;消息从不同 bot 进入时，&lt;strong&gt;自动路由到对应 agent&lt;/strong&gt; &lt;/li&gt;
&lt;li&gt;agent 之间完全隔离（独立 workspace / sessions / auth） &lt;/li&gt;
&lt;/ul&gt;
&lt;/blockquote&gt;
&lt;hr/&gt;
&lt;h2&gt;关键思路&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Synology Chat 支持 &lt;strong&gt;多账号配置&lt;/strong&gt;（&lt;code&gt;channels.synology-chat.accounts&lt;/code&gt;）&lt;/li&gt;
&lt;li&gt;OpenClaw 多 agent 通过 &lt;code&gt;agents.list&lt;/code&gt; + &lt;code&gt;bindings&lt;/code&gt; 实现路由呃呃呃&lt;/li&gt;
&lt;li&gt;每个 accountId 绑定到一个 agent &lt;/li&gt;
&lt;/ul&gt;
&lt;hr/&gt;
&lt;h2&gt;配置示例（多 bot → 多 agent）&lt;/h2&gt;
&lt;pre&gt;&lt;code class="language-json5"&gt;{
 // 1) 多个 agent（每个 agent 一个独立“脑”）
 "agents": {
 "list": [
 {
 "id": "ops",
 "name": "Ops Bot",
 "workspace": "~/.openclaw/workspace-ops",
 "agentDir": "~/.openclaw/agents/ops/agent"
 },
 {
 "id": "sales",
 "name": "Sales Bot",
 "workspace": "~/.openclaw/workspace-sales",
 "agentDir": "~/.openclaw/agents/sales/agent"
 }
 ]
 },
&lt;p&gt;// 2) 绑定：accountId -&amp;gt; agentId
&amp;ldquo;bindings&amp;rdquo;: [
{ &amp;ldquo;agentId&amp;rdquo;: &amp;ldquo;ops&amp;rdquo;, &amp;ldquo;match&amp;rdquo;: { &amp;ldquo;channel&amp;rdquo;: &amp;ldquo;synology-chat&amp;rdquo;, &amp;ldquo;accountId&amp;rdquo;: &amp;ldquo;ops&amp;rdquo; } },
{ &amp;ldquo;agentId&amp;rdquo;: &amp;ldquo;sales&amp;rdquo;, &amp;ldquo;match&amp;rdquo;: { &amp;ldquo;channel&amp;rdquo;: &amp;ldquo;synology-chat&amp;rdquo;, &amp;ldquo;accountId&amp;rdquo;: &amp;ldquo;sales&amp;rdquo; } }
],&lt;/p&gt;
&lt;p&gt;// 3) Synology Chat 多账号配置（多 bot）
&amp;ldquo;channels&amp;rdquo;: {
&amp;ldquo;synology-chat&amp;rdquo;: {
&amp;ldquo;enabled&amp;rdquo;: true,
&amp;ldquo;accounts&amp;rdquo;: {
&amp;ldquo;ops&amp;rdquo;: {
&amp;ldquo;token&amp;rdquo;: &amp;ldquo;OUTGOING_TOKEN_OPS&amp;rdquo;,
&amp;ldquo;incomingUrl&amp;rdquo;: &amp;ldquo;&lt;a class="link" href="https://nas.example.com/webapi/entry.cgi?api=SYNO.Chat.External&amp;amp;amp;method=incoming&amp;amp;amp;version=2&amp;amp;amp;token=INCOMING_TOKEN_OPS%22" target="_blank" rel="noopener"
 &gt;https://nas.example.com/webapi/entry.cgi?api=SYNO.Chat.External&amp;amp;method=incoming&amp;amp;version=2&amp;amp;token=INCOMING_TOKEN_OPS"&lt;/a&gt;,
&amp;ldquo;webhookPath&amp;rdquo;: &amp;ldquo;/webhook/synology-ops&amp;rdquo;,
&amp;ldquo;dmPolicy&amp;rdquo;: &amp;ldquo;allowlist&amp;rdquo;,
&amp;ldquo;allowedUserIds&amp;rdquo;: [&amp;ldquo;123456&amp;rdquo;]
},
&amp;ldquo;sales&amp;rdquo;: {
&amp;ldquo;token&amp;rdquo;: &amp;ldquo;OUTGOING_TOKEN_SALES&amp;rdquo;,
&amp;ldquo;incomingUrl&amp;rdquo;: &amp;ldquo;&lt;a class="link" href="https://nas.example.com/webapi/entry.cgi?api=SYNO.Chat.External&amp;amp;amp;method=incoming&amp;amp;amp;version=2&amp;amp;amp;token=INCOMING_TOKEN_SALES%22" target="_blank" rel="noopener"
 &gt;https://nas.example.com/webapi/entry.cgi?api=SYNO.Chat.External&amp;amp;method=incoming&amp;amp;version=2&amp;amp;token=INCOMING_TOKEN_SALES"&lt;/a&gt;,
&amp;ldquo;webhookPath&amp;rdquo;: &amp;ldquo;/webhook/synology-sales&amp;rdquo;,
&amp;ldquo;dmPolicy&amp;rdquo;: &amp;ldquo;allowlist&amp;rdquo;,
&amp;ldquo;allowedUserIds&amp;rdquo;: [&amp;ldquo;987654&amp;rdquo;]
}
}
}
}
}&lt;/code&gt;&lt;/pre&gt;&lt;/p&gt;
&lt;hr/&gt;
&lt;h2&gt;群晖端 Outgoing Webhook 指向&lt;/h2&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Bot&lt;/th&gt;
&lt;th&gt;Webhook URL&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Ops Bot&lt;/td&gt;
&lt;td&gt;&lt;code&gt;https://&amp;lt;gateway-host&amp;gt;/webhook/synology-ops&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Sales Bot&lt;/td&gt;
&lt;td&gt;&lt;code&gt;https://&amp;lt;gateway-host&amp;gt;/webhook/synology-sales&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;code&gt;webhookPath&lt;/code&gt; 必须与群晖 Outgoing Webhook 中配置的一致。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;hr/&gt;
&lt;h2&gt;验证测试&lt;/h2&gt;
&lt;pre&gt;&lt;code class="language-bash"&gt;openclaw gateway restart
openclaw channels status --probe
openclaw agents list --bindings&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;目前群晖chat插件并不能正确路由，有bug，有人修复了，不过还没有合入主分支，可以按照以下手动修改代码，改完以后才能正确路由
&lt;a href="https://github.com/openclaw/openclaw/pull/39895/changes/908fa09550b9454f2f7942dbe8709598e6c47f32"&gt;https://github.com/openclaw/openclaw/pull/39895/changes/908fa09550b9454f2f7942dbe8709598e6c47f32&lt;/a&gt;&lt;/p&gt;
&lt;hr/&gt;
&lt;h2&gt;补充建议&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;dmPolicy 建议使用 allowlist&lt;/strong&gt;，避免开放 DMs &lt;/li&gt;
&lt;li&gt;每个 agent 可在各自 workspace 中设定不同 &lt;code&gt;SOUL.md&lt;/code&gt; / &lt;code&gt;AGENTS.md&lt;/code&gt; &lt;/li&gt;
&lt;li&gt;如果要给某个 agent 更严格的权限，可以用 &lt;code&gt;agents.list[].tools&lt;/code&gt; 进行限制&lt;/li&gt;
&lt;li&gt;尽管如此，群晖chat目前仍然不能接收图片多媒体等附件，只能文字聊天，更多功能还有待社区完善插件功能&lt;/li&gt;
&lt;/ul&gt;
&lt;hr/&gt;
&lt;h2&gt;参考资料&lt;/h2&gt;
&lt;p&gt;[1]: &lt;a href="https://docs.openclaw.ai/channels/synology-chat"&gt;Synology Chat 插件配置（OpenClaw）&lt;/a&gt;&lt;br/&gt;
[2]: &lt;a href="https://docs.openclaw.ai/concepts/multi-agent"&gt;Multi-Agent Routing（OpenClaw）&lt;/a&gt; &lt;/p&gt;
&lt;hr/&gt;</description></item><item><title>OpenClaw 部署实战系列三(mac虚拟机安装openclaw)</title><link>https://lategege.com/p/openclaw-%E9%83%A8%E7%BD%B2%E5%AE%9E%E6%88%98%E7%B3%BB%E5%88%97%E4%B8%89-mac%E8%99%9A%E6%8B%9F%E6%9C%BA%E5%AE%89%E8%A3%85openclaw/</link><pubDate>Thu, 12 Mar 2026 07:57:25 +0000</pubDate><guid>https://lategege.com/p/openclaw-%E9%83%A8%E7%BD%B2%E5%AE%9E%E6%88%98%E7%B3%BB%E5%88%97%E4%B8%89-mac%E8%99%9A%E6%8B%9F%E6%9C%BA%E5%AE%89%E8%A3%85openclaw/</guid><description>&lt;h2&gt;一、部署前准备（Homebrew + Node.js）&lt;/h2&gt;
&lt;p&gt;OpenClaw 官方要求 &lt;strong&gt;Node.js ≥ 22&lt;/strong&gt;。
如果你还没装 Homebrew 或 Node，可按下面步骤来：&lt;/p&gt;
&lt;h3&gt;1. 安装 Homebrew（已安装可跳过）&lt;/h3&gt;
&lt;pre&gt;&lt;code class="language-bash"&gt;/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;2. 使用 Homebrew 安装 Node.js&lt;/h3&gt;
&lt;pre&gt;&lt;code class="language-bash"&gt;brew install node
node -v&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;确保版本 &lt;strong&gt;≥ 22&lt;/strong&gt;。&lt;/p&gt;
&lt;hr/&gt;
&lt;h2&gt;二、安装 OpenClaw（推荐方式）&lt;/h2&gt;
&lt;p&gt;官方推荐使用安装脚本，它会自动检测并完成安装：&lt;/p&gt;
&lt;pre&gt;&lt;code class="language-bash"&gt;curl -fsSL https://openclaw.ai/install.sh | bash&lt;/code&gt;&lt;/pre&gt;
&lt;hr/&gt;
&lt;h2&gt;三、运行首次引导（Onboarding Wizard）&lt;/h2&gt;
&lt;p&gt;官方推荐使用 CLI 向导完成网关、模型、工作区与频道的初始化配置：&lt;/p&gt;
&lt;pre&gt;&lt;code class="language-bash"&gt;openclaw onboard --install-daemon&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;strong&gt;这个向导会完成：&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;模型与认证配置&lt;/li&gt;
&lt;li&gt;工作区（默认 &lt;code&gt;~/.openclaw/workspace&lt;/code&gt;）&lt;/li&gt;
&lt;li&gt;Gateway 端口（默认 &lt;code&gt;18789&lt;/code&gt;）&lt;/li&gt;
&lt;li&gt;网关服务（macOS 为 LaunchAgent）&lt;/li&gt;
&lt;li&gt;频道与技能初始化（可选）&lt;/li&gt;
&lt;/ul&gt;
&lt;hr/&gt;
&lt;h2&gt;四、检查网关是否运行&lt;/h2&gt;
&lt;pre&gt;&lt;code class="language-bash"&gt;openclaw gateway status&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;如果状态正常，说明网关已启动。&lt;/p&gt;
&lt;hr/&gt;
&lt;h2&gt;五、打开控制台 UI（最快验证方式）&lt;/h2&gt;
&lt;p&gt;无需配置任何聊天渠道，就可以直接访问控制台 UI 进行测试：&lt;/p&gt;
&lt;pre&gt;&lt;code class="language-bash"&gt;openclaw dashboard&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;默认会打开：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;http://127.0.0.1:18789/&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;进入后即可直接和 OpenClaw 交互。&lt;/p&gt;
&lt;hr/&gt;
&lt;h2&gt;六、常用启动与调试命令&lt;/h2&gt;
&lt;pre&gt;&lt;code class="language-bash"&gt;openclaw gateway --port 18789 # 前台运行网关
openclaw logs --follow # 查看日志
openclaw health # 健康检查&lt;/code&gt;&lt;/pre&gt;
&lt;hr/&gt;
&lt;h2&gt;七、配置文件位置与编辑方式&lt;/h2&gt;
&lt;p&gt;配置文件默认路径：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;~/.openclaw/openclaw.json&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;可使用 CLI 修改：&lt;/p&gt;
&lt;pre&gt;&lt;code class="language-bash"&gt;openclaw config get agents.defaults.workspace
openclaw config set agents.defaults.heartbeat.every "2h"&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;也可直接编辑 JSON5 文件（修改后通常会热加载）。&lt;/p&gt;
&lt;hr/&gt;
&lt;h2&gt;八、macOS App（可选）&lt;/h2&gt;
&lt;p&gt;如果你想使用 &lt;strong&gt;菜单栏 App + 本地权限能力（麦克风/屏幕/通知/Canvas/系统命令）&lt;/strong&gt;，可安装 macOS App。它能：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;管理权限&lt;/li&gt;
&lt;li&gt;代理 Gateway 启动&lt;/li&gt;
&lt;li&gt;提供系统级节点能力（如 &lt;code&gt;system.run&lt;/code&gt;）&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;但 &lt;strong&gt;macOS App 并非必需&lt;/strong&gt;，CLI + Gateway 即可使用。&lt;/p&gt;
&lt;hr/&gt;
&lt;h2&gt;九、更新与升级&lt;/h2&gt;
&lt;p&gt;OpenClaw 更新非常快，官方推荐 &lt;strong&gt;重新执行安装脚本升级&lt;/strong&gt;：&lt;/p&gt;
&lt;pre&gt;&lt;code class="language-bash"&gt;curl -fsSL https://openclaw.ai/install.sh | bash&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;如果你使用的是 npm/pnpm 全局安装，也可直接更新：&lt;/p&gt;
&lt;pre&gt;&lt;code class="language-bash"&gt;npm i -g openclaw@latest
# 或
pnpm add -g openclaw@latest&lt;/code&gt;&lt;/pre&gt;
&lt;hr/&gt;
&lt;h2&gt;十、修复与排错（必会）&lt;/h2&gt;
&lt;p&gt;官方提供 &lt;code&gt;openclaw doctor&lt;/code&gt; 用于配置迁移、修复与检测：&lt;/p&gt;
&lt;pre&gt;&lt;code class="language-bash"&gt;openclaw doctor&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;常见用途：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;修复旧配置&lt;/li&gt;
&lt;li&gt;修复服务安装&lt;/li&gt;
&lt;li&gt;检测风险 DM 配置&lt;/li&gt;
&lt;li&gt;迁移旧状态目录&lt;/li&gt;
&lt;li&gt;检查网关服务健康&lt;/li&gt;
&lt;/ul&gt;
&lt;hr/&gt;
&lt;h2&gt;十一、一些 macOS 注意事项&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;不要把 &lt;code&gt;~/.openclaw&lt;/code&gt; 放在 iCloud 或同步目录中&lt;/strong&gt;，避免锁冲突与性能问题。&lt;/li&gt;
&lt;li&gt;如果你启用了 LaunchAgent，可以用 launchctl 管理服务：&lt;/li&gt;
&lt;/ul&gt;
&lt;pre&gt;&lt;code class="language-bash"&gt;launchctl kickstart -k gui/$UID/ai.openclaw.gateway
launchctl bootout gui/$UID/ai.openclaw.gateway&lt;/code&gt;&lt;/pre&gt;
&lt;hr/&gt;
&lt;h2&gt;十二、部署完成后你将拥有&lt;/h2&gt;
&lt;p&gt;✅ 本地 Gateway&lt;br/&gt;
✅ 可用的 Web 控制台&lt;br/&gt;
✅ 多模型能力&lt;br/&gt;
✅ 频道扩展能力&lt;br/&gt;
✅ 可选 macOS 本地节点能力 &lt;/p&gt;
&lt;hr/&gt;
&lt;h1&gt;总结&lt;/h1&gt;
&lt;p&gt;如果你在 macOS 上部署个人 AI 助手，OpenClaw 是当前非常完整的一套方案。&lt;br/&gt;
&lt;strong&gt;建议流程：&lt;/strong&gt;&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Homebrew 安装 Node（确保 ≥ 22） &lt;/li&gt;
&lt;li&gt;安装脚本 &lt;/li&gt;
&lt;li&gt;&lt;code&gt;openclaw onboard --install-daemon&lt;/code&gt; &lt;/li&gt;
&lt;li&gt;&lt;code&gt;openclaw gateway status&lt;/code&gt; &lt;/li&gt;
&lt;li&gt;&lt;code&gt;openclaw dashboard&lt;/code&gt; &lt;/li&gt;
&lt;li&gt;后续通过 &lt;code&gt;openclaw doctor&lt;/code&gt; + &lt;code&gt;openclaw update&lt;/code&gt; 维护 &lt;/li&gt;
&lt;/ol&gt;
&lt;hr/&gt;
&lt;h2&gt;参考资料&lt;/h2&gt;
&lt;p&gt;[1]: &lt;a href="https://github.com/openclaw/openclaw"&gt;OpenClaw GitHub 项目说明（安装与 quick start）&lt;/a&gt;
[2]: &lt;a href="https://docs.openclaw.ai/start/getting-started"&gt;Getting Started（快速安装与 Dashboard）&lt;/a&gt;
[3]: &lt;a href="https://docs.openclaw.ai/start/wizard"&gt;Onboarding Wizard（CLI 向导）&lt;/a&gt;&lt;/p&gt;
&lt;hr/&gt;
&lt;p&gt;&lt;a href="https://lategege.com/p/openclaw-部署实战系列四-openclaw-配置群晖插件/" title="下一篇 OpenClaw 部署实战系列四(openclaw 配置群晖插件)"&gt;下一篇 OpenClaw 部署实战系列四(openclaw 配置群晖插件)&lt;/a&gt;&lt;/p&gt;</description></item><item><title>OpenClaw 部署实战系列二(PVE9安装macos14)</title><link>https://lategege.com/p/openclaw-%E9%83%A8%E7%BD%B2%E5%AE%9E%E6%88%98%E7%B3%BB%E5%88%97%E4%BA%8C-pve9%E5%AE%89%E8%A3%85macos14/</link><pubDate>Thu, 12 Mar 2026 07:40:40 +0000</pubDate><guid>https://lategege.com/p/openclaw-%E9%83%A8%E7%BD%B2%E5%AE%9E%E6%88%98%E7%B3%BB%E5%88%97%E4%BA%8C-pve9%E5%AE%89%E8%A3%85macos14/</guid><description>&lt;h2&gt;2.1 硬件准备与成本分析&lt;/h2&gt;
&lt;h3&gt;2.1.1 必需硬件&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Proxmox VE 9 主机&lt;/strong&gt;：支持虚拟化的x86服务器(建议intel6代cpu起步)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;独立显卡&lt;/strong&gt;：NVIDIA GT710 2GB（二手海鲜市场约100元），备选(RX460 4G, RX560 4G 完全免驱且功耗较低)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;足够的存储空间&lt;/strong&gt;：建议至少200GB用于macOS虚拟机&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;充足的内存&lt;/strong&gt;：建议分配16GB以上给虚拟机&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;2.1.2 为什么选择GT710？&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;成本低廉&lt;/strong&gt;：二手市场价格约100元，性价比极高&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;功耗低&lt;/strong&gt;：仅19W TDP，适合长时间运行&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;兼容性好&lt;/strong&gt;：在macOS中基本功能可用,需要OpenCore-Legacy-Patcher在macos11以上系统打驱动补丁，不在乎功耗可以选择更好的RX460/RX560&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;尺寸小巧&lt;/strong&gt;：半高刀卡，适合各种机箱&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;可不可以没有显卡&lt;/strong&gt;：完全可以，只是共享桌面操作macos没那么顺滑&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;2.2 macOS镜像获取&lt;/h2&gt;
&lt;h3&gt;2.2.1 官方镜像下载地址&lt;/h3&gt;
&lt;p&gt;由于网络限制，推荐从以下网盘获取：&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;网盘&lt;/th&gt;
&lt;th&gt;链接&lt;/th&gt;
&lt;th&gt;提取码&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;百度网盘&lt;/td&gt;
&lt;td&gt;&lt;a href="https://pan.baidu.com/s/1w7Z7N7CgNNFyPA6eWInSnw?pwd=B219"&gt;https://pan.baidu.com/s/1w7Z7N7CgNNFyPA6eWInSnw?pwd=B219&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;B219&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;天翼网盘&lt;/td&gt;
&lt;td&gt;&lt;a href="https://cloud.189.cn/t/UfMZruBBjMRz"&gt;https://cloud.189.cn/t/UfMZruBBjMRz&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;qjx8&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;阿里云盘&lt;/td&gt;
&lt;td&gt;&lt;a href="https://www.alipan.com/s/JZWKDdLKRP5"&gt;https://www.alipan.com/s/JZWKDdLKRP5&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;y33e&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;夸克网盘&lt;/td&gt;
&lt;td&gt;&lt;a href="https://pan.quark.cn/s/95e715b5a8ee"&gt;https://pan.quark.cn/s/95e715b5a8ee&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;SeDw&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;123网盘&lt;/td&gt;
&lt;td&gt;&lt;a href="https://www.123865.com/s/vGEiVv-NJmpH"&gt;https://www.123865.com/s/vGEiVv-NJmpH&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;Rtwg&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;镜像是dmg格式，需要将其转化为iso才能上传到pve使用，转化方式是使用苹果系统执行以下转化指令得到macos14.8.4.iso（截止目前最新的mac14安装包）&lt;/p&gt;
&lt;pre&gt;&lt;code class="language-bash"&gt;hdiutil convert /path/to/macos14.8.4.dmg -format UDTO -o /path/to/macos14.8.4.iso&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;2.2.2 OpenCore引导镜像&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;GitHub地址&lt;/strong&gt;：&lt;a href="https://github.com/thenickdude/KVM-Opencore/releases"&gt;https://github.com/thenickdude/KVM-Opencore/releases&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;版本&lt;/strong&gt;：v21版本&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;2.3 PVE9安装以及mac虚拟机配置&lt;/h2&gt;
&lt;p&gt;官网下载PVE9镜像 &lt;a href="https://enterprise.proxmox.com/iso/"&gt;https://enterprise.proxmox.com/iso/&lt;/a&gt; 目前最新proxmox-ve_9.1-1.iso
制作安装u盘，在物理机上安装好PVE9, 具体安装教程参考 &lt;a href="https://pve.proxmox.com/pve-docs/chapter-pve-installation.html"&gt;https://pve.proxmox.com/pve-docs/chapter-pve-installation.html&lt;/a&gt;&lt;/p&gt;
&lt;h3&gt;2.3.1 虚拟机基础配置&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;将macos14.8.4.iso、OpenCorev21.iso镜像上传至PVE，&lt;/li&gt;
&lt;li&gt;创建macos14虚拟机(参考 &lt;a href="https://lategege.com/p/proxmox-6-2-安装黑苹果macos-10-15-5-clover-opencore双引导/"&gt;Proxmox 6.2 安装黑苹果macOS 10.15.5&lt;/a&gt;，&lt;a href="https://lategege.com/p/pve-7或8-安装黑苹果macos11-13/"&gt;PVE 7或8 安装黑苹果macOS11-13&lt;/a&gt;)&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;2.3.2 关键配置差异说明&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;媒体类型&lt;/strong&gt;：必须使用 &lt;code&gt;media=disk&lt;/code&gt; 而不是 &lt;code&gt;media=cdrom&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;缓存设置&lt;/strong&gt;：不要使用 &lt;code&gt;cache=unsafe&lt;/code&gt;，这在PVE9中可能导致问题&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;2.3.3 显卡直通配置&lt;/h3&gt;
&lt;pre&gt;&lt;code class="language-bash"&gt;PVE官方教程：[https://pve.proxmox.com/wiki/PCI_Passthrough](https://pve.proxmox.com/wiki/PCI_Passthrough)&lt;/code&gt;&lt;/pre&gt;
&lt;h2&gt;2.4 macOS安装与配置&lt;/h2&gt;
&lt;h3&gt;2.4.1 安装过程要点&lt;/h3&gt;
&lt;ol&gt;
&lt;li&gt;启动虚拟机，进入OpenCore引导界面&lt;/li&gt;
&lt;li&gt;选择macOS安装器进行安装&lt;/li&gt;
&lt;li&gt;按照标准macOS安装流程操作&lt;/li&gt;
&lt;li&gt;安装完成后重启进入系统&lt;/li&gt;
&lt;/ol&gt;
&lt;h3&gt;2.4.2 OpenCore自动启动配置&lt;/h3&gt;
&lt;p&gt;编辑 &lt;code&gt;config.plist&lt;/code&gt; 文件，确保以下设置：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;Misc -&amp;gt; Boot -&amp;gt; Timeout&lt;/code&gt; 设置为合适的值（如5秒）&lt;/li&gt;
&lt;li&gt;&lt;code&gt;Misc -&amp;gt; Security -&amp;gt; AllowSetDefault&lt;/code&gt; 设置为 &lt;code&gt;true&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;2.4.3 屏幕共享配置&lt;/h3&gt;
&lt;ol&gt;
&lt;li&gt;打开 &lt;strong&gt;系统设置&lt;/strong&gt; → &lt;strong&gt;通用&lt;/strong&gt; → &lt;strong&gt;共享&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;启用 &lt;strong&gt;屏幕共享&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;记录虚拟机的IP地址，后续可通过局域网内的Mac电脑连接&lt;/li&gt;
&lt;/ol&gt;
&lt;h2&gt;2.5 显卡驱动与系统优化&lt;/h2&gt;
&lt;h3&gt;2.5.1 OpenCore Legacy Patcher安装&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;下载地址&lt;/strong&gt;：&lt;a href="https://github.com/dortania/OpenCore-Legacy-Patcher/releases"&gt;https://github.com/dortania/OpenCore-Legacy-Patcher/releases&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;安装步骤&lt;/strong&gt;：
&lt;ol&gt;
&lt;li&gt;下载最新版本并解压&lt;/li&gt;
&lt;li&gt;运行OpenCore Legacy Patcher应用&lt;/li&gt;
&lt;li&gt;选择 &lt;strong&gt;Post-Install Root Patch&lt;/strong&gt; → &lt;strong&gt;GPU Acceleration&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;按照向导完成显卡补丁安装&lt;/li&gt;
&lt;li&gt;完成后关机，将pve虚拟机的显卡配置为无，然后启动&lt;/li&gt;
&lt;/ol&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;2.5.2 系统基础配置&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;语言设置&lt;/strong&gt;：系统设置 → 通用 → 语言与地区 → 中文&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;屏幕休眠&lt;/strong&gt;：系统设置 → 锁定屏幕 → 永不&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;时区设置&lt;/strong&gt;：系统设置 → 通用 → 日期与时间 → 自动设置时区&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;2.6 性能优化建议&lt;/h2&gt;
&lt;h3&gt;2.6.1 虚拟机资源分配&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;CPU&lt;/strong&gt;：至少4核&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;内存&lt;/strong&gt;：至少8GB，建议16GB&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;存储&lt;/strong&gt;：使用SSD，分配200GB以上空间&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;2.6.2 网络配置&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;使用 &lt;strong&gt;virtio-net-pci&lt;/strong&gt; 网卡获得最佳网络性能&lt;/li&gt;
&lt;li&gt;确保虚拟机能够访问互联网以下载更新和依赖&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;2.7 故障排除&lt;/h2&gt;
&lt;h3&gt;2.7.1 常见问题&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;黑屏问题&lt;/strong&gt;：检查显卡直通配置，确保VFIO正确加载&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;性能问题&lt;/strong&gt;：确认CPU和内存分配充足，关闭不必要的视觉效果&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;a href="https://lategege.com/p/openclaw-部署实战系列三-mac虚拟机安装openclaw/" title="下一篇 OpenClaw 部署实战系列三(mac虚拟机安装openclaw)"&gt;下一篇 OpenClaw 部署实战系列三(mac虚拟机安装openclaw)&lt;/a&gt;&lt;/p&gt;</description></item><item><title>lobe-chat安装mcp插件调用mcp服务(playwright)</title><link>https://lategege.com/p/lobe-chat%E5%AE%89%E8%A3%85mcp%E6%8F%92%E4%BB%B6%E8%B0%83%E7%94%A8mcp%E6%9C%8D%E5%8A%A1-playwright/</link><pubDate>Tue, 30 Sep 2025 13:47:54 +0000</pubDate><guid>https://lategege.com/p/lobe-chat%E5%AE%89%E8%A3%85mcp%E6%8F%92%E4%BB%B6%E8%B0%83%E7%94%A8mcp%E6%9C%8D%E5%8A%A1-playwright/</guid><description>&lt;p&gt;之前已经介绍过完整的&lt;a href="https://lategege.com/p/lobe-chat-database数据库版最新本地部署指南-含知识库/"&gt;lobe-chat-database数据库版最新本地部署指南(含知识库)&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;lobe-chat提供了mcp的支持，mcp提供调用计算机中各种程序执行相关操作的能力，lobe-chat作为mcp的客户端，我们需要部署mcp服务端。&lt;/p&gt;
&lt;img alt="8759b0ef405e26d28fb875390f5dc503.png" height="238" src="https://img.lategege.com:30443/images/2025/09/30/77be2dd5b865.png" width="741"/&gt;
&lt;p&gt; 
见上图，在lobe的mcp插件安装的界面可以看到两种接入方式：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;它支持Steamable HTTP 流式通信来连接MCP服务（我们以这种方式为例来部署一个MCP服务并来连接），&lt;/li&gt;
&lt;li&gt;还有一种STDIO是桌面版lobe-chat应用使用的，如果你安装了桌面lobe-chat那么可以直接安装lobe-chat mcp插件市场的插件，自动启动mcp服务，不过这不是我想要的，这种傻瓜式的部署你甚至无法对mcp服务做个性化配置，不过它也有优点，就是快，毕竟lobe-chat和mcp不经过网络传输，没有协议的开销，所以最终还是根据自己需求来决定采用哪种方式调用MCP服务。&lt;/li&gt;
&lt;/ul&gt;
&lt;h5&gt;一、在任意主机部署一款MCP服务&lt;/h5&gt;
&lt;p&gt;前提是你要找一个mcp服务，我找了一款比较知名的服务，项目叫playwright-mcp，它具备自动调用浏览器对网站进行自动操作的能力(输入，点击，搜索等)，官网网址： &lt;a href="https://github.com/microsoft/playwright-mcp"&gt;https://github.com/microsoft/playwright-mcp&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;阅读上面的部署文档：&lt;/p&gt;
&lt;img alt="68cce18f1a375cd3323095fd8e806eac.png" height="501" src="https://img.lategege.com:30443/images/2025/09/30/26a251acea6a.png" width="689"/&gt;
&lt;p&gt; 
要部署一个带配置的本地playwright-mcp服务，只要执行：&lt;/p&gt;
&lt;pre&gt;&lt;code class="language-bash"&gt;npx @playwright/mcp@latest --config path/to/config.json&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;这个config.json没有提供示例，不过它提供了Configuration file schema 配置约束文档，我将这个约束配置文档丢给AI，让它生成了一份默认的配置文件，然后我根据需要自己做了修改。&lt;/p&gt;
&lt;p&gt;config.json&lt;/p&gt;
&lt;pre&gt;&lt;code class="language-json"&gt;{
 "browser": {
 "browserName": "chromium",
 "isolated": false,
 "userDataDir": "./user-data",
 "launchOptions": {
 "channel": "chrome",
 "headless": false,
 "executablePath": "/Applications/Google Chrome.app/Contents/MacOS/Google Chrome"
 },
 "contextOptions": {
 "viewport": { "width": 1280, "height": 720 }
 },
 "cdpEndpoint": "",
 "remoteEndpoint": ""
 },
 "server": {
 "port": 8931,
 "host": "192.168.0.40"
 },
 "capabilities": [
 "tabs",
 "install",
 "pdf",
 "vision"
 ],
 "outputDir": "./output",
 "network": {
 "allowedOrigins": ["*"],
 "blockedOrigins": []
 },
 "imageResponses": "allow"
}
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;我修改了headless为false，executablePath调用我主机上的chrome浏览器，如果不修改你看不到浏览器执行的画面，你可以根据自己需要配置，“host”: “192.168.0.40” ，这个改成你自己的主机ip地址，或者"0.0.0.0"也可以，不要写成localhost，不然只能本机调用。&lt;/p&gt;
&lt;pre&gt;&lt;code class="language-bash"&gt;#将config.json放入一个文件夹比如~/Downloads
#安装的前提是你电脑上已经安装了node,版本&amp;gt;=18
cd ~/Downloads
npx @playwright/mcp@latest --config ./config.json&lt;/code&gt;&lt;/pre&gt;
&lt;img alt="06004f64cc54364e72d21b02ca9da545.png" height="269" src="https://img.lategege.com:30443/images/2025/09/30/450c20e36b22.png" width="713"/&gt;
&lt;p&gt; 
执行完成可以看到服务已经启动。&lt;/p&gt;
&lt;h5&gt;二、在Lobe-Chat中添加MCP服务&lt;/h5&gt;
&lt;p&gt;在lobe-chat中打开添加自定义插件界面 可以选择快速导入JSON配置，就是上面服务启动后给出的客户端配置：&lt;/p&gt;
&lt;pre&gt;&lt;code class="language-json"&gt;{
 "mcpServers": {
 "playwright": {
 "url": "http://192.168.0.40:8931/mcp"
 }
 }
}&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;导入后，点击测试，右侧会显示这个mcp服务提供的api列表，后面大模型会直接调用api来来访问你部署的mcp服务。&lt;/p&gt;
&lt;img alt="3f9e88f25dfaa3d4d93dd22537f46aee.png" height="373" src="https://img.lategege.com:30443/images/2025/09/30/5d87daab92d7.png" width="812"/&gt;
&lt;p&gt; 
下面在插件中启动你的插件&lt;/p&gt;
&lt;img alt="dffd93b1461abccab37c05b4f09933fb.png" height="422" src="https://img.lategege.com:30443/images/2025/09/30/781978e2fa32.png" width="428"/&gt;
&lt;h5&gt;三、使用MCP&lt;/h5&gt;
&lt;p&gt;在聊天框中和ai对话，让它调用mcp，当然模型要选择有函数调用能力的，我这里选择了硅基流动的DeepSeek-V3.1模型&lt;/p&gt;
&lt;p&gt;我向大模型发送了下面这句话：&lt;/p&gt;
&lt;pre&gt;&lt;code class="language-bash"&gt;使用mcp帮我打开https://zh.1lib.sk/ ，搜索一本小说，小说名称仙逆，帮我下载一本，保存在mcp服务器即可不需要传过来&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;我看到大模型打开了我的浏览器，访问了https://zh.1lib.sk/&lt;/p&gt;
&lt;p&gt; &lt;img alt="12.png" height="544" src="https://img.lategege.com:30443/images/2025/09/30/6a29974f3bcf.png" width="837"/&gt;&lt;/p&gt;
&lt;p&gt;接着它执行了搜索，找到了仙逆这本小说
 &lt;img alt="122.png" height="505" src="https://img.lategege.com:30443/images/2025/09/30/bf5051729d75.png" width="841"/&gt;&lt;/p&gt;
&lt;p&gt;不过由于我限额用完了，下载没能完成，但不可思议的事情发生了&lt;/p&gt;
&lt;p&gt; &lt;img alt="221.png" height="498" src="https://img.lategege.com:30443/images/2025/09/30/11a39280421a.png" width="843"/&gt;&lt;/p&gt;
&lt;p&gt;它居然要尝试创建账户，或使用其他下载方式，此时token已经消耗了10万，我立马终止了测试。 &lt;/p&gt;
&lt;img alt="344.png" height="195" src="https://img.lategege.com:30443/images/2025/09/30/98d33629f492.png" width="861"/&gt;
&lt;p&gt; 
这种网站操作的mcp服务对token的消耗是巨大的，一个不小心，你的api的余额就见底了，所以谨慎使用，除非你本地部署的模型，这样可以肆无忌惮的使用了。&lt;/p&gt;
&lt;hr/&gt;
&lt;p&gt;最后，你可以部署任何你自己想要的mcp服务，通过lobe-chat的调用能力来实现你自己的需求。&lt;/p&gt;</description></item><item><title>极简证件照3.0.0发布</title><link>https://lategege.com/p/%E6%9E%81%E7%AE%80%E8%AF%81%E4%BB%B6%E7%85%A73-0-0%E5%8F%91%E5%B8%83/</link><pubDate>Wed, 20 Mar 2024 11:38:24 +0000</pubDate><guid>https://lategege.com/p/%E6%9E%81%E7%AE%80%E8%AF%81%E4%BB%B6%E7%85%A73-0-0%E5%8F%91%E5%B8%83/</guid><description>&lt;h4&gt;3.0.0版本更新日志:&lt;/h4&gt;
&lt;hr/&gt;
&lt;ul&gt;
&lt;li&gt;1、新增我的模块&lt;/li&gt;
&lt;li&gt;2、新增证件一键矫正功能&lt;/li&gt;
&lt;li&gt;3、我的模块可查看余额和充值&lt;/li&gt;
&lt;li&gt;4、新增兑换码系统&lt;/li&gt;
&lt;/ul&gt;
&lt;img height="840" src="https://img.lategege.com:30443/images/2024/09/30/WechatIMG47.jpg" width="378"/&gt;
&lt;img height="840" src="https://img.lategege.com:30443/images/2024/09/30/WechatIMG48.jpg" width="378"/&gt;
&lt;h5&gt;下载地址:&lt;/h5&gt;
&lt;ul&gt;
&lt;li&gt;mac版(支持MacOS 11 BigSur+)：&lt;a href="https://cloud.lategege.com:9443/s/QMFP" title="下载"&gt;mac版下载&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;windows版(支持Win10/Win11)：&lt;a href="https://cloud.lategege.com:9443/s/GgH6" title="免安装版下载"&gt;windows版下载&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;android版(支持android 6.0+): &lt;a href="https://cloud.lategege.com:9443/s/vos5" title="apk下载"&gt;android版下载&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;ios版(支持ios12+): 待定&lt;/li&gt;
&lt;li&gt;linux版: 暂不发布&lt;/li&gt;
&lt;li&gt;web版: 不发布&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;免费使用体验兑换码:666666(含10次通用一键功能)，永久有效，一个终端只能兑换一次！&lt;/strong&gt;
&lt;em&gt;欢迎大家对本软件提出各类宝贵意见，一旦意见被采纳将获得本软件永久免费使用权!&lt;/em&gt;&lt;/p&gt;
&lt;hr/&gt;
&lt;h4&gt;2.0.0版本更新日志:&lt;/h4&gt;
&lt;hr/&gt;
&lt;ul&gt;
&lt;li&gt;1、优化了一键生成证件照界面&lt;/li&gt;
&lt;li&gt;2、主题颜色优化&lt;/li&gt;
&lt;li&gt;3、新增AI换脸、照片修复模块&lt;/li&gt;
&lt;li&gt;4、新增主题、语言设置&lt;/li&gt;
&lt;li&gt;5、统一整体风格&lt;/li&gt;
&lt;/ul&gt;
&lt;hr/&gt;
&lt;iframe allowfullscreen="true" border="0" frameborder="no" framespacing="0" height="600" scrolling="no" src="//player.bilibili.com/player.html?aid=1652679726&amp;amp;bvid=BV1tE421g7hV&amp;amp;cid=1490896667&amp;amp;p=1" width="300"&gt; &lt;/iframe&gt;
&lt;h5&gt;下载地址:&lt;/h5&gt;
&lt;ul&gt;
&lt;li&gt;mac版(支持MacOS 11 BigSur+)：&lt;a href="https://cloud.lategege.com:9443/s/QMFP" title="下载"&gt;mac版下载&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;windows版(支持Win10/Win11)：&lt;a href="https://cloud.lategege.com:9443/s/GgH6" title="免安装版下载"&gt;windows版下载&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;android版(支持android 6.0+): &lt;a href="https://cloud.lategege.com:9443/s/vos5" title="apk下载"&gt;android版下载&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;ios版(支持ios12+): 待定&lt;/li&gt;
&lt;li&gt;linux版: 暂不发布&lt;/li&gt;
&lt;li&gt;web版: 不发布&lt;/li&gt;
&lt;/ul&gt;
&lt;hr/&gt;
&lt;p&gt;&lt;a href="https://lategege.com/p/minimal-id-photo-2-0-0-released/" title="英语介绍"&gt;英语介绍&lt;/a&gt;&lt;/p&gt;
&lt;hr/&gt;
&lt;h5&gt;2.0.0版本Android端 示例图片(其他平台同)&lt;/h5&gt;
&lt;h5&gt;一键修复功能：&lt;/h5&gt;
&lt;img height="840" src="https://img.lategege.com:30443/images/2024/03/20/1.jpg" width="378"/&gt;
&lt;img height="840" src="https://img.lategege.com:30443/images/2024/03/20/2.jpg" width="378"/&gt;
&lt;hr/&gt;
&lt;h5&gt;AI换脸功能:&lt;/h5&gt;
&lt;img height="840" src="https://img.lategege.com:30443/images/2024/03/20/3.jpg" width="378"/&gt;
&lt;hr/&gt;
&lt;h5&gt;一键制作功能:&lt;/h5&gt;
&lt;img height="840" src="https://img.lategege.com:30443/images/2024/03/20/4.jpg" width="378"/&gt;
&lt;h5&gt;支持切换主题和语言:&lt;/h5&gt;
&lt;img height="840/" src="https://img.lategege.com:30443/images/2024/03/20/WechatIMG155.jpg" width="378"/&gt;</description></item><item><title>Apisix+grafana-loki+grafana 搭建轻量级日志服务</title><link>https://lategege.com/p/apisix-grafana-loki-grafana-%E6%90%AD%E5%BB%BA%E8%BD%BB%E9%87%8F%E7%BA%A7%E6%97%A5%E5%BF%97%E6%9C%8D%E5%8A%A1/</link><pubDate>Thu, 01 Feb 2024 13:55:37 +0000</pubDate><guid>https://lategege.com/p/apisix-grafana-loki-grafana-%E6%90%AD%E5%BB%BA%E8%BD%BB%E9%87%8F%E7%BA%A7%E6%97%A5%E5%BF%97%E6%9C%8D%E5%8A%A1/</guid><description>&lt;p&gt;最近在选一款日志服务，对比了skywalking logger、elasticsearch-logger、loki-loger、kafka-logger和其他云服务logger,首先云服务logger不会选，其中四者体验了前三者，skywalking logger、elasticsearch-logger这两个日志服务偏重，追求轻量的我选择了loki-logger。&lt;/p&gt;
&lt;p&gt;apisix搭配loki-logger有个坑就是apisix-dashboard无法使用，因为插件列表没有loki-logger,需要通过api配置，因为我装的是最新的apisix 3.8.0，这个版本是带loki-logger插件的，但是apisix 3.2.0版本是不带的，只是apisix-dashboard就无法使用了，很遗憾。&lt;/p&gt;
&lt;p&gt;首先修改&lt;a href="https://lategege.com/p/docker-compose部署最新版apisix网关-一/" title="Docker compose部署最新版Apisix网关(一）"&gt;Docker compose部署最新版Apisix网关(一）&lt;/a&gt;中 docker-compose.yaml，增加一个容器loki&lt;/p&gt;
&lt;pre&gt;&lt;code&gt; loki:
 image: grafana/loki:2.9.4
 ports:
 - "3100:3100"
 command: -config.file=/etc/loki/local-config.yaml
 networks:
 apisix:&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;另外grafana的配置文件中也要配置下loki源,目录为./grafana_conf/provisioning/datasources/all.yaml&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;datasources:
 - access: 'proxy'
 editable: true
 is_default: true
 name: 'apisix'
 org_id: 1
 type: 'prometheus'
 url: 'http://prometheus:9090'
 version: 1
 - name: 'Loki'
 type: 'loki'
 access: 'proxy'
 orgId: 1
 url: 'http://loki:3100'
 basicAuth: false
 isDefault: true
 version: 1
 editable: false&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;重启docker-compose就会拉取并启动loki容器&lt;/p&gt;
&lt;p&gt;我看了下loki-logger插件没有全局配置开关，所以只能针对单个路由进行配置，配置如下(新增路由并添加日志插件，前提先配置一个上游，这里就只要填id即可，不建议路由中直接添加上游信息)：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;curl http://192.168.0.1:9180/apisix/admin/routes/1 -H 'X-API-KEY: xxxxxxxxxxxxxxxxxx' -X PUT -d '
{
 "plugins": {
 "loki-logger": {
 "endpoint_addrs" : ["http://loki:3100"]
 }
 },
 "upstream_id": "1",
 "uri": "/test",
 "name": "test",
 "host": "test.com"
}'&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;已经有路由，在路由下添加一个loki-logger插件，可以这样做：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;curl http://192.168.0.1:9180/apisix/admin/routes/{路由id} -H 'X-API-KEY: xxxxxxxxxxxxxxxxxx' -X PATCH -d '
{
 "plugins": {
 "loki-logger": {
 "endpoint_addrs" : ["http://loki:3100"]
 }
 }
}
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;全局修改loki-logger日志的格式化形式, 日志格式以 JSON 格式声明为键值对。值只支持字符串类型。可以通过在字符串前面加上 $ 来使用 &lt;a href="https://apisix.apache.org/zh/docs/apisix/apisix-variable/" title="APISIX"&gt;APISIX&lt;/a&gt; 变量 和 &lt;a href="http://nginx.org/en/docs/varindex.html" title="Nginx"&gt;Nginx&lt;/a&gt; 变量 &lt;/p&gt;
&lt;pre&gt;&lt;code&gt;curl http://192.168.0.1:9180/apisix/admin/plugin_metadata/loki-logger -H 'X-API-KEY: xxxxxxxxxxxxxxxxxx' -X PUT -d '
{
 "log_format": {
 "host": "$host",
 "@timestamp": "$time_iso8601",
 "client_ip": "$remote_addr"
 }
}'&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;还原对loki-logger日志的格式化形式&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;curl http://192.168.0.1:9180/apisix/admin/plugin_metadata/loki-logger -H 'X-API-KEY: xxxxxxxxxxxxxxxxxx' -X PUT -d '
{
 "log_format": []
}'&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;启动容器后，访问grafana管理平台，查看设置-&amp;gt;DataSource在原来的基础下加了一个loki
&lt;img alt="file" src="https://img.lategege.com:30443/images/2024/02/01/6379909b8865.png"/&gt;&lt;/p&gt;
&lt;p&gt;然后可以添加日志看板+号-&amp;gt;dashboard-&amp;gt;add new pannel-&amp;gt;下面query选择loki,log labels选择job-&amp;gt;apisix,右侧选择logs组件，不出意外的话你就能看到你apisix发送给loki的日志了。
&lt;img alt="file" src="https://img.lategege.com:30443/images/2024/02/01/e00f72bf40f3.png"/&gt;&lt;/p&gt;
&lt;p&gt;你还可以通过explore对日志做相应的格式化查看
&lt;img alt="file" src="https://img.lategege.com:30443/images/2024/02/01/6225e34a6fea.png"/&gt;&lt;/p&gt;
&lt;p&gt;总结：由于skywalking和elasticsearch太重了，所以我体验后就没有使用了，一个容器几百兆到1个多G，对于个人来说没有必要使用，我使用工具第一考虑要素是高性能和轻量化，将来这都是活生生的硬件成本啊。&lt;/p&gt;</description></item><item><title>Apisix https证书部分客户端验证出错问题</title><link>https://lategege.com/p/apisix-https%E8%AF%81%E4%B9%A6%E9%83%A8%E5%88%86%E5%AE%A2%E6%88%B7%E7%AB%AF%E9%AA%8C%E8%AF%81%E5%87%BA%E9%94%99%E9%97%AE%E9%A2%98/</link><pubDate>Tue, 30 Jan 2024 08:31:17 +0000</pubDate><guid>https://lategege.com/p/apisix-https%E8%AF%81%E4%B9%A6%E9%83%A8%E5%88%86%E5%AE%A2%E6%88%B7%E7%AB%AF%E9%AA%8C%E8%AF%81%E5%87%BA%E9%94%99%E9%97%AE%E9%A2%98/</guid><description>&lt;p&gt;在使用apisix网关部署证书后，发现部分客户端报证书验证失败的情况，ios,mac端却没有这种情况，android端出现了这种情况，同样的证书，在nginx下却没有问题。
wireshark抓包显示三次握手成功后，建立TLS连接，客户端发了client hello,服务端回复server hello已经向客户端传输了证书后，客户端直接回复并关闭了tcp连接。
&lt;img alt="file" src="https://img.lategege.com:30443/images/2024/01/30/e9f6cde4dbdb.png"/&gt;
出现问题的是android客户端，使用的是flutter dio库，目前还没排查出问题的根本原因，网上有说是客户端没法SNI信息，但是我这边不是，我这边抓包是带了这个信息的。这种问题多半是apisix和客户端协商出了问题，但是究竟在哪里出错的还需要进一步排查，当然，这种问题解决也不是不能解决，客户端直接信任即可，但强迫症受不了，最好是在apisix端修改。&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;客户端报 Handshake error unable to get local issues&lt;/code&gt;&lt;/pre&gt;
&lt;hr/&gt;
&lt;p&gt;已找到原因:
引起这次问题的原因是flutter网络请求库验证证书的时候缺少证书链中的CA证书，问题的根本可能是flutter android端请求库验证证书的时候，并未获取到android手机中的完整证书信息，亦或者是根本就没有去获取完整证书信息，总之是flutter网络请求库在android端的证书校验存在处理失当问题，因为手机浏览器证书校验没问题，说明系统必然有内置根证书可以校验我们的网站证书。
此问题在github也有人提出：&lt;a href="https://github.com/flutter/flutter/issues/50699"&gt;https://github.com/flutter/flutter/issues/50699&lt;/a&gt;
解决方案就是apisix上传公钥别只上传网站的公钥，而是将CA证书打包进网站公钥证书，形成完整的fullchain.cer作为公钥证书提交，私钥不需要变化。&lt;/p&gt;
&lt;p&gt;由于我使用的是let's encrypt申请的，使用acme.sh申请的时候它已经下发了fullchain.cer了，所以我就不需要制作，只要将网站的xxx.cer换成这个已经包含了ca.cer的fullchain.cer即可。&lt;/p&gt;
&lt;p&gt;总结：若没有https相关知识作指引，这种问题根本没办法看清本质。&lt;/p&gt;</description></item><item><title>Docker compose部署最新版Apisix网关(二）</title><link>https://lategege.com/p/docker-compose%E9%83%A8%E7%BD%B2%E6%9C%80%E6%96%B0%E7%89%88apisix%E7%BD%91%E5%85%B3-%E4%BA%8C/</link><pubDate>Mon, 29 Jan 2024 17:50:40 +0000</pubDate><guid>https://lategege.com/p/docker-compose%E9%83%A8%E7%BD%B2%E6%9C%80%E6%96%B0%E7%89%88apisix%E7%BD%91%E5%85%B3-%E4%BA%8C/</guid><description>&lt;p&gt;当部署完成之后，需要在apisix-dashboard中进行一些配置
部署参考前一篇: &lt;a href="https://lategege.com/p/docker-compose部署最新版apisix网关-一/" title="Docker compose部署最新版Apisix网关(一）"&gt;Docker compose部署最新版Apisix网关(一）&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;一、首先访问apisix-dashboard网页端
&lt;a href="http://ip:dashboard端口"&gt;http://ip:dashboard端口&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;输入你在上篇中修改的用户名密码登录管理后台。
第一个问题你会发现仪表盘配置了地址，无法正常显示，因为默认不允许加载frame
需要修改apisix-dashboard/conf.yaml&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;conf:
 listen:
 host: 0.0.0.0 # `manager api` listening ip or host name
 port: 9000 # `manager api` listening port
 etcd:
 endpoints: # supports defining multiple etcd host addresses for an etcd cluster
 - etcd:2379
###添加以下内容
 security:
 content_security_policy: "frame-src *;"
.....&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;然后停掉容器重启后在管理后台输入grafana的ip和端口就能正常显示了，效果如下：
&lt;img alt="file" src="https://img.lategege.com:30443/images/2024/01/30/c299ccd4257e.png"/&gt;&lt;/p&gt;
&lt;p&gt;二、路由配置就相当于nginx写路由策略，图形化操作很方便，上游就相当于描述你的api服务器，这些配置你实操几遍就知道了，去搜索怎么配置不如实际操作验证来的快。&lt;/p&gt;
&lt;p&gt;三、证书这一块有个坑，泛域名证书虽然能上传，但是匹配会有问题，可能是我的泛域名既包含泛域名，也包含顶级域名的缘故。系统可能只能匹配一个，但是证书中却对应两个，因为管理端UI界面无法输入你的域名，在你泛域名证书上传出现问题的时候，你需要通过api来上传你的证书，指定泛域名即可。
api请求如下:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;cd 到你的证书所在目录
&lt;p&gt;curl http://替换为apisix的ip:替换为apisix的管理端口/apisix/admin/ssls/1 &lt;br&gt;
-H &amp;lsquo;X-API-KEY: 替换成你修改的admin_key&amp;rsquo; -X PUT -d '
{
&amp;ldquo;cert&amp;rdquo; : &amp;ldquo;&amp;rsquo;&amp;quot;$(cat 替换成你的证书公钥)&amp;rdquo;&amp;rsquo;&amp;quot;,
&amp;ldquo;key&amp;rdquo;: &amp;ldquo;&amp;rsquo;&amp;quot;$(cat 替换成你的证书私钥)&amp;rdquo;&amp;rsquo;&amp;quot;,
&amp;ldquo;snis&amp;rdquo;: [&amp;ldquo;你的泛域名&amp;rdquo;]
}&amp;rsquo;&lt;/code&gt;&lt;/pre&gt;&lt;/p&gt;
&lt;p&gt;完成后再证书列表中就会有显示
&lt;img alt="file" src="https://img.lategege.com:30443/images/2024/01/30/d75156ff6a46.png"/&gt;&lt;/p&gt;
&lt;p&gt;你就可以使用你的域名做https路由了，现在直接暴露在外网的没人会有http，所以这一步也是刚需。&lt;/p&gt;
&lt;p&gt;四、踩完以上两个坑后就可以愉快的配置了，该使用什么插件就自己配置，多使用就能很快熟练了。&lt;/p&gt;</description></item><item><title>Docker compose部署最新版Apisix网关(一）</title><link>https://lategege.com/p/docker-compose%E9%83%A8%E7%BD%B2%E6%9C%80%E6%96%B0%E7%89%88apisix%E7%BD%91%E5%85%B3-%E4%B8%80/</link><pubDate>Mon, 29 Jan 2024 17:13:18 +0000</pubDate><guid>https://lategege.com/p/docker-compose%E9%83%A8%E7%BD%B2%E6%9C%80%E6%96%B0%E7%89%88apisix%E7%BD%91%E5%85%B3-%E4%B8%80/</guid><description>&lt;p&gt;高性能且具备一系列安全策略的网关对于承载具体业务至关重要，对于个人开发者而言，你的入口更是决定着你收益的稳定性，因此，选择一款合适的Api网关来承载自身不断扩展的业务就成了首要任务，在对比了Nginx、Kong、Tyk、Gloo、Apache Apisix之后，果断入坑apisix, apisix无论在性能、配置效率、还是功能层面，都领先其他产品，尽管在使用的时候遇到了很多坑，官方的文档也很糟乱，不过在部署完成后，就不需要管那些了。&lt;/p&gt;
&lt;p&gt;部署apisix首选docker compose方式，可以在官方的github上面下载demo&lt;/p&gt;
&lt;p&gt;一、克隆仓库&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;git clone https://github.com/apache/apisix-docker.git
cd example 
&lt;p&gt;##其中docker-compose.yml就是部署需要的文件，由于官网的这份compose中没有dashboard容器，而部署apisix的目的就是为了方便配置，所以dashboard是必须的，我在官网基础上加入了dashboard
&lt;/code&gt;&lt;/pre&gt;&lt;/p&gt;
&lt;p&gt;二、拷贝dashboard配置文件
将all-in-one中apisix-dashboard文件夹拷贝到example目录中，下面dashboard容器需要挂载使用&lt;/p&gt;
&lt;p&gt;三、编写compose文件
最终修改后的docker-compose.yml 如下&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;version: "3"
&lt;p&gt;services:
apisix:
##这边写死为最新的版本
image: apache/apisix:3.8.0-debian
restart: always
volumes:
- ./apisix_conf/config.yaml:/usr/local/apisix/conf/config.yaml:ro
depends_on:
- etcd
##network_mode: host
#9180 admin port, 9080 api端口,9443 https端口
ports:
- &amp;ldquo;9180:9180/tcp&amp;rdquo;
- &amp;ldquo;9080:9080/tcp&amp;rdquo;
- &amp;ldquo;9091:9091/tcp&amp;rdquo;
- &amp;ldquo;9443:9443/tcp&amp;rdquo;
- &amp;ldquo;9092:9092/tcp&amp;rdquo;
networks:
apisix:&lt;/p&gt;
&lt;p&gt;etcd:
image: bitnami/etcd:3.5.11
restart: always
volumes:
- etcd_data:/bitnami/etcd
environment:
ETCD_ENABLE_V2: &amp;ldquo;true&amp;rdquo;
ALLOW_NONE_AUTHENTICATION: &amp;ldquo;yes&amp;rdquo;
ETCD_ADVERTISE_CLIENT_URLS: &amp;ldquo;http://etcd:2379&amp;rdquo;
ETCD_LISTEN_CLIENT_URLS: &amp;ldquo;http://0.0.0.0:2379&amp;rdquo;
ports:
- &amp;ldquo;2379:2379/tcp&amp;rdquo;
networks:
apisix:
##这是新增的，注意必须别用3.0.1有bug,插件市场是加载不出来的
dashboard:
image: &amp;ldquo;apache/apisix-dashboard:3.0.0-centos&amp;rdquo;
restart: always
depends_on:
- etcd
volumes:
##这里的配置文件使用all-in-one/apisix-dashboard/conf.yaml即可
- ./apisix-dashboard/conf.yaml:/usr/local/apisix-dashboard/conf/conf.yaml:ro
ports:
- &amp;ldquo;9000:9000/tcp&amp;rdquo;
networks:
- apisix
###测试用的服务，测完负载均衡可删除
web1:
image: nginx:1.19.0-alpine
restart: always
volumes:
- ./upstream/web1.conf:/etc/nginx/nginx.conf
ports:
- &amp;ldquo;8081:80/tcp&amp;rdquo;
environment:
- NGINX_PORT=80
networks:
apisix:
###测试用的服务，测完负载均衡可删除
web2:
image: nginx:1.19.0-alpine
restart: always
volumes:
- ./upstream/web2.conf:/etc/nginx/nginx.conf
ports:
- &amp;ldquo;8082:80/tcp&amp;rdquo;
environment:
- NGINX_PORT=80
networks:
apisix:
###监控工具，很有必要
prometheus:
image: prom/prometheus:v2.25.0
restart: always
volumes:
- ./prometheus_conf/prometheus.yml:/etc/prometheus/prometheus.yml
ports:
- &amp;ldquo;9090:9090&amp;rdquo;
networks:
apisix:
###上面这个监控工具的图形化展示，很有必要
grafana:
image: grafana/grafana:7.3.7
restart: always
ports:
- &amp;ldquo;3000:3000&amp;rdquo;
volumes:
- &amp;ldquo;./grafana_conf/provisioning:/etc/grafana/provisioning&amp;rdquo;
- &amp;ldquo;./grafana_conf/dashboards:/var/lib/grafana/dashboards&amp;rdquo;
- &amp;ldquo;./grafana_conf/config/grafana.ini:/etc/grafana/grafana.ini&amp;rdquo;
networks:
apisix:
####使用独立的网络名为apisix
networks:
apisix:
driver: bridge&lt;/p&gt;
&lt;p&gt;volumes:
etcd_data:
driver: local&lt;/code&gt;&lt;/pre&gt;&lt;/p&gt;
&lt;p&gt;四、如果只是跑起来试一下，以上就OK了，接着就是启动&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;##在当前目录下执行，前提是安装了docker和compose
docker-compose -p docker-apisix up -d&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;五、如果要用到生产环境，有几个地方必须要改一下
apisix_conf/config.yaml中&lt;/p&gt;
&lt;pre&gt;&lt;code&gt; .......
 admin_key:
 ##这个名称也最好改掉
 - name: "admin"
 ##这个key改掉，随便找个md5工具，输个字符串，输出32位哈希值即可使用
 key: edd1c9f034335f136f87ad84b625c8f1
 role: admin # admin: manage all configuration data
 ##名称最好也改掉
 - name: "viewer"
 ##上面都改了，这边也干脆改下
 key: 4054f7cf07e344346cd3f287985e76a2
 role: viewer
.......&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;apisix-dashboard/conf.yaml中&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;authentication:
 secret:
 ##看了注释，这个secret也改掉
 secret # secret for jwt token generation.
 # NOTE: Highly recommended to modify this value to protect `manager api`.
 # if it's default value, when `manager api` start, it will generate a random string to replace it.
 expire_time: 3600 # jwt token expire time, in second
 users:
 ###这四个值都改掉，随便你怎么定义，这是dashboard管理页面要输入的地址
 - username: admin # username and password for login `manager api`
 password: admin
 - username: user
 password: user&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;web1、web2两个容器可以删掉，留着没必要，docker-compose.yaml文件中配置删除即可。
另外更安全的做法是把端口全部改掉，一是因为apisix使用到的端口很常见，很难避免不与其他服务端口冲突。
如果没有冲突，或者你的端口不会暴露到公网，不改也没事，但是暴露到公网的端口尽量改掉。
修改端口只要修改docker-compose.yaml中的冒号前面部分，至于配置中的端口号大部分都不需要改，因为他们同属于一个网络组，他们内部通信使用容器端口是可以访问的。&lt;/p&gt;
&lt;p&gt;注意点：
apisix-dashboard:3.0.0请使用3.0.0版本，不要用最新的3.0.1，有插件显示空白bug,这个问题在github issue中有人提到。&lt;/p&gt;
&lt;p&gt;具体配置请看第二篇&lt;a href="https://lategege.com/p/docker-compose部署最新版apisix网关-二/" title=" Docker compose部署最新版Apisix网关(二）"&gt; Docker compose部署最新版Apisix网关(二）&lt;/a&gt;&lt;/p&gt;</description></item></channel></rss>