macOS Sierra 上通过 docker 安装 seafile 搭建家庭云盘

先上效果图。下图是 mac 客户端与 web 服务器的配合使用录屏。

macOS-sierra-docker-seafile-demo

〇、前言

  1. 安装 docker 比较简单。直接从官网下载安装文件,双击安装就可以了。和普通的 macOS app 一样。
  2. 对于 docker 操作要有基础的了解。可以参考 docker 从入门到实践。正常按照文中的步骤就可以顺利完成。
  3. 什么是 seafile?官网为什么选了 seafile?知乎这里两个链接可以点击直接查看。更多的信息,大家自行了解。

安装完成 docker,你就可以在终端中输入 docker version, 出现下面的反馈,我们就可以开始后面的事情了。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
docker version
Client:
Version: 1.13.1
API version: 1.26
Go version: go1.7.5
Git commit: 092cba3
Built: Wed Feb 8 08:47:51 2017
OS/Arch: darwin/amd64

Server:
Version: 1.13.1
API version: 1.26 (minimum version 1.12)
Go version: go1.7.5
Git commit: 092cba3
Built: Wed Feb 8 08:47:51 2017
OS/Arch: linux/amd64
Experimental: true

seafile 服务器端目前有 Linux,Raspberry PI,Windows 版本,这也是在 macOS 上需要 docker 的原因。

一、下载 docker Ubuntu 16.04 镜像

1
docker pull daocloud.io/ubuntu:16.04

由于官方的 docker 镜像仓库在国内链接很慢,这里可以选择 daocloud.io 的镜像仓库。上面的命令用来从镜像仓库中拉取tag为16.04的 ubuntu 版本。

二、基于 Ubuntu 16.04 镜像更新源,安装必要工具

运行基于 daocloud.io/ubuntu:16.04 镜像的容器,并打开其终端。在容器内部,就和操作普通的 ubuntu 没有大的差别了。

1
docker run -i -t daocloud.io/ubuntu:16.04 /bin/bash

更新 ubuntu 的源,并安装必要的软件。基础的 ubuntu 镜像,我们需要的软件工具都没有,所以我们需要先安装。由于官方的源,同样因为国内的关系,速度很慢,我们需要添加国内的软件源。参考:Ubuntu 16.04 几个国内更新源

1
2
3
4
apt-get update // 更新软件源
apt-get install vim // 安装 vim
vi /etc/apt/sources.list // 编辑软件源配置文件,保存,退出
apt-get update // 每次修改 sources.list 都要执行该命令,使更新源的修改生效

更新到国内源以后,下载速度就快很多了。继续安装一些工具如 wgettree,后面会用到。

1
apt-get install wget tree

三、在 ubuntu 上安装 seafile

官方有很详尽的文档,照着做下来就好了。这边我记录下自己的步骤。

通过 wget 从官网下载服务器端安装包。

1
wget -c http://seafile-downloads.oss-cn-shanghai.aliyuncs.com/seafile-server_6.0.8_x86-64.tar.gz

下载完成后,按照如下建立目录:

1
2
3
mkdir haiwen
mv seafile-server_* haiwen
cd haiwen

将 seafile-server_* 移动到 haiwen 目录下后

1
2
3
tar -xzf seafile-server_*
mkdir installed
mv seafile-server_* installed

官方说明:这样设计目录的好处在于

  • 和 seafile 相关的配置文件都可以放在 haiwen 目录下,便于集中管理。
  • 后续升级时,你只需要解压最新的安装包到 haiwen 目录下。

安装 seafile 社区版依赖的软件:

1
2
3
apt-get update
apt-get install mariadb-server // mariadb 是 mysql 的分支
apt-get install python2.7 python-setuptools python-imaging python-ldap python-mysqldb python-memcache python-urllib3

安装完成以后,需要修改mysql用户的密码,并启动 mysql 服务:

参考地址:Ubuntu 16.04 下重置 MySQL 5.7 密码

1
2
3
4
5
6
7
service mysql start // 启动 mysql 服务
mysql // 用空密码进入 mysql 管理命令行
mysql> use mysql // 切换到 mysql 库
mysql> update mysql.user set authentication_string=password('123qwe') where user='root' and Host ='localhost'; // 修改为自己的密码
mysql> update user set plugin="mysql_native_password";
mysql> flush privileges;
mysql> quit;

再重启,用新的密码登录,验证修改是否生效。

1
2
service mysql start
mysql -uroot -pnewpwd

在开始后面的步骤时,mysql 服务必须开启,否则会提示 mysql 相关的错误。

进入 seafile-server-* 目录,并运行安装脚本,根据提示回答问题。

1
2
cd seafile-server-*
./setup-seafile-mysql.sh

基本上使用默认就可以了。

  • seafile server ip or domain 会影响到后面的下载与上传,不过系统配置中可以修改。这里可以随意填写, 如:127.0.0.1
  • seafile data dir 是文件存储的位置,这个要记清楚。后面我们要配置 docker 容器的数据目录。

接下来,你会被要求选择一种创建 Seafile 数据库的方式:

1
2
3
4
5
6
-------------------------------------------------------
Please choose a way to initialize seafile databases:
-------------------------------------------------------

[1] Create new ccnet/seafile/seahub databases
[2] Use existing ccnet/seafile/seahub databases

如果选择1, 你需要提供根密码. 脚本程序会创建数据库和用户。
如果选择2, ccnet/seafile/seahub 数据库应该已经被你(或者其他人)提前创建。

我们选1,然后一路回车下来。

以上,我们已经完成了 seafile 社区版在 ubuntu 上的安装。

关于 seafile 专业版

seafile 社区版是没有用户使用限制的,专业版有。专业版的功能更加强大。如社区版无法预览 office,pdf 文件,仅提供下载到本地的功能,专业版可以在线预览。

专业版的安装与社区版类似。由于专业版的功能更强大,所以有更多的依赖,这就要在安装时安装更多其他的软件。

1
2
3
4
5
6
7
8
9
10
apt-get install openjdk-8-jre poppler-utils libpython2.7 python-pip \
mysql-server python-setuptools python-imaging python-mysqldb python-memcache python-ldap \
python-urllib3

pip install boto requests
ln -sf /usr/lib/jvm/java-8-openjdk-amd64/jre/bin/java /usr/bin/

apt-get install libreoffice libreoffice-script-provider-python // Office 预览

apt-get install ttf-wqy-microhei ttf-wqy-zenhei xfonts-wqy // 字体支持

专业版3人以下使用是不需要授权的。更多的人需要购买授权。家庭使用的话,免费的专业版也完全够用啦。哪里可以下载到专业版请看后面的问题。

四、从 docker 容器中退出,制作 seafile 镜像

在上面的操作中,我们看到终端的左侧有类似下面的前置符:

1
root@d63b87d071a4:/haiwen/

这里的 d63b87d071a4 是这次打开容器的 ID,我们要基于此来提交我们刚才做的修改。否则我们再次启动 ubuntu:16.04 这个镜像时,所有的修改都丢失了。

1
docker commit -m 'install seafile' -a 'user' d63b87d071a4 seafile:v1

这样,就可以创建一个本地的 seafile 仓库,标签为 v1 的镜像。-m 为这次提交添加注释, -a 说明添加的用户, d63b87d071a4 修改的容器ID,seafile:v1 (仓库:标签)标识新建的镜像。docker commitgit commit 类似。

通过 docker images 查看本地镜像,类似如下:

1
2
3
4
5
6
$ docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
seafile v1 9621e0684187 2 days ago 776 MB
youshi/ubuntu v2 08913c24e827 3 days ago 222 MB
daocloud.io/ubuntu 16.04 f49eec89601e 5 weeks ago 129 MB
daocloud.io/ubuntu 14.04 b969ab9f929b 5 weeks ago 188 MB

五、启动 docker 中的 seafile 服务

配置数据卷、端口映射,启动 seafile 容器:

1
docker run -i -t -v [1]:/haiwen/seafile-data -v [2]:/var/lib/mysql -p 10001:10001 -p 12001:12001 -p 8000:8000 -p 8082:8082 seafile:v1 /bin/bash
  1. -v 参数映射 mac 系统中的路径到 docker 容器中的路径,作为数据卷。这样容器中的数据就保存在物理磁盘上了。[1] mac 上需要映射到 seafile 同步文件存储的路径。[2] 需要映射到 mysql 存储的路径。
  2. -p 映射容器的端口到 mac 的端口,用于网络通信。 seafile 服务需要 10001,12001,8000,8082 共4个端口。8000 是浏览器访问网页服务的端口,8082是文件同步服务的端口。

启动 mysql 服务:

1
service mysql start

这时终端中提示报错也没有关系,是因为没有输入 mysql 的用户/密码导致的。

进入到 seafile-server-* 目录下:

1
2
./seafile.sh start // 启动 Seafile 服务
./seahub.sh start // 启动 Seahub 网站

第一次启动 seahub 时,需要填写管理员账号,密码。

以上,你在浏览器中输入 127.0.0.1:8000, 就可以看到 seafile 网站了。通过之前填写的管理员账户登录,就可以开始体验私有云的功能啦。

六、问题

1. 客户端无法下载/上传?

Seafile 可以支持桌面客户端、网页版、Android、iOS 客户端。客户端上设置你的服务器地址,用网站上配置的账号,就可以使用了。如果遇到无法上传、下载文件的问题。用管理员账号,进入系统管理后台->设置中,修改 SERVICE_URLFILE_SERVER_ROOT。前者用作网站访问链接,会影响到分享的文件URL;后者则影响文件同步。两者需要都能够被访问到。因此,地址是内网的,你出了局域网就访问不到了。

2. 专业版如何获取?

专业版的获取方法,请扫下面的二维码关注公众号,并回复 seafilepro



关注公众号,回复 seafilepro