6

用django-storage来存储Django的Media文件到S3服务

 3 years ago
source link: https://note.qidong.name/2019/07/django-storages-s3/
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
neoserver,ios ssh client

用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。



本作品采用 知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议 进行许可,详见本站版权声明

本站没有任何支持评论功能的计划。 如果你对本站的设计、内容、观点有什么意见,欢迎来信指正。


作者:匿蟒 邮箱:[email protected] 备案:闽ICP备15022549号


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK