MinIO + PicList | 自建图床、视频音频床方案

在使用 MinIO + PicList 图床 方案之前,我也自建过兰空图床、EasyImages2、Chevereto,不过它们更像是公开给别人临时使用的,而不是自己用的,用着不直观。

MinIO + PicList 方案,思路很简单:MinIO 负责保存图片、开放下载网址,PicList 用于上传图片和构造网址

介绍 MinIO 如何作为图床

MinIO 属于对象存储,就是一个网络目录,可以上传文件、下载文件,可以通过网址访问文件。

  • 如果我们上传图片到 MinIO、并构造正确的网址,就能在网页上显示这张图片了——图床🎉
  • 如果上传视频,那就能直接在网页上播放视频(前提是浏览器支持播放的格式,比如 mp4)——视频床🎉
  • 如果上传音频,就是音频床
  • 如果上传普通文件,可以当作网盘用来分享文件

安装 MinIO自建 对象存储 – 构建高效可靠的数据存储系统 – 技焉洲 (vfly2.com)


手动上传并构造网址是完全可以的,上传的文件的下载链接格式为(填入 ip 或域名、桶名 vfly2 和文件名 file.name,注意端口是 9000)

http://ip:9000/vfly2/file.name

比如,在 MinIO 后台创建了一个 imagesbed 桶,在里面上传了一张名为 vfly2technique.png 的图片,那么这张图片的网络地址就是: http://imgbed.ahfei.blog:9000/imagesbed/vfly2technique.png ,用浏览器访问这个网址就能看到图片:

在写 md 格式的文章时,想插入这个图片,使用指定格式就可以了。

![](http://imgbed.ahfei.blog:9000/imagesbed/vfly2technique.png)

如果借助工具,把上传和构造网址的工作自动化,就更方便了。开源的 PicList 就是专门做这个的。

反代

需要说明一点,有的网站不支持显示非 HTTPS 的图片,上面就是一个反例。这时可以用 Nginx 进行反代。

我使用 ib.ahfei.blog 反向代理 imgbed.ahfei.blog:9000。这样,访问 https://ib.ahfei.blog 就是在访问 http://imgbed.ahfei.blog:9000 ,这个 https://ib.ahfei.blog/imagesbed/vfly2technique.png 同上面的网址。

下面一律使用 ib.ahfei.blog

设置 Bucket 读写权限

修改 Access Policy 为 Custom,具体是(根据注释自定义桶名)

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Principal": {
                "AWS": [
                    "*"
                ]
            },
            "Action": [
                "s3:GetBucketLocation",
                "s3:ListBucket"
            ],
            "Resource": [
                "arn:aws:s3:::vfly2imagesbed"   // 修改 vfly2imagesbed 为你的桶名,并删除这个注释
            ]
        },
        {
            "Effect": "Allow",
            "Principal": {
                "AWS": [
                    "*"
                ]
            },
            "Action": [
                "s3:GetObject"
            ],
            "Resource": [
                "arn:aws:s3:::vfly2imagesbed/*"   // 修改 vfly2imagesbed 为你的桶名,并删除这个注释
            ]
        }
    ]
}

这样的权限下,其他人只能读取桶中的文件列表和获取其中的文件,上传图片后,可以作为图床使用。

PicList

PicList 是一款高效的云存储和图床平台管理工具,在 PicGo 的基础上经过深度的二次开发。支持非常丰富的存储方式:WebDAV、S3 API 兼容平台、腾讯COS V5、Github 等,还有插件功能,通过插件可以支持 MinIO。

GitHub: Kuingsmile/PicList: An image upload and manage tool, base on PicGo (github.com)

另外,同作者还开发了安卓版的: Kuingsmile/PicHoro: 一款手机端云存储平台/图床管理和文件上传/下载工具,支持直接管理Webdav,Alist,SSH/SFTP,云服务器,兼容S3 API的平台,腾讯COS,阿里OSS,七牛云,又拍云,兰空图床,Imgur,SM.MS和github AhFei 没有使用过。

安装 PicList

下载地址: https://github.com/Kuingsmile/PicList/releases ,找到需要的版本下载安装。

如果访问 GitHub 不畅,也可以到 UpdateFetch Web (vfly2.com) 下载,这是 AhFei 编写并开源的一个自动下载工具。


