共计 6613 个字符,预计需要花费 17 分钟才能阅读完成。
腾讯云服务器如何搭建图片服务器?购买云服务器之后,搭建图片服务器的方法有很多,对于技术熟练的用户,可以选择自助适合的环境(如:nginx、fastfds、mysql 等)网上虽然有不少资料,但是很多教程写的并不完整,照着去做的时候会出现各种各样的问题。
在网上也搜不出个解决方式来, 其实主要都是版本的问题,之前一些版本引用的库位置有问题, 需要自己修改, 我们还是自己整理一遍整个流程,用起来才放心。安装的时候请按照相同的版本安装,之前的一些版本确实是会出现不少问题的。
点击进入:腾讯云服务器最新优惠活动
系统: Centos 7
环境和依赖
按照后面标注的方式下载或者安装好需要的依赖
系统: centos7
yum install -y gcc-c++ #需要依赖 gcc
yum install -y pcre #用于支持 rewrite 模块 pcre-8.32-17
yum install -y libevent #FastDFS 依赖 libevent 库 libevent-2.0.21-4.el7.x86_64
yum install -y zlib zlib-devel #用于支持 gzip 模块 zlib-1.2.7-17.el7.x86_64
libfastcommon-master.zip #libfastcommon 包含了 FastDFS 运行所需要的一些基础库。https://github.com/happyfish100/libfastcommon/releases
fastdfs-nginx-module-master.zip #
https://codeload.github.com/happyfish100/fastdfs-nginx-module/zip/master
FastDFS 版本:fastdfs-5.11.zip
#https://github.com/happyfish100/fastdfs/archive/V5.11.zip
Nginx 版本:nginx-1.14.tar.gz : #官网下载: http://nginx.org/en/download.html
安装依赖
可以 yum 安装的先直接 yum 安装
将所有下载好依赖上传至服务器 /download 目录
安装 libfastcommon
unzip libfastcommon-1.0.39.zip
mv libfastcommon-1.0.39 /usr/local/libfastcommon
cd /usr/local/libfastcommon/
./make.sh #编译
./make.sh install #安装
# 检查确认/usr/lib64 和 /usr/lib 目录下都生成了 libfastcommon.so
(有些版本可能/usr/lib 下不会生成)
ls /usr/lib64 | grep libfastcommon.so
ls /usr/lib | grep libfastcommon.so
安装 tracker
FastDFS 由跟踪服务器(tracker server)、存储服务器(storage server)和客户端组成,
fastdfs 的 tracker 和 storage 其实用的是同一个服务, 只是配置文件不同
Tracker 是 FastDFS 的协调者,负责管理所有的 storage server 和 group
storage server 负责存储服务
cd /download
unzip fastdfs-5.11.zip
mv fastdfs-5.11 /usr/local/FastDFS
cd /usr/local/FastDFS/
./make.sh && ./make.sh install #编译之后接着进行安装
#确认安装成功 , 没有报错后 , 拷贝配置文件到/etc/fdfs
cp /usr/local/FastDFS/conf/* /etc/fdfs/
#, 进入 /etc/fdfs 目录, 如果没有 tracker.conf 就拷贝一份 tracker.conf.sample 去掉 sample
cp tracker.conf.sample track.conf
配置 tracker.conf ;
vi track.conf # 修改以下配置
#===============
base_path=/home/fastdfs #基础目录 , 以后的 data 和日志目录都会放在此目录下
http.server_port=80 #配置 http 服务端口 , 这个端口跟后面 nginx 的监听端口对应
创建目录(目录可能不存在)
mkdir /home/fastdfs
启动 tracker,运行如下命令:
/usr/bin/fdfs_trackerd /etc/fdfs/track.conf restart
#检查是否启动成功 : 默认端口22122
ps -ef | grep fdfs
#检查/home/fastdfs 下是否生成 data / logs 两个目录
ls /home/fastdfs/
安装 storage
fastdfs 的 tracker 和 storage 其实用的是同一个服务, 只是配置文件不同, 我们只需要使用 storage 的配置文件启动 fastdfs 即是 storage 服务
cd /etc/fdfs
#如果没有 storage.conf 拷贝一份 storage.conf.sample 命名为 storage.conf
cp storage.conf.sample storage.conf
#配置 storage.conf
vi storage.conf #修改如下配置
#===========================
group_name=group1 #配置组名 , 同一个组的 storage 互为备份
base_path=/home/fastdfs #基础目录
#store 存放文件的位置(store_path), 可以配置多个, 记得创建路径
store_path0=/home/fdfs_storage
#如果有多个挂载磁盘则定义多个 store_path,如下
#store_path1=.....
#store_path2=......
#配置 tracker 服务器 :IP, 阿里云服务器如果需要外部访问请配置公网 ip, 不要使用私有 ip
tracker_server=192.168.112.130:22122
#如果有多个 tracker 则配置多个 tracker
#tracker_server=192.168.112.131:22122
#配置 http 端口
http.server_port=80
#==========完===========
#创建 /home/fdfs_storage 目录
mkdir -p /home/fdfs_storage
#启动 storage
/usr/bin/fdfs_storaged /etc/fdfs/storage.conf restart
#查看启动是否成功
fdfs_monitor /etc/fdfs/storage.conf #查看 fdfs 状态
ps -ef | grep fdfs
#查看目录是否创建 ,/home/fdfs_storage/data 应该会自动生成256 个文件夹
ls /home/fdfs_storage/data
测试上传文件
fastdfs 自带了测试客户端, 我们可以使用它测试搭建是否成功
cd /etc/fdfs
cp client.conf.sample client.conf
vim client.conf #修改如下配置
#=================
base_path=/home/fastdfs
tracker_server=192.168.112.130:22122
#=======完========
#准备一张图片进行测试
/usr/bin/fdfs_test /etc/fdfs/client.conf upload /download/123.jpg
#一切正常的话会返回图片地址等信息
example file url: http://192.168.112.130/group1/M00/00/00/wKhwgltd_uyAZSPfAAJHNmHqPh0482_big.jpg
#检查文件是否存在 ( 文件名被存放在 /home/fdfs_storage/data/00/00 对应的目录中 ), 如果存在即是保存 OK,此时还无法使用 http 下载
cd /home/fdfs_storage/data/00/00 #查看是否存在 wKhwgltd_uyAZSPfAAJHNmHqPh0482_big.jpg
FastDFS 和 Nginx 整合
单独的 Fastdfs 对 http 支持不好, 所以作为图片服务器, 我们一般都会整合 Nginx 来支持图片的 http 访问
# 解压 fastdfs-nginx-module 到 /usr/local 目录下;cd /download
unzip fastdfs-nginx-module-master.zip
mv fastdfs-nginx-module-master /usr/local/fastdfs-nginx-module
cd /usr/local/fastdfs-nginx-module/src
修改 config 文件,
# 将文件中的所有 /usr/local/ 路径改为 /usr/ ,
#如果后面步骤中编译 nginx 报错把下面两项做以下修改
ngx_module_incs="/usr/include/fastdfs /usr/include/fastcommon/"
CORE_INCS="$CORE_INCS /usr/include/fastdfs /usr/include/fastcommon/"
拷贝配置文件到 /etc/fdfs
cp mod_fastdfs.conf /etc/fdfs/
#修改 /etc/fdfs/mod_fastdfs.conf;vi /etc/fdfs/mod_fastdfs.conf
#======修改以下内容========
base_path=/home/fastdfs #保存日志的路径
tracker_server=192.168.112.130:22122 #track_server 配置的服务端口
url_have_group_name=true #url 中是否包含 group 名称
store_path0=/home/fdfs_storage #指定文件存储路径(必须和 storage.conf 配置相同)
检查 /usr/lib 和 usr/lib64 下是否有 libfdfsclient.so
ls /usr/lib | grep libfdfsclient.so
ls /usr/lib64 | grep libfdfsclient.so
创建 nginx/client 目录
mkdir -p /var/temp/nginx/client
安装 nginx
tar -zxvf nginx-1.14.0.tar.gz -C /usr/local/
编译 nginx, 加入 fastdfs 模块, 如果之前装过 nginx, 需要重新安装
# 进入解压目录 , 日志目录可自己定义, 主要是 add-modoule
cd /usr/local/nginx-1.14.0
#添加模块
./configure \
--prefix=/usr/local/nginx \
--add-module=/usr/local/fastdfs-nginx-module/src
编译并安装
# 在 nginx1.14.0目录下执行
make && make install
编译后在 /usr/local 下生成 nginx 目录
修改 nginx 配置文件
vi /usr/local/nginx/conf/nginx.conf
#======添加配置===========
server {
listen 80;
server_name 192.168.112.130;
location /group1/M00/ {
root /home/fdfs_storage/data;
ngx_fastdfs_module;
}
}
启动 nginx
/usr/local/nginx/sbin/nginx
#检查是否启动成功 , 不成功就去查看错误日志/var/log/nginx/error.log
ps -ef | grep nginx
关闭防火墙或者添加对应端口
systemctl stop firewalld.service
再次上传一张图片
/usr/bin/fdfs_test /etc/fdfs/client.conf upload /download/123.jpg
得到一个地址
example file url: http://192.168.112.130/group1/M00/00/00/wKhwgltekE6AeekMAAJHNmHqPh0069_big.jpg
在浏览器中访问该图片:
http://192.168.112.130/group1/M00/00/00/wKhwgltekE6AeekMAAJHNmHqPh0069_big.jpg
如果能够正常浏览图片那就大功告成,
# 查看 nginx 日志可以看到访问记录
tail -f -n 100 /var/log/nginx/access.log
PS: nginx fastfds 的安装最坑的就是一些版本中动态链接的问题, 在使用之前一些版本的时候经常会出现各种问题, 如果确实需要使用之前的版本可能就需要自己去改一些动态链接的指向了, 如果没有特别版本要求, 使用本文的版本是没有问题的
项目中如何使用 fastdfs
使用方式比较简单, 我们就直接拿来一个示例代码了
导入依赖(也可以自己去 git 编译一个 jar 包出来)
<dependency>
<groupId>net.oschina.zcx7878</groupId>
<artifactId>fastdfs-client-java</artifactId>
<version>1.27.0.0</version>
</dependency>
配置文件: fdfs.conf
# 连接 tracker 服务器超时时长
connect_timeout = 10
# socket 连接超时时长
network_timeout = 30
# 文件内容编码
charset = UTF-8
# tracker 服务器端口
http.tracker_http_port = 80
http.anti_steal_token = no
#密码
http.secret_key = 123456
# tracker 服务器 IP 和端口(可以写多个)tracker_server = 192.168.58.128:22122
测试代码
public class FastdfsTest {
@Test
public void testUpload() throws Exception {
//1、把 FastDFS 提供的 jar 包添加到工程中
//2、初始化全局配置。加载一个配置文件。
ClientGlobal.init("F:\\wolf-shop\\src\\main\\resources\\fdfs.conf");
//3、创建一个 TrackerClient 对象。
TrackerClient trackerClient = new TrackerClient();
//4、创建一个 TrackerServer 对象。
TrackerServer trackerServer = trackerClient.getConnection();
//5、声明一个 StorageServer 对象,null。
StorageServer storageServer = null;
//6、获得 StorageClient 对象。
StorageClient storageClient = new StorageClient(trackerServer, storageServer);
//7、直接调用 StorageClient 对象方法上传文件即可。
String[] result = storageClient.upload_file("F:\\redis_demo\\src\\main\\resources\\logo.png", "png", null);
StringBuilder sb = new StringBuilder("http://192.168.112.130/");
sb.append(result[0]).append("/").append(result[1]);
System.out.println("图片访问地址:"+sb.toString());
}
}
项目中根据自己的实际使用情况抽取一个工具类用起来就方便了