弹霄博科

小谈谈一亩三分地



openEuler 搭建 SeaTable 小记(1)


发布日期: 2021/11/29
更新日期: 2021/11/30
作者: 小谈谈
分类: 笔记
标签: seatable, docker, openeuler
阅读时间: 5 分钟
字数: 1188 字


众所周知的 Seafile 老用户了,家里的私有云盘一直在使用 Seafile。有时候收集或分享文件时也会直接甩 Seafile 链接,Seafile 可以很好的存储和分享文件。

最近一直再找一个笔记软件(要求是啥都能存),有事没事打算记录点啥东西,试过 Typora,试过 OneNote,试过 MyBase,甚至是为知笔记(私有部署版),总觉得差点什么。

突然发现 Seafile 团队搞的一个新产品叫 SeaTable,按照官方的说法:

SeaTable 是一款新型的在线协同表格和信息管理工具。它支持“文件”、“图片”、“单选项”、“协作人”、“计算公式”等丰富的数据类型。它帮助你用表格的形式来方便的组织和管理各类信息,同时又和专门的软件系统一样强大。它还可以按照你的需要进行扩展,实现数据处理的自动化和业务流程的自动化。

咦,这不就是我要找的可以啥都能存的小工具么,好像还能写脚本自动化的搞一些事情。看起来不错哦~ 于是花了点时间上了一台 SeaTable 打算使用一下。CentOS 更新策略变了,是时候选择一个“下一代”的服务器操作系统了,不打算再新装 CentOS7 了,一直关注 OpenEuler 社区,正好搞一波 OpenEuler。本文主要是在 OpenEuler 平台下 Docker 部署 SeaTable 的小记。

大坑警告

建议先避开如下的坑,有助于提高部署效率。

部署

本节大概分安装 OpenEuler 系统,安装 Docker,启动 SeaTable,最后的配置几部分。

安装 OpenEuler

按照 SeaTable 官方文档要求,推荐配置是 4C8G,先搞个虚拟机,然后正常最小化安装系统,建议搞个 LVM 分区,安装系统的部分略过。。。

安装 Docker

暂时没用 iSula,还是装 Docker。先搞一个 DockerCE 源。

```
sudo yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
# 切换成清华源
cd /etc/yum.repos.d/
sudo sed -i 's+download.docker.com+mirrors.tuna.tsinghua.edu.cn/docker-ce+' /etc/yum.repos.d/docker-ce.repo
```

简单修改一下 docker-ce.repo。

```
sudo vi docker-ce.repo
# 不把$releasever换成8,读源的时候会404哦,如下图。
:%s/$releasever/8/g
:wq
```

[图片: ec12175fa98ca1758452cfc9662d581]
https://static.txisfine.cn/upload/ec12175fa98ca1758452cfc9662d581.png/pkwatermark

开始安装 Docker。

```
sudo dnf install docker-ce docker-ce-cli containerd.io docker-compose --nobest -y
```

关闭防火墙,配置 Docker 开启自启。

```
systemctl stop firewalld
systemctl disable firewalld
systemctl enable docker
systemctl start docker
```

启动 SeaTable

Docker 的好处就是即开即用。所以到了这一步已经完成一大半了。 建立一个数据存储目录,这个目录是要映射给 Docker 容器做数据持久化存储的。我就放在 /data 下了。/data/docker 放 compose 文件,/data/seatable 放 SeaTable 的持久化数据文件。 拉取一份 docker-compose,改一下。

```
wget https://docs.seatable.cn/d/2af5c4bcb8e14f1b85f7/files/?p=/docker/seatable-ce/docker-compose.yml&dl=1
vim docker-compose.yml
```

你也可以直接用我改好的。

```
version: '2.0'
services:
db:
image: mariadb:10.5
container_name: seatable-mysql
environment:
- MYSQL_ROOT_PASSWORD=${MYSQL_PASSWORD} # Requested, set the root's password of MySQL service.
- MYSQL_LOG_CONSOLE=true
volumes:
- /data/seatable/mysql-data:/var/lib/mysql # Requested, specifies the path to MySQL data persistent store.
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:
- "80:80" # HTTP 端口映射外部端口:内部端口,只需要关心外部端口即可。
- "443:443" # HTTPS端口映射。
volumes:
- /data/seatable/seatable-data:/shared # Requested, specifies the path to Seafile data persistent store.
environment:
- DB_HOST=db
- DB_ROOT_PASSWD=${MYSQL_PASSWORD} # Requested, the value shuold be root's password of MySQL service.
- SEATABLE_SERVER_LETSENCRYPT=False # Default is False. Whether to use let's encrypt certificate.
- SEATABLE_SERVER_HOSTNAME=table.txisfine.cn # Specifies your host name.
- TIME_ZONE=Asia/Shanghai # Optional, default is UTC. Should be uncomment and set to your local time zone.
depends_on:
- db
- memcached
- redis
networks:
- seatable-net

networks:
seatable-net:
```

