树莓派搭建seafile存储重要文件
谈到NAS,我个人需求主要是:
- 下电影以及看电影
- 保存重要文件,例如:照片,工作文档。
然而大多数人一提到NAS,就会想上X86架构,比如最近很火的蜗牛星际。
然而X86架构功耗高,噪音大,用作NAS完全是一种过度行为,适合非技术人员使用。
对于我们研发来说,能够用ARM搞定就没必要上X86黑群晖之类的复杂系统,并且可以自主架构系统,完成自己的目标。
我选型seafile作为网盘,主要原因如下:
- 国产项目,12年发展至今,成熟。
- C语言实现存储引擎,底层按block分块存储校验,支持多版本管理,删除找回等重要特性。
- 支持PC、安卓、苹果等多种客户端,支持webdav网盘挂载。
- 网站部分采用python django实现,比其他同类产品的PHP技术栈要轻量很多。
下面就记录一下如何在树莓派上搭建最新的版本(参考官方文档),以及分享一下seafile备份思路。
切换到root
1 |
sudo su root |
安装依赖
1 2 3 4 |
apt-get update apt-get install python apt-get install python2.7 libpython2.7 python-setuptools python-pil python-ldap python-urllib3 ffmpeg python-pip python-mysqldb python-memcache pip install pillow moviepy |
注意,官方手册里的python-imaging已经不存在了,应该使用python-pil取代,上述命令我已经做了调整。
还需要自己安装mysql:
1 |
apt install mysql-server |
然后初始化一下root密码:
1 |
mysqladmin password |
下载程序
树莓派最新版是7.0.5,大家自己在github里下载最新即可:https://github.com/haiwen/seafile-rpi/releases。
选定一个安装目录,我选择:/root/seafile。
创建一个/root/seafile/installed目录,把下载的tar包放进去,并且解压一份到/root/seafile目录:
1 2 3 4 5 6 7 |
root@raspberrypi:~/seafile# ll total 8 drwxr-xr-x 2 root root 4096 Jan 2 14:29 installed drwxr-xr-x 7 pi pi 4096 Sep 24 02:31 seafile-server-7.0.5 root@raspberrypi:~/seafile# ll installed/ total 61272 -rw-r--r-- 1 root root 62739626 Sep 30 00:04 seafile-server_7.0.5_stable_pi.tar.gz |
安装程序
进入seafile-server-7.0.5目录,执行安装脚本:
1 |
./setup-seafile-mysql.sh |
这个脚本会完成所有安装工作,包括数据库与表结构的初始化,程序的部署。
这一步很重要,是seafile的访问地址,会直接影响到web后台的请求地址,大家最初可以写成树莓派的内网IP,后续可以在web后台调整:
1 2 3 |
What is the ip or domain of the server? For example: www.mycompany.com, 192.168.1.101 [ This server's ip or domain ] 192.168.1.101 |
这一步是指定数据文件存在什么路径,对于seafile来说就是数据库和这个目录是重要资产,也是后续作备份的关键:
1 2 3 |
Where do you want to put your seafile data? Please use a volume with enough free space [ default "/root/seafile/seafile-data" ] |
然后问你数据库是否初始化,我们选择1新建(如果是seafile宕机迁移,就需要用选项2复用数据库了):
1 2 3 4 |
[1] Create new ccnet/seafile/seahub databases [2] Use existing ccnet/seafile/seahub databases [ 1 or 2 ] 1 |
其他的就根据提示操作即可,全部选默认值。
现在/root/seafile目录发生了一些变化,其中seafile-server-latest软链到了seafile-server-7.0.5,后续我们升级seafile程序只需要调整软链接即可,这也是为什么刚才如此布局目录的原因。
启动程序
安装好后,seafile提示了启动命令以及需要开放访问的端口:
1 2 3 4 5 6 7 8 9 10 11 12 13 |
----------------------------------------------------------------- Your seafile server configuration has been finished successfully. ----------------------------------------------------------------- run seafile server: ./seafile.sh { start | stop | restart } run seahub server: ./seahub.sh { start <port> | stop | restart <port> } ----------------------------------------------------------------- If you are behind a firewall, remember to allow input/output of these tcp ports: ----------------------------------------------------------------- port of seafile fileserver: 8082 port of seahub: 8000 |
seafile分为3个进程:
- seafile:C实现的存储进程
- seahub:Python Django实现的web界面
- ccnet:C实现的内部接口服务,seahub -> seafile是通过ccnet中转的。
在正式启动前,我们需要改一下seahub的监听地址为0.0.0.0,否则无法访问到web页面,打开conf/gunicorn.conf,修改如下部分:
1 2 |
# default localhost:8000 bind = "0.0.0.0:8000" |
(PS:因为web界面是django写的,利用gunicorn容器拉起,所以监听地址实际是gunicorn配置的)
接下来,我们需要先启动seafile,再启动seahub:
1 2 |
./seafile.sh start ./seahub.sh start |
启动seahub的时候会要求你创建一个web的管理员账号密码。
访问web
seahub监听在8000端口,seafile监听在8082端口。
浏览文件列表是调用8000端口获取的,而真正上传与下载文件则是与8082直接通讯的。
打开树莓派的8000端口,可以进入seahub界面,用管理员账号登录即可。
我遇到了一个奇怪的问题,就是无法上传与下载文件,浏览器抓包发现的确是访问的8082端口,也可以联通。
后续我的解决办法是在web界面的系统设置里,重新保存了一次访问地址,问题就解决了。
开放到公网
通过家里的路由器作DDNS和端口转发。
需要去seahub后台设置一下公网的访问地址:
注意,但凡能够通过seahub配置的选项,其都存储在mysql中,并且mysql优先级都将优先于磁盘上的配置文件。
开机启动
参考官方文档。
注意修改systemd文件中的User和Group为root,否则权限不足。
备份数据
官方提供了备份文档。
定时备份2个东西:
- 数据库定时mysqldump
- seafile-data数据文件目录rsync增量同步
这里就不做演示了。
如果文章帮助您解决了工作难题,您可以帮我点击屏幕上的任意广告,或者赞助少量费用来支持我的持续创作,谢谢~

安卓也是arm能不能装呢?
不错! 树莓派3,可以么?
可以的,挂一块USB硬盘就能凑活用。
1
1