本文档适用于新版 Python 运行器,适用于 SeaTable 服务器 4.2 及以上版本
有两种方式部署 SeaTable Python 运行器
SeaTable 的 Python 脚本运行包含多个部分,SeaTable, Python scheduler, Python starter 和 Python runner,它们的功能与关系如下
结构图如下
新版 Python 运行器,三个组件均用 docker 方式启动,部署起来更加方便。
假设您已经在 /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_FAAS_URL = 'http://python-scheduler'
SEATABLE_FAAS_AUTH_TOKEN = '***' # 与 .env 文件 PYTHON_SCHEDULER_AUTH_TOKEN 的配置相同
docker compose down
docker compose up -d
接下来,您可以通过网站使用 SeaTable Python 运行器。
我们建议您在 /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_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
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
在配置文件中,添加或修改如下内容
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
重启宿主机,配置生效
相关文档
实验性功能,请谨慎修改
由于需求各异,在 OTHER_OPTIONS 中可以设置所有 docker 官方文档中的支持命令,但选项必须以 --\<option-name>=\<value> 的形式设置,例如需要挂载目录到容器内
PYTHON_RUNNER_OTHER_OPTIONS='["--volume=/home/seatable:/data",]'
# 宿主机 /home/seatable 挂载到容器内 /data
注意:方括号 []
两侧需要添加单引号 '
因 Python 运行器仅在内网环境运行,不再支持使用 SSL 证书。
位置在宿主机上文中 .env 文件中的 PYTHON_SCHEDULER_LOGS_DIR 的目录下,如果未设置则在宿主机上 /tmp 目录
位置在宿主机上文中的 .env 文件中的 PYTHON_STARTER_LOGS_DIR 的目录下,如果未设置则在宿主机上 /tmp 目录
问题排查的一般按照相关容器是否启动、配置是否正确、网络是否相通、程序是否出错的顺序排查问题
在服务器中 docker ps 命令查看相关容器, python-scheduler, python-starter 是否已启动
查看 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 的值相同
如果运行脚本时报错获取脚本失败,一般情况为 python-starter 容器中不可访问 seatable,如果部署在同一台机器上且按照文档部署,应该不会出现这种错误
当分开部署时,可以对 python-starter 重新设置获取脚本地址,在上文部署文档中查找设置内网访问脚本
默认配置下,脚本运行超时时间为十五分钟,可以根据上文中的设置脚本超时时间更改时长
但如果您确认脚本很快就会输出,需要查看输出是否会很大,精简输出后尝试再次运行
脚本本身报错不是部署的问题,需要您修改脚本
按照上文中的顺序,查看网络与配置后再排查 seatable 与上文各日志输出排查或反馈问题
Last modified by seatable, 2024-04-17