1. 安装环境及版本说明
- 操作系统:CentOS Linux release 7.6.1810
- fastdfs-6.06.tar.gz
- libfastcommon-1.0.43.tar.gz
- fastdfs-nginx-module-1.22.tar.gz
- nginx-1.18.0.tar.gz
除了 Nginx 的安装包,其它所有安装包都可以在 FastdFS 的 GitHub 项目地址中下载:https://github.com/happyfish100
2. 安装前准备
yum -y install gcc gcc-c++ pcre pcre-devel openssl openssl-devel libevent
# 关闭 SELINUX 和防火墙
3. 编译安装 libfastcommon
[root@public-server src]# tar xf libfastcommon-1.0.43.tar.gz
[root@public-server src]# cd libfastcommon-1.0.43
[root@public-server libfastcommon-1.0.43]# ./make.sh && ./make.sh install
安装后检查
ls /usr/lib64|grep libfastcommon
ls /usr/lib|grep libfastcommon
出现libfastcommon.so
即成功
4. 编译安装 Fastdfs
4.1 编译安装
[root@public-server src]# tar xf fastdfs-6.06.tar.gz
[root@public-server src]# cd fastdfs-6.06
[root@public-server fastdfs-6.06]# ./make.sh && ./make.sh install
# 检查是否安装成功
[root@public-server fastdfs-6.06]# ls /usr/bin/|grep fdfs
fdfs_appender_test
fdfs_appender_test1
fdfs_append_file
fdfs_crc32
fdfs_delete_file
fdfs_download_file
fdfs_file_info
fdfs_monitor
fdfs_regenerate_filename
fdfs_storaged
fdfs_test
fdfs_test1
fdfs_trackerd
fdfs_upload_appender
fdfs_upload_file
4.2 准备配置文件
[root@public-server fastdfs-6.06]# cd /etc/fdfs/
[root@public-server fdfs]# cp tracker.conf.sample tracker.conf
[root@public-server fdfs]# cp storage.conf.sample storage.conf
[root@public-server fdfs]# cp client.conf.sample client.conf
4.3 启动 fdfs_tracker 服务
- 修改 tracker.conf
[root@public-server fdfs]# vim tracker.conf
base_path = /data/tracker # 定义存储数据和日志文件的基本路径,子目录会自动创建
store_group = group1 # 指定上传文件到哪个组里面,这里配置的组名要与 storage.conf 中的保持一致
[root@public-server fdfs]# mkdir -pv /data/tracker
- 启动 tracker 服务
[root@public-server fdfs]# /usr/bin/fdfs_trackerd /etc/fdfs/tracker.conf start
# 检查服务
[root@public-server fdfs]# ps aux|grep fdfs
root 22721 0.0 0.0 89720 4860 ? Sl 22:50 0:00 /usr/bin/fdfs_trackerd /etc/fdfs/tracker.conf start
root 22735 0.0 0.0 112824 980 pts/0 S+ 22:50 0:00 grep --color=auto fdfs
[root@public-server fdfs]# ss -tnlp|grep 22122
LISTEN 0 1024 *:22122 *:* users:(("fdfs_trackerd",pid=22721,fd=5))
4.4 启动 storage 服务
- 修改 storage.conf
[root@public-server fdfs]# vim storage.conf
group_name = group1 # 这里要与 tracker 保持一致
base_path = /data/storage # 定义存储数据和日志文件的基本路径,子目录会自动创建
store_path0 = /data/storage # 与 base_path 保持一致
tracker_server = 10.10.11.166:22122 # 指定 tracker 服务的 IP 和端口,如果是集群可以写多行,每行一个
http.server_port = 8888 # 指定一个端口,默认 8888 可以不修改
[root@public-server fdfs]# mkdir -pv /data/storage # 创建数据目录
- 启动storage 服务
[root@public-server fdfs]# /usr/bin/fdfs_storaged /etc/fdfs/storage.conf start
# 检查服务,storage 默认监听在 23000 端口
[root@public-server fdfs]# ps aux|grep fdfs
root 23160 0.0 0.0 155256 4860 ? Sl 22:58 0:00 /usr/bin/fdfs_trackerd /etc/fdfs/tracker.conf restart
root 23502 1.3 0.4 150144 67164 ? Sl 23:04 0:01 /usr/bin/fdfs_storaged /etc/fdfs/storage.conf start
root 23585 0.0 0.0 112824 980 pts/0 S+ 23:05 0:00 grep --color=auto fdfs
[root@public-server fdfs]# ss -tnlp|grep 23000
LISTEN 0 1024 *:23000 *:* users:(("fdfs_storaged",pid=23502,fd=5))
- 配置开机自启动
[root@public-server fdfs]# chmod +x /etc/rc.d/rc.local
[root@public-server fdfs]# vim /etc/rc.d/rc.local
# 在最后面加入配置
/usr/bin/fdfs_trackerd /etc/fdfs/tracker.conf start
/usr/bin/fdfs_storaged /etc/fdfs/storage.conf start
4.5 修改 client.conf
[root@public-server ~]# cd /etc/fdfs/
[root@public-server fdfs]# vim client.conf
base_path = /data/tracker # tracker 配置文件中 base_path 定义的目录
tracker_server = 10.10.11.166:22122 # 指定 tracker 服务的 IP 和端口
5. 安装 Nginx 和 fastdfs-nginx-module
5.1 解压 fastdfs-nginx-module
[root@public-server src]# tar xf fastdfs-nginx-module-1.22.tar.gz
[root@public-server src]# cd fastdfs-nginx-module-1.22/src/
[root@public-server src]# vim config # 将 /usr/local 替换为 /usr
:% s#/usr/local#/usr#g
# 其实主要是修改这两行配置
ngx_module_incs="/usr/include"
CORE_INCS="$CORE_INCS /usr/include"
5.2 编译安装 Nginx
[root@public-server src]# tar xf nginx-1.18.0.tar.gz
[root@public-server src]# cd nginx-1.18.0
[root@public-server nginx-1.18.0]# useradd -r nginx # 创建 nginx 用户
[root@public-server nginx-1.18.0]# ./configure --prefix=/usr/local/nginx --user=nginx --group=nginx --with-http_stub_status_module --add-module=/usr/local/src/fastdfs-nginx-module-1.22/src/
[root@public-server nginx-1.18.0]# make -j 4 && make install
5.3 复制并修改 fastdfs-ngin-module 中的配置文件
[root@public-server nginx-1.18.0]# cp /usr/local/src/fastdfs-nginx-module-1.22/src/mod_fastdfs.conf /etc/fdfs/
[root@public-server nginx-1.18.0]# vim /etc/fdfs/mod_fastdfs.conf
# 修改配置
connect_timeout=10 # 连接超时时长
tracker_server=10.10.11.166:22122 # 指定 tracker 服务的 IP 和端口
url_have_group_name = true # 改为 true 默认 false
store_path0=/data/storage # 配置为 storage.conf 中 base_path 定义的目录
5.4 复制 http.conf 和 mime.types 文件
[root@public-server nginx-1.18.0]# cd /usr/local/src/fastdfs-6.06/conf/
# 将 http.conf,mime.types 两个文件拷贝到 /etc/fdfs/ 目录下
[root@public-server conf]# cp http.conf mime.types /etc/fdfs/
5.5 创建一个软连接,在 /data/storage 文件存储目录下创建软连接,将其链接到实际存放数据 的目录
[root@public-server conf]# ln -sv /data/storage/data/ /data/storage/data/M00
"/data/storage/data/M00" -> "/data/storage/data/"
5.6 编辑 nginx.conf 配置文件
[root@public-server ~]# vim /usr/local/nginx/conf/nginx.conf
# 修改配置
server {
listen 8001; # 我这里修改了端口,因为我的测试机 80 端口被占用了
server_name localhost;
#charset koi8-r;
#access_log logs/host.access.log main;
location / {
root html;
index index.html index.htm;
}
# 主要是加上了下面的这个 location ~/group([0-9])/M00
location ~/group([0-9])/M00 {
ngx_fastdfs_module;
}
- 启动 Nginx
[root@public-server ~]# /usr/local/nginx/sbin/nginx
6. 测试文件服务
- 找一张图片放到服务器上,我这里随便找了一个图片放在了 /root 目录下面
[root@public-server ~]# ll springboot.jpg
-rw-r--r-- 1 root root 44698 10月 20 2019 springboot.jpg
- 上传测试图片,如果上传成功你会得到返回的文件名
[root@public-server ~]# /usr/bin/fdfs_upload_file /etc/fdfs/client.conf /root/springboot.jpg
group1/M00/00/00/CgoLpl8e9YGAaHhjAACumtGPxf4986.jpg # 这个就是返回的文件名
- 访问文件测试,在浏览器访问 nginx 的 IP+端口/返回的文件名
到这里单机版的 FastdFS 服务器就部署好了,在部署的过程中踩了很多坑,发现 FastdFS 如果你在编译安装的时候出现一些找不到一些 .h 或者.c
的文件可以换个版本试试,我在编译 Nginx 是发现 --add-module 模块是总是报错,当时使用的版本是 fastdfs-nginx-module-1.21 最后换了 fastdfs-nginx-module-1.22 编译就通过了。
7. 参考文档
https://www.codepeople.cn/2019/01/14/CentOS7.4-FastDFS-install/