MinIO+PicGo+Nginx+Typora 自建图床

2022-09-01 14:56:47 +08:00
 vaynecv

写在前面

需求背景

​ 自从开始写文章后,就遇到了一个问题,图床;我这边是使用 Typora 编写 Markdown 格式的文章,然后发布到各个平台,有些平台会自动将你的图片文件上传到他们的服务器上,但是有的还是会使用你自己的图片文件来源。这会产生两个问题:

​ 1. Typora 会默认将你的截图、复制的图片放在本地,没法多设备同步,导致我从公司回到家后打开笔记只能面对一张张“破”了的图,属实影响阅读体验

​ 2. Typora 编写文章的时候如果使用第三方图床的方式,得依赖于第三方服务器的稳定性

​ 所以,有没有可能自建图床,搭建一个属于自己的可控的图床方案呢?答案是,Yes!

需求调研

你需要准备的

安装步骤

MinIO 部署

本文采用的是 Docker 部署方式,单节点,考虑到我的云服务器配置并不是那么高

拉取MinIO最新镜像

[root@VM-4-12-centos /]# docker pull minio/minio

容器启动MinIO实例

[root@VM-4-12-centos /]# docker run -p 9000:9000 -p 9001:9001 --name minio -d --restart=always -e "MINIO_ACCESS_KEY=xxx" -e "MINIO_SECRET_KEY=xxxxxxxx" -v /home/data:/data -v /home/config:/root/.minio minio/minio server --console-address ":9000" --address ":9001" /data

配置项说明:

注意事项

Nginx 配置

云服务器上之前有部署好的 Nginx 环境,所以此文就不展开说明,仅贴上具体 Nginx 配置文件

云安全组端口开放
云域名解析

上述提到的两个域名均解析到你对应的云服务器即可

Nginx 设置域名配置文件
# nginx 配置目录
[root@VM-4-12-centos nginx]# pwd
/etc/nginx
# nginx 下使用 vhost 子目录 include 到主的配置文件中
[root@VM-4-12-centos vhost]# pwd
/etc/nginx/vhost
[root@VM-4-12-centos vhost]# ll
-rw-r--r-- 1 root root 1014 Aug 31 14:43 io.xxx.com.conf
-rw-r--r-- 1 root root  835 Sep  1 08:42 share.xxx.com.conf
vim io.xxx.com.conf
server{
        listen 80;
        # MinIO 后台管理域名
        server_name	io.xxx.com;
        # HTPP 重定向到 HTTPS
        return 301 https://$server_name$request_uri;
}

server{
        listen 443 ssl;
        server_name io.xxx.com;
        # nginx 访问日志,错误日志配置
        access_log /usr/local/nginx/logs/io.access.log json;
        error_log /usr/local/nginx/logs/io.error.log warn;
        # SSL 证书配置
        ssl_certificate      /usr/local/nginx/ssl/io.xxx.com_bundle.crt;
        ssl_certificate_key  /usr/local/nginx/ssl/io.xxx.com.key;
        ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:HIGH:!aNULL:!MD5:!RC4:!DHE;
        ssl_session_timeout  5m;
        ssl_prefer_server_ciphers  on;
        ssl_session_cache shared:SSL:10m;

        location / {
            proxy_redirect    off;
            proxy_set_header X-Forwarded-Proto $scheme;
            proxy_set_header  Host             $host;
            proxy_set_header  X-Real-IP        $remote_addr;
            proxy_set_header  X-Forwarded-For  $proxy_add_x_forwarded_for;
            # 目标 MinIO 服务
            proxy_pass http://localhost:9000;                 
        }
}
vim share.xxx.com.conf
server{
        listen 80;
        # MinIO 外链访问域名
        server_name	share.xxx.com;
        # HTPP 重定向到 HTTPS
        return	301 https://$server_name$request_uri;
}

server{
        listen 443 ssl;
        server_name share.xxx.com;
        # nginx 访问日志,错误日志配置
        access_log /usr/local/nginx/logs/share.access.log json;
        error_log /usr/local/nginx/logs/share.error.log warn;
        ssl_certificate      /usr/local/nginx/ssl/share.xxx.com_bundle.crt;
        ssl_certificate_key  /usr/local/nginx/ssl/share.xxx.com.key;
        ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:HIGH:!aNULL:!MD5:!RC4:!DHE;
        ssl_session_timeout  5m;
        ssl_prefer_server_ciphers  on;
        ssl_session_cache shared:SSL:10m;
   
        location / {
             proxy_set_header Host $host;
             add_header Content-Security-Policy "upgrade-insecure-requests";
             # 目标 MinIO API 服务
             proxy_pass http://localhost:9001;
        }
}

