首页 >PC >正文

将ubuntu设置为NAS——24.直装Seafile实现直接访问存储数据

前面介绍过《将ubuntu设置为NAS——15.安装seafile并集成onlyoffice》,当时采用docker安装方式,方便快捷,但在总结里我提到了其数据是加密的,如果挂掉可能无法方便导出备份的数据,后来偶然机会逛seafile论坛时,发现是我对Seafile数据存储方式理解错误了,其实它不是对所有存储数据进行加密的,而是数据分块。在Seafile系统上文件被分割成数据块,这意味着在你的Seafile服务器上存储的并不是完整的文件而是数据块。这种设计能够方便有效的运用数据去重技术。

除非数据在Seafile中设置加密,不然数据还是有机会恢复或直接访问的,要如何实现呢?

有时系统管理员想要直接访问服务器上的文件,你可以使用seaf-fuse来做到这点。Seaf-fuse是一种seafile的插件,使用FUSE虚拟文件系统的实现。 一句话来说就是,它挂载所有的Seafile文件到一个目录(它被称为'''挂载点'''),所以你可以像访问服务器上的正常目录一样来访问由Seafile服务器管理的所有文件。

而seaf-fuse插件暂时无法在docker下使用,所以就需要在Ubuntu下直接安装seafile,为了这个安装我又折腾好几天。这里也说明一下,如果Seafile服务如果挂掉了,还是可以通过Seafile FSCK工具恢复存储数据的。

1、Seafile 安装脚本

官方提供了一键安装脚本可以帮助在 Ubuntu 18.04/20.04 系统上快速的安装好 Seafile 服务器,并配置好 MariaDB,Memcached,WebDAV,Ngnix 和开机自动启动脚本,在介绍上还是很方便的,但脚本感觉还是有些不完善,导致我在使用中掉到坑里了。

1.1、脚本使用步骤

官方建议在新安装的系统Ubuntu18.04/20.04中使用脚本安装,其他系统不建议尝试,我感觉坑会更多,并做好镜像 (如果安装失败需要还原到镜像)。

切换成 root 账号 (sudo -i命令,再输入密码就切换到root账号了,这属于基础操作,相信看了我的文章的朋友应该很熟悉)

创建seafile目录并进入

# 创建seafile脚本存储目录


mkdir /mnt/all/共享/code/seafile


# 进入新创建的脚本


cd /mnt/all/共享/code/seafile

1.2、获取安装脚本

我使用的是9.0最新版本安装

wget https://raw.githubusercontent.com/haiwen/seafile-server-installer-cn/master/seafile-9.0_ubuntu


这个链接,没有魔法可能不能正常下载,可以使用以下命令下载脚本

wget https://gh.api.99988866.xyz/https://raw.githubusercontent.com/haiwen/seafile-server-installer-cn/master/seafile-9.0_ubuntu


将ubuntu设置为NAS——24.直装Seafile实现直接访问存储数据

下载脚本

1.3、修改Ubuntu源为国内源

脚本安装过程中会下载很多支持附属软件,如果直接使用Ubuntu系统自带的源,下载速度无法保证或者干脆安装失败,所以建议修改Ubuntu下的apt源。修改方法也很简单,如果是Ubuntu桌面发行版可以直接Ubuntu桌面下操作。

找到Ubuntu设置下驱动管理(我的是Kubuntu)

将ubuntu设置为NAS——24.直装Seafile实现直接访问存储数据

找到位置

选择最快的源,确认修改就可以了。

将ubuntu设置为NAS——24.直装Seafile实现直接访问存储数据

自动选择源

如果是原版的Ubuntu,可以在设置的软件和更新中找到。

将ubuntu设置为NAS——24.直装Seafile实现直接访问存储数据

原版Ubuntu设置

1.4、运行安装脚本并指定要安装的版本

直接命令行操作,选择安装版本9.0。

bash seafile-9.0_ubuntu 9.0.0


将ubuntu设置为NAS——24.直装Seafile实现直接访问存储数据

选择1开源版安装

脚本会让您选择要安装的版本,按照提示进行选择即可,我选择安装开源版,输入1就可以,安装脚本在执行过程中会检查安装目录下是否有指定版本号的安装包,如果存在则会安装此包,否则会从 Seafile 网站下载。所以,为了避免因下载失败而导致安装中断,可以提前下载好安装包放到安装目录下。(这个包在国内,问题不大,可以按照脚本默认下载即可)

运行过程发现错误

ERROR: imageio 2.16.1 has requirement pillow>=8.3.2,but you'll have pillow 7.0.0 which is incompatible.


我的Ubuntu不是新安装的,可能部分软件以前安装过,版本跟脚本需求不一样,那就先升级原来老版本的pillow为最新9.1.0

pip install -U pillow


将ubuntu设置为NAS——24.直装Seafile实现直接访问存储数据

