前言
本身打算使用MinIO
搭建一个类似S3的存储服务用来做图床的,结果几个月前官方对于社区版的支持大幅度削减了,所以决定换成RustFS
试一下。
号称是要对标MinIO的,同时也因为处于高速迭代状态,所以目前稳定性稍差。
该项目目前已经开源:https://github.com/rustfs/rustfs
官网:https://rustfs.com/zh/
文档地址:https://docs.rustfs.com/zh/
使用docker compose部署
docker
,docker compose
的安装这里不讲,若需要可以参考别人的文章或者去看我的另外一篇笔记里面有记录下迁移主机WordPress笔记
。
docker部署官方文档:https://docs.rustfs.com/zh/installation/docker/
我自己的yml文件参考如下:
基础环境配置你可以都不写,若不写的话默认登录的账号和密码都是:rustfsadmin
。
rustfs和minio的区别是他可以只需要一个端口,这个端口可以直接用作API和控制台的WebUI登录。
当然也可以区分开,但我没有成功,不知道是哪里写的有问题?我又想了想,可能是我地址填写的问题。我将相关配置注释在这里供各位参考。配置好后,进入yml文件所在地址使用docker compose up -d
启动。
# https://rustfs.com/
services:
rustfs:
image: rustfs/rustfs:latest
container_name: rustfs-server
restart: unless-stopped
environment:
# 基础配置
# - RUSTFS_VOLUMES=/data/rustfs0 # 关键:指定数据卷路径
# - RUSTFS_ADDRESS=0.0.0.0:9000
# - RUSTFS_CONSOLE_ADDRESS=0.0.0.0:9001
# - RUSTFS_CONSOLE_ENABLE=true
# - RUSTFS_EXTERNAL_ADDRESS=:9000 # Same as internal since no port mapping
# - RUSTFS_CORS_ALLOWED_ORIGINS=*
# - RUSTFS_CONSOLE_CORS_ALLOWED_ORIGINS=*
- RUSTFS_ACCESS_KEY=rustfsadmin
- RUSTFS_SECRET_KEY=rustfsadmin
# - RUSTFS_LOG_LEVEL=debug
volumes:
- rustfs_data:/data
ports:
# 访问和API端口
- "9000:9000"
# Web 控制台端口
# - "9001:9001"
healthcheck:
test:
[
"CMD",
"sh", "-c",
"curl -f http://localhost:9000/health"
]
interval: 30s
timeout: 10s
retries: 3
start_period: 40s
volumes:
rustfs_data:
Nginx反代设置
我是在主机上安装了Nginx的,如果不需要域名的话也可以直接IP+上面设置的端口访问,跳过这一部分即可。域名请自行替换成自己的域名。
反代文件参考如下:
主要看有注释的地方,主要就是关闭缓存,设置超时,调整上传上限,支持WebSocket等。
设置完后放到nginx/conf.d/
目录下,nginx -t
检查下是否报错,systemctl reload nginx
重载
server {
listen 80;
listen [::]:80;
server_name xxx.xxx.com;
return 301 https://$host$request_uri;
}
server {
listen 443 ssl http2;
listen [::]:443 ssl http2;
server_name xxx.xxx.com;
ssl_certificate /etc/fullchain.pem;
ssl_certificate_key /etc/privkey.pem;
ssl_protocols TLSv1.2 TLSv1.3;
ssl_ciphers ECDHE+AESGCM:ECDHE+CHACHA20:DHE+AESGCM:DHE+CHACHA20:!aNULL:!MD5:!DSS;
# Allow special characters in headers
ignore_invalid_headers off;
# Allow any size file to be uploaded.
# Set to a value such as 1000m; to restrict file size to a specific value
client_max_body_size 100m;
# Disable buffering
proxy_buffering off;
proxy_request_buffering off;
location / {
proxy_pass http://127.0.0.1:9000;
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_connect_timeout 300;
# Default is HTTP/1, keepalive is only enabled in HTTP/1.1
proxy_http_version 1.1;
proxy_set_header Connection "";
chunked_transfer_encoding off;
# WebSocket 支持
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
}
}
初始化RustFS
若没有问题这里就已经搭建好RustFS了。我们登录到后台,输入账号和密码(在你的yml文件中配置的)。
在左边文件浏览器
选项卡选择创建存储桶
命名后,点击那个桶的齿轮 配置桶
,我们将访问策略
修改为公有
。
在左边访问密钥
选项卡选择添加访问密钥
,选择到期日期,提交。记录下这组Access Key
和Secret Key
。我们要在PicGo上用。
安装和使用PicGO
官网:https://molunerfinn.com/PicGo/
文档:https://picgo.github.io/PicGo-Doc/zh/guide/
下载地址:https://github.com/Molunerfinn/picgo/releases
最好去上面下载!下面的地址仅作为存档备份!!
官方提供的国内可用下载链接:2.4.0-beta.10
博主自己备份版本:2.4.0-beta.10 解压密码:crowsong.xyz 访问密码:8625
安装完成后,我们还需要安装一个插件。在插件设置中搜索s3,找到描述为picgo amazon s3 uploader
的插件,如下图
插件GitHub地址:https://github.com/wayjam/picgo-plugin-s3
安装完成后,在图床设置
中会多出一个Amazon S3
的选项。我们新建一个配置文件,保留默认配置,因为可以参考它。
- 图床配置名:随意
- 应用密钥ID:之前记录的
Access Key
- 应用密钥:之前记录的
Secret Key
- 桶名:刚才你创建的那个桶的名字
- 上传文件路径:这里可以参考那个默认配置,
{year}/{month}/{md5}.{extName}
这个就是根据年月创建文件夹,然后使用md5作为文件名。其他参数可以去插件的GitHub地址查看 - 地区:空,自建的这个没用,如果你的软件强制要求你填写你就写
us-east-1
- 自定义节点:填写你反代的域名,这里因为控制台和API都在一个域名。不是的话填你的API域名或者地址
- 代理:根据自己需求
- 拒绝无效TLS证书链接:同上
- ACL访问控制列表:默认(
public-read
) - ForcePathStyle(重要):yes
- 后续选项根据个人需求进行设置
点击确认
保存,记得点确认保存!
至此设置完毕,你可以尝试上传一张图片,上传完成后会返回给你图片的地址。