Spaces:
Running
Running
| title: COS HF MinIO | |
| emoji: 🗄️ | |
| colorFrom: blue | |
| colorTo: green | |
| sdk: docker | |
| pinned: false | |
| license: mit | |
| # COS_HF | |
| 在 Hugging Face Docker Space 上部署一个 **S3/COS 兼容的 MinIO 对象存储服务**,作为腾讯云 COS 的长期备份、应急溢出存储,以及其他 MVP 项目的共享对象存储。 | |
| ## 重要说明:GitHub 登录 vs MinIO 凭证 | |
| 本项目的核心服务是 MinIO,也就是 S3/COS 兼容对象存储。对象存储协议本身使用的是: | |
| ```text | |
| Access Key / Secret Key 签名认证 | |
| ``` | |
| 因此,下面两个环境变量是 **MinIO 服务启动和 S3 API 写入所必需的内部凭证**,不是普通用户网页登录方式: | |
| ```bash | |
| MINIO_ROOT_USER=内部 S3 Access Key | |
| MINIO_ROOT_PASSWORD=内部 S3 Secret Key | |
| ``` | |
| 如果设置: | |
| ```bash | |
| MINIO_BROWSER=off | |
| ``` | |
| 则 MinIO Web Console 默认关闭,浏览器里不会出现“管理员 + 密码”的管理后台登录页。GreatEditor、mc、AWS SDK 等客户端仍然需要使用这组 S3 凭证完成上传、同步和备份。 | |
| 如果要“使用 GitHub 账号登录”,推荐放在外层访问控制完成,而不是替代 MinIO S3 凭证: | |
| ```text | |
| 方案 1:Hugging Face Space 设为 Private,浏览器访问由 Hugging Face 登录保护 | |
| 方案 2:使用 Cloudflare Access + GitHub 登录保护自定义域名 | |
| 方案 3:后续单独开发 /admin 管理页使用 GitHub OAuth,S3 API 仍用 Access Key / Secret Key | |
| ``` | |
| 不建议把 GitHub OAuth 强行加到所有 S3 API 路径前面,否则 GreatEditor、MinIO Client、AWS SDK 等对象存储客户端会无法正常工作。 | |
| ## 适用定位 | |
| 推荐定位: | |
| ```text | |
| 主存储:腾讯云 COS / Cloudflare R2 / 正式对象存储 | |
| 备份与应急:Hugging Face MinIO | |
| MVP 临时存储:Hugging Face MinIO | |
| 业务数据库:PostgreSQL | |
| 缓存 / Session / 配置:KV | |
| ``` | |
| 不建议把 Hugging Face MinIO 作为高并发生产主存储。它更适合作为: | |
| ```text | |
| 1. 腾讯云 COS 爆满时的临时写入目标 | |
| 2. 腾讯云 COS 的周期性备份目标 | |
| 3. GreatEditor / 其他 MVP 项目的低成本对象存储 | |
| 4. 后续 COS 扩容后迁移回 COS 的中转仓库 | |
| ``` | |
| ## 项目结构 | |
| ```text | |
| . | |
| ├── Dockerfile # Hugging Face Docker Space 入口 | |
| ├── scripts/start-minio.sh # 启动 MinIO,并自动初始化 bucket | |
| ├── scripts/mirror-cos-minio.md # 腾讯 COS ↔ MinIO 迁移/同步命令 | |
| ├── worker/keepalive.js # Cloudflare Worker 保活模板 | |
| ├── docs/ # 部署、安全、GitHub 登录说明 | |
| └── README.md | |
| ``` | |
| ## Hugging Face 部署步骤 | |
| ### 1. 创建 Hugging Face Space | |
| 创建 Docker Space,连接本仓库或直接上传本仓库文件。 | |
| 建议启用 Persistent Storage,并确保数据目录挂载到: | |
| ```text | |
| /data | |
| ``` | |
| 本项目默认 MinIO 数据目录为: | |
| ```text | |
| /data/minio | |
| ``` | |
| ### 2. 配置 Space Secrets | |
| 在 Hugging Face Space 的 `Settings → Variables and secrets` 中配置: | |
| ```bash | |
| MINIO_ROOT_USER=内部 S3 Access Key,例如 coshf_admin | |
| MINIO_ROOT_PASSWORD=内部 S3 Secret Key,请使用强密码 | |
| MINIO_BUCKET=great-editor-backup | |
| MINIO_REGION=us-east-1 | |
| MINIO_BROWSER=off | |
| PUBLIC_BUCKET=1 | |
| ``` | |
| 可选: | |
| ```bash | |
| MINIO_SERVER_URL=https://your-space-name.hf.space | |
| MINIO_API_CORS_ALLOW_ORIGIN=* | |
| ``` | |
| 说明: | |
| ```text | |
| MINIO_ROOT_USER / MINIO_ROOT_PASSWORD:S3 Access Key / Secret Key,用于程序上传和同步,不是 GitHub 登录 | |
| MINIO_BUCKET:默认自动创建的 bucket | |
| PUBLIC_BUCKET=1:设置 bucket 为匿名可读,适合图片 URL 直接访问 | |
| PUBLIC_BUCKET=0:bucket 私有,适合冷备份 | |
| MINIO_BROWSER=off:关闭 Web Console,HF 默认只暴露一个端口,优先暴露 S3 API | |
| ``` | |
| ### 3. 访问健康检查 | |
| 部署成功后,可以访问: | |
| ```text | |
| https://your-space-name.hf.space/minio/health/live | |
| https://your-space-name.hf.space/minio/health/ready | |
| ``` | |
| Cloudflare Worker 保活建议定时访问: | |
| ```text | |
| /minio/health/live | |
| ``` | |
| ## Private 部署建议 | |
| 如果这个 Space 主要作为冷备份: | |
| ```text | |
| HF Space Visibility:Private | |
| PUBLIC_BUCKET=0 | |
| MINIO_BROWSER=off | |
| ``` | |
| 这样浏览器访问由 Hugging Face 自己的登录体系保护。你可以使用 Hugging Face 账号登录;如果你的 Hugging Face 账号绑定了 GitHub,也可以通过 GitHub 方式进入 Hugging Face。 | |
| 如果这个 Space 要临时承接 GreatEditor 图片访问: | |
| ```text | |
| HF Space Visibility:Public | |
| PUBLIC_BUCKET=1 | |
| MINIO_BROWSER=off | |
| ``` | |
| 这样图片 URL 可以被浏览器直接读取,写入仍然需要 MinIO S3 凭证。 | |
| ## S3 / COS 兼容连接参数 | |
| 给 GreatEditor 或其他 MVP 应用使用时,可以配置为: | |
| ```bash | |
| S3_ENDPOINT=https://your-space-name.hf.space | |
| S3_ACCESS_KEY_ID=MINIO_ROOT_USER 的值 | |
| S3_SECRET_ACCESS_KEY=MINIO_ROOT_PASSWORD 的值 | |
| S3_BUCKET=great-editor-backup | |
| S3_REGION=us-east-1 | |
| S3_FORCE_PATH_STYLE=true | |
| ``` | |
| MinIO 的 URL 通常是 path-style: | |
| ```text | |
| https://your-space-name.hf.space/great-editor-backup/path/to/file.jpg | |
| ``` | |
| ## 腾讯 COS 与 MinIO 同步 | |
| 推荐使用 MinIO Client `mc` 做同步。详见: | |
| ```text | |
| scripts/mirror-cos-minio.md | |
| ``` | |
| 典型命令: | |
| ```bash | |
| mc alias set cos https://cos.ap-guangzhou.myqcloud.com "$COS_SECRET_ID" "$COS_SECRET_KEY" | |
| mc alias set hfminio https://your-space-name.hf.space "$MINIO_ROOT_USER" "$MINIO_ROOT_PASSWORD" | |
| # COS -> HF MinIO 备份 | |
| mc mirror --overwrite cos/your-cos-bucket hfminio/great-editor-backup | |
| # HF MinIO -> COS 恢复 | |
| mc mirror --overwrite hfminio/great-editor-backup cos/your-cos-bucket | |
| ``` | |
| ## 与 GreatEditor 的集成建议 | |
| 建议后续在 GreatEditor 中增加统一存储抽象: | |
| ```text | |
| STORAGE_PROVIDER=cos | s3 | r2 | hf_minio | |
| ``` | |
| 当腾讯 COS 空间不足时,临时切换: | |
| ```text | |
| STORAGE_PROVIDER=hf_minio | |
| ``` | |
| 当腾讯 COS 扩容完成后,执行 MinIO → COS 同步,再切回: | |
| ```text | |
| STORAGE_PROVIDER=cos | |
| ``` | |
| ## 重要风险 | |
| Hugging Face Space + MinIO 不等于正式云对象存储,存在以下风险: | |
| ```text | |
| 1. Space 可能重启、冷启动或被限流 | |
| 2. 单节点 MinIO 不具备高可用 | |
| 3. 大量公网图片访问可能不适合 HF 流量模型 | |
| 4. 需要自行负责备份、迁移和访问控制 | |
| 5. MinIO 许可证为 AGPLv3,商业闭源集成需注意合规 | |
| ``` | |
| 因此,本项目推荐作为备份、应急、MVP 低成本存储,不建议一开始替代正式 COS/R2。 |