资源 | 版本号 | 下载地址 |
---|---|---|
fastdfs | v5.0.8 | https://sourceforge.net/projects/fastdfs/files/FastDFS%20Server%20Source%20Code/ |
nginx | v1.20.0 | http://nginx.org/en/download.html |
fastdfs-nginx-module | v1.16.0 | https://sourceforge.net/projects/fastdfs/files/FastDFS%20Nginx%20Module%20Source%20Code/ |
libfastcommon | 版本不详 | https://github.com/happyfish100/libfastcommon |
需要有一台阿里云测试服务器用来做环境搭建,其他的云服务提供商也可以,这里只使用阿里云来演示。
FastDFS是C语言开发的应用。安装必须使用 make , cmake 和 gcc编译器。
# 一般阿里云服务器这些都已经安装过了,保险起见,看看是不是都已经安装过了
yum install -y make cmake gcc gcc-c++
1)libfastcommon是从FastDFS和FastDHT中提取出来的公共C函数库,相当于是一个工具库,被FastDFS所依赖, 所以必须要先安装
2)将下载号的libfastcommon-master.zip上传到服务器的临时目录/opt/packages[这里是我创建的临时目录,这个目录每个人都不一样]
3)解压 libfastcommon-master.zip 由于是zip文件所以要使用 unzip命令,如果没有unzip命令, 安装一下就好
# 安装unzip命令
yum install -y unzip
# 进入到libfastcommon-master.zip所在目录
cd /opt/packages/
# unzip命令解压压缩包
unzip libfastcommon-master.zip
# 进入到libfastcommon-master所在目录
cd /opt/packages/libfastcommon-master
# 执行编译命令
./make.sh
# 进入到libfastcommon-master所在目录
cd /opt/packages/libfastcommon-master
# 执行编译命令
./make.sh install
编译安装完成之后, 在在/usr/lib64 和 /usr/include/fastcommon两个目录中有以下文件夹和文件说明安装已经成功了。
# 创建软链接
ln -s /usr/lib64/libfastcommon.so /usr/local/lib/libfastcommon.so
# 【这个先创建没关系,链接会显示为红色的无效链接路径,没关系,等到fdfs安装完成之后自然就好了,libfdfsclient.so会被安装到指定位置】
ln -s /usr/lib64/libfdfsclient.so /usr/local/lib/libfdfsclient.so
上传 FastDFS_v5.08.tar.gz 到 /opt/packages下后解压
# 进入到FastDFS_v5.08.tar.gz所在目录
cd /opt/packages/
# tar命令解压压缩包
tar -zxf FastDFS_v5.08.tar.gz
# 进入到FastDFS_v5.08所在目录
cd /opt/packages/FastDFS
# 执行编译脚本
./make.sh
# 进入到FastDFS_v5.08所在目录
cd /opt/packages/FastDFS
# 执行安装脚本
./make.sh install
3.4 验证FastDFS安装是否完成
/usr/bin目录下主线程启动执行文件如下图
/usr/include/fastdfs 插件工具目录如下图:
/etc/fdfs目录下所有配置文件如下图
FastDFS主要有tracker服务和存储服务两部分组成,在配置时两个服务都需要配置,这里先介绍tracker服务的配置。
# 创建目录
mkdir -p /usr/local/fastdfs/tracker
复制一份fastdfs作者给我们提供的tracker.conf.sample文件,重命名为tracker.conf
# 切换目录
cd /etc/fdfs/
# 拷贝配置文件
cp tracker.conf.sample tracker.conf
# 修改tracker的数据目录为我们自定义的目录
base_path=/usr/local/fastdfs/tracker
# 修改http服务访问的端口,后面使用nginx代理需要用到
http.server_port=8080
**修改完成一定要保存退出!!!修改完成一定要保存退出!!! 修改完成一定要保存退出!!!**
其他的配置参数,感兴趣的同学可以自行查找资料,这里只是一个单机测试演示版本,无需太多配置项的修改
# tracker服务的启动命令
/usr/bin/fdfs_trackerd /etc/fdfs/tracker.conf start
服务启动成功之后如下图所示:
fdfs安装成功之后已经将fdfs_trackerd和fdfs_storaged服务都预置到系统初始化的指令中了,这里只需要使用chkconfig命令设置一下即可
```
# 添加fdfs_trackerd到开机自启服务列表
chkconfig fdfs_trackerd on
# 创建目录
mkdir -p /usr/local/fastdfs/storage/base
mkdir -p /usr/local/fastdfs/storage/store
复制一份fastdfs作者给我们提供的storage.conf.sample文件,重命名为storage.conf
# 切换目录
cd /etc/fdfs/
# 拷贝配置文件
cp storage.conf.sample storage.conf
# 修改storage的数据目录为我们自定义的目录,用于保存storage server 基础数据内容和日志内容
base_path=/usr/local/fastdfs/storage/base
# 修改storage的数据目录为我们自定义的目录[这里可以不配置,如果不配置,默认就是base_path]
store_path0=/usr/local/fastdfs/storage/store
# 配置tracker的服务器的访问地址和端口【这里必须是安装了tracker服务的阿里云服务器的公网IP】
# 示例:tracker_server=100.102.125.10:22122【这里100.102.125.10就是公网ip地址】
tracker_server=阿里云服务器的公网IP:22122
# 修改http服务访问的端口,后面使用nginx代理需要用到[这里需要和tracker配置文件中保持一致]
http.server_port=8080
**修改完成一定要保存退出!!!修改完成一定要保存退出!!! 修改完成一定要保存退出!!!**
# storage服务的启动命令
/usr/bin/fdfs_storaged /etc/fdfs/storage.conf start
fdfs安装成功之后已经将fdfs_trackerd和fdfs_storaged服务都预置到系统初始化的指令中了,这里只需要使用chkconfig命令设置一下即可
```
# 添加fdfs_storaged 到开机自启服务列表
chkconfig fdfs_storaged on
至此fdfs的tracker和storage服务就已经安装配置好了。
/usr/bin/fdfs_monitor /etc/fdfs/storage.conf
fastdfs提供了上传文件的测试工具fdfs_test,这里我们本地测试一下看看服务是否正常
在/etc/fdfs目录下创建client.conf文件,配置如下内容:
#tracker服务器文件路径
base_path=/usr/local/fastdfs/tracker
#tracker服务器IP地址和端口号 (阿里云服务器公网ip)
tracker_server=阿里云服务器公网ip:22122
#tracker 服务器的 http 端口号,必须和tracker的设置对应
http.tracker_server_port=8080
/usr/bin/fdfs_test /etc/fdfs/client.conf upload /opt/packages/123.png
在opt/packages目录下准备一张测试图片,将其上传到fdfs服务器中进行存储
# 测试上传的命令
/usr/bin/fdfs_test /etc/fdfs/client.conf upload /opt/packages/test_pic.png
OK,内部上传是OK的,只要配置外网访问权限肯定也就没问题的,但是还有一个问题fdfs服务不支持http访问,但是余庆考虑到了这一点,给我们专门做了一个nginx扩展模块,通过简单的配置,借助nginx的反向代理就可以让外界访问到我们fdfs服务器上面保存的文件了,下面着重讲讲fastdfs-nginx-module的安装配置
7.1.1 上传安装包到/opt/packages目录
7.1.2 解压安装包
# 进入目录
cd /opt/packages
# 解压fastdfs-nginx-module_v1.16.tar
tar -zxf fastdfs-nginx-module_v1.16.tar
# 解压nginx-1.20.1.tar.gz
tar -zxf nginx-1.20.1.tar.gz
获取位置:就是我们下载的fastdfsan压缩安装包中的conf目录下
# 进入fdfs的解压目录,找到conf目录。切换到该目录下[这里看你的解压目录在哪里,就改成哪里]
cd /usr/local/soteware/fastdfs-5.08/conf
# 拷贝http.conf文件
cp http.conf /etc/fdfs/
# 拷贝mine.types文件
cp mine.types /etc/fdfs/
// 取决于版本,不同的版本需要修改的文件配置不同, 当前这个版本只需要修改CORE_INCS这一个配置项
ngx_module_incs="/usr/include/fastdfs /usr/include/fastcommon/"
CORE_INCS="$CORE_INCS /usr/include/fastdfs /usr/include/fastcommon/"
修改完成保存退出
# 复制mod_fastdfs.conf到/etc/fdfs/目录下
cp /opt/packages/fastdfs-nginx-module/src/mod_fastdfs.conf /etc/fdfs
提供完整的mod_fastdfs.conf完整配置文件如下:
# connect timeout in seconds
# default value is 30s
connect_timeout=2
# network recv and send timeout in seconds
# default value is 30s
network_timeout=30
# the base path to store log files
# ==========================================================================
# ======================== 【【【需要修改配置】】】 ========================
# ==========================================================================
base_path=/var/fastdfs/logs
# ==========================================================================
# if load FastDFS parameters from tracker server
# since V1.12
# default value is false
load_fdfs_parameters_from_tracker=true
# storage sync file max delay seconds
# same as tracker.conf
# valid only when load_fdfs_parameters_from_tracker is false
# since V1.12
# default value is 86400 seconds (one day)
storage_sync_file_max_delay = 86400
# if use storage ID instead of IP address
# same as tracker.conf
# valid only when load_fdfs_parameters_from_tracker is false
# default value is false
# since V1.13
use_storage_id = false
# specify storage ids filename, can use relative or absolute path
# same as tracker.conf
# valid only when load_fdfs_parameters_from_tracker is false
# since V1.13
storage_ids_filename = storage_ids.conf
# FastDFS tracker_server can ocur more than once, and tracker_server format is
# "host:port", host can be hostname or ip address
# valid only when load_fdfs_parameters_from_tracker is true
# ==========================================================================
# ======================== 【【【需要修改配置】】】 ========================
# ==========================================================================
#tracker_server=192.168.1.207:22122
tracker_server=tracker服务所在的服务器的公网IP:22122
# ==========================================================================
# the port of the local storage server
# the default value is 23000
storage_server_port=23000
# the group name of the local storage server
group_name=group1
# if the url / uri including the group name
# set to false when uri like /M00/00/00/xxx
# set to true when uri like ${group_name}/M00/00/00/xxx, such as group1/M00/xxx
# default value is false
#url_have_group_name = false
url_have_group_name = true
# path(disk or mount point) count, default value is 1
# must same as storage.conf
store_path_count=1
# store_path#, based 0, if store_path0 not exists, it's value is base_path
# the paths must be exist
# must same as storage.conf
store_path0=/usr/local/fastdfs/storage/store
#store_path1=/home/yuqing/fastdfs1
# standard log level as syslog, case insensitive, value list:
### emerg for emergency
### alert
### crit for critical
### error
### warn for warning
### notice
### info
### debug
log_level=info
# set the log filename, such as /usr/local/apache2/logs/mod_fastdfs.log
# empty for output to stderr (apache and nginx error_log file)
log_filename=
# response mode when the file not exist in the local file system
## proxy: get the content from other storage server, then send to client
## redirect: redirect to the original storage server (HTTP Header is Location)
response_mode=proxy
# the NIC alias prefix, such as eth in Linux, you can see it by ifconfig -a
# multi aliases split by comma. empty value means auto set by OS type
# this paramter used to get all ip address of the local host
# default values is empty
if_alias_prefix=
# use "#include" directive to include HTTP config file
# NOTE: #include is an include directive, do NOT remove the # before include
#include http.conf
# if support flv
# default value is false
# since v1.15
flv_support = true
# flv file extension name
# default value is flv
# since v1.15
flv_extension = flv
# set the group count
# set to none zero to support multi-group on this storage server
# set to 0 for single group only
# groups settings section as [group1], [group2], ..., [groupN]
# default value is 0
# since v1.14
# ==========================================================================
# ======================== 【【【需要修改配置】】】 ========================
# 如果有多个组,这里需要修改,同时下面需要进行每个组的参数配置
# ==========================================================================
group_count = 1
# group settings for group #1
# since v1.14
# when support multi-group on this storage server, uncomment following section
# ==========================================================================
# ======================== 【【【需要修改配置】】】 ========================
# ==========================================================================
[group1]
group_name=group1
storage_server_port=23000
store_path_count=1
store_path0=/usr/local/fastdfs/storage/store
#store_path1=/home/yuqing/fastdfs1
# ==========================================================================
# group settings for group #2
# since v1.14
# when support multi-group, uncomment following section as neccessary
#[group2]
#group_name=group2
#storage_server_port=23000
#store_path_count=1
#store_path0=/home/yuqing/fastdfs
这里很多服务已经安装了,这里重新预置一下nginx的安装环境。
yum install -y gcc gcc-c++ make automake autoconf libtool pcre pcre-devel zlib zlib-devel openssl openssl-devel
这里可能会遇到的一种情况:就是大家可能已经在服务器上面安装过nginx,这该怎么处理,这个不用担心还是先编译
进入到nginx的解压目录/opt/packages/,通过configure可执行命令进行编译
在编译nginx的同时,增加nginx的插件模块fastdfs-nginx-module即可
# 进入到nginx安装包目录中
cd /opt/packages/nginx-1.20.1
# 先编译配置及加载模块
./configure --prefix=/usr/local/software/nginx --add-module=/opt/packages/fastdfs-nginx-module/src
**注意:如果服务器上面已经安装了nginx, 这个--prefix后面的安装路径必须已经存在的nginx服务的安装路径,如果没有安装过nginx,这个路径可以自定义**
如果对configure命令感兴趣可以参考这篇博客学习一下nginx编译安装之-./configure 参数详解
在使用make命令执行编译
make
如果make命令没有出现error,恭喜你,nginx中已经安装fastdfs插件成功了。
如果服务器上已经安装了nginx看这里
如果你的服务器上面已经安装过nginx,,不要再继续执行安装命令,这里需要将configure命令中配置的prefix路径下的sbin目录下的nginx可执行文件备份为nginx.old, 同时将nginx解压的安装包下面在执行make命令之后生成的objs
目录下的nignx
可执行文件拷贝到原来的nginx安装目录下的sbin目录下即可
之后重启一下nginx, 通过ps -ef|grep nginx查询一下nginx进程,如果进程存在, OK!nginx整合fastdfs已经OK了!!!,可以直接进入第8步的配置修改跟测试了。
如果服务器上没有安装nginx看这里
如果你的服务器上面没有安装过nginx,接下来只需要再执行一下make install
命令,nginx就会自动在你在configure命令中配置的prefix路径下安装
make install
如果没有报错,恭喜你nginx安装成功了,可以接下来第8步的配置修改和测试了。
这里可能会启动失败,nginx的默认配置启动监听的是80端口,但是如果服务器已经存在其他的服务占用了80端口,nginx就会启动失败,这里错误排查都很简单,去看一下安装目录下logs目录下的error.log就可以知道是什么原因, 如果是端口占用导致的问题,可以通过安装目录下的conf目录下的nginx.conf文件修改listen的端口为其他可用端口,保存配置重载配置文件即可。
nginx安装完成了之后,如果需要配置开机自启动请参考我的另外一篇博客CentOS7.x.x版本手动安装nignx1.20.1、环境变量及开机自启设置
这里基本该准备好的东西都准备好了,现在修改一下nginx的配置文件如下
nignx的配置文件一般的存放地址都在nginx的安装目录/conf/
在上传文件到FastDFS后,FastDFS会返回group1/M00/00/00/xxxxxxxxx.xxx其中group1是卷名,在mod_fastdfs.conf配置文件中已配置了url_have_group_name, 以保证URL解析正确。其中的M00是FastDFS保存数据时使用的虚拟目录, 需要将这个虚拟目录映射到真实数据目录上,这里需要创建一个软连接
# 将group1/M00/00/00/xxxxxxxxx.xxx的路径映射到/data/00/00/xxxxxxxxx.xxx真实文件存储路径上
ln -s /usr/local/fastdfs/storage/store/data/ /usr/local/fastdfs/storage/store/data/M00
# 重启nginx
systemctl restart nginx
# 如果没有配置nginx为系统服务,可以通过安装目录下的sbin目录下的nginx命令 reload来执行重启
# 停止服务
/usr/bin/fdfs_trackerd /etc/fdfs/tracker.conf stop
# 启动服务
/usr/bin/fdfs_trackerd /etc/fdfs/tracker.conf start
# 停止服务
/usr/bin/fdfs_storaged /etc/fdfs/storage.conf stop
# 启动服务
/usr/bin/fdfs_storaged /etc/fdfs/storage.conf start
# 配置tracker对外网提供服务的端口
```shell
# 开放8080端口允许外网访问【nignx】
firewall-cmd --zone=public --add-port=8080/tcp --permanent
# 开放22122端口允许外网访问【tracker】
firewall-cmd --zone=public --add-port=22122/tcp --permanent
# 开放23000端口允许外网访问【storage】
firewall-cmd --zone=public --add-port=23000/tcp --permanent
# 重载防火墙的配置文件,让修改生效
firewall-cmd --reload
# 查看防火墙准入规则中开放的端口列表
firewall-cmd --list-ports
OK 通过浏览器可以访问到我们之前上传到fdfs中保存的图片了,至此nginx结合fasfdfs搭建单机版文件存储服务器就结束了, 有问题可以留言。
后面计划把FastDFS整合nginx搭建分布式文件存储服务器集群的环境整出来,到时候再升级一下安装部署文档,感谢大家!