主要目的:1.实现在浏览器中访问上传到fastDfs的图片;2.安装php fastdfs扩展实现php对fastdfs的相关操作与使用;FastDFS 系统有三个角色:跟踪服务器(Tracker Server)、存储服务器(Storage Server)和客户端(Client),相关原理参考:https://www.jianshu.com/p/d09e52ff947f
一.环境准备:
lnmp环境(或同时安装nginx和php等),libfastcommonan安装包,FastDFS安装包,fastdfs-nginx-module安装包.本文中相关安装包为:fastdfs-nginx-module_v1.16.tar.gz;libfastcommonV1.0.7.tar.gz;nginx-1.14.1.tar.gz;php-5.6.38.tar.gz
注意下载FastDFS源程序,最好与FastDFS服务器版本匹配.php7+安装fastdfs时回报错,fastdfs的php_client应该不支持php7+;
相关目录说明:
FastDFS数据根目录:/home/fastdfs
Tracker数据日志目录:/home/fastdfs/tracker
Storage数据日志目录:/home/fastdfs/storage
软件包存放目录:/usr/local/
安装包下载: https://pan.baidu.com/s/1AoP60trHoUP1tfS223SOeQ 提取码: ydak
二.安装步骤:
1.如果没有安装gcc环境,先安装gcc,FastDFS是c开发的,编译依赖gcc环境;
2.安装libevent库,因为FastDFS依赖该库,yum安装:
yum -y install libevent
3.安装ibfastcommon
libfastcommon是FastDFS官方提供的,libfastcommon包含了FastDFS运行所需要的一些基础库;
(1)上传 libfastcommonV1.0.7.tar.gz到Centos机器上;
(2)将 libfastcommonV1.0.7.tar.gz解压至/usr/local/下:
tar -zxvf libfastcommonV1.0.7.tar.gz -C /usr/local/
(3)切换目录到:/usr/local/libfastcommon-1.0.7/ 下,接着进行编译和安装;
cd /usr/local/libfastcommon-1.0.7/
./make.sh #编译
./make.sh install #安装
安装后截图:
![aa9535e9ad26767e9611d68583806ed6.png](https://i-blog.csdnimg.cn/blog_migrate/b967fae54de3e21454ec544699ac9bda.jpeg)
(4)libfastcommon安装好后会在/usr/lib64 目录下生成 libfastcommon.so 库文件;
注意:由于FastDFS程序引用usr/lib目录所以需要将/usr/lib64下的库文件拷贝至/usr/lib下。
cp libfastcommon.so /usr/lib
4.安装tracker
(1)上传 FastDFS_v5.05.tar.gz 到 centos 上;
(2)将FastDFS_v5.05.tar.gz 解压至/usr/local/下
tar -zxvf FastDFS_v5.05.tar.gz -C /usr/local
(3)切换目录到: /usr/local/FastDFS/ 下,编译和安装;
cd /usr/local/FastDFS/
./make.sh && ./make.sh install #编译之后接着进行安装
安装后截图如下:
![51125029a3910d0e8a1329853d7f4d5c.png](https://i-blog.csdnimg.cn/blog_migrate/d874577fcd92f9e51b69cad5591e8a0b.jpeg)
(4)安装成功将安装目录下的conf下的文件拷贝到/etc/fdfs/下;
fastdfs相关的配置文件(tracker,storage,php_client等配置文件)就都在/etc/fdfs下了
cp /usr/local/FastDFS/conf/* /etc/fdfs/
5、配置和启动tracker
(1)切换目录到: /etc/fdfs/ 目录下;
(2)拷贝一份新的tracker配置文件,并做备份
cp tracker.conf tracker.conf.bak
(3)修改tracker.conf ; vim tracker.conf
base_path=/home/yuqing/fastdfs 改为: base_path=/home/fastdfs
http.server_port 改为: 80
(4)创建 /home/fastdfs 目录
mkdir /home/fastdfs
(5)启动tracker,运行如下命令:
/usr/bin/fdfs_trackerd /etc/fdfs/tracker.conf restart
启动后会在/home/fastdfs/下生成一个logs目录 一个data目录
6、配置和启动storage
(1)切换目录到: /etc/fdfs/ 目录下;
(2)拷贝一份新的storage配置文件
cp storage.conf.sample storage.conf
(3)修改storage.conf ; vim storage.conf
group_name=group1 #配置组名
base_path=/home/yuqing/fastdfs 改为: base_path=/home/fastdfs
#store存放文件的位置(store_path)
store_path0=/home/yuqing/fastdfs 改为: store_path0=/home/fdfs_storage
本环境就有一个挂载磁盘.
#如果有多个挂载磁盘则定义多个store_path,如下
#store_path1=.....
#store_path2=......
#配置tracker服务器:IP;
注意:如果集成nginx服务器即用nginx 做tracker该ip就配成要用的nginx的ip,该环境中nginx的ip是192.168.99.99
tracker_server=192.168.99.99:22122
#如果有多个则配置多个tracker,本环境就一个
#tracker_server=192.168.101.4:22122
# if use storage ID instead of IP address
# default value is false
# since V4.00
#use_storage_id = false
#配置使用id查找数据
use_storage_id = true
#配置http端口(使用ngixn的话这个貌似不用配)
http.server_port=8888
(4)创建 /home/fdfs_storage 目录
mkdir /home/fdfs_storage
(5)启动storage, 运行命令如下:
/usr/bin/fdfs_storaged /etc/fdfs/storage.conf restart
7、使用FastDFS自带工具测试
(1)切换目录到 /etc/fdfs/ 目录下;
(2)拷贝一份新的client配置文件并备份
cp client.conf client.conf.bak
(3)修改client.conf ; vim client.conf,修改基本路径和tracker_server如下:
# the base path to store log files
base_path=/home/fastdfs
# tracker_server can ocur more than once, and tracker_server format is
# "host:port", host can be hostname or ip address
#修改tracker_server
tracker_server=192.168.99.99:22122
(4)拷贝一张图片111.png到随便一个目录下 如/vagrant/下并运行如下命令
/usr/bin/fdfs_test /etc/fdfs/client.conf upload /vagrant/111.obng
成功界面如下:
![fdc616bad46f8c9bf97554b3c9b8d78f.png](https://i-blog.csdnimg.cn/blog_migrate/d4a5ac766a0cc40f3e5658607a7d4703.jpeg)
因为还没和nginx整合,该图片还不可以通过浏览器访问http://192.168.99.99/group1/M00/00/00/wKhjY1y2lYeAdOb5AAJV1YeqLKM782_big.PNG
8、安装fastdfs-nginx-module扩展来;
每个tracker上安装nginx,的主要目的是做负载均衡及实现高可用.如果只有一台tracker可以不配置nginx(这里我们不使用他自身的tracker使用nginx安装fast-nginx-module扩展,进而nginx作为tracker)。一个tracker对应多个storage,通过nginx对storage负载均衡;
(1)上传 fastdfs-nginx-module_v1.16.tar.gz 到Centos服务器上;
(2)解压 fastdfs-nginx-module_v1.16.tar.gz 到 /usr/local目录下;
tar -zxvf fastdfs-nginx-module_v1.16.tar.gz -C /usr/local
(3)切换目录到: /usr/local/fastdfs-nginx-module/src/ 目录下
cd /usr/local/fastdfs-nginx-module/src
cp conf conf.bak
(4)修改config文件,将文件中的所有 /usr/local/ 路径改为 /usr/
![b01b3472f1061bc5a2051eb1e260c8ae.png](https://i-blog.csdnimg.cn/blog_migrate/c3c4477e0cdf9e0aadd2364655791f2f.png)
ngx_addon_name=ngx_http_fastdfs_module
HTTP_MODULES="$HTTP_MODULES ngx_http_fastdfs_module"
NGX_ADDON_SRCS="$NGX_ADDON_SRCS $ngx_addon_dir/ngx_http_fastdfs_module.c"
#修改为
CORE_INCS="$CORE_INCS /usr/include/fastdfs /usr/include/fastcommon/"
Cddon_name=ngx_http_fastdfs_module
HTTP_MODULES="$HTTP_MODULES ngx_http_fastdfs_module"
NGX_ADDON_SRCS="$NGX_ADDON_SRCS $ngx_addon_dir/ngx_http_fastdfs_module.c"
#修改为
CORE_LIBS="$CORE_LIBS -L/usr/lib -lfastcommon -lfdfsclient"
CFLAGS="$CFLAGS -D_FILE_OFFSET_BITS=64 -DFDFS_OUTPUT_CHUNK_SIZE='256*1024' -DFDFS_MOD_CONF_FILENAME='"/etc/fdfs/mod_fastdfs.conf"'"ORE_LIBS="$CORE_LIBS -L/usr/lib -lfastcommon -lfdfsclient"
CFLAGS="$CFLAGS -D_FILE_OFFSET_BITS=64 -DFDFS_OUTPUT_CHUNK_SIZE='256*1024' -DFDFS_MOD_CONF_FILENAME='"/etc/fdfs/mod_fastdfs.conf"'"
~
(5)将fastdfs-nginx-module/src下的mod_fastdfs.conf拷贝至/etc/fdfs/下
cp mod_fastdfs.conf /etc/fdfs/
(6)并修改 /etc/fdfs/mod_fastdfs.conf 的内容;
vi /etc/fdfs/mod_fastdfs.conf;
#修改以下配置项
base_path=/home/fastdfs
tracker_server=192.168.172.20:22122
#tracker_server=192.168.172.20:22122 #(多个tracker配置多行)
url_have_group_name=true #url中包含group名称
store_path0=/home/fdfs_storage #指定文件存储路径(上面配置的store路径)
use_storage_id = true
(7)将libfdfsclient.so拷贝至/usr/lib下
cp /usr/lib64/libfdfsclient.so /usr/lib/
9、FastDFS 和nginx整合;
(1)安装改扩展有两种场景:1.nginx还未搭建安装;2:nginx已安装搭建;
第一种情况比较简单,编译安装nginx时加上该模块即可:
--add-modules=/usr/local/fastdfs-nginx-module/src(注意要到src目录)
编译安装后重启nginx即可;
第二种情况稍微麻烦,需要进入nginx源码目录重新编译一下,操作如下:
为防止该情况下会覆盖到之前的nginx 首先nginx -v 获取已安装的信息如图:
![5a3195eb46366c972d17bedc6dc1615f.png](https://i-blog.csdnimg.cn/blog_migrate/69d6703460c3d3b7491632dded3b0b74.png)
然后在nginx源码目录中执行./configure --prefix=上面输出的内容+--add-modules=/usr/local/fastdfs-nginx-module/src
编译过程中可能会提示缺少依赖,通过yum -y install 安装即可;
编译通过后执行:make -j2 (之后不要执行make install,一面覆盖之前nginx相关配置)
以上完成后,会在objs目录下生成一个nginx文件,先验证:
objs/nginx -t
objs/nginx -V
文件替换,并重启
以上成功后:
cp objs/nginx /usr/sbin/
nginx -s reload
重启:
nginx -s stop && nginx
(2)进行fastdfs与nginx集成的相关配置
拷贝配置文件到/etc/fdfs/
cd /usr/local/FastDFS/conf
cp http.conf mime.types /etc/fdfs/
修改nginx的配置文件添加如下两个内容
![30925f3596a108dc4d5c7b2f5b2cf27e.png](https://i-blog.csdnimg.cn/blog_migrate/fbc250ba5b15e4ce502b0628b5bb93c5.jpeg)
整个vhost配置代码如下:
server {
listen 80;
server_name ****.com;
location ~* /group[0-9]*/M00 {
ngx_fastdfs_module;
}
location / {
root /vagrant/www/*SystemStatic;
index index.html index.htm index.php;
try_files $uri $uri/ /index.php?$query_string;
}
location ~* (.*.(bmp|jpeg|jpg|gif|png))!(.*)!(.*)$ {
set $width $3;
set $height $4;
rewrite "(.*.(bmp|jpeg|jpg|gif|png|BMP|JPEG|JPG|GIF|PNG))(.*)$" $1;
}
location ~.php(.*)$ {
root /vagrant/www/*SystemStatic;
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
}
(3)重启nginx,storage,tracker
/usr/bin/fdfs_storaged /etc/fdfs/storage.conf restart
/usr/bin/fdfs_trackerd /etc/fdfs/tracker.conf restart
service nginx restart
重启后即可通过浏览器访问fastdfs上存储的图片了:
http://***/group1/M00/00/00/wKhjY1y2lYeAdOb5AAJV1YeqLKM782_big.PNG
若访问失败,检查是否防火墙是否关闭,关闭后在尝试:
service iptables stop #临时关闭防火墙
chkconfig iptables off #永久关闭防火墙
10.安装php fastdfs扩展php_client(注:wamp下php是不支持改扩展的,且php7+该版本fastdfs也不可用);
(1)安装编译php_client
cd /usr/local/FastDFS
#./make.sh
#./make.sh install
#cd client
#make;
#make install
如以上不安装,直接进php-config目录进行编译安装,可能会报如下错误:
make: *** [fastdfs_client.lo] Error 1
如果以上操作都进行,但是make时还报错,那就是版本问题了,要换php或fastDFS的版本了.
进入扩展源码目录进行安装
#cd ../php_client
#/usr/local/php/bin/phpize //执行php的安装目录下的phpize
#./configure --with-php-config=/usr/local/php/bin/php-config
#make
#make install
cd /etc/fdfs
vim fastdfs_client.ini
#修改如下fastdfs_clien配置项t:
fastdfs_client.base_path = /home/fastdfs
fastdfs_client.tracker_group0 = /etc/fdfs/client.conf
在php.ini配置文件中加载fastdfs
cat fastdfs_client.ini >> /usr/local/php/lib/php.ini
(2)测试扩展
重启nginx storage,tracker,php
cp /usr/local/FastDFS/php_client/fastdfs_test.php 到网站根目录如:/home/www/你的项目
在浏览器中输入:网站地址/fastdfs_test.php 如:http:***/fastdfs_test.php
如出现3.06 fastdfs_tracker_make_all_connections result: 1 array(1) { ["group1"]=> array(12) { ["free_space"]=> int(10542) ["trunk_free_space"]=> int(0) ["server_count"]=> int(2) ["active_count"]=> int(2) ["storage_port"]=> int(23000) ["storage_http_port"]=> int(8888)表示扩展安装成功,就可以在php中使用fastdfs了.
备注:由于版本等等好多问题,导致自己在搭建时很不顺利,故整理下搭建过程及可能遇到的问题,以备后用.
其中参考文章如下:https://www.cnblogs.com/yufeng218/p/8111961.html
https://www.cnblogs.com/zenghui940/p/4932684.html