MacOS 用户现在可以使用 Homebrew 来安装 PicList 了,只需要执行以下命令即可:

brew install piclist --cask

卸载命令:

brew uninstall piclist

设置 PicList 使用 MinIO 当图床

  1. 在【插件】界面,搜索 MinIO ,安装作者是 herbertzz 的那个插件。其 GitHub 地址是 https://github.com/Herbertzz/picgo-plugin-minio 。(可能需要先安装 nodejs ,并且还有重启电脑才能生效)
  2. 在【图床】,选择【MinIO图床】,编辑配置,需要说明的有
    • endPoint:服务端的域名或者 IP 地址,ib.ahfei.blog
    • port: 443
    • userSSL:是否开启 SSL,选择开启
    • accessKey:安装 Minio Server 时设置的用户名,vfly2
    • secretKey:之前设置的密码,pass_vfly2_word
    • bucket:创建的桶名称,imagesbed
  3. 保存配置
  4. 在【上传】,选择图床,然后随便上传一张图片试试是否成功(实际体验,如果与服务端网络不太好,超过 1 MB 就很容易失败)

Access key 和 secretKey 就是登录网站用的用户名和密码,完全不知道后台创建的 key 该怎么用

配合 Obsidian 使用

简单说明作用: 在拖入图片到 Obsidian 时,自动上传到图床

  1. Obsidian 安装插件:Image Auto Upload Plugin
  2. 进入插件设置页面,
    • 修改默认上传器为 PicGo(app)
    • 设置 PicGo server 上传接口 为 http://127.0.0.1:36677/upload
    • 该插件还额外支持通过 PicList 进行云端删除,在删除接口填入 http://127.0.0.1:36677/delete
    • 其他设置按需选择
  3. 拖入一张图片测试

PicList-Obsidian.png

效果

PicList 其他有用的配置

可以浏览一遍【设置】界面。

在【上传设置】中

  • 可以选择把不用的图床隐藏起来
  • 另外【高级重命名】我一直在用,我的重命名格式为 {filename}-{y}-{m}-{s} ,也就是在原本的文件名后,加上 -年-月-秒,如 PicList-Obsidian-24-03-01.png 这样不用担心重名的问题。
  • 【自定义链接格式】,我用的是 <video controls> <source src="$url"> not support video tag. </video>,然后在首页上传前,链接格式选择 Custom,出来的网址可以直接播放视频

视频床

上一节也提到了,其实就是把视频这个文件的网址,按照一定格式构造。$url 替换为真实网址:

<video controls> <source src="$url"> not support video tag. </video>

比如在 Obsidian,是支持 HTML 标签的,因此,放入这样的段落,就是在插入视频

<video controls> <source src="https://ib.ahfei.blog/videobed/lightningrod-vid_wg_720p.mp4"> not support video tag. </video>

音频床

可以用于 Anki 的自制卡片,格式为

<audio controls> <source src="$url" type="audio/mpeg"> not support audio tag </audio>

比如

<audio controls> <source src="https://ib.ahfei.blog/audiobed/indulge-23-09-54.mp3" type="audio/mpeg"> not support audio tag </audio>

分享普通文件

学会构造网址就行。格式为

http://ip:9000/bucket_name/file.name

然后就能直接下载了。这里自荐一下 AhFei 创建的开源自动下载工具: 定期检查和下载软件的最新版 UpdateFetch 的安装步骤 – 技焉洲 (vfly2.com) ,它利用 MinIO 保存文件,方便分享。


原文链接: https://yanh.tech/2024/03/self-hosted-image-hosting-service/

版权声明:本博客所有文章除特別声明外,均为 AhFei 原创,采用 CC BY-NC-SA 4.0 许可协议。转载请注明来源 技焉洲 (yanh.tech)

保持更新 ٩(•̤̀ᵕ•̤́๑)ᵒᵏᵎᵎᵎᵎ 清晰恒益的实用技能,欢迎使用 RSS 订阅,或在支持 ActivityPub 的平台关注 @vfly2tech@yanh.tech 接收新文章的推送,如果能留言互动就更好了。

可在 Telegram 群组 https://t.me/vfly2 交流依文章步骤遇到的问题。

评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