如何使用 docker compose 搭建 fastDFS文件服务器

上篇文章给大家介绍了使用docker compose安装fastdfs文件服务器的实例详解

今天给大家介绍如何使用 docker compose 搭建 fastdfs文件服务器,内容详情如下所示:

平台 :mac m1

备注:关于 ip address

,上述文中提到了 docker 的 host 模式

如果启动容器的时候使用host模式,那么这个容器将不会获得一个独立的network namespace,而是和宿主机共用一个 network namespace。容器将不会虚拟出自己的网卡,配置自己的 ip 等,而是使用宿主机的 ip 和端口。但是,容器的其他方面,如文件系统、进程列表等还是和宿主机隔离的。

问题在于:使用宿主机的 ip 和端口的话,配置文件中 ip 填写 localhost的话按理说能访问到容器,然而事实上却不行。个人理解(如果理解有问题的话烦请指正)的 ip address填写方法如下:

启动 tracker 时控制台输出:

192.168.64.2的网络为:

 

192.168.65.4的网络为:

文件目录

├── docker-compose.yaml
├── nginx
│   └── nginx.conf
├── storage
│   └── data
└── tracker
│   └── conf
│       └── client.conf
└── store_path

./docker-compose.yaml

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

# 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

#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

添加依赖

<dependency>
	<groupid>com.github.tobato</groupid>
	<artifactid>fastdfs-client</artifactid>
	<version>1.27.2</version>
</dependency>

 

applicaiton.yaml

# 分布式文件系统配置
fdfs:
  #根据自己的ip进行更改
  ip: 192.168.64.2
  #socket连接超时时长
  sotimeout: 1500
  connecttimeout: 600
  #支持多个
  trackerlist:
    - ${fdfs.ip}:22122
  # fastdfs 中的 nginx 的 ip 和 port
  # idea 提示使用 https, 
  # nginx 配置 ssl 请移步:
  web-server-url: http://${fdfs.ip}:9800/

fastdfsconfig.java

@configuration
// 导入fastdfs-client组件
@import(fdfsclientconfig.class)
// 解决jmx重复注册bean的问题
@enablembeanexport(registration = registrationpolicy.ignore_existing)
public aspect fastdfsconfig {
}

fastdfsutil.java

@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

@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];
        // 设置强制下载不打开
        response.setcontenttype("application/force-download");

        filename = urlencoder.encode(filename, standardcharsets.utf_8);
        response.setheader("content-disposition", "attachment;filename=" + filename);
        ioutils.write(bytes, response.getoutputstream());
    }

    /**
     * 流媒体的方式播放视频,只能从头看到尾,不能手动点击重新看已经看过的内容
     * @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();
    }
}

到此这篇关于如何使用 docker compose 搭建 fastdfs文件服务器的文章就介绍到这了,更多相关docker compose 搭建 fastdfs内容请搜索www.887551.com以前的文章或继续浏览下面的相关文章希望大家以后多多支持www.887551.com!

(0)
上一篇 2022年3月21日
下一篇 2022年3月21日

相关推荐