当前位置:   article > 正文

docker 安装 fastdfs_docker安装fastdfs

docker安装fastdfs

目录

一、安装docker(已安装的跳过这一步)

二、安装fastdfs

三、开放端口

四、修改nginx配置

五、访问nginx测试

六、java实现文件上传

1.创建一个Maven项目

2.集成fastdfs

七、启动项目上传图片文件测试

八、浏览器访问查看上传的图片

九、查看文件上传到服务器的实际位置


Docker基础相关内容请跳转icon-default.png?t=N7T8https://blog.csdn.net/ZGSDMAN/article/details/131949201

安装前准备:一个云服务器或本地服务器

一、安装docker(已安装的跳过这一步)

  1. 1.先删除原有的docker
  2. yum remove docker \
  3. docker-client \
  4. docker-client-latest \
  5. docker-common \
  6. docker-latest \
  7. docker-latest-logrotate \
  8. docker-logrotate \
  9. docker-engine
  10. 2.安装gcc环境
  11. yum -y install gcc
  12. yum -y install gcc-c++
  13. 3.配置docker仓库:(docker hub被墙了,这用的是国内阿里云的仓库)
  14. yum install -y yum-utils
  15. yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
  16. 4.更新yum索引
  17. yum makecache fast
  18. 5.安装docker
  19. yum install -y docker-ce docker-ce-cli containerd.io
  20. 6.启动docker
  21. systemctl start docker
  22. 7.配置镜像加速:此处采用的阿里云的:(登录阿里云,找到控制台-容器镜像服务-镜像工具-镜像加速器)
  23. sudo mkdir -p /etc/docker
  24. sudo tee /etc/docker/daemon.json <<-'EOF'
  25. {
  26. "registry-mirrors": ["https://pdg27cfz.mirror.aliyuncs.com"]
  27. }
  28. EOF
  29. sudo systemctl daemon-reload
  30. sudo systemctl restart docker
  31. 8.测试docker(运行一个镜像,本地没有会先去官网仓库拉取)
  32. docker run hello-world
  33. 结果:打印了hello-world信息,安装完成

二、安装fastdfs

  1. 1.搜索fastdfs镜像
  2. docker search fastdfs
  3. 2.下载镜像,此处用的是morunchang/fastdfs镜像
  4. docker pull morunchang/fastdfs
  5. 3.安装tracker
  6. docker run -d --name tracker --net=host morunchang/fastdfs sh tracker.sh
  7. 4.安装storage
  8. docker run -d --name storage --net=host -e TRACKER_IP=服务器公网ip:22122 -e GROUP_NAME=group1 morunchang/fastdfs sh storage.sh

三、开放端口

  1. 1.开放80,22122,23000端口,云服务器防火墙策略也要开(注意:如果关闭防火墙,云服务器策略也要开)
  2. firewall-cmd --zone=public --add-port=80/tcp --permanent
  3. firewall-cmd --zone=public --add-port=22122/tcp --permanent
  4. firewall-cmd --zone=public --add-port=23000/tcp --permanent
  5. 2.重新加载配置
  6. firewall-cmd --reload
  7. 3.查看防火墙锁开放的端口
  8. firewall-cmd --zone=public --list-ports

四、修改nginx配置

  1. 1.进入storage
  2. docker exec -it storage容器id /bin/bash
  3. 2.找到nginx配置
  4. whereis nginx --->会看到目录在/etc/nginx/
  5. 3.修改nginx配置
  6. vi /etc/nginx/conf/nginx.conf
  7. 4.修改监听端口(listen)和访问地址(server_name),我这将端口修改为了80,访问地址为公网ip
  8. 5.退出容器
  9. exit
  10. 6.重启 storage
  11. docker restart storage容器id

五、访问nginx测试

六、java实现文件上传

源码地址:

https://download.csdn.net/download/ZGSDMAN/88738625

目录结构:

1.创建一个Maven项目

  1. 1.导入maven依赖
  2. <!--springboot工程需要继承的父工程-->
  3. <parent>
  4. <groupId>org.springframework.boot</groupId>
  5. <artifactId>spring-boot-starter-parent</artifactId>
  6. <version>2.1.8.RELEASE</version>
  7. </parent>
  8. <dependencies>
  9. <!--web开发的起步依赖-->
  10. <dependency>
  11. <groupId>org.springframework.boot</groupId>
  12. <artifactId>spring-boot-starter-web</artifactId>
  13. </dependency>
  14. </dependencies>
  15. 2.创建启动类
  16. @SpringBootApplication
  17. public class FastDFSApplication {
  18. public static void main(String[] args) {
  19. SpringApplication.run(FastDFSApplication.class,args);
  20. }
  21. }
  22. ## 此时项目就可以正常启动了,只是没有任何接口可以访问

2.集成fastdfs

  1. 1.导入fastdfs依赖
  2. <dependency>
  3. <groupId>net.oschina.zcx7878</groupId>
  4. <artifactId>fastdfs-client-java</artifactId>
  5. <version>1.27.0.0</version>
  6. </dependency>
  7. 2.在application.yml中配置fastdfs
  8. spring:
  9. servlet:
  10. multipart:
  11. max-file-size: 10MB
  12. max-request-size: 10MB
  13. 3.增加fastdfs连接配置fdfs_client.conf
  14. connect_timeout = 60
  15. network_timeout = 60
  16. charset = UTF-8
  17. http.tracker_http_port = 80 #返回访问地址的端口号,就是nginx的端口号
  18. tracker_server = 你的公网IP地址:22122
  19. 4.创建文件实体
  20. package com.lx.util;
  21. public class FastDFSFile {
  22. //文件名字
  23. private String name;
  24. //文件内容
  25. private byte[] content;
  26. //文件扩展名
  27. private String ext;
  28. //文件MD5摘要值
  29. private String md5;
  30. //文件创建作者
  31. private String author;
  32. public FastDFSFile(String name, byte[] content, String ext, String height,
  33. String width, String author) {
  34. super();
  35. this.name = name;
  36. this.content = content;
  37. this.ext = ext;
  38. this.author = author;
  39. }
  40. public FastDFSFile(String name, byte[] content, String ext) {
  41. super();
  42. this.name = name;
  43. this.content = content;
  44. this.ext = ext;
  45. }
  46. public String getName() {
  47. return name;
  48. }
  49. public void setName(String name) {
  50. this.name = name;
  51. }
  52. public byte[] getContent() {
  53. return content;
  54. }
  55. public void setContent(byte[] content) {
  56. this.content = content;
  57. }
  58. public String getExt() {
  59. return ext;
  60. }
  61. public void setExt(String ext) {
  62. this.ext = ext;
  63. }
  64. public String getMd5() {
  65. return md5;
  66. }
  67. public void setMd5(String md5) {
  68. this.md5 = md5;
  69. }
  70. public String getAuthor() {
  71. return author;
  72. }
  73. public void setAuthor(String author) {
  74. this.author = author;
  75. }
  76. }
  77. 5.创建工具类
  78. package com.lx.util;
  79. import org.csource.common.NameValuePair;
  80. import org.csource.fastdfs.*;
  81. import org.slf4j.LoggerFactory;
  82. import org.springframework.core.io.ClassPathResource;
  83. import java.io.ByteArrayInputStream;
  84. import java.io.IOException;
  85. import java.io.InputStream;
  86. public class FastDFSClient {
  87. private static org.slf4j.Logger logger = LoggerFactory.getLogger(FastDFSClient.class);
  88. /***
  89. * 初始化加载FastDFS的TrackerServer配置
  90. */
  91. static {
  92. try {
  93. String filePath = new ClassPathResource("fdfs_client.conf").getFile().getAbsolutePath();
  94. ClientGlobal.init(filePath);
  95. } catch (Exception e) {
  96. logger.error("FastDFS Client Init Fail!",e);
  97. }
  98. }
  99. /***
  100. * 文件上传
  101. * @param file
  102. * @return 1.文件的组名 2.文件的路径信息
  103. */
  104. public static String[] upload(FastDFSFile file) {
  105. //获取文件的作者
  106. NameValuePair[] meta_list = new NameValuePair[1];
  107. meta_list[0] = new NameValuePair("author", file.getAuthor());
  108. //接收返回数据
  109. String[] uploadResults = null;
  110. StorageClient storageClient=null;
  111. try {
  112. //创建StorageClient客户端对象
  113. storageClient = getTrackerClient();
  114. /***
  115. * 文件上传
  116. * 1)文件字节数组
  117. * 2)文件扩展名
  118. * 3)文件作者
  119. */
  120. uploadResults = storageClient.upload_file(file.getContent(), file.getExt(), meta_list);
  121. } catch (Exception e) {
  122. logger.error("Exception when uploadind the file:" + file.getName(), e);
  123. }
  124. if (uploadResults == null && storageClient!=null) {
  125. logger.error("upload file fail, error code:" + storageClient.getErrorCode());
  126. }
  127. //获取组名
  128. String groupName = uploadResults[0];
  129. //获取文件存储路径
  130. String remoteFileName = uploadResults[1];
  131. return uploadResults;
  132. }
  133. /***
  134. * 获取文件信息
  135. * @param groupName:组名
  136. * @param remoteFileName:文件存储完整名
  137. * @return
  138. */
  139. public static FileInfo getFile(String groupName, String remoteFileName) {
  140. try {
  141. StorageClient storageClient = getTrackerClient();
  142. return storageClient.get_file_info(groupName, remoteFileName);
  143. } catch (Exception e) {
  144. logger.error("Exception: Get File from Fast DFS failed", e);
  145. }
  146. return null;
  147. }
  148. /***
  149. * 文件下载
  150. * @param groupName
  151. * @param remoteFileName
  152. * @return
  153. */
  154. public static InputStream downFile(String groupName, String remoteFileName) {
  155. try {
  156. //创建StorageClient
  157. StorageClient storageClient = getTrackerClient();
  158. //下载文件
  159. byte[] fileByte = storageClient.download_file(groupName, remoteFileName);
  160. InputStream ins = new ByteArrayInputStream(fileByte);
  161. return ins;
  162. } catch (Exception e) {
  163. logger.error("Exception: Get File from Fast DFS failed", e);
  164. }
  165. return null;
  166. }
  167. /***
  168. * 文件删除
  169. * @param groupName
  170. * @param remoteFileName
  171. * @throws Exception
  172. */
  173. public static void deleteFile(String groupName, String remoteFileName)
  174. throws Exception {
  175. //创建StorageClient
  176. StorageClient storageClient = getTrackerClient();
  177. //删除文件
  178. int i = storageClient.delete_file(groupName, remoteFileName);
  179. }
  180. /***
  181. * 获取Storage组
  182. * @param groupName
  183. * @return
  184. * @throws IOException
  185. */
  186. public static StorageServer[] getStoreStorages(String groupName)
  187. throws IOException {
  188. //创建TrackerClient
  189. TrackerClient trackerClient = new TrackerClient();
  190. //获取TrackerServer
  191. TrackerServer trackerServer = trackerClient.getConnection();
  192. //获取Storage组
  193. return trackerClient.getStoreStorages(trackerServer, groupName);
  194. }
  195. /***
  196. * 获取Storage信息,IP和端口
  197. * @param groupName
  198. * @param remoteFileName
  199. * @return
  200. * @throws IOException
  201. */
  202. public static ServerInfo[] getFetchStorages(String groupName,
  203. String remoteFileName) throws IOException {
  204. TrackerClient trackerClient = new TrackerClient();
  205. TrackerServer trackerServer = trackerClient.getConnection();
  206. return trackerClient.getFetchStorages(trackerServer, groupName, remoteFileName);
  207. }
  208. /***
  209. * 获取Tracker服务地址
  210. * @return
  211. * @throws IOException
  212. */
  213. public static String getTrackerUrl() throws IOException {
  214. return "http://"+getTrackerServer().getInetSocketAddress().getHostString()+":"+ClientGlobal.getG_tracker_http_port()+"/";
  215. }
  216. /***
  217. * 获取Storage客户端
  218. * @return
  219. * @throws IOException
  220. */
  221. private static StorageClient getTrackerClient() throws IOException {
  222. TrackerServer trackerServer = getTrackerServer();
  223. StorageClient storageClient = new StorageClient(trackerServer, null);
  224. return storageClient;
  225. }
  226. /***
  227. * 获取Tracker
  228. * @return
  229. * @throws IOException
  230. */
  231. private static TrackerServer getTrackerServer() throws IOException {
  232. TrackerClient trackerClient = new TrackerClient();
  233. TrackerServer trackerServer = trackerClient.getConnection();
  234. return trackerServer;
  235. }
  236. }
  237. 6.编写controller测试方法
  238. package com.lx.controller;
  239. import com.lx.util.FastDFSClient;
  240. import com.lx.util.FastDFSFile;
  241. import org.springframework.util.StringUtils;
  242. import org.springframework.web.bind.annotation.PostMapping;
  243. import org.springframework.web.bind.annotation.RequestMapping;
  244. import org.springframework.web.bind.annotation.RestController;
  245. import org.springframework.web.multipart.MultipartFile;
  246. @RestController
  247. @RequestMapping("/file")
  248. public class FileController {
  249. @PostMapping("/upload")
  250. public String uploadFile(MultipartFile file){
  251. try{
  252. //判断文件是否存在
  253. if (file == null){
  254. throw new RuntimeException("文件不存在");
  255. }
  256. //获取文件的完整名称
  257. String originalFilename = file.getOriginalFilename();
  258. if (StringUtils.isEmpty(originalFilename)){
  259. throw new RuntimeException("文件不存在");
  260. }
  261. //获取文件的扩展名称 abc.jpg jpg
  262. String extName = originalFilename.substring(originalFilename.lastIndexOf(".") + 1);
  263. //获取文件内容
  264. byte[] content = file.getBytes();
  265. //创建文件上传的封装实体类
  266. FastDFSFile fastDFSFile = new FastDFSFile(originalFilename,content,extName);
  267. //基于工具类进行文件上传,并接受返回参数 String[]
  268. String[] uploadResult = FastDFSClient.upload(fastDFSFile);
  269. //封装返回结果
  270. String url = FastDFSClient.getTrackerUrl()+uploadResult[0]+"/"+uploadResult[1];
  271. return url;
  272. }catch (Exception e){
  273. e.printStackTrace();
  274. }
  275. return "文件上传失败";
  276. }
  277. }

七、启动项目上传图片文件测试

八、浏览器访问查看上传的图片

九、查看文件上传到服务器的实际位置

  1. 1.查看容器
  2. [root@VM-4-13-centos ~]# docker ps
  3. ^[[5~CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
  4. 60f2b9a4e7ce morunchang/fastdfs "sh storage.sh" 30 hours ago Up 30 hours storage01
  5. d52977f37328 morunchang/fastdfs "sh tracker.sh" 30 hours ago Up 30 hours tracker01
  6. 2.进入storage容器
  7. docker exec -it 60f2b9a4e7ce /bin/bash
  8. 3.找到文件所在目录 ### 00/00是上传文件后返回的路径
  9. cd /data/fast_data/data/00/00
  10. 4.此时ls就可以看到你上传的那个文件
  11. 5.退出容器
  12. exit或ctrl+P+Q

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/喵喵爱编程/article/detail/986583
推荐阅读
相关标签
  

闽ICP备14008679号