搭建fastdfs,然后从windows访问

2 篇文章 0 订阅
1 篇文章 0 订阅

前言

fastdfs是一个分布式文件系统,作者余庆,适合大量的小文件的存储访问。我打算用它来做购物网站的图片服务器。

我前端和后端都是在windows上开发的,所以需要从windows访问fastdfs。但是fastdfs并没有windows版本,只有linux版本。采用免费的virtualbox虚拟机方案。guest os建议采用Ubuntu桌面系统。因为Ubuntu服务器客户机和主机之间不能复制黏贴,光标不能自由移动。仅在部署时为了性能和稳定性才考虑使用各种linux服务器。

fastdfs的缺省安装方式是源代码编译安装,还要进行配置,既耗时,又很繁琐。docker容器能够把程序员从这种困境中解放出来。

搭建虚拟机

virtualbox安装好,再新建一台Ubuntu桌面版虚拟机,共享黏贴板双向,内存4个G,内存多的可以多开点。处理器2个。硬盘30个G吧。如果是固体硬盘,勾选固体驱动器,感觉会加快虚拟机速度。
重点来了【敲黑板】,网络在缺省的NAT网络之外增加一个网卡,选择仅主机(Host-only)模式。NAT可以使虚拟机访问互联网,Host-only使主机和客户机之间组成一个网络,彼此可以互相访问。这种双网卡模式类似于桥接模式,但是不消耗公司(或家里)的IP地址,不求人。

搭建fastdfs

  1. 安装docker,参见Install Docker Engine on Ubuntu
  2. 下载fastdfs镜像。
    sudo docker pull delron/fastdfs
  3. 创建fastdfs tacker容器。【不必提前创建/home/<user>/fdfs/tracker,这个命令会自动创建该目录】
    sudo docker run -d --network=host --name tracker -v /home/<user>/fdfs/tracker:/var/fdfs delron/fastdfs tracker
  4. 创建fastdfs storage容器。【不必提前创建/home/<user>/fdfs/storage,这个命令会自动创建该目录】
    sudo docker run -d --network=host --name storage -e TRACKER_SERVER=<guest-os-ip>:22122 -v /home/<user>/fdfs/storage:/var/fdfs -e GROUP_NAME=group1 delron/fastdfs storage

小知识:
docker容器使用host网络使容器和主机共享网络空间,外界可以通过主机的IP直接访问容器。
使用host网络创建容器的好处是可以在windows直接访问虚拟机中的容器,不需要在windows管理员模式命令行中通过类似下面命令添加到容器的路由:
route add 172.17.0.0 MASK 255.255.255.0 192.168.56.1
可以使用ip addr show观察guest os的IP地址,不需要通过ifconfig【Ubuntu16以后就没有了net-tools,被高效的最新的iproute2取代了】。
可以通过下面命令查看这两个容器的IP地址:
sudo docker inspect --format='{{.NetworkSettings.IPAddress}}' tracker
sudo docker inspect --format='{{.NetworkSettings.IPAddress}}' storage
由于我们使用了host网络,所以输出为空。
缺省情况下,sudo ufw status
状态:不活动。这很好,不用操心防火墙。

测试

可以试一试刚刚创建的fdfs了。先在虚拟机(容器的主机)上测试比较稳妥,成功后再在主机上测试。
在虚拟机上准备测试环境:

  1. 安装vscode,我是下载code_1.46.0-1591780013_amd64.deb这样的安装包直接安装的。
  2. 安装nodejs。
  3. 安装yarn【类似于npm的包管理器,但是本地有缓存,已经下载过的包不会重复下载】
  4. 使用yarn init命令创建一个node工程。
    ~$ mkdir test && cd test
    ~/test$ yarn init
  5. 使用fastdfs js客户端ymyang/fdfs,很好用,亲测有效。
    yarn add fdfs
  6. 创建主程序app.js或者index.js,打开vscode【你可以使用vim/gedit】,输入下面内容:
var FdfsClient = require('fdfs');

var fdfs = new FdfsClient({
    // tracker servers
    trackers: [
        {
            // 这里换上你的虚拟机IP
            host: '192.168.56.101',
            port: 22122
        }
    ],
    // 默认超时时间10s
    timeout: 10000,
    // 默认后缀
    // 当获取不到文件后缀时使用
    defaultExt: 'txt',
    // charset默认utf8
    charset: 'utf8'
});

fdfs.upload('./1.png').then(function (fileId) {
    // fileId 为 group + '/' + filename
    console.log("upload finished:", fileId);
    fdfs.download(fileId, './test_download.gif').then(function () {
        console.log("download finished");
    }).catch(function (err) {
        console.error(err);
    });
}).catch(function (err) {
    console.error(err);
});

在运行node app.js之前,请在app.js相同目录下准备一张图片:1.png。
运行node app.js,如果一切顺利,可以看到如下输出:

connect to tracker server [192.168.56.101:22122]
tracker server [192.168.56.101:22122] is connected
get a upload storage server from tracker server: [192.168.56.101:22122]
send header to tracker server [192.168.56.101:22122]
receive server packet header: {"status":0,"bodyLength":40}
get store storage server info: {"group":"group1","host":"192.168.56.101","port":
23000,"storePathIndex":0,"timeout":10000,"charset":"utf8"}
connect to storage server [192.168.56.101:23000].
storage server [192.168.56.101:23000] is connected
start upload file to storage server [192.168.56.101:23000]
receive server packet header: {"status":0,"bodyLength":60}
upload finished: group1/M00/00/00/wKg4ZV7sJLSAVxtEAAAlnRhzeA0301.png
connect to tracker server [192.168.56.101:22122]
tracker server [192.168.56.101:22122] is connected
get a fetch storage server from tracker server: [192.168.56.101:22122]
group: group1, filename: M00/00/00/wKg4ZV7sJLSAVxtEAAAlnRhzeA0301.png
receive server packet header: {"status":0,"bodyLength":39}
get storage server info: {"group":"group1","host":"192.168.56.101","port":23000,
"timeout":10000,"charset":"utf8"}
connect to storage server [192.168.56.101:23000].
storage server [192.168.56.101:23000] is connected
receive server packet header: {"status":0,"bodyLength":9629}
download finished

可以把同样的代码在主机上进行测试,不用设置路由。
在主机上,打开浏览器,输入
http://192.168.56.101:8888/group1/M00/00/00/wKg4ZV7sJLSAVxtEAAAlnRhzeA0301.png
也能看到图片。

注意:这个fastdfs服务器并没有去重功能,得自己做。
另外,如果你是Java客户端,余庆已经写好了。

这是手把手的详细教程,希望你一切顺利!

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值