突然想起来还有这样的一个坑没填,上次的装机篇不知道已经过去多久了...
本文会接着树莓派装机篇完成剩下的内容,概览如下:
首先安装fastdfs以及其相关模块,然后安装nginx,最后安装内网穿透软件。
fastdfs是文件服务器的核心基础这点不用多说,提供了文件存储&同步&访问等功能,nginx作为与外界建立连接的服务器,而内网穿透使得文件服务器可以通过公网进行访问。
在完成安装之后,就可以拥有一个属于自己的小型文件服务器了。一般情况下,fastdfs适合存储大小为4kb-500MB的单文件,超过该范围之后则需要做适配处理,如做分片存储。虽然比不了市面上那些同类型应用系统,但也足够个人使用(主要是开源)。
一、安装fastdfs及其相关模块
先下载几个需要的软件包:fastdfs-6.9.5、libfastcommon-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、安装nginx和fastdfs-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的默认页面。
图1 nginx默认显示页面
此时可以在ip地址后加上先前上传文件时返回的路径信息:'/group1/M00/00/00/wKgDH2UKwl-ASsN6AAAABFqC_Qg190.txt',可以看到已经可以成功访问文件了。
图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 [神桌互联账号] [密码]
在这之后,就可以通过神桌互联提供的地址访问文件了(可能会有一定的延迟)。
图3 通过映射地址(公网)访问文件
至此,关于使用树莓派搭建文件服务器的篇章就告一段落了。
(但全篇幅没有涉及到使用fastdfs客户端上传文件的案例,目前支持的语言有c/c++、java、php,这个应该挺简单的,有需要的时候再说吧...)
此外还可以考虑对文件服务器进行拓展,如为文件服务器编写一个后台管理系统,以web接口的形式对外提供服务,这样可以更方便地管理文件和对接其他系统。