升级pillow

在重新运行安装命令

bash seafile-9.0_ubuntu 9.0.0


还是有问题

将ubuntu设置为NAS——24.直装Seafile实现直接访问存储数据

nginx服务器错误

查看nginx运行日志

将ubuntu设置为NAS——24.直装Seafile实现直接访问存储数据

端口80冲突

不成功,看着应该是默认端口冲突,之前安装的nextcloud运行的apache2服务在80端口,所以就需要修改apache2端口或者修改nginx默认端口,我选择修改nginx的端口8088(大坑),这就需要修改下载下来的脚本。

sudo nano /mnt/all/共享/code/seafile/seafile-9.0_ubuntu


将ubuntu设置为NAS——24.直装Seafile实现直接访问存储数据

修改服务器IP+端口

将ubuntu设置为NAS——24.直装Seafile实现直接访问存储数据

还有这里的nginx设置

这里的8088端口请修改为你自己需要的,我的目前是定义为8088,如果你没有端口冲突,那你Seafile默认端口就是80端口了,无须修改。但很有可能就算提示安装成功,出现登录页面,输入默认脚本设置的账号密码,还是会错误,出现Internal Server Error 或Page unavailable,这就是另外一个坑了。默认脚本的pip中的cffi的软件版本需要修改1.15.0。


修改官方脚本

将ubuntu设置为NAS——24.直装Seafile实现直接访问存储数据

修改cffi版本

再重新安装

bash seafile-9.0_ubuntu 9.0.0


成功后会弹出默认登录账号密码

将ubuntu设置为NAS——24.直装Seafile实现直接访问存储数据

安装成功

也可以查看安装日志/opt/seafile/aio_seafile-server.log查看登录账号密码,MySQL 的 root 用户密码存储在/root/.my.cnf 中;MySQL 的 seafile 用户密码存储在 /opt/seafile.my.cnf 中。

1.5、如果安装错误需要恢复

如果安装脚本出错,需要重置虚拟机到干净的镜像,或者可以按照我以下操作进行(折腾很多次后成功出来的经验)

将ubuntu设置为NAS——24.直装Seafile实现直接访问存储数据

恢复干净

# 先停止seafile服务


root@yang-kb:/mnt/all/共享/code/seafile# systemctl stop seafile-server


# 移除seafile下载安装文件


root@yang-kb:/mnt/all/共享/code/seafile# rm /opt/seafile -Rf


# 删除seafile用户组


root@yang-kb:/mnt/all/共享/code/seafile# userdel seafile


# 删除seafile数据库设置文件


root@yang-kb:/mnt/all/共享/code/seafile# rm /opt/seafile.my.cnf


# 进入MariaDB数据库


root@yang-kb:/mnt/all/共享/code/seafile# mysql -uroot -p


Enter password:


Welcome to the MariaDB monitor. Commands end with ; or g.


Your MariaDB connection id is 113


Server version: 10.3.34-MariaDB-0ubuntu0.20.04.1 Ubuntu 20.04


Copyright (c) 2000,2018,Oracle,MariaDB Corporation Ab and others.


Type 'help;' or 'h' for help. Type 'c' to clear the current input statement.


# 删除数据库中seafile用户,注意数据库操作语句,结尾带‘;’


MariaDB [(none)]> drop user 'seafile'@'127.0.0.1';


Query OK,0 rows affected (0.001 sec)


# 删除脚本设置的seafile_db数据表


MariaDB [(none)]> drop database seafile_db;


