文章接着上一篇文章:fastDFS介绍(https://www.jianshu.com/p/d7e687967209)
3 fastDFS入门
3.1fastDFS安装与配置
3.1.1使用docker简易搭建FastDFS
启动docker:
systemctl start docker
另两篇文章的安装 https://blog.csdn.net/lizhihaooo/article/details/79261388 普通安装https://my.oschina.net/u/1867229/blog/829572
1、FastDFS镜像:
docker pull morunchang/fastdfs
2、创建tracker:
docker run -d --name tracker -v /home/fastdfs_docker/fdfs/tracker:/data/fast_data --privileged=true --net=host morunchang/fastdfs sh tracker.sh
执行如下命令查看tracker是否运行起来
docker container ls
如果想停止tracker服务,可以执行如下命令
docker container stop tracker
停止后,重新运行tracker,可以执行如下命令
docker container start tracker
3、创建storage:
docker run -d --name storage -v /home/fastdfs_docker/fdfs/storage_data:/data/fast_data --privileged=true --net=host -e TRACKER_IP=172.17.107:22122 -e GROUP_NAME=group1 morunchang/fastdfs sh storage.sh
4、验证是否安装上了
docker container ls --all
3.1.2linux小常识
修改.conf文件的时候,突然关闭了
方法1、此时你可以恢复文件:
vim -r nginx.conf
恢复以后把.swap文件删掉,在打开时就不会用提示良,注意.swap文件是个隐藏文件。可用:la查看。以.开头的是隐藏文件。
方法2、ls -a 查询隐藏文件
将后缀名为.swp的文件删除
rm -f .nginx.conf.swp
再次编辑文件不在出现提示警告!
拷贝文件到docker https://blog.csdn.net/qq_28822933/article/details/83857357
修改文件
修改文件 vim 文件名
i 是进入修改模式
: 输入命令
wq 保存 q 退出 !q强制退出
3.1.3Tracker配置
fastDFS的配置文件目录 :/etc/fdfs
主要的配置文件:/etc/fdfs/tracker.conf (tracker配置文件 );storage.conf(storage配置文件)
运行命令进入容器
docker exec -it tracker /bin/bash
进入/etc/fdfs
查看tracker.conf
cat tracker.conf
tracker.conf配置内容如下:
端口:port=22122
存储策略:store_lookup=
取值范围:0(轮询向storage存储文件)、1(指定具体的group)、2负载均衡,选择空闲的storage存储
指定具体的group:store_group= 如果store_lookup设置为1则这里必须指定一个具体的group。
tracker 基础目录:base_path=/home/fastdfs,tracker在运行时会向此目录存储storage的管理数据。
3.1.4storage配置
storage.conf配置 内容如下:
组名:group_name=
端口:port=
向tracker心跳间隔(秒):heart_beat_interval=30
storage基础目录:base_path=/home/fastdfs
磁盘存储目录,可定义多个store_path:
store_path0=/home/fastdfs/fdfs_storage 此目录下存储上传的文件,在/home/fastdfs/fdfs_storage/data下
store_path1=...
上报tracker的地址:tracker_server=192.168.101.64:22122
如果有多个tracker则配置多个tracker,比如:
tracker_server=192.168.101.64:22122
tracker_server=192.168.101.65:22122
....
3.2 文件上传下载测试
3.2.1搭建环境
这里我们使用javaApi测试文件的上传,java版本的fastdfs-client地址在:
https://github.com/happyfish100/fastdfs-client-java,参考此工程编写测试用例。
1)创建maven工程
pom.xml
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<!-- 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>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-io</artifactId>
<version>1.3.2</version>
</dependency>
</dependencies>
- 配置 文件
在classpath:config下创建fastdfs-client.properties文件
fastdfs.connect_timeout_in_seconds = 5
fastdfs.network_timeout_in_seconds = 30
fastdfs.charset = UTF-8
fastdfs.tracker_servers = 192.168.85.129:22122(配置的地址)
3.2.2 文件上传
@SpringBootTest
@RunWith(SpringRunner.class)
public class TestFastDFS {
//上传文件
@Test
public void testUpload(){
try {
//加载fastdfs-client.properties配置文件
ClientGlobal.initByProperties("config/fastdfs-client.properties");
//定义TrackerClient,用于请求TrackerServer
TrackerClient trackerClient = new TrackerClient();
//连接tracker
TrackerServer trackerServer = trackerClient.getConnection();
//获取Stroage
StorageServer storeStorage = trackerClient.getStoreStorage(trackerServer);
//创建stroageClient
StorageClient1 storageClient1 = new StorageClient1(trackerServer,storeStorage);
//向stroage服务器上传文件
//本地文件的路径
String filePath = "F:/壁纸/003.jpg";
//上传成功后拿到文件Id
String fileId = storageClient1.upload_file1(filePath, "jpg", null);
System.out.println(fileId);
//group1/M00/00/00/wKhVgVw-qbmAXdpRAAp2uCv_JwU096.jpg
} catch (Exception e) {
e.printStackTrace();
}
}
}
3.2.3 文件查询
//查询文件
@Test
public void testQueryFile() throws IOException, MyException {
ClientGlobal.initByProperties("config/fastdfs-client.properties");
TrackerClient tracker = new TrackerClient();
TrackerServer trackerServer = tracker.getConnection();
StorageServer storageServer = null;
StorageClient storageClient = new StorageClient(trackerServer,storageServer);
FileInfo fileInfo = storageClient.query_file_info("group1",
"M00/00/00/wKhVgVw-qbmAXdpRAAp2uCv_JwU096.jpg");
System.out.println(fileInfo);
}
3.2.4 文件下载
//下载文件
@Test
public void testDownload(){
try {
//加载fastdfs-client.properties配置文件
ClientGlobal.initByProperties("config/fastdfs-client.properties");
//定义TrackerClient,用于请求TrackerServer
TrackerClient trackerClient = new TrackerClient();
//连接tracker
TrackerServer trackerServer = trackerClient.getConnection();
//获取Stroage
StorageServer storeStorage = trackerClient.getStoreStorage(trackerServer);
//创建stroageClient
StorageClient1 storageClient1 = new StorageClient1(trackerServer,storeStorage);
//下载文件
//文件id
String fileId = "group1/M00/00/00/wKhVgVw-qbmAXdpRAAp2uCv_JwU096.jpg";
byte[] bytes = storageClient1.download_file1(fileId);
//使用输出流保存文件
FileOutputStream fileOutputStream = new FileOutputStream(new File("F:/003.jpg"));
fileOutputStream.write(bytes);
} catch (IOException e) {
e.printStackTrace();
} catch (MyException e) {
e.printStackTrace();
}
}
3.3.2 配置Nginx图片服务虚拟机主机
图片服务虚拟主机的作用是负载均衡,将图片请求转发到storage server上。
1、通过图片服务虚拟主机请求图片流程图
3、在nginx图片代理服务上配置图片服务器虚拟主机
#图片服务
upstream img_server_pool{
#server 192.168.101.64:80 weight=10;
server 192.168.0.133:8888 weight=10;
}
#服务
server {
listen 8888;
server_name img.xuecheng.com;
#个人中心
location /group1 {
proxy_pass http://img_server_pool;
}
}
3.3.3 图片服务器
因为要走外网的dns所以要记得设置host让它走本地