在 Django 中集成 MinIO 有两种主流方案,分别对应两个第三方库:
- django-storages(推荐,社区活跃,S3 兼容)
- django-minio-storage(专用封装,配置简单)
下面给出两种方式的完整步骤,你按自己喜好挑一种即可。
方案 A:使用 django-storages(S3Boto3 后端)
安装依赖
bashpip install django-storages boto3settings.py 配置
pythonINSTALLED_APPS += ['storages'] # 让 Django 把文件/静态文件都交给 S3Boto3Storage DEFAULT_FILE_STORAGE = 'storages.backends.s3boto3.S3Boto3Storage' STATICFILES_STORAGE = 'storages.backends.s3boto3.S3Boto3Storage' # MinIO 连接信息(与 AWS S3 字段兼容) AWS_S3_ENDPOINT_URL = 'http://<minio_test-ip>:9000' # 带端口 AWS_ACCESS_KEY_ID = 'minioadmin' # MinIO AK AWS_SECRET_ACCESS_KEY = 'minioadmin' # MinIO SK AWS_STORAGE_BUCKET_NAME = 'bucket' # 需提前建好 AWS_S3_ADDRESSING_STYLE = 'path' # MinIO 要求 path-style AWS_S3_REGION_NAME = 'us-east-1' # 任意字符串即可 AWS_S3_USE_SSL = False # 本地/内网关掉 HTTPS AWS_QUERYSTRING_AUTH = False # 公开访问可设为 False创建存储桶
登录 MinIO Console(http://minio-ip:9001)→ Create Bucket → 名称与 AWS_STORAGE_BUCKET_NAME 一致。收集静态文件
bashpython manage.py collectstatic成功后可在 MinIO 看到
static/…目录。上传/删除文件代码示例
pythonfrom django.core.files.storage import default_storage # 上传 with default_storage.open('media/demo.txt', 'wb') as f: f.write(b'hello MinIO') # 删除 if default_storage.exists('media/demo.txt'): default_storage.delete('media/demo.txt')文件会自动出现在 MinIO 的
media/路径下 。
方案 B:使用 django-minio-storage(专用库)
安装
bashpip install django-minio_test-storagesettings.py 配置
pythonINSTALLED_APPS += ['django_minio_storage'] MINIO_STORAGE_ENDPOINT = 'xx.xx.xx.xx:9000' MINIO_STORAGE_ACCESS_KEY = 'minio_test' MINIO_STORAGE_SECRET_KEY = 'minio123' MINIO_STORAGE_USE_HTTPS = False MINIO_STORAGE_MEDIA_BUCKET_NAME = 'python-media' MINIO_STORAGE_STATIC_BUCKET_NAME= 'python-static' MINIO_STORAGE_AUTO_CREATE_MEDIA_BUCKET = True # 桶不存在时自动建 MINIO_STORAGE_AUTO_CREATE_STATIC_BUCKET = True DEFAULT_FILE_STORAGE = 'minio_storage.storage.MinioMediaStorage' STATICFILES_STORAGE = 'minio_storage.storage.MinioStaticStorage'运行 collectstatic / 上传文件即可,逻辑与方案 A 相同 。
常见问题小贴士
- 端口占用:MinIO API 默认 9000,Console 默认 9001,注意防火墙放行。
- 桶已存在报错:关闭
AUTO_CREATE_*_BUCKET或提前手动建桶。 - URL 无法访问:确认
AWS_QUERYSTRING_AUTH=False且桶策略允许 public read,或使用get_presigned_url生成临时链接 。 - HTTPS 自签名证书:若开启
USE_HTTPS=True,需在客户端信任证书或关闭 SSL 校验。