<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/"><channel><title>Devops on 豆子技术站</title><link>https://blog.91demo.top/categories/devops.html</link><description>Recent content in Devops on 豆子技术站</description><generator>Hugo -- 0.155.1</generator><language>zh-cn</language><lastBuildDate>Wed, 11 Mar 2026 08:00:00 +0800</lastBuildDate><atom:link href="https://blog.91demo.top/categories/devops/index.xml" rel="self" type="application/rss+xml"/><item><title>解决 Cloudreve 无法通过 HTTPS 连接自签名证书 MinIO</title><link>https://blog.91demo.top/devops/cloudreves3.html</link><pubDate>Wed, 11 Mar 2026 08:00:00 +0800</pubDate><guid>https://blog.91demo.top/devops/cloudreves3.html</guid><description>&lt;h2 id="背景与问题描述"&gt;背景与问题描述&lt;/h2&gt;
&lt;p&gt;&lt;a href="https://github.com/cloudreve/cloudreve"&gt;Cloudreve&lt;/a&gt;是一个自托管文件管理与共享系统，支持多存储提供商。&lt;/p&gt;
&lt;p&gt;在部署 Cloudreve 存储策略时，我们需要集成内网环境下的 MinIO S3 服务。由于 MinIO 部署在内网并配合内网穿透暴露至公网，且使用了自签名证书，我们在配置完成后发现客户端无法正常上传文件。&lt;/p&gt;
&lt;h3 id="初步排查"&gt;初步排查：&lt;/h3&gt;
&lt;ol&gt;
&lt;li&gt;确认内网穿透链路正常。&lt;/li&gt;
&lt;li&gt;使用 MinIO 客户端工具 mc 测试，发现必须带上 &amp;ndash;insecure 参数才能正常访问，明确了核心矛盾在于 SSL 证书验证失败。&lt;/li&gt;
&lt;li&gt;尝试将证书放置在自定义目录并使用 mc &amp;ndash;config-dir 指定，虽能连接成功，但 Cloudreve 无法直接复用该配置，且即便在同目录下放置证书也未能生效。&lt;/li&gt;
&lt;/ol&gt;
&lt;h3 id="最终方案"&gt;最终方案：&lt;/h3&gt;
&lt;p&gt;将自定义 CA 证书导入系统信任库，使 Cloudreve（Go 环境）能够原生识别。&lt;/p&gt;
&lt;h2 id="解决方案在-centos-系统中安装并激活自定义证书"&gt;解决方案：在 CentOS 系统中安装并激活自定义证书&lt;/h2&gt;
&lt;h3 id="1检查证书是否pem格式"&gt;1，检查证书是否PEM格式？&lt;/h3&gt;
&lt;p&gt;Go 程序通常识别PEM格式的证书。&lt;br&gt;
使用以下命令检查证书文件（如public.crt）：&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;cat public.crt
&lt;/code&gt;&lt;/pre&gt;&lt;ul&gt;
&lt;li&gt;如果开头是 &amp;mdash;&amp;ndash;BEGIN CERTIFICATE&amp;mdash;&amp;ndash;，则是 PEM 格式。&lt;/li&gt;
&lt;li&gt;如果是一堆乱码，则是 DER 格式。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;需要转换为PEM格式：&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;openssl x509 -inform der -in public.crt -out public.pem
&lt;/code&gt;&lt;/pre&gt;&lt;h3 id="2放置证书"&gt;2，放置证书&lt;/h3&gt;
&lt;p&gt;在CentOS Linux中，需要将证书文件放在/etc/pki/ca-trust/source/anchors/目录下，并且后缀必须为.crt。如果文件名为public.pem，需要改为public.crt。&lt;/p&gt;
&lt;p&gt;确认文件是否放置正确？&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;ls /etc/pki/ca-trust/source/anchors/
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;输出中应包含我们的证书。&lt;/p&gt;
&lt;h3 id="3激活证书"&gt;3，激活证书&lt;/h3&gt;
&lt;p&gt;执行以下命令激活，让系统重新扫描目录并生成全局信任束，依次执行：&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;update-ca-trust extract
update-ca-trust
&lt;/code&gt;&lt;/pre&gt;&lt;h3 id="4验证证书是否激活成功"&gt;4，验证证书是否激活成功&lt;/h3&gt;
&lt;p&gt;检查系统全局证书合集&lt;code&gt;ca-bundle.crt&lt;/code&gt;是否已包含你的证书信息：&lt;/p&gt;</description></item><item><title>拒绝频繁上传：基于 Dufs + Mole-go (FRP) 快速搭建高效的内网穿透演示环境</title><link>https://blog.91demo.top/devops/mole-devenv.html</link><pubDate>Thu, 15 Jan 2026 18:00:00 +0800</pubDate><guid>https://blog.91demo.top/devops/mole-devenv.html</guid><description>&lt;p&gt;最近开发完 Mole-go，想给它做个网站用来展示和下载。但我这个后端糙汉子，样式真搞不定，求助 AI 调了半天还是差点意思。最头疼的是，手机端调试得一遍遍输 IP，给朋友演示也得发一串 IP 端口，太不专业了！于是我一顿折腾，搞出了这套方案……&lt;/p&gt;
&lt;p&gt;为了解决这些痛点，我摸索出了一套“黄金组合”：Dufs + Mole-go + FRP + Caddy。这套方案打通了从本地到公网域名的全链路，实现了自动 HTTPS、域名访问以及极致的访问体验。&lt;/p&gt;
&lt;h2 id="第一步构建本地内容基石dufs"&gt;第一步：构建本地内容基石（Dufs）&lt;/h2&gt;
&lt;p&gt;一切的起点是本地文件服务。我选择使用 Dufs 作为静态服务器。它极其轻量，支持上传、搜索、打包下载甚至 WebDAV，是我演示 Web 应用或分发安装包的首选。&lt;/p&gt;
&lt;p&gt;通过简单的命令，我在本地 5000 端口启动了服务。虽然此时它还被“困”在局域网内，但它为后续的展示提供了稳固的基础。&lt;/p&gt;
&lt;h2 id="第二步突破局域网束缚frp-与-mole-go"&gt;第二步：突破局域网束缚（FRP 与 Mole-go）&lt;/h2&gt;
&lt;p&gt;为了让公网流量能精准触达内网，我采用了经典的 FRP 方案，但在客户端层面，我使用了自己开发的 Mole-go。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;服务端 (FRP Server)：部署在具备公网 IP 的云服务器上，充当流量中转站。这个服务器配置可以很低，网站服务都在本地电脑，如果本地有数据库，也非常方便调试。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;客户端 (Mole-go)：这是我为 FRP 打造的桌面管理客户端。它封装了 frpc 核心，不仅提供了直观的 UI，还通过系统托盘设计彻底解决了“关闭窗口即断连”的痛点。&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;使用 Mole-go，我可以将本地 5000 端口通过加密隧道安全地映射到云端。它出色的资源管理和连接稳定性，确保了演示过程中即便网络波动，链接依然稳固如初。&lt;/p&gt;
&lt;h2 id="第三步优雅的网关入口caddy"&gt;第三步：优雅的网关入口（Caddy）&lt;/h2&gt;
&lt;p&gt;即便流量已到达公网，我也不希望朋友们通过 http://IP:端口 这种生硬的方式访问。我追求的是“域名+HTTPS”的专业感，这不仅是为了美观，更是为了开发环境需求，下次开发公众号等必须 HTTPS 环境时可以拿来就直接使用。&lt;/p&gt;
&lt;p&gt;我选择了 Caddy 担任“守门人”。Caddy 的魅力在于其近乎零配置的 自动 HTTPS 功能。看中了它的简单方便，非常符合我的场景。在 Caddyfile 中，我只需写下：&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;example.com {   
reverse_proxy localhost:7000  # 指向 FRP 映射出的本地端口
}
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;仅需这一行配置，Caddy 就会自动搞定 SSL 证书的申请与续签。当访问者输入域名时，映入眼帘的是受信任的绿色小锁头，所有的复杂端口逻辑都被完美隐藏。&lt;/p&gt;</description></item><item><title>FRP 图形化管理新方案：基于 Wails 3 的 Mole-go 桌面客户端部署指南</title><link>https://blog.91demo.top/devops/mole-help.html</link><pubDate>Wed, 07 Jan 2026 06:00:00 +0800</pubDate><guid>https://blog.91demo.top/devops/mole-help.html</guid><description>记录自研 FRP 管理工具 Mole-go 的公版部署与使用过程，探讨如何通过 Go + Wails 3 构建极致简单的内网穿透图形化管理体验。</description></item><item><title>Mosquitto 安全加固指南：从匿名访问到多用户 ACL 细粒度权限控制</title><link>https://blog.91demo.top/devops/mosquitto_config.html</link><pubDate>Sat, 01 Nov 2025 12:40:16 +0800</pubDate><guid>https://blog.91demo.top/devops/mosquitto_config.html</guid><description>记录 Mosquitto 代理服务的安全配置过程，包括用户认证、动态 ACL 权限控制以及在边缘计算场景下的安全实践。</description></item><item><title>在 mdbook 中集成 Mermaid 实现自动化流程图渲染</title><link>https://blog.91demo.top/devops/addmermaid.html</link><pubDate>Wed, 01 Jan 2025 18:00:00 +0800</pubDate><guid>https://blog.91demo.top/devops/addmermaid.html</guid><description>&lt;p&gt;mermaid 是很强大的一个库，可以使用文本展示图表。mdbook 是一个可以通过 Markdown 格式的文章内容生成在线书籍网站。mdbook-mermaid 这个库将 mermaid 和 mdbook 粘合在了一起。&lt;/p&gt;
&lt;p&gt;下面是 mdbook-mermaid 的一个示例，&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code class="language-mermaid" data-lang="mermaid"&gt; graph TD;
A--&amp;gt;B;
A--&amp;gt;C;
B--&amp;gt;D;
C--&amp;gt;D;
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;该插件使用 Rust 开发，可以通过 Cargo 安装，&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;cargo install mdbook-mermaid
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;在首次使用 mdbook-mermaid 时，需要下载一些依赖文件和配置，使用命令：&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;mdbook-mermaid install path/to/your/book
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;上面的/path/to/your/book 是你的数据路径，运行之后，将会在你的书籍 book.toml 配置文件中添加如下内容：&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;[preprocessor.mermaid]
command = &amp;#34;mdbook-mermaid&amp;#34;
[output.html]
additional-js = [&amp;#34;mermaid.min.js&amp;#34;, &amp;#34;mermaid-init.js&amp;#34;]
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;插件将检测是否已配置 mdbbok-mermaid，如果已配置将跳过。否则，将添加上面的内容到 book.toml 配置文件中，并将文件 mermaid.min.js，mermaid-init.js 复制到你书籍的目录中。你可以在 src/bin/assets 目录中找到这些文件。你还可以修改 mermaid-init.js 来配置 mermaid。&lt;/p&gt;
&lt;p&gt;最后，重新编译书籍上传即可。&lt;/p&gt;</description></item></channel></rss>