在 docker-compose.yml 同目录下建立.env,用于存放 MySQL 密码。

```
vim .env
# 文件内容
MYSQL_PASSWORD=PleaseChangeME
# 文件内容结束
:wq
```

开始拉起容器。

```
docker-compose up
```

这时候会打印出一些日志,当看到 This is a idle script (infinite loop) to keep container running 时,数据库已初始化成功。可以先 Ctrl+C 杀掉容器,转为后台运行。

```
docker-compose up -d
```

最后的配置

docker ps ,应该能看到正在运行的容器,这表示 SeaTable 容器已经起来了,这时候还需要我们手动配置一下。

```
# 编辑dtable配置文件,默认是在/映射的数据卷/seatable-data/seatable/conf/里
vim dtable_web_settings.py
# 配置成你的SeaTable域名,是啥也啥,有端口也要写上。
DTABLE_SERVER_URL = 'https://et.txisfine.cn:6666/dtable-server/'
DTABLE_SOCKET_URL = 'https://et.txisfine.cn:6666/'
# 供用户访问SeaTable服务器的 dtable web的URL
DTABLE_WEB_SERVICE_URL = 'https://et.txisfine.cn:6666/'
# 文件服务器URL
FILE_SERVER_ROOT = 'https://et.txisfine.cn:6666/seafhttp/'
```
首先 Docker 得先把 HTTPS 端口映射出来。有证书,或者申请让老子加密(LetsEncrypt)证书。 上传证书:证书路径是/映射的数据卷/seatable-data/ssl/ 修改 Nginx 配置,默认路径:/映射的数据卷/seatable-data/,下面是一个 Demo 配置。 ```
server {
server_name 域名;
# 因为容器内的Nginx,监听的就是443端口,容器端口映射是在docker-compose里配的
listen 443 ssl;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2 TLSv1.3;
# 需要和SSL证书位置保持一致
ssl_certificate /shared/ssl/domain.pem;
ssl_certificate_key /shared/ssl/domain.key;
ssl_session_timeout 1d;
ssl_session_cache shared:SSL:50m;
ssl_session_tickets off;
ssl_prefer_server_ciphers on;
ssl_ciphers ECDH+AESGCM:DH+AESGCM:ECDH+AES256:DH+AES256:ECDH+AES128:DH+AES:ECDH+3DES:DH+3DES:RSA+AESGCM:RSA+AES:RSA+3DES:!aNULL:!MD5:!DSS;
# ...
```
```
server {
# ....
# 400 Bad Request: The plain HTTP request was sent to HTTPS port
error_page 497 =301 https://$server_name:<Docker映射出去的特殊端口>$request_uri;
# ....
```
```
# 官方写法,example.seatable.com为你的域名
server {
if ($host = example.seatable.com) {
return 301 https://$host$request_uri;
}
listen 80;
server_name example.seatable.com;
return 404;
}
```

坐和放宽,改完配置需要重启 Nginx 和 SeaTable 服务。

```
#重启SeaTable
docker exec -d seatable /shared/seatable/scripts/seatable.sh restart
#校验Nginx配置并重载配置
docker exec -d seatable nginx -t
docker exec -d seatable nginx -s reload
```

功能体验

用户登录页:

[图片: 20211129223138]
https://static.txisfine.cn/upload/20211129223138.png/pkwatermark

用户工作区:

[图片: 20211129223110]
https://static.txisfine.cn/upload/20211129223110.png/pkwatermark

[图片: 20211129223158]
https://static.txisfine.cn/upload/20211129223158.png/pkwatermark

表格:

[图片: 20211129223303]
https://static.txisfine.cn/upload/20211129223303.png/pkwatermark

高级插件:

[图片: 20211129223327]
https://static.txisfine.cn/upload/20211129223327.png/pkwatermark

统计:

[图片: 20211129223352]
https://static.txisfine.cn/upload/20211129223352.png/pkwatermark

表单收集:

[图片: 20211129223432]
https://static.txisfine.cn/upload/20211129223432.png/pkwatermark

管理面板:

[图片: 20211129223648]
https://static.txisfine.cn/upload/20211129223648.png/pkwatermark

插件市场:

[图片: 20211129223836]
https://static.txisfine.cn/upload/20211129223836.png/pkwatermark

TODO

参考文档