Linux-部署FastDFS分布式文件系统

一、安装 fastdfs 依赖包

  1. 解压缩 libfastcommon-master.zip
  2. 进入到 libfastcommon-master 的目录中
  3. 执行 ./make.sh
  4. 执行 sudo ./make.sh install

二、安装 fastdfs

  1. 解压缩 fastdfs-master.zip
  2. 进入到 fastdfs-master 目录中
  3. 执行 ./make.sh
  4. 执行 sudo ./make.sh install

三、配置跟踪服务器tracker

  1. 执行sudo cp /etc/fdfs/tracker.conf.sample /etc/fdfs/tracker.conf
  2. 在 /home/python/ 目录中创建目录 fastdfs/tracker,mkdir –p /data/home/silence/FastDFS/fastdfs/tracker
  3. 编辑 /etc/fdfs/tracker.conf 配置文件 sudo vim /etc/fdfs/tracker.conf,修改 base_path=/data/home/silence/FastDFS/fastdfs/tracker

四、配置存储服务器 storage

1、执行sudo cp /etc/fdfs/storage.conf.sample /etc/fdfs/storage.conf

2、在 /home/python/fastdfs/ 目录中创建目录 storage mkdir –p /data/home/silence/FastDFS/fastdfs/storage

3、编辑/etc/fdfs/storage.conf配置文件 sudo vim /etc/fdfs/storage.conf,修改内容:

1
2
3
4
5
base_path=/data/home/silence/FastDFS/fastdfs/storage

store_path0=/data/home/silence/FastDFS/fastdfs/storage

tracker_server=自己ubuntu虚拟机的ip地址:22122

五、启动 tracker 和 storage 服务

启动 tracker 服务:sudo service fdfs_trackerd start

启动 storage 服务:sudo service fdfs_storaged start

注意:这是可能报错 Failed to start fdfs_trackerd.service: Unit fdfs_trackerd.service not foundFailed to start fdfs_trackerd.service: Unit fdfs_trackerd.service not found,只需重启虚拟机再次执行以上指令即可。

六、测试是否安装成功

1、sudo cp /etc/fdfs/client.conf.sample /etc/fdfs/client.conf

2、编辑 /etc/fdfs/client.conf 配置文件 sudo vim /etc/fdfs/client.conf

​ 修改内容:

1
2
3
base_path=/data/home/silence/FastDFS/fastdfs/tracker

tracker_server=自己ubuntu虚拟机的ip地址:22122

3、上传文件测试:

fdfs_upload_file /etc/fdfs/client.conf 要上传的图片文件

说明:fdfs_upload_file 是上传文件的指令;上传时要指定客户端的配置文件;然后接待上传图片的路径。

例如:fdfs_upload_file /etc/fdfs/client.conf /data/home/silence/image/test.jpg

执行指令后会返回类似 group1/M00/00/00/wKhQgV7EpkiAJy0yAAKdSYpwz7Q877.jpg 的文件 id,则说明文件上传成功。

最后该文件以 group1/M00/00/00/wKhQgV7EpkiAJy0yAAKdSYpwz7Q877.jpg 的名字保存在/data/home/silence/FastDFS/fastdfs/storage/data中。

七、安装 nginx(web服务器)以及 fastdfs_nginx_module

1、解压缩 nginx-1.8.1.tar.gz

2、解压缩 fastdfs_nginx_module

3、进入 nginx-1.8.1 目录中

4、执行sudo ./configure --prefix=/usr/local/nginx/ --add-module=/data/home/silence/Nginx/fastdfs-nginx-module/src --with-http_ssl_module

sudo make

sudo make install

5、sudo cp /data/home/silence/Nginx/fastdfs-nginx-module/src/mod_fastdfs.conf /etc/fdfs/mod_fastdfs.conf

6、sudo vi /etc/fdfs/mod_fastdfs.conf,修改内容:

