上篇文章給大家介紹了使用docker compose安裝FastDfs文件服務(wù)器的實(shí)例詳解
今天給大家介紹如何使用 docker compose 搭建 fastDFS文件服務(wù)器,內(nèi)容詳情如下所示:
平臺(tái) :Mac M1
備注:關(guān)于 IP Address
關(guān)于 docker 的網(wǎng)絡(luò)模式,上述文中提到了 docker 的 Host 模式
:
如果啟動(dòng)容器的時(shí)候使用host模式,那么這個(gè)容器將不會(huì)獲得一個(gè)獨(dú)立的Network Namespace,而是和宿主機(jī)共用一個(gè) Network Namespace。容器將不會(huì)虛擬出自己的網(wǎng)卡,配置自己的 IP 等,而是使用宿主機(jī)的 IP 和端口。但是,容器的其他方面,如文件系統(tǒng)、進(jìn)程列表等還是和宿主機(jī)隔離的。
問題在于:使用宿主機(jī)的 IP 和端口的話,配置文件中 IP 填寫 localhost
的話按理說能訪問到容器,然而事實(shí)上卻不行。個(gè)人理解(如果理解有問題的話煩請(qǐng)指正)的 IP Address
填寫方法如下:
啟動(dòng) tracker
時(shí)控制臺(tái)輸出:
192.168.64.2
的網(wǎng)絡(luò)為:
192.168.65.4
的網(wǎng)絡(luò)為:
文件目錄
1
2
3
4
5
6
7
8
9
|
├── docker-compose.yaml ├── nginx │ └── nginx.conf ├── storage │ └── data └── tracker │ └── conf │ └── client.conf └── store_path |
./docker-compose.yaml
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
|
version: "2" services: fastdfs-tracker: hostname : fastdfs-tracker container_name: fastdfs-tracker image: season /fastdfs :1.2 network_mode: "host" command : tracker volumes: - . /tracker/data : /fastdfs/tracker/data - . /tracker/conf : /etc/fdfs fastdfs-storage: hostname : fastdfs-storage container_name: fastdfs-storage image: season /fastdfs :1.2 network_mode: "host" volumes: - . /storage/data : /fastdfs/storage/data - . /store_path : /fastdfs/store_path environment: - TRACKER_SERVER=192.168.64.2:22122 command : storage depends_on: - fastdfs-tracker fastdfs-nginx: hostname : fastdfs-nginx container_name: fastdfs-nginx image: season /fastdfs :1.2 network_mode: "host" volumes: - . /nginx/nginx .conf: /etc/nginx/conf/nginx .conf - . /store_path : /fastdfs/store_path environment: - TRACKER_SERVER=192.168.64.2:22122 command : nginx |
./tracker/conf/client.conf
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
|
# connect timeout in seconds # default value is 30s connect_timeout=30 # network timeout in seconds # default value is 30s network_timeout=60 # the base path to store log files base_path= /fastdfs/client # tracker_server can ocur more than once, and tracker_server format is # "host:port", host can be hostname or ip address # 需要修改此處 ip tracker_server=192.168.64.2:22122 #standard log level as syslog, case insensitive, value list: ### emerg for emergency ### alert ### crit for critical ### error ### warn for warning ### notice ### info ### debug log_level=info # if use connection pool # default value is false # since V4.05 use_connection_pool = false # connections whose the idle time exceeds this time will be closed # unit: second # default value is 3600 # since V4.05 connection_pool_max_idle_time = 3600 # if load FastDFS parameters from tracker server # since V4.05 # default value is false load_fdfs_parameters_from_tracker= false # if use storage ID instead of IP address # same as tracker.conf # valid only when load_fdfs_parameters_from_tracker is false # default value is false # since V4.05 use_storage_id = false # specify storage ids filename, can use relative or absolute path # same as tracker.conf # valid only when load_fdfs_parameters_from_tracker is false # since V4.05 storage_ids_filename = storage_ids.conf #HTTP settings http.tracker_server_port=80 #use "#include" directive to include HTTP other settiongs ##include http.conf |
./nginx/nginx.conf
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
|
#user nobody; worker_processes 1; #error_log logs/error.log; #error_log logs/error.log notice; #error_log logs/error.log info; #pid logs/nginx.pid; events { worker_connections 1024; } http { include mime.types; default_type application /octet-stream ; #log_format main '$remote_addr - $remote_user [$time_local] "$request" ' # '$status $body_bytes_sent "$http_referer" ' # '"$http_user_agent" "$http_x_forwarded_for"'; #access_log logs/access.log main; sendfile on; #tcp_nopush on; #keepalive_timeout 0; keepalive_timeout 65; #gzip on; server { listen 9800; server_name localhost; #charset koi8-r; #access_log logs/host.access.log main; # 修改部分 location / { root /fastdfs/store_path/data ; ngx_fastdfs_module; } #error_page 404 /404.html; # redirect server error pages to the static page /50x.html # error_page 500 502 503 504 /50x .html; location = /50x .html { root html; } } } |
SpringBoot 集成 fastDFS
添加依賴
1
2
3
4
5
|
<dependency> <groupId>com.github.tobato</groupId> <artifactId>fastdfs-client</artifactId> <version> 1.27 . 2 </version> </dependency> |
applicaiton.yaml
1
2
3
4
5
6
7
8
9
10
11
12
13
14
|
# 分布式文件系統(tǒng)配置 fdfs: #根據(jù)自己的ip進(jìn)行更改 ip: 192.168 . 64.2 #socket連接超時(shí)時(shí)長(zhǎng) soTimeout: 1500 connectTimeout: 600 #支持多個(gè) trackerList: - ${fdfs.ip}: 22122 # fastDFS 中的 nginx 的 ip 和 port # IDEA 提示使用 https, # nginx 配置 SSL 請(qǐng)移步: web-server-url: http: //${fdfs.ip}:9800/ |
FastDFSConfig.java
1
2
3
4
5
6
7
|
@Configuration // 導(dǎo)入FastDFS-Client組件 @Import (FdfsClientConfig. class ) // 解決jmx重復(fù)注冊(cè)bean的問題 @EnableMBeanExport (registration = RegistrationPolicy.IGNORE_EXISTING) public aspect FastDFSConfig { } |
FastDFSUtil.java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
|
@Component public class FastDFSUtil { @Resource private FastFileStorageClient fastFileStorageClient; @Resource private FdfsWebServer fdfsWebServer; public String uploadFile(MultipartFile file) throws IOException { StorePath storePath = fastFileStorageClient.uploadFile(file.getInputStream(), file.getSize(), FilenameUtils.getExtension(file.getOriginalFilename()), null ); String fullPath = storePath.getFullPath(); getResAccessUrl(fullPath); return fullPath; } public String uploadFile(File file) { try { FileInputStream inputStream = new FileInputStream(file); StorePath storePath = fastFileStorageClient.uploadFile(inputStream, file.length(), FilenameUtils.getExtension(file.getName()), null ); return storePath.getFullPath(); } catch (Exception e) { e.printStackTrace(); return null ; } } public byte [] downloadFile(String filePath) { StorePath storePath = StorePath.parseFromUrl(filePath); return fastFileStorageClient.downloadFile(storePath.getGroup(), storePath.getPath(), new DownloadByteArray()); } public Boolean deleteFile(String filePath) { if (StringUtils.isEmpty(filePath)) { return false ; } try { StorePath storePath = StorePath.parseFromUrl(filePath); fastFileStorageClient.deleteFile(storePath.getGroup(), storePath.getPath()); } catch (Exception e) { e.printStackTrace(); return false ; } return true ; } /** * 封裝文件完整 URL 地址 * * @param path * @return */ public String getResAccessUrl(String path) { return fdfsWebServer.getWebServerUrl() + path; } } |
FastDFSController.java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
|
@RestController @RequestMapping ( "/fast-dfs" ) public class FastDFSController { /** * @param file * @return * @throws IOException */ @PostMapping ( "" ) @Transactional public void uploadFile(MultipartFile file, String cuisineId) throws IOException { String s = fastDfsUtil.uploadFile(file); String resAccessUrl = fastDfsUtil.getResAccessUrl(s); } /** * @param response * @throws IOException */ @GetMapping ( "" ) public void downloadFile(String filePath, HttpServletResponse response) throws IOException { byte [] bytes = fastDfsUtil.downloadFile(filePath); String[] split = filePath.split( "/" ); String fileName = split[split.length - 1 ]; // 設(shè)置強(qiáng)制下載不打開 response.setContentType( "application/force-download" ); fileName = URLEncoder.encode(fileName, StandardCharsets.UTF_8); response.setHeader( "Content-Disposition" , "attachment;filename=" + fileName); IOUtils.write(bytes, response.getOutputStream()); } /** * 流媒體的方式播放視頻,只能從頭看到尾,不能手動(dòng)點(diǎn)擊重新看已經(jīng)看過的內(nèi)容 * @param filePath * @param response * @throws IOException */ @GetMapping ( "/play" ) public void streamMedia(String filePath, HttpServletResponse response) throws IOException { byte [] bytes = fastDfsUtil.downloadFile(filePath); IOUtils.copy( new ByteArrayInputStream(bytes), response.getOutputStream()); response.flushBuffer(); } } |
到此這篇關(guān)于如何使用 docker compose 搭建 fastDFS文件服務(wù)器的文章就介紹到這了,更多相關(guān)docker compose 搭建 fastDFS內(nèi)容請(qǐng)搜索服務(wù)器之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持服務(wù)器之家!
原文鏈接:https://www.cnblogs.com/edoclin/p/14648832.html