用django-storage来存储Django的Media文件到S3服务
2019-07-17 22:26:32 +08 字数:637 标签: Django默认情况下,Django的FileField会把文件存到Media目录下,也就是本地文件系统。 然而在后端多实例情况下,这会出现明显的一致性缺陷。 因此需要把它放到独立的存储服务中,比如S3。
这里介绍如何用django-storages来转存Django的Media文件,到一个兼容S3服务的存储平台上。
安装 ¶
pip install django-storages[boto3]
其中,boto3是S3协议的官方SDK。
修改settings.py ¶
DEFAULT_FILE_STORAGE = 'storages.backends.s3boto3.S3Boto3Storage'
AWS_DEFAULT_ACL = 'public-read'
AWS_ACCESS_KEY_ID = 'access'
AWS_SECRET_ACCESS_KEY = 'secretkey'
AWS_STORAGE_BUCKET_NAME = 'bucket'
AWS_AUTO_CREATE_BUCKET = True
AWS_S3_ENDPOINT_URL = 'http://localhost:9000'
其中:
DEFAULT_FILE_STORAGE
是配置文件存储方式。这里配置了S3服务,需要使用boto3。AWS_*
系列是配置S3服务的关键信息。
调整docker-compose.yaml ¶
调整docker-compose.yaml
,添加minio
作为s3服务。
version: "3"
services:
server:
build: .
image: your-server:latest
ports:
- 8000:8000
restart: unless-stopped
minio:
image: minio/minio:RELEASE.2018-03-30T00-38-44Z
ports:
- 9000:9000
environment:
- MINIO_ACCESS_KEY=access
- MINIO_SECRET_KEY=secretkey
volumes:
- minio-data:/data
command: server /data
restart: unless-stopped
volumes:
minio-data:
其中,server
部分仅供参考,minio
部分是开发调试时用的S3服务。
在真正对外提供服务的配置中,还会加上Nginx、PostgreSQL等更多组件。
参考 ¶
MinIO 是一个基于Apache License v2.0开源协议的对象存储服务。 它兼容亚马逊S3云存储服务接口,非常适合于存储大容量非结构化的数据, 例如图片、视频、日志文件、备份数据和容器/虚拟机镜像等。 而一个对象文件可以是任意大小,从几kb到最大5T不等。
MinIO是一个非常轻量的服务,可以很简单的和其他应用的结合,类似NodeJS、Redis或者MySQL。