谈到NAS,我个人需求主要是:
下电影以及看电影
保存重要文件,例如:照片,工作文档。
然而大多数人一提到NAS,就会想上X86架构,比如最近很火的蜗牛星际。
然而X86架构功耗高,噪音大,用作NAS完全是一种过度行为,适合非技术人员使用。
对于我们研发来说,能够用ARM搞定就没必要上X86黑群晖之类的复杂系统,并且可以自主架构系统,完成自己的目标。
我选型seafile作为网盘,主要原因如下:
国产项目,12年发展至今,成熟。
C语言实现存储引擎,底层按block分块存储校验,支持多版本管理,删除找回等重要特性。
支持PC、安卓、苹果等多种客户端,支持webdav网盘挂载。
网站部分采用python django实现,比其他同类产品的PHP技术栈要轻量很多。
下面就记录一下如何在树莓派上搭建最新的版本(参考官方文档),以及分享一下seafile备份思路。
切换到root
Shell
sudo su root
1
sudosuroot
安装依赖
Shell
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
1
2
3
4
apt-getupdate
apt-getinstallpython
apt-getinstallpython2.7libpython2.7python-setuptoolspython-pilpython-ldappython-urllib3ffmpegpython-pippython-mysqldbpython-memcache
pipinstallpillowmoviepy
注意,官方手册里的python-imaging已经不存在了,应该使用python-pil取代,上述命令我已经做了调整。
还需要自己安装mysql:
Shell
apt install mysql-server
1
aptinstallmysql-server
然后初始化一下root密码:
Shell
mysqladmin password
1
mysqladminpassword
下载程序
选定一个安装目录,我选择:/root/seafile。
创建一个/root/seafile/installed目录,把下载的tar包放进去,并且解压一份到/root/seafile目录:
Shell
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
1
2
3
4
5
6
7
root@raspberrypi:~/seafile# ll
total8
drwxr-xr-x2rootroot4096Jan214:29installed
drwxr-xr-x7pipi4096Sep2402:31seafile-server-7.0.5
root@raspberrypi:~/seafile# ll installed/
total61272
-rw-r--r--1rootroot62739626Sep3000:04seafile-server_7.0.5_stable_pi.tar.gz
安装程序
进入seafile-server-7.0.5目录,执行安装脚本:
Shell
./setup-seafile-mysql.sh
1
./setup-seafile-mysql.sh
这个脚本会完成所有安装工作,包括数据库与表结构的初始化,程序的部署。
这一步很重要,是seafile的访问地址,会直接影响到web后台的请求地址,大家最初可以写成树莓派的内网IP,后续可以在web后台调整:
Shell
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
1
2
3
Whatistheipordomainoftheserver?
Forexample:www.mycompany.com,192.168.1.101
[Thisserver'sipordomain]192.168.1.101
这一步是指定数据文件存在什么路径,对于seafile来说就是数据库和这个目录是重要资产,也是后续作备份的关键:
Shell
Where do you want to put your seafile data?
Please use a volume with enough free space
[ default "/root/seafile/seafile-data" ]
1
2
3
Wheredoyouwanttoputyourseafiledata?
Pleaseuseavolumewithenoughfreespace
[default"/root/seafile/seafile-data"]
然后问你数据库是否初始化,我们选择1新建(如果是seafile宕机迁移,就需要用选项2复用数据库了):
Shell
[1] Create new ccnet/seafile/seahub databases
[2] Use existing ccnet/seafile/seahub databases
[ 1 or 2 ] 1
1
2
3
4
[1]Createnewccnet/seafile/seahubdatabases
[2]Useexistingccnet/seafile/seahubdatabases
[1or2]1
其他的就根据提示操作即可,全部选默认值。
现在/root/seafile目录发生了一些变化,其中seafile-server-latest软链到了seafile-server-7.0.5,后续我们升级seafile程序只需要调整软链接即可,这也是为什么刚才如此布局目录的原因。
启动程序
安装好后,seafile提示了启动命令以及需要开放访问的端口:
Shell
-----------------------------------------------------------------
Your seafile server configuration has been finished successfully.
-----------------------------------------------------------------
run seafile server: ./seafile.sh { start | stop | restart }
run seahub server: ./seahub.sh { start | stop | restart }
-----------------------------------------------------------------
If you are behind a firewall, remember to allow input/output of these tcp ports:
-----------------------------------------------------------------
port of seafile fileserver: 8082
port of seahub: 8000
1
2
3
4
5
6
7
8
9
10
11
12
13
-----------------------------------------------------------------
Yourseafileserverconfigurationhasbeenfinishedsuccessfully.
-----------------------------------------------------------------
runseafileserver:./seafile.sh{start|stop|restart}
runseahubserver:./seahub.sh{start|stop|restart}
-----------------------------------------------------------------
Ifyouarebehindafirewall,remembertoallowinput/outputofthesetcpports:
-----------------------------------------------------------------
portofseafilefileserver:8082
portofseahub:8000
seafile分为3个进程:
seafile:C实现的存储进程
seahub:Python Django实现的web界面
ccnet:C实现的内部接口服务,seahub -> seafile是通过ccnet中转的。
在正式启动前,我们需要改一下seahub的监听地址为0.0.0.0,否则无法访问到web页面,打开conf/gunicorn.conf,修改如下部分:
Shell
# default localhost:8000
bind = "0.0.0.0:8000"
1
2
# default localhost:8000
bind="0.0.0.0:8000"
(PS:因为web界面是django写的,利用gunicorn容器拉起,所以监听地址实际是gunicorn配置的)
接下来,我们需要先启动seafile,再启动seahub:
Shell
./seafile.sh start
./seahub.sh start
1
2
./seafile.shstart
./seahub.shstart
启动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增量同步
这里就不做演示了。
如果文章帮助了你,请帮我点击1次谷歌广告,或者微信赞助1元钱,感谢!
知识星球有更多干货内容,对我认可欢迎加入: