阿里云服务器CentOS7.6.*版本FastDFS结合Nginx搭建单机版分布式文件存储服务器【避坑指南】

1、安装包及版本介绍

资源版本号下载地址
fastdfsv5.0.8https://sourceforge.net/projects/fastdfs/files/FastDFS%20Server%20Source%20Code/
nginxv1.20.0http://nginx.org/en/download.html
fastdfs-nginx-modulev1.16.0https://sourceforge.net/projects/fastdfs/files/FastDFS%20Nginx%20Module%20Source%20Code/
libfastcommon版本不详https://github.com/happyfish100/libfastcommon

2、安装前置环境准备

需要有一台阿里云测试服务器用来做环境搭建,其他的云服务提供商也可以,这里只使用阿里云来演示。

2.1 安装gcc编译器及安装指令
 FastDFS是C语言开发的应用。安装必须使用 make , cmake 和 gcc编译器。
# 一般阿里云服务器这些都已经安装过了,保险起见,看看是不是都已经安装过了

yum install -y make cmake gcc gcc-c++
2.2 安装libfastcommon
1)libfastcommon是从FastDFS和FastDHT中提取出来的公共C函数库,相当于是一个工具库,被FastDFS所依赖, 所以必须要先安装

2)将下载号的libfastcommon-master.zip上传到服务器的临时目录/opt/packages[这里是我创建的临时目录,这个目录每个人都不一样]

3)解压 libfastcommon-master.zip 由于是zip文件所以要使用 unzip命令,如果没有unzip命令, 安装一下就好
  • 2.2.1 安装unzip命令
# 安装unzip命令

yum install -y unzip
  • 2.2.2 libfastcommon-master.zip包解压
#  进入到libfastcommon-master.zip所在目录

cd /opt/packages/

# unzip命令解压压缩包

unzip libfastcommon-master.zip
  • 2.2.3 编译libfastcommon
#  进入到libfastcommon-master所在目录

cd /opt/packages/libfastcommon-master

# 执行编译命令

./make.sh
  • 2.2.4 安装libfastcommon
#  进入到libfastcommon-master所在目录

cd /opt/packages/libfastcommon-master

# 执行编译命令

./make.sh install

编译安装完成之后, 在在/usr/lib64 和 /usr/include/fastcommon两个目录中有以下文件夹和文件说明安装已经成功了。
在这里插入图片描述

  • 2.2.5 创建libfastcommon软链接
    FastDFS 主程序设置的lib库目录是 /usr/local/lib, 所以需要创建软连接将fastcommon和fasfdfs客户端需要用到的库文件链接到该目录下
#  创建软链接

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

在这里插入图片描述

3、安装FastDFS主程序

上传 FastDFS_v5.08.tar.gz 到 /opt/packages下后解压
  • 3.1 FastDFS_v5.08.tar.gz包解压
#  进入到FastDFS_v5.08.tar.gz所在目录

cd /opt/packages/

# tar命令解压压缩包

tar -zxf FastDFS_v5.08.tar.gz
  • 3.2 编译FastDFS
#  进入到FastDFS_v5.08所在目录

cd /opt/packages/FastDFS

# 执行编译脚本

./make.sh
  • 3.3 安装FastDFS
#  进入到FastDFS_v5.08所在目录

cd /opt/packages/FastDFS

# 执行安装脚本

./make.sh install
  • 3.4 验证FastDFS安装是否完成

     /usr/bin目录下主线程启动执行文件如下图
    

在这里插入图片描述

/usr/include/fastdfs 插件工具目录如下图:

在这里插入图片描述

    /etc/fdfs目录下所有配置文件如下图

在这里插入图片描述
以上目录中的文件都没有问题,说明FDFS已经安装成功。

4、FastDFS-tracker服务配置

FastDFS主要有tracker服务和存储服务两部分组成,在配置时两个服务都需要配置,这里先介绍tracker服务的配置。

4.1 创建tracker服务的数据目录
# 创建目录

mkdir -p /usr/local/fastdfs/tracker
4.2 修改tracker服务的配置文件
  • 4.2.1 复制配置文件

复制一份fastdfs作者给我们提供的tracker.conf.sample文件,重命名为tracker.conf

# 切换目录

cd /etc/fdfs/

# 拷贝配置文件

cp tracker.conf.sample tracker.conf
  • 4.2.2 修改配置文件如下内容
# 修改tracker的数据目录为我们自定义的目录

base_path=/usr/local/fastdfs/tracker

# 修改http服务访问的端口,后面使用nginx代理需要用到

http.server_port=8080

**修改完成一定要保存退出!!!修改完成一定要保存退出!!! 修改完成一定要保存退出!!!**

其他的配置参数,感兴趣的同学可以自行查找资料,这里只是一个单机测试演示版本,无需太多配置项的修改
在这里插入图片描述
在这里插入图片描述

4.3 启动tracker服务看是否正常
# tracker服务的启动命令

/usr/bin/fdfs_trackerd /etc/fdfs/tracker.conf start

服务启动成功之后如下图所示:
在这里插入图片描述

4.4 配置tracker服务开机自启

fdfs安装成功之后已经将fdfs_trackerd和fdfs_storaged服务都预置到系统初始化的指令中了,这里只需要使用chkconfig命令设置一下即可
在这里插入图片描述```

 # 添加fdfs_trackerd到开机自启服务列表
 
 chkconfig fdfs_trackerd on
 

在这里插入图片描述

5、FastDFS-storage服务配置

5.1 创建storage服务的数据目录
# 创建目录

mkdir -p /usr/local/fastdfs/storage/base

mkdir -p /usr/local/fastdfs/storage/store
5.2 修改storage服务的配置文件
  • 5.2.1 复制配置文件

复制一份fastdfs作者给我们提供的storage.conf.sample文件,重命名为storage.conf

# 切换目录

cd /etc/fdfs/

# 拷贝配置文件

cp storage.conf.sample storage.conf
  • 5.2.2 修改配置文件如下内容
# 修改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

**修改完成一定要保存退出!!!修改完成一定要保存退出!!! 修改完成一定要保存退出!!!**

5.3 启动storage服务看是否正常
# storage服务的启动命令

/usr/bin/fdfs_storaged /etc/fdfs/storage.conf start

服务启动成功之后如下图所示:
在这里插入图片描述

5.4 配置storage服务开机自启

fdfs安装成功之后已经将fdfs_trackerd和fdfs_storaged服务都预置到系统初始化的指令中了,这里只需要使用chkconfig命令设置一下即可
在这里插入图片描述```

 # 添加fdfs_storaged 到开机自启服务列表
 
 chkconfig fdfs_storaged on 

在这里插入图片描述
至此fdfs的tracker和storage服务就已经安装配置好了。

5.4 检查storage服务是否成功注册到tracker中
/usr/bin/fdfs_monitor /etc/fdfs/storage.conf

在这里插入图片描述

6、服务器本地上传文件测试

fastdfs提供了上传文件的测试工具fdfs_test,这里我们本地测试一下看看服务是否正常

6.1 配置客户端配置文件

在/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

6.2 准备测试文件,使用fdfs_test工具进行测试

在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、FastDFS配置Nginx实现http请求对外服务

7.1 上传并解压安装包到服务器
  • 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
7.2 获取FastDFS需要的HTTP配置文件拷贝到/etc/fdfs目录下

获取位置就是我们下载的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/
7.3 安装fastdfs-nginx-module前的配置更新
7.3.1 进入fastdfs-nginx-module目录修改一下配置文件config

在这里插入图片描述

// 取决于版本,不同的版本需要修改的文件配置不同, 当前这个版本只需要修改CORE_INCS这一个配置项

ngx_module_incs="/usr/include/fastdfs /usr/include/fastcommon/"

CORE_INCS="$CORE_INCS /usr/include/fastdfs /usr/include/fastcommon/"

修改完成保存退出

7.3.2 进入fastdfs-nginx-module目录复制mod_fastdfs.conf到/etc/fdfs/目录下并修改
# 复制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
7.4 安装nginx
7.4.1 安装nginx依赖包

这里很多服务已经安装了,这里重新预置一下nginx的安装环境。

yum install -y gcc gcc-c++ make automake autoconf libtool pcre pcre-devel zlib zlib-devel openssl openssl-devel
7.4.2 编译nginx

这里可能会遇到的一种情况:就是大家可能已经在服务器上面安装过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的端口为其他可用端口,保存配置重载配置文件即可。

8、配置nginx以及路径映射

nginx安装完成了之后,如果需要配置开机自启动请参考我的另外一篇博客CentOS7.x.x版本手动安装nignx1.20.1、环境变量及开机自启设置

8.1 修改nginx的配置文件

这里基本该准备好的东西都准备好了,现在修改一下nginx的配置文件如下

nignx的配置文件一般的存放地址都在nginx的安装目录/conf/

在这里插入图片描述
在这里插入图片描述

8.2 创建网络访问路径的映射路径

在上传文件到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

在这里插入图片描述

8.3 重启所有服务
  • 重启nginx服务
# 重启nginx
 systemctl restart nginx
# 如果没有配置nginx为系统服务,可以通过安装目录下的sbin目录下的nginx命令 reload来执行重启
  • 重启tracker服务
# 停止服务
 /usr/bin/fdfs_trackerd /etc/fdfs/tracker.conf stop
# 启动服务 
 /usr/bin/fdfs_trackerd /etc/fdfs/tracker.conf start
  • 重启storage服务
# 停止服务
 /usr/bin/fdfs_storaged /etc/fdfs/storage.conf stop
# 启动服务 
 /usr/bin/fdfs_storaged /etc/fdfs/storage.conf start
8.4 配置对外网提供服务
  • 1)开放必要的端口
# 配置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
  • 2)配置安全组规则
    登录云服务器配置安全组规则
    开放8080/8080、22122/22122、23000/23000端口即可
    在这里插入图片描述
8.5 资源访问测试

在这里插入图片描述
OK 通过浏览器可以访问到我们之前上传到fdfs中保存的图片了,至此nginx结合fasfdfs搭建单机版文件存储服务器就结束了, 有问题可以留言。

9、后续计划

后面计划把FastDFS整合nginx搭建分布式文件存储服务器集群的环境整出来,到时候再升级一下安装部署文档,感谢大家!

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值