1.安装依赖
Ubuntu16.04
$ sudo apt-get install unzip
$ sudo apt-get install libpcre3 libpcre3-dev
$ sudo apt-get install zlib1g zlib1g-dev
$ sudo apt-get install openssl libssl-dev
2.下载必要的包
$ mkdir sofware
$ cd software
# FastDFSV5.11源码包
$ wget https://codeload.github.com/happyfish100/fastdfs/tar.gz/V5.11
$ tar -zxvf V5.11
# libfastcommon依赖库源码包
$ wget https://codeload.github.com/happyfish100/libfastcommon/tar.gz/V1.0.36
$ tar -zxvf V1.0.36
# fastdfs-nginx-module模块源码包
$ wget https://codeload.github.com/happyfish100/fastdfs-nginx-module/zip/master
$ unzip master
$ wget http://nginx.org/download/nginx-1.12.2.tar.gz
$ tar -zxvf nginx-1.12.2.tar.gz
3.安装包
# 安装FastDFS依赖包
$ cd libfastcommon-1.0.36/
$ ./make.sh
$ sudo ./make.sh install
# libfastcommon.so 默认安装到了/usr/lib64/libfastcommon.so,但是FastDFS主程序设置的lib目录是/usr/local/lib,所以此处需要重新设置软链接:
$ sudo ln -s /usr/lib64/libfastcommon.so /usr/local/lib/libfastcommon.so
$ sudo ln -s /usr/lib64/libfdfsclient.so /usr/local/lib/libfdfsclient.so
$ sudo ln -s /usr/lib64/libfdfsclient.so /usr/lib/libfdfsclient.so
# 安装FastDFS
$ cd ..
$ cd fastdfs-5.11/
$ ./make.sh
$ sudo ./make.sh install
$ cd ..
编译安装nginx
① 下载nginx
# wget http://nginx.org/download/nginx-1.12.2.tar.gz
② 解压
# tar -zxvf nginx-1.12.2.tar.gz
# cd nginx-1.12.2
③ 使用默认配置
# ./configure
④ 编译、安装
# make
# make install
⑤ 启动nginx
# /usr/local/nginx/sbin/nginx
其它命令
# /usr/local/nginx/sbin/nginx -s stop
# /usr/local/nginx/sbin/nginx -s quit
# /usr/local/nginx/sbin/nginx -s reload
————————————————
4.配置包
tracker配置
$ sudo mkdir -p /FastDFS/tracker
$ sudo mkdir -p /FastDFS/storage
$ cd /etc/fdfs/
$ sudo cp client.conf.sample client.conf
$ sudo cp storage.conf.sample storage.conf
$ sudo cp tracker.conf.sample tracker.conf
# 配置tracker
$ sudo gedit /etc/fdfs/tracker.conf
#设置tracker的数据文件和日志目录
base_path=/FastDFS/tracker
# 启动tracker服务
$ sudo /etc/init.d/fdfs_trackerd start
# 查看服务状态
$ sudo netstat -unltp|grep fdfs
tcp 0 0 0.0.0.0:22122 0.0.0.0:* LISTEN 14628/fdfs_trackerd
服务运行的22122端口正常
storage配置
$ sudo vim /etc/fdfs/storage.conf
#设置storage数据文件和日志目录
base_path=/FastDFS/storage
store_path0=/FastDFS/storage
#存储路径个数,需要和store_path个数匹配
store_path_count=1
#tracker 服务器的 IP地址和端口号,如果是单机搭建,IP不要写127.0.0.1,否则启动不成功
$ tracker_server=192.168.184.132:22122
$ sudo /etc/init.d/fdfs_storaged start
$ sudo netstat -unltp|grep fdfs
tcp 0 0 0.0.0.0:23000 0.0.0.0:* LISTEN 15063/fdfs_storaged
tcp 0 0 0.0.0.0:22122 0.0.0.0:* LISTEN 14628/fdfs_trackerd
# 查看:storage服务器是否已经登记到 tracker服务器,运行以下命令:
$ sudo /usr/bin/fdfs_monitor /etc/fdfs/storage.conf
测试
# 编辑/etc/fdfs/client.conf配置文件
$ sudo vim /etc/fdfs/client.conf
# 修改内容:
base_path=/FastDFS/tracker
tracker_server=192.168.184.132:22122
# 上传文件测试:
$ fdfs_upload_file /etc/fdfs/client.conf /home/ubuntu/1.jpg
# 如果返回类似group1/M00/00/00/rBIK6VcaP0aARXXvAAHrUgHEviQ394.jpg的文件id则说明文件上传成功
配置nginx
# 拷贝配置文件
$ sudo cp/home/ubuntu/software/fastdfs-5.11/conf/http.conf /etc/fdfs/
$ sudo cp /home/ubuntu/software/fastdfs-5.11/conf/mime.types /etc/fdfs/
$ sudo cp /home/ubuntu/software/fastdfs-nginx-module-master/src/mod_fastdfs.conf /etc/fdfs/
# 编辑mod_fastdfs.conf文件,
$ sudo vim /etc/fdfs/mod_fastdfs.conf
#保存日志目录
base_path=/FastDFS/storage
#tracker服务器的IP地址以及端口号
tracker_server=192.168.184.132:22122
#文件 url 中是否有 group 名
url_have_group_name = true
# 存储路径
store_path0=/FastDFS/storage
# 配置nginx
# sudo vim /usr/local/nginx/conf/nginx.conf
添加如下行,将 /group1/M00 映射到 /home/fastdfs/file/data
location /group1/M00 {
alias /home/fastdfs/file/data;
}
# 重启nginx
# /usr/local/nginx/sbin/nginx -s reload
FastDFS 配置 Nginx 模块
1、安装配置Nginx模块
① fastdfs-nginx-module 模块说明
FastDFS 通过 Tracker 服务器,将文件放在 Storage 服务器存储, 但是同组存储服务器之间需要进行文件复制, 有同步延迟的问题。
假设 Tracker 服务器将文件上传到了 192.168.2.125,上传成功后文件 ID已经返回给客户端。
此时 FastDFS 存储集群机制会将这个文件同步到同组存储 192.168.2.126,在文件还没有复制完成的情况下,客户端如果用这个文件 ID 在 192.168.51.126 上取文件,就会出现文件无法访问的错误。
而 fastdfs-nginx-module 可以重定向文件链接到源服务器取文件,避免客户端由于复制延迟导致的文件无法访问错误。
② 下载 fastdfs-nginx-module、解压
# 这里为啥这么长一串呢,因为最新版的master与当前nginx有些版本问题。
# wget https://github.com/happyfish100/fastdfs-nginx-module/archive/5e5f3566bbfa57418b5506aaefbe107a42c9fcb1.zip
# 解压
# unzip 5e5f3566bbfa57418b5506aaefbe107a42c9fcb1.zip
# 重命名
# mv fastdfs-nginx-module-5e5f3566bbfa57418b5506aaefbe107a42c9fcb1 fastdfs-nginx-module-master
③ 配置Nginx
在nginx中添加模块
# 先停掉nginx服务
# /usr/local/nginx/sbin/nginx -s stop
进入解压包目录
# cd ~/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 源码中的配置文件到/etc/fdfs 目录, 并修改
# cd ~/fastdfs-nginx-module-master/src
# sudo cp mod_fastdfs.conf /etc/fdfs/
# sudo gedit /etc/fdfs/mod_fastdfs.conf
修改如下配置,其它默认
# 连接超时时间
connect_timeout=10 --根据需要修改--
# Tracker Server
tracker_server=192.168.2。125:22122 --修改为自己的ip--
# StorageServer 默认端口
storage_server_port=23000
# 如果文件ID的uri中包含/group**,则要设置为true
url_have_group_name = true --需要修改--
# Storage 配置的store_path0路径,必须和storage.conf中的一致
store_path0=/home/fastdfs/file --需要修改--
⑥ 复制 FastDFS 的部分配置文件到/etc/fdfs 目录
# cd ~/fastdfs-5.05/conf/
# cp anti-steal.jpg http.conf mime.types /etc/fdfs/
⑦ 配置nginx,修改nginx.conf
# sudo gedit /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。
⑧ 在/home/fastdfs/file 文件存储目录下创建软连接,将其链接到实际存放数据的目录,这一步可以省略
# ln -s /home/fastdfs/file/data/ /home/fastdfs/file/data/M00/
外网服务器安装注意事项!!!
下面的操作是在已经搭建好fastdfs和配置好nginx代理情况下解决的
原来在虚拟机上配的,一切正常,只是虚拟机用的不是云服务器分的公网IP,都是局域网玩耍,上传下载一点问题都没。昨天刚搬到ECS云服务器上,配了公网IP一直上传不了,后来配了私网IP,在虚拟机上上传都没问题的,但是到java程序中就蒙圈了,总不能tracker_server写私网IP吧,昨天网上找了各种答案,都不行,fastdfs的issues翻遍了,还是不行,最后看了一篇文章启发了,下面是解决方法:
cd /etc/fdfs
vi tracker.conf 或 vim tracker.conf
…
port=22122 #设置tracker的端口号,通常采用22122这个默认端口
添加端口
firewall-cmd --permanent --zone=public --add-port=22122/tcp
firewall-cmd --permanent --zone=public --add-port=8080/tcp
service fdfs_trackerd restart
cd /etc/fdfs
vim storage.conf
tracker_server=公网IP:22122
添加端口
firewall-cmd --permanent --zone=public --add-port=23000/tcp
firewall-cmd --permanent --zone=public --add-port=8888/tcp
重启
service fdfs_storaged restart
cd /etc/fdfs
vim client.conf
tracker_server=公网IP:22122
如果还有nginx做代理(fastdfs-nginx-module)
vim /etc/fdfs/mod_fastdfs.conf
tracker_server=公网IP:22122
最后才是重点,如果是ECS,要添加安全组规则
允许 自定义 TCP 23000/23000 地址段访问 0.0.0.0/0
允许 自定义 TCP 22122/22122 地址段访问 0.0.0.0/0
允许 自定义 TCP 8080/8080 地址段访问 0.0.0.0/0
允许 自定义 TCP 8888/8888 地址段访问 0.0.0.0/0
StorageClient1 无论在哪个网段都可以上传