树莓派搭建文件服务器(二):安装fastdfs及其依赖的基础软件

突然想起来还有这样的一个坑没填,上次的装机篇不知道已经过去多久了...

本文会接着树莓派装机篇完成剩下的内容,概览如下:

首先安装fastdfs以及其相关模块,然后安装nginx,最后安装内网穿透软件。

fastdfs是文件服务器的核心基础这点不用多说,提供了文件存储&同步&访问等功能,nginx作为与外界建立连接的服务器,而内网穿透使得文件服务器可以通过公网进行访问。

在完成安装之后,就可以拥有一个属于自己的小型文件服务器了。一般情况下,fastdfs适合存储大小为4kb-500MB的单文件,超过该范围之后则需要做适配处理,如做分片存储。虽然比不了市面上那些同类型应用系统,但也足够个人使用(主要是开源)。

一、安装fastdfs及其相关模块

先下载几个需要的软件包:fastdfs-6.9.5libfastcommon-1.0.69、libserverframe-1.1.29

其中要注意的是,软件最好下载与本文相同的版本,否则安装过程中可能会出错。

0、安装c++运行环境,以及其他的依赖

# 如果系统中已经安装了的话,则可以忽略本步骤
apt-get update
apt-get install g++
apt-get install libpcre3-dev

1、安装libfastcommon

# 将文件拷贝到/usr/local目录下
cp /home/errol/libfastcommon-1.0.69.tar.gz /usr/local
cd /usr/local
# 解压
tar -xvzf libfastcommon-1.0.69.tar.gz
cd libfastcommon-1.0.69
# 检查&&安装
./make.sh && ./make.sh install

2、安装libserverframe

cp /home/errol/libserverframe-1.1.29.tar.gz /usr/local
cd /usr/local
tar -xvzf libserverframe-1.1.29.tar.gz
cd libserverframe-1.1.29
./make.sh && ./make.sh install

3、安装fastdfs

# 跟前两步是类似的,先拷贝,后解压
cd fastdfs-6.9.5
./make.sh && ./make.sh install

# 删除压缩包
rm -rf *.tar.gz

4、修改配置文件

vi /etc/fdfs/storage.conf

(这些文件都是在安装了fastdfs之后,从fastdfs文件夹拷贝过去的)

# 主要修改了以下几处地方,其他使用默认值
#base_path = /opt/fastdfs
base_path = /home/errol/data/dev/fastdfs/storage # 修改为自己的目录,用于存储节点日志(没有就创建)

#store_path0 = /opt/fastdfs
store_path0 = /home/errol/data/dev/fastdfs/storage_data # 用于存储文件

#tracker_server = 192.168.209.121:22122
tracker_server = 192.168.3.31:22122 # 修改为自己机器的ip地址

vi /etc/fdfs/tracker.conf

#base_path = /opt/fast
base_path = /home/errol/data/dev/fastdfs/tracker # 跟踪器日志

5、启动服务

systemctl daemon-reload
systemctl enable fdfs_tracked fdfs_storaged # 设置开机启动
systemctl start fdfs_tracked
systemctl start fdfs_storaged

# 可以查看服务状态
systemctl status fdfs_tracked fdfs_storaged

*6、如果不能正常启动服务的话...

作者在该版本遇到的一种情况是,启动服务时,命令卡死了,查看服务状态,发现是因为“Can't open PID file /opt/fastcfs/data/fdfs_trackerd.pid (yet?)”的问题。

1)先在以下目录,查看是否有以下文件

ls /usr/lib/systemd/system | grep fdfs

# 目标文件
fdfs_storaged.service
fdfs_trackerd.service

2)查看服务配置是否正确,如果不正确就修改过来(fastdfs作者的解释

vi /usr/lib/systemd/system/fdfs_trackerd.service

# 修改'/opt/fastcfs'为自己的目录
PIDFile=/home/errol/data/dev/fastdfs/tracker/data/fdfs_trackerd.pid

vi /usr/lib/systemd/system/fdfs_storaged.service

# fdfs_storaged.service同理
PIDFile=/home/errol/data/dev/fastdfs/storage/data/fdfs_storaged.pid

3)重新启动服务

systemctl daemon-reload
systemctl restart fdfs_tracked
systemctl restart fdfs_storaged

7、测试文件上传

fdfs_tracked和fdfs_storaged服务启动成功后,可使用预设的脚本测试服务功能。

vi /etc/fdfs/client.conf

# 在使用之前先修改以下的配置。

#base_path = /opt/fastdfs
base_path = /home/errol/data/dev/fastdfs/client # 日志

