Centos安装FastDFS并整合nginx
一、安装包准备
1. 软件包下载
链接:https://pan.baidu.com/s/15ZL4af5kS9P_wvBj7G5dBw
提取码:k7p6
2. 上传和解压
将四个文件上传到 /opt目录下
tar -zxvf fastdfs-5.05.tar.gz
tar -zxvf fastdfs-nginx-module_v1.16.tar.gz
tar -zxvf libfastcommon-1.0.7.tar.gz
tar -zxvf nginx-1.8.0.tar.gz
二、安装fastdfs
1. 安装相关软件包
yum install -y gcc gcc-c++ && \
yum install -y perl && \
yum install -y libevent && \
yum install -y zlib zlib-devel && \
yum install -y openssl openssl-devel
2. 安装 libfastcommon
#进入目录
cd /opt/libfastcommon-1.0.7
#安装libfastcommon
./make.sh && ./make.sh install
由于FastDFS 程序引用 usr/lib 目录所以需要将 /usr/lib64 下的库文件拷贝至 /usr/lib 下
cp /usr/lib64/libfastcommon.so /usr/lib
3. 安装和启动tracker
#进入目录
cd /opt/fastdfs-5.05
#安装libfastcommon
./make.sh && ./make.sh install
安装成功将安装目录下的 conf 下的文件拷贝到 /etc/fdfs/ 下
#拷贝文件
cp conf/* /etc/fdfs/
#创建fastdfs默认工作目录
mkdir -p /home/yuqing/fastdfs
#启动tracker
/usr/bin/fdfs_trackerd /etc/fdfs/tracker.conf start
启动后/home/yuqing/fastdfs目录会生成两个文件夹
[root@iz2ze3dj8i3kf6iexu16sgz fastdfs]# ll
total 8
drwxr-xr-x 2 root root 4096 Dec 1 14:37 data
drwxr-xr-x 2 root root 4096 Dec 1 14:37 logs
4. 安装和启动storage
配置storage.conf
cd /etc/fdfs
vi storage.conf
修改配置:
tracker_server=自己的ip:22122
port=23000 #可改或者可以默认
23000是storage的默认端口,需要放开端口防火墙,或者云服务器放开23000端口安全组,然后启动storage。
/usr/bin/fdfs_storaged /etc/fdfs/storage.conf start
假如无法正常启动,则需要排查防火墙22122和23000端口是否放开,或者云服务器安全组端口是否放开。
启动成功后/home/yuqing/fastdfs/data目录下会生成如下目录:
[root@iz2ze3dj8i3kf6iexu16sgz data]# ls
00 08 10 18 20 28 30 38 40 48 50 58 60 68 70 78 80 88 90 98 A0 A8 B0 B8 C0 C8 D0 D8 E0 E8 F0 F8 FE
01 09 11 19 21 29 31 39 41 49 51 59 61 69 71 79 81 89 91 99 A1 A9 B1 B9 C1 C9 D1 D9 E1 E9 F1 F9 FF
02 0A 12 1A 22 2A 32 3A 42 4A 52 5A 62 6A 72 7A 82 8A 92 9A A2 AA B2 BA C2 CA D2 DA E2 EA F2 FA storage_changelog.dat
03 0B 13 1B 23 2B 33 3B 43 4B 53 5B 63 6B 73 7B 83 8B 93 9B A3 AB B3 BB C3 CB D3 DB E3 EB F3 FB storage_groups_new.dat
04 0C 14 1C 24 2C 34 3C 44 4C 54 5C 64 6C 74 7C 84 8C 94 9C A4 AC B4 BC C4 CC D4 DC E4 EC F4 FC storage_servers_new.dat
05 0D 15 1D 25 2D 35 3D 45 4D 55 5D 65 6D 75 7D 85 8D 95 9D A5 AD B5 BD C5 CD D5 DD E5 ED F5 FD storage_stat.dat
06 0E 16 1E 26 2E 36 3E 46 4E 56 5E 66 6E 76 7E 86 8E 96 9E A6 AE B6 BE C6 CE D6 DE E6 EE F6 fdfs_storaged.pid storage_sync_timestamp.dat
07 0F 17 1F 27 2F 37 3F 47 4F 57 5F 67 6F 77 7F 87 8F 97 9F A7 AF B7 BF C7 CF D7 DF E7 EF F7 fdfs_trackerd.pid sync
5. 测试上传文件
vi /etc/fdfs/client.conf
修改配置:
tracker_server = 你服务器ip:22122
上传一张图片测试,将一张图片上传到 /tmp 目录下
文件名: /temp/1.jpg
/usr/bin/fdfs_test /etc/fdfs/client.conf upload /tmp/1.jpg
上传成功后,下图:
上面返的是图片地址,代表上传成功,由于还未和nginx整合,需要跟nginx搭配访问。
三、安装nginx和fastdfs-nginx-module模块
1. 配置fastdfs-nginx-module模块
cd /opt/fastdfs-nginx-module/src
修改config文件
vim config
将文件中的所有 /usr/local/ 路径改为 /usr/,因为包都在/usr下,改成如下:
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/"
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\"'"
然后修改mod_fastdfs.conf
cp mod_fastdfs.conf /etc/fdfs/
vi /etc/fdfs/mod_fastdfs.conf
修改下面的两个配置
tracker_server=你服务器ip:22122
url_have_group_name = true
将 /usr/lib64 目录下的 libfdfsclient.so 文件拷贝至 /usr/lib 目录下
cp /usr/lib64/libfdfsclient.so /usr/lib
2. 安装nginx
#进入nginx目录
cd /opt/nginx-1.8.0
配置和安装
./configure \
--prefix=/etc/nginx \
--pid-path=/var/run/nginx.pid \
--lock-path=/var/lock/nginx.lock \
--error-log-path=/var/log/nginx/error.log \
--http-log-path=/var/log/nginx/access.log \
--with-http_gzip_static_module \
--http-client-body-temp-path=/var/cache/nginx/client_temp \
--http-proxy-temp-path=/var/cache/nginx/proxy_temp \
--http-fastcgi-temp-path=/var/cache/nginx/fastcgi_temp \
--http-uwsgi-temp-path=/var/cache/nginx/uwsgi_temp \
--http-scgi-temp-path=/var/cache/nginx/scgi_temp \
--add-module=/opt/fastdfs-nginx-module/src
#编译和安装
make && make install
#创建nginx的temp目录
mkdir -p /var/cache/nginx/client_temp
3. 修改nginx配置
修改nginx.conf配置文件
vi /etc/nginx/conf/nginx.conf
新增一个server:
server{
listen 80;
server_name xx.xx.xx.xx;
location ~/group[0-9]/ {
ngx_fastdfs_module;
}
}
启动nginx
#启动nginx命令
/etc/nginx/sbin/nginx
#重新加载配置并启动nginx
/etc/nginx/sbin/nginx -s reload
#停止nginx
/etc/nginx/sbin/nginx -s stop
4. 验证是否已上传的图片能否打开
上面上传文件后有打印链接,如下:
http://xx.xx.xx.xx/group1/M00/00/00/rBHjQ2GnIBCABDfWAABFnwpyjHY243_big.jpg
放在浏览器查看:
5. 将nginx加入到环境变量,方便访问
编辑/etc/profile
vim /etc/profile
在最后一行添加配置,:wq保存
PATH=$PATH:/etc/nginx/sbin
export PATH
使配置立即生效
source /etc/profile
6. 加入开机启动项
编辑 /etc/rc.d/rc.local 文件
vi /etc/rc.d/rc.local
文件末尾增加下面内容:
# fastdfs start
/usr/bin/fdfs_trackerd /etc/fdfs/tracker.conf start
/usr/bin/fdfs_storaged /etc/fdfs/storage.conf start
# nginx start
/etc/nginx/sbin/nginx
然后给rc.local 文件增加可执行的权限
chmod +x /etc/rc.d/rc.local
配置完后,再次重启系统,fastDFS和nginx都可以自动启动。
四、java代码实现fastDFS上传
修改pom.xml
<!-- 连接fastdfs文件系统 -->
<dependency>
<groupId>com.luhuiguo</groupId>
<artifactId>fastdfs-spring-boot-starter</artifactId>
<version>0.2.0</version>
</dependency>
修改application.yml
# 上传文件的最大的大小
http:
multipart:
max-file-size: 10000000
fdfs:
# 连接Tracker服务器超时时间
connect-timeout: 10000
# storage服务器响应的超时时间
so-timeout: 3000
# trakcer服务器的数量
tracker-list:
- xx.xx.xx:22122 #你的tracker服务器ip
java代码:
@Autowired
private FastFileStorageClient storageClient;
/**
* 上传的处理
* @param file 上传的文件
* @return 上传成功后返回完整的图片URL
* @throws IOException
*/
@PostMapping("upload")
public String upload(MultipartFile file) throws IOException {
// data.getOriginalFilename():取到文件的名字
// FilenameUtils.getExtension(""):取到一个文件的后缀名
String extension = FilenameUtils.getExtension(file.getOriginalFilename());
// group1:指storage服务器的组名
// data.getSize():文件的大小
// 这一行是通过storageClient将文件传到storage容器
StorePath uploadFile = storageClient.uploadFile("group1", file.getInputStream(), file.getSize(), extension);
//xxx.xxx.xxx为nginx的ip地址,也可以改为相应域名解析
return "http://xxx.xxx.xxx/"+uploadFile.getFullPath();
}
然后写一个upload.html
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>上传文件到FastDFS</title>
</head>
<body>
<!--
上传的方式是post
enctype的格式必须是:multipart/form-data
-->
<form action="upload" method="post" enctype="multipart/form-data">
文件:<input type="file" name="myFile">
<input type="submit" value="上传">
</form>
</body>
</html>
四、docker一键安装fastdfs
参考链接:https://blog.csdn.net/qq_37128049/article/details/112293529?spm=1001.2014.3001.5501
以上实现文件上传和返回图片URL地址功能。