树莓派搭建seafile存储重要文件

谈到NAS,我个人需求主要是:

  1. 下电影以及看电影
  2. 保存重要文件,例如:照片,工作文档。

然而大多数人一提到NAS,就会想上X86架构,比如最近很火的蜗牛星际。

然而X86架构功耗高,噪音大,用作NAS完全是一种过度行为,适合非技术人员使用。

对于我们研发来说,能够用ARM搞定就没必要上X86黑群晖之类的复杂系统,并且可以自主架构系统,完成自己的目标。

我选型seafile作为网盘,主要原因如下:

  • 国产项目,12年发展至今,成熟。
  • C语言实现存储引擎,底层按block分块存储校验,支持多版本管理,删除找回等重要特性。
  • 支持PC、安卓、苹果等多种客户端,支持webdav网盘挂载。
  • 网站部分采用python django实现,比其他同类产品的PHP技术栈要轻量很多。

下面就记录一下如何在树莓派上搭建最新的版本(参考官方文档),以及分享一下seafile备份思路。

切换到root

安装依赖

注意,官方手册里的python-imaging已经不存在了,应该使用python-pil取代,上述命令我已经做了调整。

还需要自己安装mysql:

然后初始化一下root密码:

下载程序

树莓派最新版是7.0.5,大家自己在github里下载最新即可:https://github.com/haiwen/seafile-rpi/releases

选定一个安装目录,我选择:/root/seafile。

创建一个/root/seafile/installed目录,把下载的tar包放进去,并且解压一份到/root/seafile目录:

安装程序

进入seafile-server-7.0.5目录,执行安装脚本:

这个脚本会完成所有安装工作,包括数据库与表结构的初始化,程序的部署。

这一步很重要,是seafile的访问地址,会直接影响到web后台的请求地址,大家最初可以写成树莓派的内网IP,后续可以在web后台调整:

这一步是指定数据文件存在什么路径,对于seafile来说就是数据库和这个目录是重要资产,也是后续作备份的关键:

然后问你数据库是否初始化,我们选择1新建(如果是seafile宕机迁移,就需要用选项2复用数据库了):

其他的就根据提示操作即可,全部选默认值。

现在/root/seafile目录发生了一些变化,其中seafile-server-latest软链到了seafile-server-7.0.5,后续我们升级seafile程序只需要调整软链接即可,这也是为什么刚才如此布局目录的原因。

启动程序

安装好后,seafile提示了启动命令以及需要开放访问的端口:

seafile分为3个进程:

  • seafile:C实现的存储进程
  • seahub:Python Django实现的web界面
  • ccnet:C实现的内部接口服务,seahub -> seafile是通过ccnet中转的。

在正式启动前,我们需要改一下seahub的监听地址为0.0.0.0,否则无法访问到web页面,打开conf/gunicorn.conf,修改如下部分:

(PS:因为web界面是django写的,利用gunicorn容器拉起,所以监听地址实际是gunicorn配置的)

接下来,我们需要先启动seafile,再启动seahub:

启动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增量同步

这里就不做演示了。

如果文章帮助您解决了工作难题,您可以帮我点击屏幕上的任意广告,或者赞助少量费用来支持我的持续创作,谢谢~