libfastcommon是从 FastDFS 和 FastDHT 中提取出来的公共 C 函数库,基础环境,安装即可
https://github.com/happyfish100/libfastcommon/archive/V1.0.36.tar.gz
//下载libfastcommon
# wget https://github.com/happyfish100/libfastcommon/archive/V1.0.36.tar.gz
//也可以通过git直接从github上克隆下来
# git clone https://github.com/happyfish100/libfastcommon.git
//新建目录
# mkdir -p /usr/local/libfastcommon
//将下载V1.0.36.tar.gz压缩包拷贝到新建的目录下然后解压
# cp V1.0.36.tar.gz /usr/local/libfastcommon
# cd /usr/local/libfastcommon
# tar -zxvf V1.0.36.tar.gz
# cd libfastcommon-1.0.36
//编译、安装
# ./make.sh
# ./make.sh install
https://github.com/happyfish100/fastdfs/releases
https://github.com/happyfish100/fastdfs/archive/V5.11.tar.gz
//下载FastDFS
# wget https://github.com/happyfish100/fastdfs/archive/V5.11.tar.gz
//新建目录
# mkdir -p /usr/local/fastdfs
//将下载好的V5.11.tar.gz文件拷贝到新建的目录中然后解压
# cp V5.11.tar.gz /usr/local/fastdfs
# cd /usr/local/fastdfs
# tar -zxvf V5.11.tar.gz
# cd fastdfs-5.11
//编译、安装
# ./make.sh
# ./make.sh install
从上面的安装过程中,我们可以看到libfastcommon.so和libfdfsclient.so文件都安装到了/usr/lib64/目录下,但是FastDFS主程序设置的lib目录是/usr/local/lib,所以需要创建软链接。
// 创建libfastcommon.so软链接
# ln -s /usr/lib64/libfastcommon.so /usr/local/lib/libfastcommon.so
// 创建libfdfsclient.so软链接
# ln -s /usr/lib64/libfdfsclient.so /usr/local/lib/libfdfsclient.so
FastDFS 服务脚本设置的 bin 目录是 /usr/local/bin, 但实际命令安装在 /usr/bin/ 下,所以需要建立 /usr/bin 到 /usr/local/bin 的软链接
# ln -s /usr/bin/fdfs_trackerd /usr/local/bin
# ln -s /usr/bin/fdfs_storaged /usr/local/bin
# ln -s /usr/bin/stop.sh /usr/local/bin
# ln -s /usr/bin/restart.sh /usr/local/bin
创建存储目录
//用于存储tracker server的数据和日志
# mkdir -p /data/fastdfs/tracker
//用于存储storage server的数据和日志
# mkdir -p /data/fastdfs/storage
//用于存储上传的资源文件
# mkdir -p /data/fastdfs/res
//用于存储client server的数据和日志
# mkdir -p /data/fastdfs/client
//临时目录
# mkdir -p /data/fastdfs/temp
//1. 切换路径,复制一份tracker.conf.sample文件并修改文件名
# cd /etc/fdfs
# cp tracker.conf.sample tracker.conf
//2. 编辑tracker.conf
# vim tracker.conf
tracker.conf
# 修改内容如下
# 启用配置
disabled=false
# tracker服务器端口(默认22122)
port=22122
# Tracker 存储数据和日志根目录(根目录必须存在,子目录会自动创建)
base_path=/data/fastdfs/tracker
# HTTP 服务端口
http.server_port=80
//1. 切换路径,复制一份storage.conf.sample文件并修改文件名
# cd /etc/fdfs
# cp storage.conf.sample storage.conf
//2. 编辑storage.conf
# vim storage.conf
storage.conf
# 修改部分内容如下:
# 启用配置文件
disabled=false
# storage服务器端口(默认23000)
port=23000
# 将base_path路径改为刚新建的storage目录
# 数据和日志存储的根目录
base_path=/data/fastdfs/storage
# 指定第一存储目录
# 逐一配置 store_path_count 个路径,索引号基于 0。
# 如果不配置 store_path0,那它就和 base_path 对应的路径一样
store_path0=/data/fastdfs/res
# 指定tracker服务器地址,此处是上面预定好的IP
tracker_server=192.168.61.129:22122
# HTTP 访问文件的端口,此处需要与后面Nginx监听的端口保持一致
http.server_port=80
注意:此处仅为测试上传,后面会使用代码来上传文件
//1. 切换路径,复制一份client.conf.sample文件并修改文件名
# cd /etc/fdfs
# cp client.conf.sample client.conf
//2. 编辑client.conf
# vim client.conf
# 将base_path路径改为刚新建的client目录
base_path=/data/fastdfs/client
# 指定tracker服务器地址(我的是在本机,所有是本机ip和端口号)
tracker_server=192.168.61.129:22122
// 启动tracker和storage
# /usr/bin/fdfs_trackerd /etc/fdfs/tracker.conf
# /usr/bin/fdfs_storaged /etc/fdfs/storage.conf
//也可以通过以下命令启动
# /etc/init.d/fdfs_trackerd start
# /etc/init.d/fdfs_storaged start
// 查看tracker和storage启动是否成功
# tail -f /data/fdfs/storage/logs/storaged.log
# tail -f /data/fdfs/tracker/logs/trackerd.log
// 也可以通过这个命令查看 端口正在被监听,则算是服务安装成功
# netstat -unltp |grep fdfs
若将/home/qq.jpg图片上传上去,则切换路径到home/下,执行以下命令即可上传
// 上传图片
# /usr/bin/fdfs_upload_file /etc/fdfs/client.conf qq.jpg
上传成功后,会返回如下类似的fileId:
group1/M00/00/00/rBH2HFsgjmWATbykAAAd1Y2dBAI822.jpg
通过上面的步骤,我们可以上传文件了,但是不能够将上传的文件下载下来。因此我们需要Nginx作为服务器支持Http方式访问文件,同样的后面安装FastDFS模块页需要用到Nginx环境。Nginx只需要安装在storage server所在的服务器即可,用于访问文件。而我这里由于是单机,tracker server和storage server都在同一台服务器上
https://nginx.org/download/nginx-1.12.1.tar.gz
pcre 类库:https://ftp.pcre.org/pub/pcre/pcre-8.00.tar.gz
zlib类库:http://www.zlib.net/zlib-1.2.11.tar.gz
openssl 类库:https://www.openssl.org/source/openssl-1.1.0e.tar.gz
## nginx 所需依赖的库
# apt-get install libpcre3 libpcre3-dev
# apt-get install openssl libssl-dev
# apt-get install zlib1g-dev
//下载Nginx
# wget https://nginx.org/download/nginx-1.12.1.tar.gz
//新建目录
# mkdir -p /usr/local/nginx
# cp nginx-1.12.1.tar.gz /usr/local/nginx
# cd /usr/local/nginx
//解压
# tar -zxvf nginx-1.12.1.tar.gz
# cd nginx-1.12.1
//使用默认配置
# ./configure
//编译、安装
# make
# make install
从上面的截图中,我们可以看到Nginx需要的依赖库,还有Nginx配置所需的一些配置文件等等。
//启动Nginx
# cd /usr/local/nginx/sbin/
# ./nginx
//或者可以直接输入以下命令
# /usr/local/nginx/sbin/nginx
//其他命令
# ./nginx -s stop
# ./nginx -s reload
# ./nginx -s quit
修改nginx配置文件nginx.conf
# vim /usr/local/nginx/conf/nginx.conf
//添加如下行,将 /group1/M00 映射到 /ljzsg/fastdfs/file/data
location /group1/M00 {
alias /data/fastdfs/res/data;
}
//重启nginx
# /usr/local/nginx/sbin/nginx -s reload
在浏览器访问之前上传的图片
http://59.110.240.66/group1/M00/00/00/rBH2HFsgjmWATbykAAAd1Y2dBAI822.jpg
如下图所示,可以访问到上传的图片表示配置成功
https://github.com/happyfish100/fastdfs-nginx-module/archive/5e5f3566bbfa57418b5506aaefbe107a42c9fcb1.zip
https://github.com/happyfish100/fastdfs-nginx-module/archive/master.zip
FastDFS通过tracker服务器,将文件放在storage存储服务器中,但是同组存储服务器之间需要进入文件复制,有同步延迟的问题。若Tracker服务器将文件上传到了192.168.61.129,上传成功后文件fileID已经返回给客户端。此时FastDFS存储集群机制才会将这个文件同步到同组存储192.168.61.130,在文件还没有复制完成的情况下,客户端如果用这个返回的fileID在192.168.61.130上取文件,就会出现文件无法访问的错误。而fastdfs-nginx-module可以重定向文件连接到源服务器取文件,避免客户端由于复制延迟导致的文件无法访问错误。
//切换目录
# cd /usr/local
//下载fastdfs-nginx-module
# wget https://github.com/happyfish100/fastdfs-nginx-module/archive/5e5f3566bbfa57418b5506aaefbe107a42c9fcb1.zip
//解压
# unzip fastdfs-nginx-module-5e5f3566bbfa57418b5506aaefbe107a42c9fcb1.zip
// 重命名解压后的文件
# mv fastdfs-nginx-module-5e5f3566bbfa57418b5506aaefbe107a42c9fcb1/ fastdfs-nginx-module-master
// 先将nginx停掉
# /usr/local/nginx/sbin/nginx -s stop
//进入解压包目录
# cd /usr/local/nginx/nginx-1.12.1
//添加模块
# ./configure --add-module=../../fastdfs-nginx-module-master/src
//重新编译、安装
# make && make install
编译安装成功之后,查看nginx的版本及模块
# /usr/local/nginx/sbin/nginx -V
从上图可以看到,fastdfs-nginx-module模块已经成功添加到nginx中了。
添加模块成功后,需要将fastdfs-nginx-module 源码中的配置文件到/etc/fdfs 目录, 并修改
# cp /usr/local/fastdfs-nginx-module-master/src/mod_fastdfs.conf /etc/fdfs/
# vim /etc/fdfs/mod_fastdfs.conf
主要修改以下配置,其他的默认即可
# 客户端访问文件连接超时时长(单位:秒)
connect_timeout=10
# 临时目录
base_path=/data/fastdfs/temp
# tracker服务IP和端口
tracker_server=192.168.61.129:22122
# storage服务端口
storage_server_port=23000
# 组名
group_name=group1
# 访问链接前缀加上组名 eg:group1
url_have_group_name=true
# 文件存储路径
store_path0=/data/fastdfs/res
# cd /usr/local/fastdfs/fastdfs-5.11/conf/
# cp http.conf mime.types anti-steal.jpg /etc/fdfs/
# vim /usr/local/nginx/conf/nginx.conf
修改配置,其它的默认,在80端口下添加fastdfs-nginx模块
location ~/group([0-9])/M00 {
ngx_fastdfs_module;
}
注意:
listen 80 端口值是要与 /etc/fdfs/storage.conf 中的 http.server_port=80 (前面改成80了)相对应。如果改成其它端口,则需要统一,同时在防火墙中打开该端口。
location的配置,如果有多个group则配置location ~/group([0-9])/M00 ,没有则不用配group。
# /usr/local/nginx/sbin/nginx
启动成功后,重新访问已上传的图片,若成功,则表示配置OK
注意:若是部署在阿里云服务器上,则上面的端口要全部加入到安全组中