部署 SeaTable Python 运行器

本文档适用于新版 Python 运行器,适用于 SeaTable 服务器 4.2 及以上版本

有两种方式部署 SeaTable Python 运行器

  1. 和 SeaTable 部署在同一台主机上
  2. 单独部署在一台主机上

架构

SeaTable 的 Python 脚本运行包含多个部分,SeaTable, Python scheduler, Python starter 和 Python runner,它们的功能与关系如下

结构图如下

新版 Python 运行器,三个组件均用 docker 方式启动,部署起来更加方便。

和 SeaTable 部署在同一台主机上

下载 python-pipeline.yml 文件

假设您已经在 /opt/seatable中安装新版 SeaTable (开发者版企业版

根据您需要的版本,下载 python-pipeline.yml

为了方便记录与查看日志,可以新建目录存放 SEATABLE_SCHEDULER 与 SEATABLE_STARTER 的日志,之后会一并挂载到 python-pipeline.yml 的两个容器中

mkdir -p /opt/seatable/python-pipeline/logs/scheduler-logs
mkdir -p /opt/seatable/python-pipeline/logs/starter-logs

将示例文件下载到 /opt/seatable,然后根据您的环境修改 SeaTable 的 .env 文件,需要添加以下内容

COMPOSE_FILE='docker-compose.yml,python-pipeline.yml'

PYTHON_SCHEDULER_AUTH_TOKEN=<token>
PYTHON_SCHEDULER_URL=http://python-scheduler
PYTHON_SCHEDULER_LOGS_DIR=/opt/seatable/python-pipeline/logs/scheduler-logs

PYTHON_STARTER_USE_ALTERNATIVE_FILE_SERVER_ROOT=True
PYTHON_STARTER_ALTERNATIVE_FILE_SERVER_ROOT=http://seatable
PYTHON_STARTER_LOGS_DIR=/opt/seatable/python-pipeline/logs/starter-logs

SEATABLE_SCHEDULER_IMAGE=seatable/seatable-python-scheduler:latest
SEATABLE_STARTER_IMAGE=seatable/seatable-python-starter:latest
SEATABLE_RUNNER_IMAGE=seatable/seatable-python-runner:latest

注意:

修改 seatable 配置文件 conf/dtable_web_settings.py

SEATABLE_FAAS_URL = 'http://python-scheduler'
SEATABLE_FAAS_AUTH_TOKEN = '***'  # 与 .env 文件 PYTHON_SCHEDULER_AUTH_TOKEN 的配置相同

重新启动 SeaTable 服务器

docker compose down
docker compose up -d

接下来,您可以通过网站使用 SeaTable Python 运行器。

单独部署在一台主机上

下载 python-pipeline.yml 和 .env 文件

我们建议您在 /opt/seatable-python-pipeline中安装 SeaTable Python 运行器,先创建目录与日志目录

mkdir /opt/seatable-python-pipeline
mkdir -p /opt/seatable-python-pipeline/logs/scheduler-logs
mkdir -p /opt/seatable-python-pipeline/logs/starter-logs

根据您需要的版本,下载 python-pipeline.yml 和 .env (文件名前包含 ‘.’)

将示例文件下载到 /opt/seatable-python-pipeline,然后根据您的环境修改 .env 文件, 需要修改以下字段

如果您需要连接其他 MySQL 数据库而不是使用默认的 Python pipeline MySql,需要修改 docker-compose.yml,用 # 符号去掉 mariadb 整个章节

#  mariadb:
#    image: mariadb:10.11
#    restart: unless-stopped
#    container_name: python-pipeline-mysql
#    volumes:
#      ...
#    environment:
#      ...
#    networks:
#      ...

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

修改 seatable 配置文件 conf/dtable_web_settings.py

SEATABLE_FAAS_URL = 'http://scheduler-demo.seatable.com'
SEATABLE_FAAS_AUTH_TOKEN = '***'  # 与 .env 文件 PYTHON_SCHEDULER_AUTH_TOKEN 的配置相同

然后重新启动 SeaTable 服务器

docker exec -d seatable /shared/seatable/scripts/seatable.sh start

启动 SeaTable Python 运行器

docker compose up -d

接下来,您可以通过网站使用 SeaTable Python 运行器。

高级设置

您可以根据需要,在 .env 文件中添加或修改高级配置,例如

PYTHON_SCHEDULER_SCRIPT_WORKERS=5
PYTHON_PROCESS_TIMEOUT=900

PYTHON_STARTER_THREAD_COUNT=10
PYTHON_STARTER_USE_ALTERNATIVE_FILE_SERVER_ROOT=
PYTHON_STARTER_ALTERNATIVE_FILE_SERVER_ROOT=

PYTHON_RUNNER_OUTPUT_LIMIT=1000000
PYTHON_RUNNER_CONTAINER_MEMORY=2g
PYTHON_RUNNER_CONTAINER_CPUS=
PYTHON_RUNNER_OTHER_OPTIONS=

设置脚本超时时间

对脚本运行限制时间,默认为 15 分钟

PYTHON_PROCESS_TIMEOUT=900

设置内网访问脚本文件

由于用户网络环境各不相同,如果 Python 运行器只可访问内网不可访问外网的情况下,则不可以下载脚本并运行。为了解决这个问题,新增加两个配置,可以使得 Python 运行器从内网访问下载脚本

在配置文件中添加如下配置并保存

PYTHON_STARTER_ALTERNATIVE_FILE_SERVER_ROOT='http://xxx.xxx.xxx.xxx:xxx/'
# 内网 FILE_SERVER_ROOT 地址
PYTHON_STARTER_USE_ALTERNATIVE_FILE_SERVER_ROOT=True

增加 Docker 占用资源限制

在配置文件中,添加或修改如下内容

PYTHON_RUNNER_CONTAINER_MEMORY='2g'
# 最大2GB的内存

有些系统,如Ubuntu或基于Debian的系统,不支持限制容器内存,运行脚本时会看到类似如下警告

WARNING: Your kernel does not support swap limit capabilities or the cgroup is not mounted. Memory limited without swap.

这种情况下,可以把 PYTHON_RUNNER_CONTAINER_MEMORY 设置为 0

PYTHON_RUNNER_CONTAINER_MEMORY=0

或者修改宿主机的配置以便支持上面的选项:

sudo vim /etc/default/grub

添加或修改以下内容

GRUB_CMDLINE_LINUX="cgroup_enable=memory swapaccount=1"

保存并退出文件,更新 GRUB

sudo update-grub

重启宿主机,配置生效

相关文档

其他 docker 设置

实验性功能,请谨慎修改

由于需求各异,在 OTHER_OPTIONS 中可以设置所有 docker 官方文档中的支持命令,但选项必须以 --\<option-name>=\<value> 的形式设置,例如需要挂载目录到容器内

PYTHON_RUNNER_OTHER_OPTIONS='["--volume=/home/seatable:/data",]'
# 宿主机 /home/seatable 挂载到容器内 /data

注意:方括号 [] 两侧需要添加单引号 '

关于 Https

因 Python 运行器仅在内网环境运行,不再支持使用 SSL 证书。

日志与常见问题排查

日志位置

python-scheduler

位置在宿主机上文中 .env 文件中的 PYTHON_SCHEDULER_LOGS_DIR 的目录下,如果未设置则在宿主机上 /tmp 目录

python-starter

位置在宿主机上文中的 .env 文件中的 PYTHON_STARTER_LOGS_DIR 的目录下,如果未设置则在宿主机上 /tmp 目录

常见问题与排查

问题排查的一般按照相关容器是否启动、配置是否正确、网络是否相通、程序是否出错的顺序排查问题

容器是否启动

在服务器中 docker ps 命令查看相关容器, python-scheduler, python-starter 是否已启动

配置是否正确、网络是否相通

seatable 与 python-scheduler

查看 seatable 的配置,conf/dtable_web_settings.py,有一项

SEATABLE_FAAS_URL = 'http://python-scheduler'  
# 部署同一机器上一般是上面默认的值,如果 python-scheduler 容器与 seatable 容器处于同一个网络中一般不会有问题

当部署不在同一机器上时,需要查看下 seatable 机器是否可访问 SEATABLE_FAAS_URL 中的地址

seatable 还有一项配置

SEATABLE_FAAS_AUTH_TOKEN = 'xxx'
# 用于 python-scheduler 的鉴权,需要 seatable 与 python-scheduler 的值相同

seatable 与 python-starter

如果运行脚本时报错获取脚本失败,一般情况为 python-starter 容器中不可访问 seatable,如果部署在同一台机器上且按照文档部署,应该不会出现这种错误

当分开部署时,可以对 python-starter 重新设置获取脚本地址,在上文部署文档中查找设置内网访问脚本

应用程序报错

脚本运行超时

默认配置下,脚本运行超时时间为十五分钟,可以根据上文中的设置脚本超时时间更改时长

但如果您确认脚本很快就会输出,需要查看输出是否会很大,精简输出后尝试再次运行

脚本本身报错

脚本本身报错不是部署的问题,需要您修改脚本

其他错误

按照上文中的顺序,查看网络与配置后再排查 seatable 与上文各日志输出排查或反馈问题

Last modified by seatable, 2024-04-17

架构
和 SeaTable 部署在同一台主机上
下载 python-pipeline.yml 文件
修改 seatable 配置文件 conf/dtable_web_settings.py
重新启动 SeaTable 服务器
单独部署在一台主机上
下载 python-pipeline.yml 和 .env 文件
修改 seatable 配置文件 conf/dtable_web_settings.py
启动 SeaTable Python 运行器
高级设置
设置脚本超时时间
设置内网访问脚本文件
增加 Docker 占用资源限制
其他 docker 设置
关于 Https
日志与常见问题排查
日志位置
常见问题与排查