记一次Aliyun服务器部署Seafile的经过。

00 起因

本人为 Quiver 使用者,近来希望使用 iOS 版的 Quiver,然而其 Library 只能从 Dropbox 或者其他 WebDAV 中选择。国内的网络环境直接排除第一个选项,而选择 WebDAV server 时,Seafile 吸引到了我。主要它可以对文件目录进行同步,而且有开源社区版,并提供 WebDAV 支持。

01 搭建

1、 服务器

本人使用的是 Aliyun 的学生机,1核 2GB内存 40GB存储,勉强能用。。。。系统装了 Ubuntu16,稳如老狗。

2、 Seafile with docker

大部分教程参考的官方文档,按理说按图索骥就完事了,就不会有这篇文章了,然而官方文档有时也坑。

其使用了 docker-compose,安装过程就略了。

然后其默认用了 MySQL,Ubuntu 装 MySQL 自行 Google,请牢记root账户密码

下载 docker-compose.yml 到随便一个目录,然后开始改其配置。我先把我的配置贴出来,下面再细说。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
version: '2.0'
services:
  db:
    image: mariadb:10.1
    container_name: seafile-mysql
    environment:
      - MYSQL_ROOT_PASSWORD=YOUR_ROOT_PWD  # Requested, set the root's password of MySQL service.
      - MYSQL_LOG_CONSOLE=true
    volumes:
      - /opt/seafile-mysql/db:/var/lib/mysql  # Requested, specifies the path to MySQL data persistent store.
    networks:
      - seafile-net

  memcached:
    image: memcached:1.5.6
    container_name: seafile-memcached
    entrypoint: memcached -m 256
    networks:
      - seafile-net
          
  seafile:
    image: seafileltd/seafile-mc:latest
    container_name: seafile
    ports:
      - "3380:80"
      - "443:443"  # If https is enabled, cancel the comment.
    volumes:
      - /opt/seafile-data:/shared   # Requested, specifies the path to Seafile data persistent store.
    environment:
      - DB_HOST=db
      - DB_ROOT_PASSWD=YOUR_ROOT_PWD  # Requested, the value shuold be root's password of MySQL service.
      - TIME_ZONE=Asia/Shanghai # Optional, default is UTC. Should be uncomment and set to your local time zone.
      - SEAFILE_ADMIN_EMAIL=me@example.com # Specifies Seafile admin user, default is 'me@example.com'.
      - SEAFILE_ADMIN_PASSWORD=asecret     # Specifies Seafile admin password, default is 'asecret'.
      - SEAFILE_SERVER_LETSENCRYPT=true   # Whether use letsencrypt to generate cert.
      - SEAFILE_SERVER_HOSTNAME=seafile.hollybee.wang # Specifies your host name.
    depends_on:
      - db
      - memcached
    networks:
      - seafile-net

networks:
  seafile-net:

首先,需要把 MySQL 的 root 密码在第 7、31 行进行替换。

由于服务器 80 端口被占,所以把 container 的 80 端口映射为 3380

取消第 32 行注释,从而设置时区。

取消 26 行的注释,开启 443 端口,设置 SEAFILE_SERVER_HOSTNAME 为站点名,该站点名可以为子域名,需要设置其 DNS 解析,指向该服务器 ip。但是 SEAFILE_SERVER_LETSENCRYPT 不需要打开,因为 aliyun 服务器默认无法 FQ 去申请 letsencrypt 的证书,所以需要配置 FQ 环境或者使用自己的证书。证书我选择了 freessl 的免费证书,将证书放置在 /opt/seafile-data/ssl 目录下,证书命名为 站点名.crt,密钥命名为 站点名.key,它会自动识别并使用该证书。

修改 SEAFILE_ADMIN_EMAILSEAFILE_ADMIN_PASSWORD 自定义管理员账号和密码。

之后运行 docker-compose up -d 即可 pull 镜像并按照配置新建并运行 container,从而启动 Seafile 服务,浏览器访问 https://seafile.hollybee.wang 来打开 Seafile 主页。

注意:

此时可以正常上传文件,但是分享文件的链接却无法访问,需要进行以下设置:登录管理员账号,点击右上角进入 系统管理,点击 设置,将 URL 中的 SERVICE_URL 里的 :8000 去掉。因为使用了域名,不需要指定 8000 端口号,此时分享链接可以正常访问。

3、 SeafDAV

虽然其 官方文档 给出了配置方法,但是我并没有成功登录。

在网上看到了 这篇博客,找到了解决方法。

编辑 seafdav.conf 文件,即 vim /opt/seafile-data/seafile/conf/seafdav.conf.按照如下内容配置:注意,这里不要擅自做任何更改,因为它自带的 Nginx 的配置就是照着这个写的,端口不要改,share_name 也不要改,否则就会连不上。必须启用 fastcgi。

1
2
3
4
5
[WEBDAV]
enabled = true
port = 8080
fastcgi = true
share_name = /seafdav

然后通过你映射的端口来访问,比如 3380:80 表示把 seafile docker 的 80 端口映射到 3380 公网端口。那么你就可以用 http://公网ip:3380/seafdav 进行访问,也可以使用 https://seafile.hollybee.wang/seafdav访问。

02 使用

iOS 端 Quiver 上成功配置 WebDAV,可以同步笔记,但是文件夹的嵌套关系已经不存在了,所有的文件夹都平铺表示,只包含文件夹的文件夹里面不会有文件,之后包含文件的文件夹才有东西。。。不说绕口令了,总之 iOS 版的 Quiver 确实挺垃圾的,不过找到包含文件的文件夹进行下载,文章还是可以正常阅读的,没有辜负折腾一大圈的努力。