openEuler 搭建 SeaTable 小记(1)

openEuler 搭建 SeaTable 小记(1)

发表于 2021/11/29 更新于 2021/11/30 1188 字 5 分钟
AI 摘要 由 AI 自动生成

|

众所周知的 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

ec12175fa98ca1758452cfc9662d581

开始安装 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

功能体验

用户登录页: 20211129223138 用户工作区: 20211129223110 20211129223158 表格: 20211129223303 高级插件: 20211129223327 统计: 20211129223352 表单收集: 20211129223432 管理面板: 20211129223648 插件市场: 20211129223836

TODO

  • 对接企业微信
  • 搭建脚本节点
  • 对接 Seafile

参考文档

作者: 小谈谈
声明: 本文采用 CC BY-NC-SA 4.0 许可协议,转载请注明出处。