1
2
3
4
connect_timeout = 10
tracker_server = 192.168.80.129
url_have_group_name = true
store_path0 = /data/home/silence/FastDFS/fastdfs/storage

7、sudo cp /data/home/silence/FastDFS/fastdfs-master/fastdfs-master/conf/http.conf /etc/fdfs/http.conf

8、sudo cp /data/home/silence/FastDFS/fastdfs-master/fastdfs-master/conf/mime.types /etc/fdfs/mime.types

9、sudo vi /usr/local/nginx/conf/nginx.conf,在 http 部分中添加配置信息如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
server{
listen 8888 ssl; #通过8888端口访问nginx服务器
server_name localhost;

# 配置 CORS 跨域
add_header 'Access-Control-Allow-Origin' '*';
add_header 'Access-Control-Allow-Methods' 'GET, POST, OPTIONS';
add_header 'Access-Control-Max-Age' 1728000;

# 配置 https
    ssl_certificate /home/silence/Desktop/CA/certification.crt;
ssl_certificate_key /home/silence/Desktop/CA/certification.key;
ssl_session_timeout 5m;
ssl_ciphers HIGH:!aNULL:!MD5;
ssl_session_cache shared:SSL:1m;
ssl_prefer_server_ciphers on;

location ~/group[0-9]/ {
ngx_fastdfs_module;
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
}

10、启动 nginx

sudo /usr/local/nginx/sbin/nginx

这时,可能会报错:

1
2
3
4
5
src/core/ngx_murmurhash.c:37:11: error: this statement may fall through [-Werror=implicit-fallthrough=]
h ^= data[2] << 16;

src/core/ngx_murmurhash.c:39:11: error: this statement may fall through [-Werror=implicit-fallthrough=]
h ^= data[1] << 8;

这是由于将警告当成错误处理了。

解决方法:

进入到 nginx-1.8.1目录下(解压的目录),找到当前目录下找到 objs 文件夹,并进入,打开文件 Makefile,找到有一下内容的这行:

1
CFLAGS =  -pipe  -O -W -Wall -Wpointer-arith -Wno-unused-parameter -Werror -g

-Werror 去掉即可。

11、停止 nginx 服务

sudo /usr/local/nginx/sbin/nginx -s stop

使用 python 客户端上传测试

1、下载 fdfs_client-py-master.zip

2、进入 fdfs_client-py-master.zip 所在目录,执行 pip3 install fdfs_client-py-master.zip。

3、执行 python3 进入python

1
2
3
>>> from fdfs_client.client import Fdfs_client
>>> client = Fdfs_client("/etc/fdfs/client.conf")
>>> ret = client.upload_by_filename('/home/silence/Desktop/wallhaven-12.png')

返回如下信息:

1
2
3
getting connection
<fdfs_client.connection.Connection object at 0x7fb428f3a1d0>
<fdfs_client.fdfs_protol.Tracker_header object at 0x7fb428f3a198>

说明上传成功。

查看上传图片详细信息:

1
2
3
4
>>> ret

#返回如下信息
{'Group name': 'group1', 'Remote file_id': 'group1/M00/00/00/wKhQgV7I3cqACypJAE4PFW4tC7Y112.png', 'Status': 'Upload successed.', 'Local file name': '/home/silence/Desktop/wallhaven-12.png', 'Uploaded size': '4.00MB', 'Storage IP': '192.168.80.129'}

注意:

导入 fdfs 包时可能会报错:ModuleNotFoundError: No module named 'mutagen',这时,安装 mutagen:

1
pip install mutagen

再次导入 fdfs,若报错 ModuleNotFoundError: No module named 'mutagen._compat'

查看源码可知,_compat 文件不在 mutagen 文件夹下,而是在 mutagen/_senf 路径下,只需要修改 fdfs_client/utils.py:

1
2
3
# from mutagen._compat import StringIO

from mutagen._senf._compat import StringIO

接下来可能还会报错:ModuleNotFoundError: No module named 'requests',再 pip 安装该包即可。