前提介绍
- 服务器部分本来是管服务器的人装的,现在没有这部分的人所以自己就尝试这装一下。所有的过程都是按照网上的步骤一步一步来的,如果你安装过程中出现了一些问题。可能本文无法帮助到您。但是笔者出现的问题肯定会在文章介绍出来。
- 本文显示安装的http版本,后面在介绍http转型为https。笔者写的时候并不会安装,然后成功后又想弄成https但是博客改动起来好麻烦,按照前面说的,服务器也不是本职工作。整了一天才弄好。难死了就也懒得改动了。且好多博客都是安装的http的,其实我的https转型部分也有一些参考价值
目录
FastDFS服务器安装
环境介绍
阿里云——CentOS 7.7 64位
前期准备
直接选择最新的下载就行,本文使用的版本号在【】内已经标明。
Common核心包【1.0.58】:https://github.com/happyfish100/libfastcommon/tags
FastDFS软件包【6.08】:https://github.com/happyfish100/fastdfs/tags
fastdfs-nginx重定向包【1.22】:https://github.com/happyfish100/fastdfs-nginx-module/tags
Nginx重定向工具【1.22.0】:http://nginx.org/en/download.html
安装初始环境
#安装GCC-c++
yum -y install gcc-c++
#安装libevent库
yum -y install libevent
#通过Xftp将文件上传到服务器上 我的位置是/usr/local/fastdfs
安装libfastcommon
这个必须先安装,不然FastDFS安装会报路径不存在
#解压
tar -zxvf libfastcommon-1.0.58.tar.gz
#进入解压文件 路径请根据自己的来
cd /usr/local/fastdfs/libfastcommon-1.0.58/
#编译与安装
./make.sh
./make.sh install
#安装号后就会提示你已经将一个叫libfastcommon.so文件创建在 /usr/lib64下【如图1】
#现在需要将这个文件放置在Liunx的标准路径下 /usr/lib
# ---------------------------注意---------------------------
# 新版本创建的时候不仅会在/usr/lib64创建 也会在/usr/lib创建。所以无需辅助。如果需要复制运行以下代码
# cp /usr/lib64/libfastcommon.so /usr/lib
图1 安装libfastcommon的参数
安装FastDFS
#解压
tar -zxvf fastdfs-6.08.tar.gz
#进入解压文件 路径请根据自己的来
cd /usr/local/fastdfs/fastdfs-6.08/
#编译与安装 【图2】
./make.sh
./make.sh install
# 此时查看 /etc/fdfs/文件夹出现了很多配置文件,但是对应原始的文件夹下缺少了一部分。
# 如果你需要nginx服务需要进行全部辅助过来。
# 我这里需要安装nginx所以选择全部拷贝
cp /usr/local/fastdfs/fastdfs-6.08/conf/* /etc/fdfs/
# 问我覆盖全部选覆盖
/> cp: overwrite ‘/etc/fdfs/client.conf’? y
/> cp: overwrite ‘/etc/fdfs/storage.conf’? y
/> cp: overwrite ‘/etc/fdfs/storage_ids.conf’? y
/> cp: overwrite ‘/etc/fdfs/tracker.conf’? y
# 创建一个存储路径 这个路径随意,用于存储。配置的时候需要用到这个路径。注意了
mkdir -p /home/fastDFS_data/tracker/
# 修改配置文件【修改内容查看图3】
vim /etc/fdfs/tracker.conf
# 启动start 重启restart 关闭stop。修改末尾即可
fdfs_trackerd /etc/fdfs/tracker.conf start
# 建议不是老油条暂时不要设置开机自启 小心开不了机。这里我也不尝试就不粘贴指令了
图2 安装FastDFS参数
图3 FastDFS需要修改的参数
配置存储端Storage
安全组配置
笔者使用的是阿里云服务器,这一步请根据实际情况设置
防火墙配置
笔者喜欢开启防火墙,如果平时测试都是关闭防火墙的这一步可以直接忽略
# 开启防护墙
systemctl start firewalld
# 放开端口
firewall-cmd --zone=public --add-port=22122/tcp --permanent
firewall-cmd --zone=public --add-port=23000/tcp --permanent
# 重启防火墙
systemctl restart firewalld
配置Storage
# 创建一个存储路径 这个路径随意,用于存储。配置的时候需要用到这个路径。注意了
mkdir -p /home/fastDFS_data/storage
# 修改配置文件【修改内容查看图4】
vim /etc/fdfs/storage.conf
# 启动服务
fdfs_storaged /etc/fdfs/storage.conf start
图4 Storage需要修改的参数
这一步执行完毕后需要去你说设置的Storage目录下面查看是否创建对应的目录。如果失败可以看看日志。
配置客户端Client
# 将libfdfsclient.so拷贝到/usr/lib
# 这一步对于没有的人用的,我这个版本已经创建好了
cp /usr/local/fastdfs/fastdfs-6.08/client/libfdfsclient.so /usr/lib
# 创建一个存储路径 这个路径随意,用于存储。配置的时候需要用到这个路径。注意了
mkdir -p /home/fastDFS_data/client
# 修改配置文件【修改内容查看图5】
vim /etc/fdfs/client.conf
图5 Client需要修改的参数
测试是否安装成功
-
查看进程是否开启
netstat -unltp|grep fdfs
-
上传一个文件
fdfs_test /etc/fdfs/client.conf upload /home/img/123.jpg # 如果成功会跳出一大堆,其中重要的是能够出现以下内容 /> example file url: ~H~ttp://马赛克/group1/M00/00/00/ag5p7mLbzt-AV2bbAADg_skRKOk283_big.jpg # 最后需要确认下文件是否上传 cd /home/fastDFS_data/storage/data/00/00/ ll # ok我们看到我们上传的文件已经保存在当中了
小结
至此安装fastDFS全部过程已经结束。如果你想修改端口22122与23000 都是可以通过tracker配置文件和storage配置文件进行修改的不是固定的。
Nginx服务安装
为啥安装
Web服务使用的是Http或Https协议,这个协议fastDFS识别不了。需要专门有个东西来作为解释器来帮他翻译字节码文件。FastDFS作者提供了一个解释器为fastDFS-nginx。所以需要安装nginx
安装初始环境
#安装PCRE、zlib、openssl
#yum install -y pcre pcre-devel;yum install -y zlib zlib-devel;yum install -y openssl openssl-devel;
yum install -y pcre pcre-devel
yum install -y zlib zlib-devel
yum install -y openssl openssl-devel
配置解释器fastdfs-nginx
删除local标签
# 解压文件
tar -zxvf fastdfs-nginx-module-1.22.tar.gz
# 修改配置文件
vim /usr/local/fastdfs/fastdfs-nginx-module-1.22/src/config
#修改内容为 将/usr/local/xxx ==> /usr/xxx
# vim=> 表示当前属于vim语法
vim=>:%s/local////g
vim=>:wq
修改配置文件
# 将配置文件拷贝到之前的配置文件目录
cp /usr/local/fastdfs/fastdfs-nginx-module-1.22/src/mod_fastdfs.conf /
etc/fdfs/
# 修改配置文件
vim /etc/fdfs/mod_fastdfs.conf
安装Nginx
# 解压nginx
tar -zxvf nginx-1.22.0.tar.gz
# 进入niginx文件夹
cd /usr/local/fastdfs/nginx-1.22.0/
# 输入配置命令 这里一定要注意格式建议先准备个记事本编辑好然后复制粘贴进去
#./configure --add-module=[你的fastdfs-nginx的src的绝对路径]
./configure --add-module=/usr/local/fastdfs/fastdfs-nginx-module-1.22/src
# 等待一堆not found
# 编译
make
# 出现以下内容安装成功
# 评论区说这里容易出错,解释说换成1.16版本以下就能成功
# 但是建议先找出错原因是在不行再换
> make[1]: Leaving directory '/usr/local/fastdfs/nginx-1.22.0'
# 安装
make install
# 进入安装目录
cd /usr/local/nginx/conf
# 修改配置文件 配置文件见下方
vim nginx.conf
# 在原有的server里面随便找个空单,直接添加下面这句话就行了
server {
# 如果访问路径为/group1/M00就将他直接转发给fastdfs-nginx处理而不是服务器处理
location ~/group1/M00{
ngx_fastdfs_module;
}
}
# 启动nginx
cd /usr/local/nginx/sbin/
./nginx
# 查看服务是否启动
ps -aux | grep nginx
> nginx: master process
> nginx: worker process
# 访问下之前的路径发现通过外网可以连接到对应的文件
笔者出现的问题
没有出现worker线程或日志打印ERROR – file: ../tracker/fdfs_shared_func.c, line: 474, host “tracker” is invalid, error info: Unknown host
解决方法:
- /etc/fdfs/ 文件夹下没有mime.types 将fastDFS解压包下conf里面的mime.types复制到/etc/fdfs/
- 没有修改mod_fastdfs.conf配置文件,我就是粗心大意忘记保存了。
Https转型
将传输的协议设置为加密协议
安全组
防火墙
firewall-cmd --zone=public --add-port=443/tcp --permanent
systemctl restart firewalld
证书安装
# 首先准备好证书,笔者是阿里云的证书,直接下载nginx即可
# 进入nginx的conf目录,创建cert文件夹。然后将下载好的证书上传上去
cd /usr/local/nginx/conf/
mkdir cert
# 解压文件
# 如果没有unzip先安装 yum install unzip
unzip 马赛克_nginx.zip
# 编辑nginx文件 配置内容如下
vim /usr/local/nginx/conf/nginx.conf
# ————————————————————————————此教程来源于阿里云官方教程————————————————————————————
# ————————————————————————————这些可以直接复制过去然后根据备注修改————————————————————————————
#以下属性中,以ssl开头的属性表示与证书配置有关。
server {
#配置HTTPS的默认访问端口为443。
#如果未在此处配置HTTPS的默认访问端口,可能会造成Nginx无法启动。
#【需要修改】如果您使用Nginx 1.15.0及以上版本,请使用listen 443 ssl代替listen 443和ssl on。
listen 443 ssl;
#【需要修改】需要将yourdomain替换成证书绑定的域名。
server_name yourdomain;
root html;
index index.html index.htm;
# 【需要修改】 注意cert-file-name修改成你的证书的完整名称 我的是 数字_域名_nginx
ssl_certificate cert/cert-file-name.pem;
ssl_certificate_key cert/cert-file-name.key;
ssl_session_timeout 5m;
ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4;
#表示使用的加密套件的类型。
ssl_protocols TLSv1.1 TLSv1.2 TLSv1.3; #表示使用的TLS协议的类型,您需要自行评估是否配置TLSv1.1协议。
ssl_prefer_server_ciphers on;
location / {
root html; #Web网站程序存放目录。
index index.html index.htm;
}
# 这里是你的fastFDS服务
# 如果访问路径为/group1/M00就将他直接转发给fastdfs-nginx处理而不是服务器处理
location ~/group1/M00/{
ngx_fastdfs_module;
}
# 这一坨我建议带上 这样可以重定向到一个默认的页面
error_page 404 /404.html;
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
}
# ————————————————————————————可选项————————————————————————————
# 如果您希望所有的HTTP访问自动跳转到HTTPS页面,则可以在需要跳转的HTTP站点下添加以下rewrite语句
# nginx自带一个80 我的建议是直接覆盖全部只留下这些
server {
listen 80;
# 【需要修改】需要将yourdomain替换成证书绑定的域名。
server_name yourdomain;
rewrite ^(.*)$ https://$host$1; #将所有HTTP请求通过rewrite指令重定向到HTTPS。
location / {
index index.html index.htm;
}
}
如果重启Nginx服务时收到报错,您可以使用以下方法进行排查:
- 收到the “ssl” parameter requires ngx_http_ssl_module报错:您需要重新编译Nginx并在编译安装的时候加上–with-http_ssl_module配置。
- 收到”/cert/3970497_demo.aliyundoc.com.pem”:BIO_new_file() failed (SSL: error:02001002:system library:fopen:No such file or directory:fopen(‘/cert/3970497_demo.aliyundoc.com.pem’,’r’) error:2006D080:BIO routines:BIO_new_file:no such file)报错:您需要去掉证书相对路径最前面的/。例如,您需要去掉/cert/cert-file-name.pem最前面的/,使用正确的相对路径cert/cert-file-name.pem。
类似问题有很多可能,几乎都是格式不正确。根据提示改就行“
之后就是重新编译安装的过程
# 第一步一定是查看nginx是否启动,并直接杀死nginx线程。这里不关闭后面可能会出现成功了但是没完成
# 成功的特殊壮举。因为已经配置了上面部分,自带的关闭会报错还是使用kill方便
# 根据work与master的端口号进行kill。
ps -aux|grep nginx
# 杀死进程后进入你的nginx路径中
cd /usr/local/fastdfs/nginx-1.22.0/
# 重新编译与安装
# 注意--add-module=后面的路径要和你fastdfs-nginx位置相同
# 注意--prefix=/usr/local/nginx 不是--prefix=/usr/local/nginx/ 看的那篇文章坑死人了
./configure --prefix=/usr/local/nginx --add-module=/usr/local/fastdfs/fastdfs-nginx-module-1.22/src --with-http_ssl_module
make
make install
# 进入nginx安装后的目录
cd /usr/local/nginx/sbin/
# 启动nginx
./nginx
# 返回进程号 查看是否正常启动。如果不是两个进程查看上面http部分安装的可能问题。但是
# 一路看下来应该不会再出错了
> nginx: master process
> nginx: worker process
# 最后再浏览器上访问 https://域名 出现以下图完美成功
修改tracker、storage、client配置文件
# 进入配置文件目录
cd /etc/fdfs/
# 修改 将http.server_port设置为443 这里不再阐述怎么修改
#重启服务
fdfs_trackerd /etc/fdfs/tracker.conf restart;fdfs_storaged /etc/fdfs/storage restart
# 查看是否开启
netstat -unltp|grep fdfs
# 看见两个都是开启的,尝试下上传文件
fdfs_test /etc/fdfs/client.conf upload /home/img/123.jpg
# 上传成功,配置没有问题。尝试访问返回的图片,将开头改成https://域名//group1....
# 完美显示
到这里你已经完美实现了搭建FastDFS服务。芜湖!!!!!!!!!!
删除FastDFS服务
开个玩笑,之前以为服务有问题删除了准备重装,谁知道是自己搞错了。写都写了懒得删了
# 停止服务
service fdfs_trackerd stop;service fdfs_storaged stop;
# 查看pid
ps -ef | grep fdfs
# 杀死进程 xxxx是你查询的结果
kill xxxx
# 删除本地存储的配置和日志路径 这个是你配置文件里面的路径。
# 注意删除的范围
rm -rf /home/fastDFS_data/*
# 剩下就是疯狂删除
# 删除默认的安装目录 即你的解压的文件在哪里。
rm -rf /etc/fdfs
# 剩下的几乎大家都是一样的,应该都没有动过。可以直接运行。直接删除全部
rm -rf /usr/bin/fdfs_*;rm -rf /usr/bin/stop.sh/rm -rf /usr/bin/restart.sh;rm -rf /usr/include/fastdfs;rm -rf /usr/include/fastcommon;rm -rf /usr/lib64/libfdfsclient*;rm -rf /usr/lib/libfdfsclient*;
通过Java操作FastDFS
来到熟悉的代码环节,首先是依赖的注入。
官方的那个导不进去 另一个又各种安全漏洞。所以最后还是选这个
<!-- https://mvnrepository.com/artifact/net.oschina.zcx7878/fastdfs-client-java -->
<dependency>
<groupId>net.oschina.zcx7878</groupId>
<artifactId>fastdfs-client-java</artifactId>
<version>1.27.0.0</version>
</dependency>
首先需要准备一个配置文件。取名为xxxx.conf
即可。我这里取名为fdfs.conf
。配置的内容如下
# 超时时间
connect_timeout = 10
network_timeout = 30
# 编码字符集
charset = UTF-8
# tracker 服务器的 IP 和端口
tracker_server = 你的tracker地址:22122
配置号后将改文件放置在你的resources
文件夹下即可
之后就是直接粘贴上我的工具包。直接通过调用方法使用即可
/**
* 该类用于FastDFS服务的操作工具类
* @author musiro
* @version 0.1
* @date 2022/7/24
*/
@Slf4j
public final class FastDFSUtil {
private static final StorageClient CLIENT;
/**
* 禁止实例化
*/
private FastDFSUtil() {}
static {
try {
ClientGlobal.init("fdfs.conf");
TrackerClient trackerClient = new TrackerClient(ClientGlobal.g_tracker_group);
TrackerServer trackerServer = trackerClient.getConnection();
StorageServer storeStorage = trackerClient.getStoreStorage(trackerServer);
CLIENT = new StorageClient(trackerServer, storeStorage);
} catch (IOException | MyException e) {
throw new RuntimeException(e);
}
}
/**
* 获取客户端信息
* @return 客户端信息
*/
private static StorageClient getClientInfo(){
return CLIENT;
}
/**
* 上传文件[无法分段上传]
* @param fileName 文件名--不需要带后缀
* @param ext 文件后缀
* @param bytes 二进制文件
* @return 参数
* <ul>
* <li>结果[0]: 组名 例如:group1</li>
* <li>结果[1]: 保存服务器的位置 例如:M01/00/00/rBNTRGGKX7aEG67qAAAAAIpTlYQ431.jpg</li>
* </ul>
* @throws InterruptedException
* @throws MyException
* @throws IOException
*/
public static String[] upload(String fileName,String ext,byte[] bytes) throws MyException, IOException {
//获取连接
StorageClient connection = getClientInfo();
//设置文件介绍
NameValuePair[] pair = new NameValuePair[3];
pair[0] = new NameValuePair("fileName",fileName);
pair[1] = new NameValuePair("fileExt",ext);
pair[2] = new NameValuePair("fileSize",String.valueOf(bytes.length));
//上传文件
String[] strings = connection.upload_file(bytes, ext, pair);
//返回具体需要的参数
return strings;
}
/**
* 此方法只适用于本地测试使用,Springboot方法可以使用另一个方法
* @param path 图片路径
* @param ext 文件
* @param fileName 文件名称
* @return
* <ul>
* <li>结果[0]: 组名 例如:group1</li>
* <li>结果[1]: 保存服务器的位置 例如:M01/00/00/rBNTRGGKX7aEG67qAAAAAIpTlYQ431.jpg</li>
* </ul>
* @throws MyException
* @throws IOException
*/
public static String[] upload(String path,String ext,String fileName) throws MyException, IOException {
//获取连接
StorageClient connection = getClientInfo();
//设置文件介绍
NameValuePair[] pair = new NameValuePair[3];
pair[0] = new NameValuePair("fileName",fileName);
pair[1] = new NameValuePair("fileExt",ext);
pair[2] = new NameValuePair("fileSize",Long.toBinaryString(new File(path).length()));
//上传文件
String[] strings = connection.upload_file(path, ext, pair);
//返回具体需要的参数
return strings;
}
/**
* 文件下载
* @param groupName 组名 例如:group1
* @param path 完整路径 例如:M01/00/00/rBNTRGGKX7aEG67qAAAAAIpTlYQ431.jpg
* @return 文件流
* @throws InterruptedException
* @throws MyException
* @throws IOException
*/
public static byte[] download(String groupName,String path) throws InterruptedException, MyException, IOException {
//获取连接
StorageClient connection = getClientInfo();
//下载文件
byte[] res = connection.download_file(groupName,path);
//返回文件流
return res;
}
/**
* 删除文件
* @param groupName 组名 例如:group1
* @param path 完整路径 例如:M01/00/00/rBNTRGGKX7aEG67qAAAAAIpTlYQ431.jpg
* @throws InterruptedException
* @throws MyException
* @throws IOException
*/
public static void delete(String groupName,String path) throws MyException, IOException {
//获取连接
StorageClient connection = getClientInfo();
//下载文件
connection.delete_file(groupName,path);
}
}
参考文献
- 在Nginx或Tengine服务器上安装证书
- Fastdfs 卸载
- 手把手带你安装FastDFS及与SpringBoot整合【推荐食用】
- Centos7.x 搭建FastDFS并通过Nginx配置http或https访问
原创文章,作者:,如若转载,请注明出处:https://blog.ytso.com/276722.html