c62dd77bed
新文件: "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"
205 lines
14 KiB
Markdown
205 lines
14 KiB
Markdown
|
||
|
||
# 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=...
|
||
|
||

|
||
|
||
方式二:public bucket(裸直链,无认证)
|
||
|
||
mc anonymous set download zgene/photos
|
||
|
||

|
||
|
||
---
|
||
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 头
|
||
>```
|
||
>
|
||
> |