django项目之集成FastDFS 分布式存储

一、准备可以联网的ubuntu系统或者是Centos系统至少一台

二、安装docker

  centos安装docker详见链接:https://www.cnblogs.com/shangguanruoling/p/11799597.html

  如下是关于ubuntu安装docker:

sudo apt-get update    #更新ubuntu的apt源索引

sudo dpkg --configure -a        

sudo apt-get install apt-transport-https ca-certificates curl software-properties-common   #安装包允许apt通过HTTPS使用仓库curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -    #  添加Docker官方GPG key

sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable"    #设置Docker稳定版仓库sudo apt-get update   #添加仓库后,更新ubuntu索引源sudo apt-get install docker-ce  #安装docker社区版sudo docker search nginx  #检查docker是否安装并启动

三、FastDFS 安装配置:

FastDFS 架构包括 Tracker serverStorage server。客户端请求 Tracker server 件上传、下载文 ,通过 Tracker server 调度最终由 Storage server 完成文件上传和下载。

  • Tracker server 作用是负载均衡和存储调度,通过 Tracker server 在文件上传时可以根据一些 策略算法找到 Storage server 提供文件上传服务。可以将 tracker 称为追踪服务器调度服务器
  • Storage server 作用是文件存储,客户端上传的文件最终存储在 Storage 服务器上, Storage Serve利用操作系统 的文件系统来管理文件。可以将 storage 称为存储服务器

  1、再容器中安装配置FastDFS:

sudo docker search fastdfs    # 查找fastdfs镜像sudo docker pull season/fastdfs   #拉取镜像, 后面可以跟:1.2,这个版本是集成了nginx的,最新版的没用集成nginx### 如果有下载好的镜像,可以直接导入, 使用如下的命令:sudo docker load -i 文件路径/season_fastdfs.tar.gz

  2、运行tracker:

1、 查看fastdfs端口是否被占用:
sudo netstat -nlpt | grep 22122
2、创建一个tracker的运行目录:
cd /data01/fastdfs/
mkdir ./tracker_data/
3、启动tracker容器sudo docker run -itd --name tracker -v /data01/fastdfs/tracker_data:/fastdfs/tracker/data --net=host season/fastdfs tracker  ### --net = host 指的是告诉 Docker 不要将容器网络放到隔离的名字空间中,此时容器使用的是本地的网络4、如果想要停止,可以用:sudo docker container stop tracker5、如果想要重启已经停止的容器,可以用:sudo docker container start tracker

  3、运行storage:

1、storage不能运行再127.0.0.1上
cd /data01/fastdfs/
mkdir ./storage_data/     # 创建storage 的运行目录
mkdir ./store_path/        # 创建storage的数据存储目录
2、启动storage:
sudo docker run -itd --network=host --name storage -v /data01/fastdfs/storage_data:/fastdfs/storage/data -v /data01/fastdfs/store_path:/fastdfs/store_path  -e TRACKER_SERVER:本机ip:22122 season/fastdfs storage

  4、调整配置

  指定storage服务器注册到trakcer服务器的ip地址是没有生效的,所以我们需要手动设置storage的配置文件

  进入storage容器下,将fdfs_conf目录下的storage.conf文件拷贝到当前用户家目录下

sudo docker cp storage:/fdfs_conf/storage.conf ~/

  编辑文件,找到tracker_server配置项,修改为本地IP地址

sudo vim storage.conf
:set nu          # 显示行号
:114             # 跳转到111行
tracker_server=192.168.252.133:22122

  将编辑好的文件再从本机拷贝到容器storage内部,重启storage和tracker即可

四、FastDFS 客户端:

pip install https://github.com/JaceHo/fdfs_client-py/archive/master.zip
pip install mutagen
pip install requests

  使用FastDFS客户端,需要有配置文件。我们在renranapi/utils目录下新建fastdfs目录,创建 客户端配置文件client.conf放到这个目录中。

# connect timeout in seconds
# default value is 30s
connect_timeout=30

# network timeout in seconds
# default value is 30s
network_timeout=120

# the base path to store log files
base_path=/home/moluo/Desktop/renran/renranapi/logs

# tracker_server can ocur more than once, and tracker_server format is
#  "host:port", host can be hostname or ip address
tracker_server=192.168.252.133:22122

#standard log level as syslog, case insensitive, value list:
### emerg for emergency
### alert
### crit for critical
### error
### warn for warning
### notice
### info
### debug
log_level=info

# if use connection pool
# default value is false
# since V4.05
use_connection_pool = false

# connections whose the idle time exceeds this time will be closed
# unit: second
# default value is 3600
# since V4.05
connection_pool_max_idle_time = 3600

# if load FastDFS parameters from tracker server
# since V4.05
# default value is false
load_fdfs_parameters_from_tracker=false

# if use storage ID instead of IP address
# same as tracker.conf
# valid only when load_fdfs_parameters_from_tracker is false
# default value is false
# since V4.05
use_storage_id = false

# specify storage ids filename, can use relative or absolute path
# same as tracker.conf
# valid only when load_fdfs_parameters_from_tracker is false
# since V4.05
storage_ids_filename = storage_ids.conf

#HTTP settings
http.tracker_server_port=80

#use "#include" directive to include HTTP other settiongs
##include http.conf

  上传文件需要先创建fdfs_client.client.Fdfs_client的对象,并指明配置文件,如

# 进入django的终端下测试  python manage.py shell
from fdfs_client.client import Fdfs_client
client = Fdfs_client(‘renranapi/utils/fastdfs/client.conf‘)

  client对象的操作方法文档:https://github.com/JaceHo/fdfs_client-py

五、自定义django文件存储系统

  学习Django框架的文件存储在本地,我们接下来需要将文件保存到FastDFS服务器上,所以需要自定义文件存储系统。

  官方文档说明,指出自定义文件存储系统的方法如下:

1)需要继承自django.core.files.storage.Storage,如

from django.core.files.storage import Storage

class FastDFSStorage(Storage):
    ...

2)支持Django不带任何参数来实例化存储类,也就是说任何设置都应该从django.conf.settings中获取

from django.conf import settings
from django.core.files.storage import Storage

class FasfDFSStorage(Storage):
    def __init__(self, base_url=None, client_conf=None):
        if base_url is None:
            base_url = settings.FDFS_URL
        self.base_url = base_url
        if client_conf is None:
            client_conf = settings.FDFS_CLIENT_CONF
        self.client_conf = client_conf

3)存储类中必须实现_open()_save()方法,以及任何后续使用中可能用到的其他方法。

4)需要为存储类添加django.utils.deconstruct.deconstructible装饰器

  示例:

from django.core.files.storage import Storage
from fdfs_client.client import Fdfs_client
from django.conf import settings

class FastDFSStorage(Storage):
    def __init__(self, base_url=None, client_conf=None):
        """
       初始化
       :param base_url: 用于构造图片完整路径使用,图片服务器的域名
       :param client_conf: FastDFS客户端配置文件的路径
        """
        if base_url is None:
            base_url = settings.FDFS_URL
        self.base_url = base_url
        if client_conf is None:
            client_conf = settings.FDFS_CLIENT_CONF
        self.client_conf = client_conf

    def _open(self, name=None):
        """打开文件"""
        pass

    def _save(self, name, content):
        """
        在FastDFS中保存文件
        :param name: 传入的文件名
        :param content: 文件内容
        :return: 保存到数据库中的FastDFS的文件名
        """
        client = Fdfs_client(self.client_conf)
        ret = client.upload_by_buffer(content.read())
        if ret.get("Status") != "Upload successed.":
            raise Exception("upload file failed")
        file_name = ret.get("Remote file_id")
        return file_name

    def url(self, name):
        """
        返回文件的完整URL路径
        :param name: 数据库中保存的文件名
        :return: 完整的URL
        """
        return self.base_url + name

    def exists(self, name):
        """
        判断文件是否存在,FastDFS可以自行解决文件的重名问题
        所以此处返回False,告诉Django上传的都是新文件
        :param name:  文件名
        :return: False
        """
        return False

5)再django中配置自定义存储类

# django文件存储
DEFAULT_FILE_STORAGE = ‘renranapi.utils.fastdfs.fdfs_storage.FastDFSStorage‘

# FastDFS
FDFS_URL = ‘http://本机ip:8888/‘  # 访问图片的路径域名 ip地址修改为自己机器的ip地址
FDFS_CLIENT_CONF = os.path.join(BASE_DIR, ‘utils/fastdfs/client.conf‘)

原文地址:https://www.cnblogs.com/shangguanruoling/p/12186100.html

时间: 2024-08-30 13:08:15

django项目之集成FastDFS 分布式存储的相关文章

django项目中使用FastDFS

FastDFS客户端与自定义文件存储系统 1. FastDFS的Python客户端 python版本的FastDFS客户端使用说明参考https://github.com/jefforeilly/fdfs_client-py 安装 安装提供给大家的fdfs_client-py-master.zip到虚拟环境中 pip install fdfs_client-py-master.zippip install mutagenpip isntall requests 使用 使用FastDFS客户端,需

Django项目实践4 - Django网站管理(后台管理员)

http://blog.csdn.net/pipisorry/article/details/45079751 上篇:Django项目实践3 - Django模型 Introduction 对于某一类站点, 管理界面 是基础设施中很重要的一部分. 这是以网页和有限的可信任管理者为基础的界面,它能够让你加入,编辑和删除站点内容. 常见的样例: 你能够用这个界面公布博客,后台的站点管理者用它来润色读者提交的内容,你的客户用你给他们建立的界面工具更新新闻并公布在站点上.这些都是使用管理界面的样例. 创

如何使用 Docker 组件开发 Django 项目?

Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的 Linux 机器上,也可以实现虚拟化.自2013年发布以来,无论是从 Github 上的代码活跃度,还是 Redhat 在 RHEL6.5 中集成对 Docker 的支持, 就连 Google 的 Compute Engine 也支持 Docker 在其之上运行.火热程度可见一斑! 本篇文章详细介绍了如何通过 Docker Machine 「系统配置」和 Docker Comp

一 Django框架介绍——用pycharm创建Django项目

Django框架介绍 Django是一个开放源代码的Web应用框架,由Python写成.采用了MVC的软件设计模式,即模型M,视图V和控制器C.它最初是被开发来用于管理劳伦斯出版集团旗下的一些以新闻内容为主的网站的,即是CMS(内容管理系统)软件.并于2005年7月在BSD许可证下发布. 这套框架是以比利时的吉普赛爵士吉他手Django Reinhardt来命名的. 更多Django框架http://code.ziqiangxuetang.com/django/django-qrcode.htm

Linux 下部署Django项目

Linux 下部署Django项目 说明:本文所使用的环境为CentOS 6+Python2.7+Django1.11 安装Django.Nginx和uWSGI 1.确定已经安装了2.7版本的Python: 2.安装python-devel yum install python-devel 3.安装uwsgi pip install uwsgi 测试uwsgi是否能正常工作 1.新建一个index.py: # index.py def application(env, start_respons

spring boot(十八)集成FastDFS文件上传下载

上篇文章介绍了如何使用Spring Boot上传文件,这篇文章我们介绍如何使用Spring Boot将文件上传到分布式文件系统FastDFS中. 这个项目会在上一个项目的基础上进行构建. 1.pom包配置 我们使用Spring Boot最新版本1.5.9.jdk使用1.8.tomcat8.0. <dependency> <groupId>org.csource</groupId> <artifactId>fastdfs-client-java</art

SpringBoot2.0集成FastDFS

SpringBoot2.0集成FastDFS 前两篇整体上介绍了通过 Nginx 和 FastDFS 的整合来实现文件服务器.但是,在实际开发中对图片或文件的操作都是通过应用程序来完成的,因此,本篇将介绍 Spring Boot 整合 FastDFS 客户端来实现对图片/文件服务器的访问. 如果有不了解 FastDFS 的读者可以先浏览<CentOS7 安装FastDFS分布式文件系统>或是另行查阅网上相关资料. 一.整合编码 项目整体的代码结构图如下: 添加依赖 <project xm

Linux下FastDFS分布式存储-总结及部署记录

https://www.cnblogs.com/kevingrace/p/8471827.html 一.分布式文件系统介绍分布式文件系统:Distributed file system, DFS,又叫做网络文件系统:Network File System.一种允许文件通过网络在多台主机上分享的文件系统,可让多机器上的多用户分享文件和存储空间.特点:在一个分享的磁盘文件系统中,所有节点对数据存储区块都有相同的访问权,在这样的系统中,访问权限就必须由客户端程序来控制.分布式文件系统可能包含的功能有:

K8S实战-构建Django项目-06-持续构建

今天是K8S实战-构建Django项目,最后一讲.前面5将我们一步步通过k8s构建了一个django项目,通过考虑实际生产环境,我们添加了初始化功能,自动化构建功能,共享存储,数据加密,监控方案,日志方案.从无到有,我们一同走了一遍.最后一讲,我将带着大家利用现有的资源实现最简单的持续构建. 持续构建 设计 gitlab+jenkins+node+dockerfile+k8s gitlab作为仓库,jenkins设置触发器,node作为执行节点,dockerfile生产镜像,k8s构建资源. 实