MinIO图床上传工具 Docker部署指南
镜像信息
- 镜像名称: minio-image-uploader:latest
- 镜像文件: minio-image-uploader.tar
- 镜像大小: 161MB
- 基础镜像: node:18-alpine
- 更新时间: 2026-01-30
快速部署
1. 加载镜像
1
| docker load -i minio-image-uploader.tar
|
2. 运行容器
1 2 3 4 5 6 7 8 9 10 11
| docker run -d \ --name minio-uploader \ -p 3000:3000 \ -e MINIO_ENDPOINT=localhost \ -e MINIO_PORT=9000 \ -e MINIO_ACCESS_KEY=minioadmin \ -e MINIO_SECRET_KEY=minioadmin \ -e MINIO_BUCKET=images \ -e CUSTOM_DOMAIN=http://localhost:9000 \ -e UPLOAD_PREFIX=images/ \ minio-image-uploader:latest
|
3. 访问应用
打开浏览器访问: http://localhost:3000
环境变量配置
| 变量名 |
描述 |
默认值 |
示例 |
| MINIO_ENDPOINT |
MinIO服务地址 |
localhost |
192.168.1.100 |
| MINIO_PORT |
MinIO服务端口 |
9000 |
9000 |
| MINIO_ACCESS_KEY |
MinIO访问密钥 |
minioadmin |
your-access-key |
| MINIO_SECRET_KEY |
MinIO秘密密钥 |
minioadmin |
your-secret-key |
| MINIO_BUCKET |
存储桶名称 |
images |
my-images |
| MINIO_USE_SSL |
是否使用SSL |
false |
true |
| CUSTOM_DOMAIN |
自定义域名 |
http://localhost:9000 |
https://cdn.example.com |
| FILE_NAME_TEMPLATE |
文件命名模板 |
{timestamp}.{extName} |
{year}/{month}/{day}/{md5}.{extName} |
| UPLOAD_PREFIX |
默认目录前缀 |
无 |
images/ 或 gallery/2026/ |
| PORT |
应用端口 |
3000 |
3000 |
功能特性
✅ 图片上传
- 支持拖拽上传
- 支持多文件同时上传
- 支持 JPEG, PNG, GIF, WebP 格式
- 最大文件大小:10MB
✅ 文件管理
- 灵活的文件命名规则(时间戳、MD5、日期结构等)
- 支持自定义目录前缀
- 智能重复文件处理(自动重命名、跳过、覆盖)
- 环境变量默认配置
✅ 系统设置
- 动态MinIO连接配置(支持运行时修改)
- 配置持久化(重启容器后设置不丢失)
- 连接测试功能
- 设置导入/导出
✅ Web界面
- 响应式设计
- 实时上传进度显示
- 图片预览和管理
- 系统信息监控
新版本改进
🎉 配置持久化功能
- 问题:之前版本在容器重启后会丢失系统设置
- 解决:新版本使用
config.json 文件保存动态配置
- 效果:通过Web界面修改的MinIO连接参数会永久保存
🎯 环境变量增强
1 2 3 4 5 6 7
| -e UPLOAD_PREFIX=images/ -e UPLOAD_PREFIX=gallery/$(date +%Y)/
-e FILE_NAME_TEMPLATE={timestamp}.{extName} -e FILE_NAME_TEMPLATE={year}/{month}/{day}/{md5}.{extName}
|
📦 镜像优化
- ✅ 移除了开发文件(.claude/、.md、test-)
- ✅ 优化了文件结构和构建过程
- ✅ 更小的镜像体积和更快的启动速度
使用 Docker Compose
创建 docker-compose.yml:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39
| version: '3.8' services: minio-uploader: image: minio-image-uploader:latest container_name: minio-uploader ports: - "3000:3000" environment: - MINIO_ENDPOINT=minio - MINIO_PORT=9000 - MINIO_ACCESS_KEY=minioadmin - MINIO_SECRET_KEY=minioadmin - MINIO_BUCKET=images - MINIO_USE_SSL=false - CUSTOM_DOMAIN=http://localhost:9000 - FILE_NAME_TEMPLATE={timestamp}.{extName} - UPLOAD_PREFIX=uploads/ volumes: - ./config:/app/config.json depends_on: - minio restart: unless-stopped
minio: image: quay.io/minio/minio:latest container_name: minio ports: - "9000:9000" - "9001:9001" environment: - MINIO_ROOT_USER=minioadmin - MINIO_ROOT_PASSWORD=minioadmin command: server /data --console-address ":9001" volumes: - minio_data:/data restart: unless-stopped
volumes: minio_data:
|
启动:
配置持久化
方案1:使用内置配置文件(推荐)
1 2
| docker run -d --name minio-uploader -p 3000:3000 minio-image-uploader:latest
|
方案2:挂载配置文件
1 2 3 4 5 6
| docker run -d \ --name minio-uploader \ -p 3000:3000 \ -v ./app-config.json:/app/config.json \ minio-image-uploader:latest
|
健康检查
容器提供健康检查端点:
1 2 3 4 5 6 7 8 9 10 11
| docker ps
docker logs minio-uploader
curl http://localhost:3000/health
curl http://localhost:3000/api/config
|
数据流和存储
1 2 3
| 用户上传 → Docker容器(minio-uploader) → MinIO服务器 → 文件存储 ↓ config.json (配置持久化)
|
- 文件存储:直接存储在MinIO对象存储服务器
- 配置存储:保存在容器内的config.json文件
- 应用本身:无状态,可以随时重启
API端点
| 端点 |
方法 |
描述 |
/api/upload/direct |
POST |
单文件上传 |
/api/upload/multiple |
POST |
批量上传 |
/api/upload/picgo |
POST |
PicGo兼容接口 |
/api/images |
GET |
图片列表 |
/api/config |
GET |
系统配置 |
/api/update-minio-config |
POST |
更新MinIO配置 |
/api/test-minio |
POST |
测试MinIO连接 |
/health |
GET |
健康检查 |
故障排除
1. 连接失败
1 2 3 4 5 6 7 8
| docker logs minio
docker exec minio-uploader ping minio
netstat -tulpn | grep :3000
|
2. 配置丢失
- ✅ 已修复:新版本支持配置持久化
- 如果仍有问题,检查容器写入权限
- 可选择挂载配置文件到主机目录
3. 上传失败
1 2 3 4 5 6 7 8
| docker logs -f minio-uploader
docker exec minio mc admin info local
curl -X POST -F "image=@test.jpg" http://localhost:3000/api/upload/direct
|
4. 性能优化
1 2 3 4 5
| docker run -m 512m minio-image-uploader:latest
docker run --cpus="0.5" minio-image-uploader:latest
|
高级用法
1. 生产环境部署
1 2 3 4 5 6 7 8 9 10
| docker run -d \ --name minio-uploader-prod \ --restart=always \ -p 80:3000 \ -e NODE_ENV=production \ -e MINIO_ENDPOINT=minio.example.com \ -e MINIO_USE_SSL=true \ -e CUSTOM_DOMAIN=https://cdn.example.com \ -v /var/log/minio-uploader:/app/logs \ minio-image-uploader:latest
|
2. 负载均衡
1 2 3 4 5 6 7 8 9 10 11 12 13 14
| services: minio-uploader-1: image: minio-image-uploader:latest ports: ["3001:3000"] minio-uploader-2: image: minio-image-uploader:latest ports: ["3002:3000"] nginx: image: nginx:alpine ports: ["80:80"]
|
安全建议
访问控制
1 2
| ufw allow from 192.168.1.0/24 to any port 3000
|
密钥管理
1 2 3 4
| echo "MINIO_ACCESS_KEY=your-secure-key" > .env echo "MINIO_SECRET_KEY=your-secure-secret" >> .env docker run --env-file .env minio-image-uploader:latest
|
HTTPS部署
- 使用反向代理(Nginx/Traefik)
- 配置SSL证书
- 强制HTTPS重定向
版本更新
1 2 3 4 5 6 7 8 9 10 11 12 13
| docker cp minio-uploader:/app/config.json ./config-backup.json
docker stop minio-uploader
docker load -i minio-image-uploader-new.tar
docker run -d --name minio-uploader-new \ -v ./config-backup.json:/app/config.json \ minio-image-uploader:latest
|
支持
- 文档:查看项目README和源代码
- 日志:
docker logs -f minio-uploader
- 配置:访问 http://localhost:3000 → 系统设置
- API测试:使用curl或Postman测试各个端点
如有问题,请查看容器日志或提交Issue。