python-django-fastdfs+Nginx的安装和配置
FastDFS文件系统
FastDFS文件系统简介:
- 是c语言编写的,是淘宝的架构师写的,存储淘宝的图片,后来开源了,
- fastDFS架构包括了,tracter server和storage server,tracter server负责管理,storage server负责完成文件上传和下载,
- tracter server作用是调度
- storage server作用是文件存储,
为什么选择这个fastDFS?
- 我们的项目中为什么选择这个fastDFS?而不使用django提供的,
- 之前我们保存一个文件通过浏览器上传一个文件,通过django的后台管理页面上传图片,按照我们默认的来说你点击上传,会给django服务器发一个请求,django服务器会默认把图片保存在默认的突破保存路径,media_root,
- 这样会有一个问题,硬盘的存储空间是有限的,对于一个电商来说图片是很多的,这样存储的图片就会受到django服务器所在硬盘容量的限制,所以电商网站,保存图片的时候就不能保存在django的服务器,要有一个单独的文件存储服务器,这里的文件存储服务器我们就选择了fastDFS,
- 还有一个特点,
- 用户a,上传一个123.txt,storage保存的时候不是就是这个文件名,而是对文件的内容取hash值,这是唯一值的,我们叫做文件的指纹,我们可以通过hash值唯一确定一个文件,再根据storage的ip等信息合成一个文件的名字,返回客户A,
- 用户b,上传了一个同样的文件,storage保持的时候会发现这个文件存在一个同样的文件,就不会把这个文件内容再保存一次了,就直接把文件对应的名字给你返回,所以同一个文件只存储了一份,
- fastDFS的优点:
- 解决了海量存储的问题,
- 存储容量扩展方便,只需要加storage服务就可以了,
- 解决了文件存储重复的文件,
- 这就是百度云的实现原理,就是对文件取指纹,所以百度云里面的5个T,是和别人共有的,
FastDFS文件系统上传文件流程:
- 流程描述:
- 通过客户端往fastDFS上传一个文件,
- 客户端去请求tracter server,tracter server它管理着storage server,
- storage server可以是一个集群,可以有很多,tracter server也可以是集群,
- tracter server它回去找到一个storage server存你的图片,
- 然后tracter server会把图片对应的storage地址ip和端口号,返回给客户端,
- 这样客户端就知道我的图片上传到哪里了,有了storage的ip和端口号,
- 客户端就会把文件上传到对应的storage位置,storage server保存文件之后会生成一个fileID会给客户端返回一个文件的名字,这就上传成功了。
fastDFS文件系统下载文件的流程:
- 文件下载流程:
- 客户端向去请求tracter server,然后tracter server看一下这个要下载的文件在哪个storage server上面,然后返回给客户端storage的ip和端口号,
- 有了storage的ip和端口号,客户端就会直接找对应的 storage 去获取对应的文件, storage server把文件返回给客户端,
fastDFS的安装和配置:
- 所需要的安装包:
- 搭建一个FastDFS环境,并增加Nginx模块
- 所用软件:
- fastdfs-master.zip
- fastdfs-nginx-module-master.zip
- fdfs_client-py-master.zip
- libfastcommon-master.zip
- nginx-1.8.1.tar.gz
- 这些软件我都放在了/usr/local/src
1,安装libfastcommon-master.zip
- cd /usr/local/src
- sudo unzip libfastcommon-master.zip
- cd libfastcommon-master
- sudo ./make.sh
- sudo ./make.sh install
2,安装:fastdfs-master.zip
- cd /usr/local/src
- sudo unzip fastdfs-master.zip
- cd fastdfs-master
- sudo ./make.sh
- sudo ./make.sh install
3,配置跟踪服务器tracker,
- sudo cp /etc/fdfs/tracker.conf.sample /etc/fdfs/tracker.conf
- /home/andy/fastdfs/tracker,创建这样的文件目录
- 编辑配置文件, sudo vi /etc/fdfs/tracker.conf
- 修改配置内容:base_path=/home/andy/fastdfs/tracker
4,配置存储服务器storage:
- cd /etc/fdfs
- sudo cp ./storage.conf.sample ./storage.conf
- /home/andy/fastdfs/storage,创建这样的文件目录
- 编辑配置文件, sudo vi /etc/fdfs/storage.conf
- 修改配置文件:base_path=/home/andy/fastdfs/storage
- store_path0=/home/andy/fastdfs/storage
- tracker_server=192.168.100.128:22122
fastDFS的启动:
1,启动tracker service
- 启动命令首选这个
- sudo service fdfs_trackerd start
- sudo service fdfs_storaged start
报错了:
Job for fdfs_trackerd.service failed because the control process exited with error code. See "systemctl status fdfs_trackerd.service" and "journalctl -xe" for details.
FDFSX跟踪服务器的作业失败,因为控制过程退出了错误代码。有关详细信息,请参阅“systemctl status fdfs_trackerd.service”和“journalctl-xe”。
使用另外的启动方法:
- 1、启动服务:
- #启动tracker server
- sudo fdfs_trackerd /etc/fdfs/tracker.conf start
- #启动storage server
- sudo fdfs_storaged /etc/fdfs/storage.conf start
- 输入ps -aux |grep fdfs,能看到服务已经启动了,
- root 3488 0.0 0.1 147760 1288 ? Sl 21:50 0:00 fdfs_trackerd /etc/fdfs/tracker.conf start
- root 3511 0.0 0.2 84356 2928 ? Sl 21:51 0:00 fdfs_storaged /etc/fdfs/storage.conf start
fastDFS的测试安装是否成功:
- 需要一个安装的客户端,所以我们需要把客户端的配置文件复制一份
- cd /etc/fdfs/
- sudo cp ./client.conf.sample ./client.conf
- 编辑这个配置文件,sudo vi client.conf
- base_path=/home/andy/fastdfs/tracker
- tracker_server=192.168.100.128:22122
上传文件测试:
- 安装完了fastdfs之后,fast给你提供了一个上传文件的命令,fdfs_upload_file
- Usage: fdfs_upload_file <config_file> <local_filename> [storage_ip:port] [store_path_index]
- 在桌面新建一个图片文件,fastfds.png
- 进入桌面路径,cd /home/桌面/
- 执行命令,/usr/bin/fdfs_upload_file /etc/fdfs/client.conf ./fastfds.png
- 返回一个码:group1/M00/00/00/wKhkgF3WnFeAOZaTAAV_23Ar72I345.png,这就是系统里面保持的文件id
- 文件就保持在这个路径,这是我们配置的路径,/home/andy/fastdfs/storage/
- 到这里就是这个fastdfs就是可以用的了
Nginx配合fastdfs的安装和配置:
- fastdfs用户量比较大的时候,获取数据是比较慢的,我们需要借助一个工具,就是Nginx,这也是一个web服务器,
- 可以配合fastdfs使用,在提供静态文件方面,效率很高,请求比较大的时候,能抗住压力,
- 上传文件我们使用fastdfs,但是获取文件的时候我们就借助Nginx了,
- 需要两个包:
- 我自己是把包放到了/usr/local/src
- nginx-1.8.1.tar.gz
- fastdfs-nginx-module-master.zip
- 一共安装两个包
- 安装步骤:
- 1,解压这个包:nginx-1.8.1.tar.gz,,,, sudo tar -zxvf nginx-1.8.1.tar.gz
- 2,解压这个包:fastdfs-nginx-module-master.zip,,,,sudo unzip fastdfs-nginx-module-master.zip
- 3,进入这个目录:cd nginx-1.8.1/
- 4,sudo ./configure --prefix=/usr/local/nginx/ --add-module=/usr/local/src/fastdfs-nginx-module-master/src
- --prefix,这是安装的时候的目录,
- --add-module,这是模块的绝对路径,
- 5,make,
- 报错了
- make: *** No rule to make target 'build', needed by 'default'。 停止。
- 解决方案:
- 安装openssl,安装包我自己放在了/usr/local/src下面了,
- tar -zxvf openssl-1.1.0j.tar.gz,只是解压就可以了,
- 安装:zlib,安装包我自己放在了/usr/local/src下面了,
- tar -zxvf zlib-1.2.11.tar.gz
- cd zlib-1.2.11
- ./configure
- make
- sudo make install
- 安装pcre,安装包我自己放在了/usr/local/src下面了,
- tar -zxvf pcre-8.35.tar.gz
- cd pcre-8.35
- ./configure
- make
- sudo make install
- 重新进入这个目录:cd /usr/local/srcnginx-1.8.1/
- 执行:sudo ./configure --prefix=/usr/local/nginx/ --with-openssl=/usr/local/src/openssl-1.1.0j --with-pcre=/usr/local/src/pcre-8.35 --with-zlib=/usr/local/src/zlib-1.2.11 --add-module=/usr/local/src/fastdfs-nginx-module-master/src
- 6,继续执行sudo make
- 又报错了:
- error: ‘FDFSHTTPParams {aka struct <anonymous>}’ has no member named ‘support_multi_range’
- (pContext->range_count > 1 && !g_http_params.support_multi_range))
- 下载另外一个模板版本:命名为:FastDFS-nginx-master-test.zip,安装包我自己放在了/usr/local/src下面了,
- 解压这个问题,
- 重新进入这个目录:cd /usr/local/srcnginx-1.8.1/
- 执行:sudo ./configure --prefix=/usr/local/nginx/ --with-openssl=/usr/local/src/openssl-1.1.0j --with-pcre=/usr/local/src/pcre-8.35 --with-zlib=/usr/local/src/zlib-1.2.11 --add-module=/usr/local/src/fastdfs-nginx-module-test/src
- 好了不报错了
- 7,sudo make install
- 成功了!!!我安装在了cd /usr/local/nginx/这个目录
Nginx的配置
- 进入目录:/usr/local/src/fastdfs-nginx-module-test/src
- 拷贝一份,sudo cp mod_fastdfs.conf /etc/fdfs/mod_fastdfs.conf
- 进入目录cd /etc/fdfs/
- 编辑配置文件:sudo vi mod_fastdfs.conf
- 几个地方,到时候看视频,或者找教程,这里不写了,
- 进入目录:/usr/local/src/fastdfs-5.05/conf
- 然后复制两个文件:
- sudo cp http.conf /etc/fdfs/http.conf
- sudo cp mime.types /etc/fdfs/mime.types
- 再进入:/usr/local/nginx/conf
- 修改配置文件,sudo vi nginx.conf
Nginx的启动:
- 启动Nginx,进入:/usr/local/nginx/sbin,输入命令,sudo ./nginx
- nginx启动报错:error while loading shared libraries
- 查看依赖库,这依据是非常很重要的,ldd $(which /usr/local/nginx/sbin/nginx)
- 先看看pcre有没有安装:pcre-config --version 如果安装了 会显示版本 没安装就啥都没有,我安装了,
- 我知道了版本的问题:fastdfs-master
- 关闭Nginx
- 又出了问题了:’关于Nginx启动成功,浏览器不能访问的解决办法,报404错误,
- 原来是一个配置的问题,就是
- listen 8888;
- server_name localhost;
- location ~/group([0-9])/ {
- root /fastdfs/storage/data;
- ngx_fastdfs_module;
- }
- ~这个,写成了-,了
- 关闭进程:
- sudo kill -9 进程号,
#########################################################
[-] Error: 10060 connect to 192.168.100.128:22122. 由于连接方在一段时间后没有正确答复或连接的主机没有反应,连接尝试失败。.
使用Windows中的pycharm的访问fastdfs的时候的,还是端口的问题
Ubuntufang防火墙的问题:
执行命令:开放端口,
- sudo apt-get install iptables
- sudo iptables -I INPUT -p tcp --dport 22122 -j ACCEPT
- sudo iptables -I INPUT -p tcp --dport 23000 -j ACCEPT
- sduo iptables-save
果然就是这个问题,哈哈哈哈!!!!!