MinIO Manage Web 访问

MinIO 登录

访问地址: https://io.xxx.com, 输入你最初设置的用户密码登录即可

Bucket (桶) 创建

Bucket 信息

至此, MinIO 整个服务端已经搭建且调试完成!

MinIO Client (Typora+PicGo)

PicGo 配置

Typora 配置

收获&问题

拓展

完结

​ 至此,就已经全部完成了整套自建图床服务的搭建了!可能也并不是最好的方案,只能说是目前我能想到的一个比较适合我的“免费”图床方案;但是“免费”的前提也是需要一些投入的成本,我这里是已有一个闲置的域名,一台 XX 云的轻量服务器。

​ 谢谢大家的观看我的博客~下期再见

4473 次点击
所在节点    程序员
39 条回复
twofox
2022-09-01 15:57:06 +08:00
我选择阿里云 oss ,人生苦短,能少折腾就少折腾,速度还比自己服务器的小水管快
perfectlife
2022-09-01 16:00:08 +08:00
oss +1
lisongeee
2022-09-01 16:06:40 +08:00
我一般都是复制图片,然后到 github 的 markdown 编辑框粘贴一下,然后 Ctrl+A , Ctrl + X 复制产生的 md 文本
![image]( https://user-images.githubusercontent.com/38517192/187864245-3634ae33-9419-4614-bed7-7b1f747e5374.png)

如果是 vscode 编辑 md 文件,我可以装插件,然后在我粘贴的时候自动上传图片然后插入 md 文本
ltkun
2022-09-01 16:07:14 +08:00
picx 传 github 还有 cdn
yesterday1mo
2022-09-01 16:08:36 +08:00
@twofox 目前存储了多少图片,每个月的账单是多少?
ltkun
2022-09-01 16:09:21 +08:00
![Screenshot_20220901-160800]( https://git.poker/ltkun/img/blob/master/20220901/Screenshot_20220901-160800.7joxrxoyo0o0.webp?raw=true)
vaynecv
2022-09-01 16:14:21 +08:00
@twofox #1 哈哈,当然可以的,不过这个折腾的成本也比较小;七牛云的我用了自定义域名,但是 HTTPS 受限,就没用了

@lisongeee #3 也是一种方案
@ltkun #4 就当学习了😂我是瞎折腾
leipengcheng
2022-09-01 16:54:21 +08:00
我一直都是白嫖的图床。。。懒得自建了,还要维护
xiangsanliu
2022-09-01 16:58:45 +08:00
用的 GitHub 做图床,最近还写了个 raycast 插件,配合起来非常便捷了
tairan2006
2022-09-01 16:59:23 +08:00
微博图床?
zggsong
2022-09-01 17:01:50 +08:00
后期维护起来。。。反正我选择 oss 这类产品
vaynecv
2022-09-01 17:11:37 +08:00
看来我是白折腾了😂不过问题不大,先用着,后续看体验如何
aptupdate
2022-09-01 17:12:46 +08:00
用 OSS 有审核吧?而且还要操心账单。
vaynecv
2022-09-01 17:14:51 +08:00
@aptupdate #13 是的,我就是感觉有个后付费的账单在那,有点不放心,毕竟只是个人使用
当然如果有免费图床且稳定的话,我肯定也会选择
没有最好的,只有适合自己的,😝
waler
2022-09-01 17:18:39 +08:00
我用的 onedrive ,多台电脑同步没任何问题,发布到外网是可以用 alist 或者 onedrive-vercel-index 之类的,展示 onedrive 目录就可以
novolunt
2022-09-01 17:19:29 +08:00
https://github.com/mosuka/phalanx minio 可以加这个,做搜索
vaynecv
2022-09-01 17:22:32 +08:00
@waler #15 写这文章前我应该发个帖问问的,这样就可选择更多的方案了
@novolunt #16 好嘞,我学习一下
fstar
2022-09-01 17:27:27 +08:00
用的阿里云 OSS ,省事。难受的一点是强制带上 Content-Disposition: attachment ,除非用自己的域名。不过放在 Markdown 里显示图片还好,但新标签页打开会直接下载
pytth
2022-09-01 18:20:21 +08:00
我都是直接在一些平台上传后生成的链接作为图床,例如百度、微博、腾讯等产品的一些头像上传、反馈建议的截图上传等地方,上传后 F12 拿到链接就是我的图床了...哈哈哈,找一些不会过期的就挺稳!
X-Force
2022-09-01 18:50:37 +08:00
图床最大的问题不是搭建,是「带宽、成本、稳定性」啊……

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/877000

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX