在线协同表格SeaTable(安装篇)

什么是 SeaTable ?

SeaTable 是一款新一代的在线协同表格。它支持“文件”、“图片”、“单选项”、“多选项”、“协作人”等丰富的数据类型。它帮助你方便的记录和管理各种零散的信息,并按照你的所需进行扩展,实现数据处理的自动化和业务流程的自动化。

SeaTable 最初由 Seafile 团队 (https://github.com/haiwen/seafile) 构建,准备将在线协作表格功能添加到 Seafile ,后来成为了一个单独的项目,暂时尚未开源,但是按官方说法,源代码将在以后上传到 GitHub。

SeaTable 由以下组件组成

  • dtable-web:用于管理表的网站。
  • dtable-server:存储表并提供协作功能。
  • dtable-events:后台任务,例如电子邮件发送等。
  • seaf-server:存储附件(文件和图像)

下图显示了不同组件如何协同工作:

  • MariaDB,Memcache 和 Redis 在各自的 Docker 容器中运行。
  • Redis 用于将消息从 dtable-web / dtable-server 发送到 dtable-events
  • 所有组件都使用 Memcache 来存储缓存,并使用 MariaDB 来存储永久信息。
  • 基础数据保存在 dtable-server 中,并定期保存到文件/对象存储中以进行持久存储。
  • 附件保存在文件/对象存储中

SeaTable 有三个版本

  • 开发人员版:适用于希望将 SeaTable 用作数据库并大量使用 API 和脚本的用户。开发人员版对存储,行号和 API 调用没有限制,但最多可以支持 dtable-server 的 200 个并发连接。
  • 云版本:适用于希望将 SeaTable 用作协作工具的用户。它对存储,行数和 API 调用有限制。
  • 企业版:对存储,行数和 API 调用几乎没有限制,并具有高级权限和用户管理功能。它适用于大型团队以两种方式使用 SeaTable 。用户可以在云中使用它,也可以自行托管。

SeaTable 官方文档要求 4 核和 8GB RAM,这个要求对我的小 NUC 来说有点挑战,但是还是值得一试的。

安装

前期准备

docker 文件夹中,创建一个新文件夹,并将其命名为 seatable,然后在 seatable 文件夹中再创建一个新的子文件夹命名为 mysql

mysql文件夹上右键–>属性,获取文件的 所在位置

MySQL 数据的卷目录将用到这个路径

seatable文件夹上右键–>属性,获取文件的 所在位置

SeaTable 数据的卷目录将用到这个路径

下载和修改 docker-compose.yml

下载 docker-compose.yml 文件到 seatable 目录,下载地址:https://docs.seatable.cn/d/2af5c4bcb8e14f1b85f7/files/?p=/docker/seatable-ce/docker-compose.yml&dl=1

然后根据您的环境修改文件, 需要修改以下字段:

  • MySQL 的 root 的密码(MYSQL_ROOT_PASSWORD 和 DB_ROOT_PASSWD)【示例中设为了 aW53Tza,请根据您的需要设置,但是注意密码中不要有 % 号】
  • MySQL 数据的卷目录 (volume)【示例中设为了 /volume1/docker/seatable/mysql,这是前面建好的目录】
  • SeaTable 的镜像标签【示例中设为了 latest,目前最新的版本是 1.8.0
  • SeaTable 数据的卷目录(volume)【示例中设为了 volume1/docker/seatable,这是前面建好的目录】
  • 主机名(SEATABLE_SERVER_HOSTNAME),域名或者你的服务器的外部 IP【示例中设为了 192.168.0.199,这是我群晖的局域网 IP,请根据您的 IP 进行修改】
  • 时区(可选)【示例中设为了 Asia/Shanghai

下面是我修改过的样例:

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
45
46
47
48
49
version: '2.0'
services:
db:
image: mariadb:10.5
container_name: seatable-mysql
environment:
- MYSQL_ROOT_PASSWORD=aW53Tza
- MYSQL_LOG_CONSOLE=true
volumes:
- /volume1/docker/seatable/mysql:/var/lib/mysql
networks:
- seatable-net

memcached:
image: memcached:1.5.6
container_name: seatable-memcached
entrypoint: memcached -m 256
networks:
- seatable-net

redis:
image: redis:5.0.7
container_name: seatable-redis
networks:
- seatable-net

seatable:
image: seatable/seatable:latest
container_name: seatable
ports:
- "16080:80"
- "16443:443"
volumes:
- /volume1/docker/seatable:/shared
environment:
- DB_HOST=db
- DB_ROOT_PASSWD=aW53Tza
- SEATABLE_SERVER_LETSENCRYPT=False
- SEATABLE_SERVER_HOSTNAME=192.168.0.199
- TIME_ZONE=Asia/Shanghai
depends_on:
- db
- memcached
- redis
networks:
- seatable-net

networks:
seatable-net:

初始化数据库

用 SSH 客户端连到群晖。

1
2
# 进入 seatable 目录
cd /volume1/docker/seatable

然后使用以下命令初始化数据库

1
docker-compose up

注意:您应该在 docker-compose.yml 文件所在的目录中运行上述命令。

稍等片刻,下载镜像的时间取决于您的网络,我的网络不太好,过程中总是出现

1
ERROR: net/http: TLS handshake timeout

如果报错,您可以再继续执行

1
docker-compose up

对于已经下载完成的镜像,并不会重复下载,所以您可以当成是支持断点续传的。

当您在输出日志中看到 This is a idle script (infinite loop) to keep container running 时,数据库已初始化成功。

日志在 Docker –> 容器 –> SeaTable –> 详情 –> 日志

然后按键盘的 Ctrl + C 来结束初始化命令。

启动 Docker 容器

使用以下命令启动 SeaTable 容器

1
docker-compose up -d

在 Docker 中你能看到 4 个相关的容器已经启动了

启动 SeaTable 服务

现在,您可以启动 SeaTable 服务并创建管理员账号

1
2
3
4
5
# 启动 SeaTable 服务
docker exec -d seatable /shared/seatable/scripts/seatable.sh start

# 创建一个管理员帐户
docker exec -it seatable /shared/seatable/scripts/seatable.sh superuser

注意:

第一个命令使用 -d 参数表示要在后台运行的服务;
第二个命令使用 -it 参数表示它是一个交互式命令;

涂抹邮箱

接下来,您可以通过浏览器访问 SeaTable 网页了。

运行

在浏览器中输入 http://群晖IP:16080,就可以看到登录界面了

用上一步创建的 superuser 的邮箱和密码登录,登录成功就可以看到主界面

设置中文

右上角 Avatar –> Setting –> Language Setting 从下拉框中选择 简体中文

会自动刷新为中文界面

系统管理

右上角 Avatar –> 进入系统管理

在这里可以对用户进行管理,添加插件等操作

表单编辑问题

什么都正常,包括导入excel

虽然在导入时有时候会显示服务器忙

但是只要编辑就开始转圈,开始还我以为是我机器不行呢,直到朋友 Eduna 告诉我,他也一直在转圈,而我知道他的机器应该是没有性能瓶颈的

打开浏览器的调试模式,发现 dtable-server 的链接没有带端口

后来发现论坛里有人反馈了同样的问题: https://bbs.seatable.cn/t/topic/416

这需要修改 dtable_web_settings.py 文件中的 DTABLE_SERVER_URLDTABLE_SOCKET_URLDTABLE_WEB_SERVICE_URLFILE_SERVER_ROOT,加上端口 16080

ccnet.conf 文件中的 SERVICE_URL 也需要加上端口 16080

这两个文件在 /docker/seatable/seatable/conf 目录中

保存后需要重启 SeaTable 服务

1
docker exec -d seatable /shared/seatable/scripts/seatable.sh restart

然后就可以编辑了

周五将发布『在线协同表格SeaTable(设置篇)』,讲讲怎么导入和使用模板,敬请期待~

参考文档

seatable/seatable: SeaTable: easy like a spreadsheet, powerful like a database
地址:https://github.com/seatable/seatable

jimzucker/upwork-seatable: Seatable Docker Deployment
地址:https://github.com/jimzucker/upwork-seatable

SeaTable - 新一代在线协同表格和信息管理系统
地址:https://seatable.cn/

SeaTable 使用手册
地址:https://docs.seatable.cn/published/seatable-user-manual/home.md

使用 Docker 部署 SeaTable 开发者版
地址:https://docs.seatable.cn/published/seatable-manual/docker/seatable-ce/Deploy%20SeaTable%20with%20Docker.md