Files
technology-document/MinIO常用操作.md
T
zgene c62dd77bed 修改: "2026 Ubuntu \345\256\211\350\243\205.md"
新文件:   "AI\346\212\200\346\234\257/\345\207\206\345\244\207.md"
	修改:     "Docker\346\212\200\346\234\257.md"
	修改:     "Linux\346\212\200\346\234\257.md"
	新文件:   "MinIO\345\270\270\347\224\250\346\223\215\344\275\234.md"
2026-05-27 21:53:49 +08:00

205 lines
14 KiB
Markdown
Raw Blame History

This file contains invisible Unicode characters
This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# MinIO 最常用的操作
访问 Web 管理台 https://zgene.cn:9001,用 MINIO_ROOT_USER / MINIO_ROOT_PASSWORD 登录。
可以:创建 bucket、上传下载文件、设置 bucket 权限、生成预签名 URL。
## 安装
```bash
sudo wget https://dl.min.io/client/mc/release/linux-amd64/mc -O /usr/local/bin/mc
sudo chmod +x /usr/local/bin/mc
mc alias set zgene https://zgene.cn:9000 admin pass*****wd 配置别名:zgene
mc ls zgene 验证:列出所有存储桶
```
## 常用命令
- mc mb zgene/zgene_knowledge # 创建 bucket 桶名必须为小写字母
- mc rb zgene/test # 删除空 bucket,强制删除非空桶 --force
- mc cp ./file.txt zgene/mybucket/ # 上传单个文件
mc ls zgene/photos # 列出
mc cp zgene/photos/trip.jpg ./ # 下载
mc rm zgene/photos/trip.jpg # 删除
mc rb zgene/photos
---
3. Python SDK
pip install minio
from minio import Minio
client = Minio("zgene.cn", access_key="admin", secret_key="xxx", secure=True)
# 上传
client.fput_object("photos", "2026/trip.jpg", "./trip.jpg")
# 获取预签名 URL(用于 Markdown 引用,默认 7 天有效)
url = client.presigned_get_object("photos", "2026/trip.jpg")
print(url)
---
4. Markdown 引用图片
方式一:预签名 URL(私有 bucket,带临时认证)
url = client.presigned_get_object("photos", "trip.jpg")
# https://zgene.cn/oss/photos/trip.jpg?X-Amz-Algorithm=...
![描述](https://zgene.cn/oss/photos/trip.jpg?X-Amz-Algorithm=...)
方式二:public bucket(裸直链,无认证)
mc anonymous set download zgene/photos
![描述](https://zgene.cn/oss/photos/trip.jpg)
---
5. 粘贴上传(在 Console 里)
进入 bucket → 点击 Upload → 支持拖拽、点击选择、Ctrl+V 粘贴。
---
需要更详细的某个部分吗?比如和 Typora/VS Code 集成自动上传?
✻ Brewed for 49s
❯ Typora集成自动上传
● Write(~/桌面/项目集/minioss/typora-minio-upload.py)
脚本已写好,保存为 typora-minio-upload.py
---
配置步骤
1. 安装依赖
pip install minio
2. 创建配置文件
mkdir -p ~/.config/typora-minio
cat > ~/.config/typora-minio/config.json << 'EOF'
{
"endpoint": "zgene.cn",
"access_key": "admin",
"secret_key": "你的密码",
"bucket": "typora",
"secure": true,
"public": true,
"prefix": "2026/"
}
EOF
┌─────────────────────────┬─────────────────────────────────────────────────┐
│ 配置项 │ 说明 │
├─────────────────────────┼─────────────────────────────────────────────────┤
│ endpoint │ 域名,不用加 https:// │
├─────────────────────────┼─────────────────────────────────────────────────┤
│ access_key / secret_key │ MinIO 账号密码 │
├─────────────────────────┼─────────────────────────────────────────────────┤
│ bucket │ 图片存放的 bucket,不存在会自动创建 │
├─────────────────────────┼─────────────────────────────────────────────────┤
│ public │ true 输出固定直链(推荐),false 输出预签名 URL │
├─────────────────────────┼─────────────────────────────────────────────────┤
│ prefix │ 对象前缀,如 2026/ 表示图片放在 typora/2026/ 下 │
└─────────────────────────┴─────────────────────────────────────────────────┘
3. Typora 设置
偏好设置 → 图像:
- 插入图片时:上传图片
- 上传服务设定:Custom Command
- 命令:
python3 /path/to/typora-minio-upload.py
点击"验证图片上传选项"测试。
---
效果
在 Typora 中:
- 粘贴截图 → 自动上传到 MinIO → 返回 URL
- 拖拽图片 → 同上
- 插入本地图片 → 同上
图片 URL 格式:
https://zgene.cn/oss/typora/2026/20260506_143052_image.png
需要我把这个脚本也提交到 minioss 仓库吗?
>已深度思考(用时3秒)
>
>
>
>我们注意到原配置中使用了 `proxy_set_header Host $host;`这可能会导致签名问题,因为MinIO的签名计算依赖于原始的Host头。
>
>根据之前的分析,我们需要将Host头设置为客户端原始请求的Host,即使用 `$http_host`变量,它包含客户端请求中的原始Host头信息。
>
>同时,我们还需要确保其他与签名相关的头被正确传递。
>
>修改建议:
>
>1.
>
> 将 `proxy_set_header Host $host;`改为 `proxy_set_header Host $http_host;`以保留客户端请求的原始Host头。
>
>2.
>
> 另外,MinIO的S3签名可能还需要一些其他的头信息,我们可以参考MinIO官方文档关于Nginx代理的配置。
>
>另外,注意原配置中已经设置了 `proxy_request_buffering off;`和 `proxy_buffering off;`以及 `client_max_body_size 0;`,这是正确的。
>
>修改后的配置如下(只修改了Host头,其他保持不变):
>
>看到了您的配置,问题出在 **`proxy_set_header Host $host;`** 这一行。对于 S3 API 签名验证,这会导致签名不匹配。
>
>## 问题原因
>
>S3 API 签名计算依赖于请求中的 `Host`头。当您使用:
>
>-
>
> `proxy_set_header Host $host;`- 这会重写 Host 头为 Nginx 服务器的主机名
>
>-
>
> 但客户端(mc)发送请求时使用的是包含端口的完整域名:`zgene.cn:9000`
>
>## 解决方案
>
>将 Host 头配置改为以下两种方式之一:
>
>### 方案1:使用 `$http_host`(推荐)
>
>```nginx
>proxy_set_header Host $http_host; # 使用客户端发来的原始 Host 头
>```
>
>