不想白嫖了,自己动手搭个图床 MinIO + PicGo + Typora
前世的原因
相信很多同学跟我一样,使用Typora
做技术文档,Blog 的创作,然后用类似PicGO
这样的工具上传到Github
,其实这是个不错的做法。
好处就是免费,简单,方便,缺点呢,自己本地看还行,因为我知道大家都会武功或者借助一些技巧,而且呢发文到各大平台问题也不大。毕竟各大平台的 Markdown 文档编辑器会自动给我们上传图片到他们自己的图床。
如果是在自己 Blog 站点直接发出去呢,里面图片地址是 https://raw.githubusercontent.com/, 那么对于网络条件不好的用户,就会显示不出来或者加载很慢,毕竟不是谁都会武功的对吧。
等等,我有个好主意!😈😈
【那我把我 markdown 里面的链接都替换成平台的不就好了么?】
!!!像我这样,有这种想法呢也正常的。
平台还是比我们要聪明点啦。我们发现把地址复制出来是可以正常显示的。
这里肯定又有学习不错的大聪明说,我学过,无非是别人加了防盗链,之前 gitee
也是。我们把Header
里面的Referer
改成平台自己支持的域名就行了。
兄弟,你学的很好,那你就这么玩哈。
自己演绎了个剧本大家不要见笑。
其实呢,对于各大平台来说不管是Gitee
,还是知识社区,进行一些防盗链是非常正常的,毕竟服务器资源都是要花钱的,也会有一些其他风险,我觉得作为行业内的还是应该理解的,只是Github
这样的比较另类。
今生的解决办法
那么怎么解决呢,用Github
的确是不行了。
买个OSS
服务吧。可以是可以,花点钱,趁现在618
各大云厂商都在推出促销服务,比较现在茅台价格都被电商玩出事了对吧,有需要的同学可以去看看,专属优惠
其实也是个不错的方案,毕竟对象存储服务就是用来存放文件,图片,日志等东西的,而且选好存储类型的话,预算还是不高的,玩过云资源的都知道,不管是哪种类型的资源,存储本身是不贵的,流量才贵。所以大家可以自己权衡下,我也没算过账
【我怕哪天网站太火,OSS
资源刷爆账单!】
一是做梦,有那一天,你还在乎这点钱?
还是好好搬砖
吧。哎,最近又……,算了不提了
想到手上还有两台轻量应用服务器,包月流量不小,带宽也还可以,现在就跑了几个应用和MySQL
,Redis
,ES
等中间件,还可以搞
【等等,你不是前端吗,要这些东西干嘛】
我骨子里是后端
MinIO
MinIO is a high-performance, S3 compatible object store. It is built forlarge scale AI/ML, data lake and database workloads. It is software-definedand runs on any cloud or on-premises infrastructure. MinIO is dual-licensedunder open source GNU AGPL v3 and a commercial enterprise license.
【说的真好,嗯。。说的啥】
它说自己很牛逼
【?!】
就是自己能用来搭建对象存储服务,自己去看 MinIO 高性能分布式存储,私有云存储
安装
当然,你可以裸机直接装,我选择 docker 的方式
查询下信息
docker search minio
# 我们选择第一个
创建数据目录
# 请相对于自己的目录
mkdir -p data/containers/minio/data
创建 docker-compose.yml
目录:data/containers/minio/docker-compose.yml
请相对于刚才自己创建的目录
services:
minio:
image:"minio/minio:latest"
restart: "always"
ports:
- "9006:9000"
- "9007:9001"
volumes:
- ./data:/data
environment:
- MINIO_ROOT_USER=<yourusername>
- MINIO_ROOT_PASSWORD=<yourpassword>
command: minio server /data --console-address ":9007"
端口 9006 用于访问
端口 9007 用于控制台
ps: 这里留了个小坑,看看有没有同学发现,评论区见
创建启动服务
docker compose up -d
查看服务状态和日志
docker compose ps
docker compose logs -f
NAME IMAGE COMMAND SERVICE CREATED STATUS PORTS
minio-minio-1 minio/minio:latest "/usr/bin/docker-ent…" minio 3 minutes ago Up 3 minutes 0.0.0.0:9006->9000/tcp, 0.0.0.0:9007->9001/tcp
[root@VM-4-3-centos minio]# docker compose logs -f
minio-minio-1 | Formatting 1st pool, 1 set(s), 1 drives per set.
minio-minio-1 | WARNING: Host local has more than 0 drives of set. A host failure will result in data becoming unavailable.
minio-minio-1 | MinIO Object Storage Server
minio-minio-1 | Copyright: 2015-2024 MinIO, Inc.
minio-minio-1 | License: GNU AGPLv3 - https://www.gnu.org/licenses/agpl-3.0.html
minio-minio-1 | Version: RELEASE.2024-06-13T22-53-53Z (go1.22.4 linux/amd64)
minio-minio-1 |
minio-minio-1 | API: http://172.18.0.2:9000 http://127.0.0.1:9000
minio-minio-1 | WebUI: http://172.18.0.2:9007 http://127.0.0.1:9007
minio-minio-1 |
minio-minio-1 | Docs: https://min.io/docs/minio/linux/index.html
minio-minio-1 | Status: 1 Online, 0 Offline.
minio-minio-1 | STARTUP WARNINGS:
minio-minio-1 | - Detected Linux kernel version older than 4.0.0 release, there are some known potential performance problems with this kernel version. MinIO recommends a minimum of 4.x.x linux kernel version for best performance
minio-minio-1 | - The standard parity is set to 0. This can lead to data loss.
验证下服务
这里我们直接把9006
和9007
端口暴露到公网,然后自己本地测试下
ps:验证后从防火墙上把这两个接口禁用掉,再用 nginx 反向代理过去
创建下bucket
,这里就叫blog-static
,后续其他使用场景也可以用创建其他的
设置下访问规则并测试下
测试访问下
ps: 这里有个非常重要的点,就是我们一开始设置的 9007 端口是控制台,那么我们实际访问的端口其实是 9006,所以测试地址应该是
http://ip:9006/blog-static/vue3 响应式.jpeg
域名配置和 nginx 反向代理
接下来就是讲MinIO
的服务和控制台配置到自己域名上去
申请域名和 HTTPS 证书的步骤这里就忽略了,大家可以去查下资料
这里直接给出 nginx 的配置信息,如果需要对应安装部署步骤的话评论区或者私聊下我
server {
listen 443 http2 ssl;
server_name static.miaodaddy.xyz;
gzip on;
gzip_buffers 32 4K;
gzip_comp_level 6;
gzip_min_length 100;
gzip_types application/javascript text/css text/xml;
gzip_disable "MSIE [1-6]\."; #配置禁用gzip条件,支持正则。此处表示ie6及以下不启用gzip(因为ie低版本不支持)
gzip_vary on;
access_log /var/log/nginx/minio.access.log;
ssl_certificate /etc/nginx/ssl/static.miaodaddy.xyz_bundle.pem;
ssl_certificate_key /etc/nginx/ssl/static.miaodaddy.xyz.key;
location / {
proxy_redirect off;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_pass http://localhost:9006;
}
}
【现在免费SSL
证书有效期只有 90 天,nnd】
配置完后,就能愉快的配置PicGo
和Typora
了
PicGo 配置
这里首先要在Minio
上申请下AK
和SK
,记得保存下
先在PicGo
的插件里面安装MinIO
的插件,然后我们先测试下PicGo
的功能是否正常
【我承认你这个配置是一次性成功的 😄】
Typroa 配置
最后一步就比较容易了
总结
还是一段比较顺利的探索之旅
【狗屁,报错,查资料,你不知道你重试了多少次啊?🤭】
其实这里还有个小问题,就是每次上传后,返回的图片地址包含了域名加 443 的情况,这个留给大家思考下,是哪里出的问题
但是对于MinIO
的探索还远没有结束,下一期我们可以看下MinIO
更高阶的功能,比如权限配置,如果部署达到高可用的目的
其实真要部署高可用的话,需要更多的机器资源,到时候算下ROI
的话,还不是直接买OSS
或者COS
呢,对吧,到那一天再说
但是我们可以继续挖掘下Minio
的功能,比如哪天要迁移到OSS
,我们如何进行,我们下期见
不如我们单开个系列就叫**前端玩转服务器**吧,还有更多更好玩的东西等待我们的学习和实践