^[[AQuery OK,39 rows affected (0.410 sec)


# 删除脚本设置的seahub_db数据表


MariaDB [(none)]> drop database seahub_db;


Query OK,82 rows affected (0.765 sec)


# 删除脚本设置的ccnet_db数据表


MariaDB [(none)]> drop database ccnet_db;


Query OK,12 rows affected (0.157 sec)


# 刷新整个数据库


MariaDB [(none)]> FLUSH PRIVILEGES;


Query OK,0 rows affected (0.001 sec)


# 退出数据库


MariaDB [(none)]> q;


Bye


root@yang-kb:/mnt/all/共享/code/seafile#

如此就可以恢复,重新设置修改脚本后就可以再次执行脚本了。

1.6、设置管理账号

先默认账号登入,选择系统管理

将ubuntu设置为NAS——24.直装Seafile实现直接访问存储数据

进入系统管理

设置自己熟悉的账号和密码

将ubuntu设置为NAS——24.直装Seafile实现直接访问存储数据

添加账号密码

添加这个账号为管理员账号

将ubuntu设置为NAS——24.直装Seafile实现直接访问存储数据

设置为管理员

1.7、启动和停止Seafile服务

自动安装脚本会在系统中安装开机自动启动脚本。您也可以使用该脚本来关闭/启动 Seafile 服务,命令如下:

# 停止seafile-server


service seafile-server stop


# 启动seafile-server


service seafile-server start


# 重启seafile-server


service seafile-server restart

2、开启seaf-fuse扩展服务

参看官网教程

在Seafile系统上文件被分割成数据块,这意味着在你的Seafile服务器上存储的并不是完整的文件而是数据块。这种设计能够方便有效的运用数据去重技术。

然而,有时系统管理员想要直接访问服务器上的文件,你可以使用seaf-fuse来做到这点。

Seaf-fuse是一种FUSE虚拟文件系统的实现。一句话来说就是,它挂载所有的Seafile文件到一个目录(它被称为'''挂载点'''),所以你可以像访问服务器上的正常目录一样来访问由Seafile服务器管理的所有文件。

注意:

1、加密的目录不可以被seaf-fuse来访问。

2、Seaf-fuse的当前实现是只读访问,这意味着你不能通过挂载的目录来修改文件。

3、对于debian/centos系统,你需要在“fuse”组才有权限来挂载一个FUSE目录。

2.1、如何启动seaf-fuse

我想挂载到/mnt/all/共享/code/seafile/data目录

那就先创建这目录作为挂载点

sudo mkdir /mnt/all/共享/code/seafile/data


然后用脚本来启动seaf-fuse

请确认启动seaf-fuse之前,Seafile服务器已经启动好了。

如果您使用Ceph作为后端存储,为了要求 fuse 程序不运行为守护进程,在执行 seaf-fuse.sh 脚本时您需要加上 -f 选项。否则在访问文件时,fuse程序将会有奇怪的“冻结”行为。

# 进入程序所在目录


cd /opt/seafile/seafile-server-latest


# 运行非守护进程


./seaf-fuse.sh start -f /mnt/all/共享/code/seafile/data


# 运行守护进程,即在后台运行


./seaf-fuse.sh start /mnt/all/共享/code/seafile/data


# 停止


./seaf-fuse.sh stop

将ubuntu设置为NAS——24.直装Seafile实现直接访问存储数据

启动seaf-fuse

以非守护进程运行(-f),这个界面一直停在此处,没有后台化,不要认为死机了。

此时我在seafile的个人账号中上传2张图片,进行测试

将ubuntu设置为NAS——24.直装Seafile实现直接访问存储数据

上传图片

找到对应的目录/mnt/all/共享/code/seafile/data

将ubuntu设置为NAS——24.直装Seafile实现直接访问存储数据

打开映射目录

进入新建账号(图片是传到这里的)

将ubuntu设置为NAS——24.直装Seafile实现直接访问存储数据

第一层


将ubuntu设置为NAS——24.直装Seafile实现直接访问存储数据

第二层

文件已经可以看到了,名字都一样,可以查看和复制,无法修改,也就是只具备只读属性

这是回到终端界面,按下ctrl+c,结束fuse挂载

将ubuntu设置为NAS——24.直装Seafile实现直接访问存储数据

将ubuntu设置为NAS——24.直装Seafile实现直接访问存储数据

目录变空

这个fuse出来的目录无法被sabam共享出来,所以只能在服务器端查看,或是SFTP查看。

2.2、如果出现"Permission denied"的错误

如果你运行./seaf-fuse.sh start时,遇到"Permission denied"的错误信息,很有可能你没有在“fuse用户组”解决方法:

把你的用户加到fuse组

sudo usermod -a -G fuse


退出shell重新登陆 ctrl+D退出

现在试着再一次执行./seaf-fuse.sh start

3、服务器端口转发设置

我自己设置的是阿里DNS映射出私人的网址,当然可能更多的人选择DDNS方式进行外网端口映射,方便在外网使用Seafile服务和设置手机端APP,这里建议在服务器端修改地址后使用,不然APP连接上会有些问题,文件刷新偶尔提示连接失败。

将ubuntu设置为NAS——24.直装Seafile实现直接访问存储数据

修改服务器地址

总结

为了确保Seafile服务可以实现存储文件查看,本文折腾了在Ubuntu下只装Seafile,相对docker安装方式,这种方式需要更多的折腾精神,也会遇到很多坑,但解决问题的过程其实也能对自己学习掌握相关操作也是有益处的。目前本文介绍的脚本自动安装方式,方便一些,但也存在一些暗坑,如果折腾脚本不成功,也可以参考官方服务器教程,采用命令行方式一步一步操作。通过这一通折腾,Seafile云盘服务基本就没有短板了。


作者声明本文无利益相关,欢迎值友理性交流,和谐讨论~

网友评论

验证码 换一张
取 消
暂无评论...
三日内热门评论文章
为您推荐
  • 相关阅读
  • 业界资讯
  • 手机通讯
  • 电脑办公
  • 新奇数码
  • 软件游戏
  • 科学探索