python-django-fastdfs+Nginx的安装和配置_20191122

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

果然就是这个问题,哈哈哈哈!!!!!