ARTICLE DETAIL

资讯详情

深耕网站视觉设计与运营推广的一线实战洞察。

Typora + PicGo + MinIO 自建图床保姆级教程(附“上传成功但图片不回显“终极排查)

Typora + PicGo + MinIO 自建图床保姆级教程(附“上传成功但图片不回显“终极排查) 图床是每个 Markdown 写作者绕不开的一道坎。用别人的图床SM.MS、七牛、腾讯云 COS、阿里云 OSS要么有流量/容量限制要么要花钱要么担心哪天服务关停。自建图床——把图片存到自己的服务器上一劳永逸数据完全在自己手里。本文手把手带你用MinIO自托管对象存储 PicGo上传工具 Typora编辑器搭建一套属于自己的图床并重点解决一个新手必踩的坑图片明明上传成功了Typora 里却死活不显示目录一、整体架构先搞懂图片是怎么流的二、环境准备Docker 部署新版 MinIO2.1 拉取并启动 MinIO2.2 确认部署成功三、创建 Bucket四、安装并配置 PicGo4.1 安装 PicGo4.2 安装 MinIO 插件4.3 配置 MinIO 图床五、配置 Typora 关联 PicGo六、测试上传七、核心问题排查上传成功但图片不回显7.1 先做一个一锤定音的测试7.2 主因Bucket 是 PRIVATE匿名读被拒绝7.3 解决办法把 Bucket 设为匿名可下载7.4 用 MinIO Clientmc命令行设置匿名下载7.5 其他可能的原因7.6 为什么用 DOWNLOAD而不是 PUBLIC一、整体架构先搞懂图片是怎么流的关键点这个链路里有两个完全不同的动作——上传PUTPicGo 拿着你的AccessKey/SecretKey认证所以能写进去读取GET浏览器打开图片 URL 时是匿名的没有任何认证信息。上传成功但不回显的根因几乎总是出在第二步——Bucket 不允许匿名读取。二、环境准备Docker 部署新版 MinIOMinIO 是一个开源、兼容 Amazon S3 协议的对象存储服务轻量、部署简单非常适合做图床后端。本文以新版 MinIO Docker为例旧版和新版在端口、控制台界面上有差异注意区分。2.1 拉取并启动 MinIO在服务器上执行docker权限不够时前面加sudodocker run -d \ --name minio \ --restart unless-stopped \ -p 19000:9000 \ -p 19001:9090 \ -e MINIO_ROOT_USERminioadmin \ -e MINIO_ROOT_PASSWORD你的密码 \ -v /data/minio:/data \ minio/minio server /data --console-address :9090参数说明参数含义-p 19000:9000把宿主机的19000映射到容器的 S3API 端口9000PicGo 上传、浏览器访问图片都走它-p 19001:9090把宿主机的19001映射到容器的Console 控制台端口9090Web 管理界面MINIO_ROOT_USER/MINIO_ROOT_PASSWORD管理员账号密码新版统一用这两个环境变量旧的MINIO_ACCESS_KEY/MINIO_SECRET_KEY已废弃-v /data/minio:/data数据持久化把数据挂到宿主机容器删了数据还在划重点新版 MinIO 的默认端口是API9000、Console9090。上面的例子我映射成了19000/19001只是演示你可以用任何端口但后面 PicGo 里填的 endpoint 必须对应 API 端口这里即19000不是 Console 端口。填错端口是最常见的低级错误之一。如果你的服务器上有可视化控制面板会更简单。2.2 确认部署成功浏览器访问 Console 控制台http://你的服务器IP:19001用 username/ password登录能看到控制台就说明 MinIO 跑起来了。注意如果访问不了先检查云服务器安全组是否放行了19000、19001这两个端口以及防火墙firewalld/ufw是否拦截。这步不通后面全白搭。三、创建 BucketBucket 就是放图片的文件夹。在新版MinIO Console 左侧点击Buckets → Create BucketBucket Nametypora名称全局唯一且一旦创建不可改建议用小写字母创建完Bucket 列表里会出现一个typora它的Access访问策略默认是PRIVATE四、安装并配置 PicGo4.1 安装 PicGoPicGo 是一款开源免费的图床工具支持 Windows / macOS / Linux。https://github.com/Molunerfinn/PicGo4.2 安装 MinIO 插件PicGo 原生并没有内置 MinIO 图床所以我们需要去下载插件。安装后重启 PicGo在图床列表就能看到MinIO4.3 配置 MinIO 图床endPoint填写你的服务器ip地址或域名port填写你部署的MinIO占用的端口useSSL根据前面的endPoint选择如果是https的话就是yes反之是noaccessKey填写你的MinIO的账号用户名secretKey填写你的MinIO的密码bucket填写你创建的“桶”名不同插件的字段命名可能略有差异有的叫endpoint有的拆成server/port以你实际安装的插件界面为准填完记得保存并把 MinIO 设为默认图床图床设置里点设为默认。五、配置 Typora 关联 PicGo打开 Typora →文件 → 偏好设置 → 图像插入图片时…选择上传图像勾选对本地位置的图片应用上述规则、对网络位置的图片应用上述规则上传服务设定选择PicGo (app)PicGo 路径填 PicGo 的安装路径。六、测试上传在 Typora 里粘贴一张图片如果右下角弹出上传成功并且去看 MinIO 的 Bucket 里确实多出了文件说明PicGo → MinIO 这一段已经通了。但重点来了此时 Typora 里的图片可能依然是一片裂图 / 空白。这就是本文要解决的核心问题。七、核心问题排查上传成功但图片不回显7.1 先做一个一锤定音的测试把 Typora 里生成的那串图片 URL 直接复制到浏览器地址栏打开http://你的IP:19000/typora/20260901092717125.png会出现三种结果对应三种病因现象结论✅ 图片直接显示MinIO 权限、PicGo 都正常问题在 Typora 侧❌ 显示AccessDeniedBucket 权限问题❌ 打不开 / 超时安全组 / 端口 / 反向代理问题7.2 主因Bucket 是 PRIVATE匿名读被拒绝AccessDenied的原因 99% 是Bucket 的 Access 策略还是默认的PRIVATE。前面说过上传走的是认证 PUT能成功但浏览器读取是匿名 GETPRIVATE 不允许任何匿名访问于是 MinIO 直接拒绝图片自然显示不出来。一句话总结上传成功 ≠ 能公开读取。7.3 解决办法把 Bucket 设为匿名可下载去 MinIO 控制台找到typora这个 Bucket 的Access Policy访问策略 / 匿名访问把它从PRIVATE改成DOWNLOAD。新版 MinIO Console 已经不在 Bucket 页面上直接提供这个切换入口了旧版有所以新手常在这里迷路。没关系用命令行mc更稳妥、也更通用。7.4 用 MinIO Clientmc命令行设置匿名下载这里有个大坑先预警Linux 上有两个东西都叫mc——如果你直接在服务器敲mc anonymous set download ...很可能会启动那个蓝色的文件管理器而不是 MinIO 客户端导致命令看似执行了其实什么都没改。解决方式是避开这个命令冲突推荐直接用 Docker 跑 MinIO Client干净又不污染系统sudo docker run --rm -it --entrypoint /bin/sh minio/mc进入容器后提示符变成sh-5.1#之类依次执行# ① 确认现在用的是真正的 MinIO Client mc --version # 应该显示 mc version ...而不是 GNU Midnight Commander # ② 配置你的 MinIO 连接alias 起个名字这里叫 minio mc alias set minio http://你的IP:19000 # 然后按提示输入 Access Key 和 Secret Key # ③ 验证连接是否成功可选 mc admin info minio # ④ 设置 typora 这个 Bucket 允许匿名下载 mc anonymous set download minio/typora # ⑤ 验证权限已生效 mc anonymous get minio/typora # 应该输出Access permission for minio/typora is downloadDocker 提示permission denied ... /var/run/docker.sock说明当前用户没权限访问 Docker 守护进程。要么每次前面加sudo要么执行sudo usermod -aG docker $USER后退出重新登录 SSH即可。7.5 其他可能的原因如果权限改完浏览器还是打不开依次检查云服务器安全组是否放行 API 端口19000TCP 入方向Docker 端口映射-p 19000:9000是否映射正确用docker ps确认HTTP / HTTPS 混合内容如果你的 Typora 页面环境是 HTTPS却引用http://的图片浏览器会因混合内容拦截而加载失败。图床方案里尽量给 MinIO 配 HTTPS。7.6 为什么用DOWNLOAD而不是PUBLICMinIO 的匿名策略有四档策略匿名读GET匿名写PUT说明nonePRIVATE❌❌完全私有任何人匿名都不能访问download✅❌只允许匿名下载/读取upload❌✅只允许匿名上传public✅✅读写都开放做图床我们要的是别人能看图片但不能随便往你 Bucket 里传东西所以DOWNLOAD是唯一正确选择。设成public等于把桶完全敞开谁都能往里写文件有被塞垃圾文件甚至被滥用的风险切勿。写在最后本文是博主在配置TyporaPicGoMinIO时踩的坑写作时查阅了大量公开资料与文献力求内容准确。若有疏漏或表述不当之处欢迎大家指正也请多多包涵如果这篇笔记对你有帮助欢迎点赞 、收藏 ⭐、关注 你的支持是我继续更新的最大动力往期文章Linux 学习笔记 04 番外用户权限典型场景实操Linux 学习笔记 04一文读懂 Linux 用户与权限管理响应式之道 —— 媒体查询、容器查询与多列布局打破常规 —— CSS 定位与层叠上下文全解二维布局之王 —— CSS Grid 完全指南
返回列表