#tracker_server = 192.168.0.196:22122
tracker_server = 192.168.3.31:22122 # 跟踪器ip地址及端口

运行脚本

touch test.txt
echo 123 > test.txt
/usr/bin/fdfs_upload_file /etc/fdfs/client.conf ./test.txt

# 输出类似'/group1/M00/00/00/...'的信息表示成功

二、安装nginx及其相关模块

目前虽然已经具备了上传和存储文件的功能,但还没有提供给外部访问这些文件的途径,所以现在需要一个服务器读取文件并传输出去,此处的职责由nginx承担。

1、安装nginxfastdfs-nginx-module模块

cp /home/errol/nginx-1.24.0.tar.gz /usr/local
cp /home/errol/fastdfs-nginx-module-1.23.tar.gz /usr/local
cd /usr/local
tar -xvzf nginx-1.24.0.tar.gz
tar -xvzf fastdfs-nginx-module-1.23.tar.gz

cd nginx-1.24.0/

./configure --prefix=/usr/local/nginx-1.24.0 --add-module=/usr/local/fastdfs-nginx-module-1.23/src

# 编译&&安装nginx及附加模块
make && make install

2、修改nginx配置文件

vi /usr/local/nginx-1.24.0/conf/nginx.conf

# 在监听80端口的服务器区块中,添加如下信息

location ~/group([0-9])/M00 {
    root /home/errol/data/dev/fastdfs/storage_data;
    ngx_fastdfs_module;
}

3、将配置文件拷贝到/etc/fdfs目录下

这些文件会在服务启动的时候读取。

cp /usr/local/fastdfs-6.9.5/conf/mime.types /etc/fdfs/
cp /usr/local/fastdfs-6.9.5/conf/http.conf /etc/fdfs/
cp /usr/local/fastdfs-nginx-module-1.23/src/mod_fastdfs.conf /etc/fdfs/

4、修改fastdfs-nginx-module配置信息

vi /etc/fdfs/mod_fastdfs.conf

#tracker_server=tracker:22122
tracker_server=192.168.3.31:2212 # 修改为自己的追踪器ip和端口

#store_path0=/home/yuqing/fastdfs
#store_path1=/home/yuqing/fastdfs1
store_path0=/home/errol/data/dev/fastdfs/storage_data # 修改为自己的文件存储路径

# default value is false
url_have_group_name = true # 在当前版本下,默认值为false,及url中不包含组名,但为了避免混淆,还是设为true

5、启动nginx

/usr/local/nginx-1.24.0/sbin/nginx

在浏览器打开树莓派的ip地址,不出意外的话,应该可以看到nginx的默认页面。

image

图1 nginx默认显示页面

此时可以在ip地址后加上先前上传文件时返回的路径信息:'/group1/M00/00/00/wKgDH2UKwl-ASsN6AAAABFqC_Qg190.txt',可以看到已经可以成功访问文件了。

image

图2 访问test.txt文件

三、安装内网穿透软件

到目前为此,已经可以通过在外部浏览器访问树莓派中存储的文件了,但这仅限于局域网内,而不能通过外部网络进行访问,这就是需要内外穿透的原因。

内网穿透软件有很多,比较常见的如花生壳、ngrok、frp等,但综合之下,作者选用了神卓互联。

由于神桌互联提供了完整的安装过程,下面会尽量简化。

0、先注册账号及隧道

# 1)先在以下地址注册账号
https://www.shenzhuohl.com/register/index.html
# 2)登陆控制台后,在'内网穿透'>'映射管理'处建立通道,目标地址为树莓派的ip地址,目标端口为nginx监听的80端口

1、下载客户端

wget http://neiwangchuantou.oss-cn-shanghai.aliyuncs.com/linux/arm_64/client
cd /usr/local
mkdir shenzhuo
mv /home/errol/client shenzhuo/

2、赋予客户端执行权限

chmod +x shenzhuo/client

3、启动客户端

./client [神桌互联账号] [密码]

在这之后,就可以通过神桌互联提供的地址访问文件了(可能会有一定的延迟)。

image

图3 通过映射地址(公网)访问文件


至此,关于使用树莓派搭建文件服务器的篇章就告一段落了。

(但全篇幅没有涉及到使用fastdfs客户端上传文件的案例,目前支持的语言有c/c++、java、php,这个应该挺简单的,有需要的时候再说吧...)

此外还可以考虑对文件服务器进行拓展,如为文件服务器编写一个后台管理系统,以web接口的形式对外提供服务,这样可以更方便地管理文件和对接其他系统。

返回