openEuler 搭建 SeaTable 小记(1)
|
众所周知的 Seafile 老用户了,家里的私有云盘一直在使用 Seafile。有时候收集或分享文件时也会直接甩 Seafile 链接,Seafile 可以很好的存储和分享文件。
最近一直再找一个笔记软件(要求是啥都能存),有事没事打算记录点啥东西,试过 Typora,试过 OneNote,试过 MyBase,甚至是为知笔记(私有部署版),总觉得差点什么。
突然发现 Seafile 团队搞的一个新产品叫 SeaTable,按照官方的说法:
SeaTable 是一款新型的在线协同表格和信息管理工具。它支持“文件”、“图片”、“单选项”、“协作人”、“计算公式”等丰富的数据类型。它帮助你用表格的形式来方便的组织和管理各类信息,同时又和专门的软件系统一样强大。它还可以按照你的需要进行扩展,实现数据处理的自动化和业务流程的自动化。
咦,这不就是我要找的可以啥都能存的小工具么,好像还能写脚本自动化的搞一些事情。看起来不错哦~ 于是花了点时间上了一台 SeaTable 打算使用一下。CentOS 更新策略变了,是时候选择一个“下一代”的服务器操作系统了,不打算再新装 CentOS7 了,一直关注 OpenEuler 社区,正好搞一波 OpenEuler。本文主要是在 OpenEuler 平台下 Docker 部署 SeaTable 的小记。
大坑警告
建议先避开如下的坑,有助于提高部署效率。
- 如果你之前有了 Seafile 环境,千万不要将 SeaTable 和 Seafile 部署在同一台机器上。可能会出现很多莫名其妙的问题,虽然后续可以解决,但是 debug 起来非常麻烦。。
- docker 起来之后还要起一下 seatable 服务。。否则就一直 502。。
- 如果需要跑 Python 脚本去处理复杂业务,需要额外部署脚本节点。。
部署
本节大概分安装 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

开始安装 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 容器已经起来了,这时候还需要我们手动配置一下。
- 启动 SeaTable 服务:
docker exec -d seatable /shared/seatable/scripts/seatable.sh start - 创建管理员用户:
docker exec -it seatable /shared/seatable/scripts/seatable.sh superuser - 配置 SeaTable URL:
# 编辑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/'
- 配置 HTTPS: 首先 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;
# ...
- 如果你是特殊端口,即从特殊端口的 HTTP 跳转到 HTTPS,避免 497 错误。
server {
# ....
# 400 Bad Request: The plain HTTP request was sent to HTTPS port
error_page 497 =301 https://$server_name:<Docker映射出去的特殊端口>$request_uri;
# ....
- 如果你是标准端口,即从 80 跳转 443。
# 官方写法,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
功能体验
用户登录页:
用户工作区:
表格:
高级插件:
统计:
表单收集:
管理面板:
插件市场:

TODO
- 对接企业微信
- 搭建脚本节点
- 对接 Seafile
- …