ToolJet 在 Google Cloud Run 上的完整部署指南应用、ToolJet Database 与 Workflows【免费下载链接】ToolJetOpen-source foundation of ToolJet AI - the enterprise app generation platform for internal tools, dashboards, business applications, workflows and AI agents. Build visually, from a prompt, or from Claude Code, Codex and Cursor over MCP 项目地址: https://gitcode.com/GitHub_Trending/to/ToolJetToolJet 是开源的 AI 时代企业级应用生成平台用于构建内部工具、仪表盘、业务应用、工作流与 AI Agent。本文将基于 docs/docs/setup/google-cloud-run.md 的官方部署步骤讲解如何借助gcloudCLI 将 ToolJet 部署到 Google Cloud Run——包括 ToolJet 主应用、ToolJet Database 所需的 PostgREST 服务以及 Workflows 调度所需的 Worker 与 Temporal 容器。读完本文你将掌握 Cloud Run 上 ToolJet 的完整容器配置、环境变量设置、Cloud SQL 连接方式与 LTS 升级要点。本文以 Google Cloud Run 官方文档 为骨架结合仓库源码如 server/src/main.ts、server/package.json、docker-compose.yaml进行深度印证与扩充帮助你在实际操作前理解每个参数的底层影响。部署前的准备手动创建 PostgreSQL 数据库Cloud Run 本身是无状态的容器运行时因此 ToolJet 需要的持久化数据必须由外部数据库承担。官方文档明确要求你需要手动创建一个供 ToolJet 使用的 PostgreSQL 数据库。推荐的方式是使用 Google Cloud SQL 的 PostgreSQL 实例后续步骤会在 Cloud Run 的 Connection 选项卡中直接关联。该数据库将存放 ToolJet 的组织、应用定义、用户、数据源凭据等核心数据同时 ToolJet Database 功能的元数据也依赖 PostgreSQL。部署 ToolJet 主应用第 1 步创建 Google Cloud Run 服务在 Google Cloud Console 中进入 Cloud Run点击 Create Service在容器镜像一栏填入 ToolJet 官方镜像tooljet/tooljet:ee-latest对应 docker/ee 系列 Dockerfile 构建产物。第 2 步设置 Ingress 与 Authentication初始阶段Ingress入口流量与 Authentication认证可以按官方截图默认值设置后续再根据你的安全要求调整。Cloud Run 的认证策略通常先选择 Allow unauthenticated invocations 以便访问 ToolJet 登录页正式上线前建议通过 Cloud Run 访问管理 收紧权限。第 3 步容器配置——端口、启动命令与 CPU在 Containers 选项卡中ToolJet 应用容器需要做如下三处关键配置| 配置项 | 值 | 说明 | | ------ | -- | ---- | | Port |3000| ToolJet 服务端监听端口 | | Container argument |npm, run, start:prod| 以生产模式启动服务端 | | CPU 容量 |2GiB即 2 GiB 内存 | 保证运行时内存充足 |端口 3000 并非随意选择在 server/src/main.ts 中服务端通过const port parseInt(process.env.PORT) || 3000;决定监听端口未显式设置PORT时默认即为 3000。而start:prod命令在 server/package.json 中定义为start:prod: NODE_ENVproduction node dist/src/main即设置生产环境变量后直接执行编译产物这是 Cloud Run 上启动 ToolJet 的标准入口。备用命令结构如果上述命令格式在特定镜像版本下不兼容可使用官方提供的替代命令结构对应 port-and-capacity-postgrest-alternative-command.png 中的写法本质上是将npm run start:prod拆解为显式的 npm 参数形式效果等价。迁移问题修复命令若部署后遇到数据库迁移migration失败可临时将容器命令改为迁移命令执行修复。官方给出的修复命令对应 port-and-capacity-postgrest-migration-fix-command.png。这条命令在仓库中对应 server/package.json 的db:migrate:prod: node ./node_modules/typeorm/cli.js migration:run --dataSource dist/src/migration-helpers/db-migrations-datasource.js npm run db:migrate:data:prod它依次执行 TypeORM 结构迁移与数据迁移两个阶段。需要注意执行迁移命令可能导致当前 revision 崩溃因为容器启动后迁移命令会立即结束进程。修复完成后把容器命令改回npm, run, start:prod即可让实例正常重启并持续运行。第 4 步配置环境变量在 Variables Secrets 中添加 ToolJet 应用所需的环境变量。完整变量清单见 docs/docs/setup/env-vars.md核心必填项如下变量说明TOOLJET_HOSTToolJet 客户端的公网 URL例如https://app.tooljet.com。首次部署后请更新为 Cloud Run 分配的默认 URLLOCKBOX_MASTER_KEY32 字节十六进制字符串用于加密数据源凭据可用openssl rand -hex 32生成SECRET_KEY_BASE64 字节十六进制字符串用于加密会话 Cookie可用openssl rand -hex 64生成PG_HOSTPostgreSQL 数据库主机PG_DB数据库名称PG_USER数据库用户名PG_PASS数据库密码PG_PORT数据库端口TOOLJET_DBToolJet Database 名称默认tooljet_dbTOOLJET_DB_HOST/TOOLJET_DB_USER/TOOLJET_DB_PASS/TOOLJET_DB_PORTToolJet Database 的数据库连接信息PGRST_JWT_SECRETPostgREST 鉴权 JWT 密钥与 PostgREST 容器保持一致PGRST_HOSTPostgREST 服务地址如http://localhost:3001PGRST_DB_PRE_CONFIGPostgREST 的postgrest.pre_config预配置Cloud SQL 公网 IP 特殊注意事项官方文档特别提示如果使用 Cloud SQL 的公网 IP方式连接则PG_HOST必须使用 Unix socket 格式/cloudsql/CLOUD_SQL_CONNECTION_NAME。这也是 Cloud Run 与 Cloud SQL 集成的推荐形态——通过 Unix socket 走内部网络避免数据库暴露公网。第 5 步关联 Cloud SQL 实例切换到 Connection 选项卡在 Cloud SQL instance 下拉框中选择你已创建好的 PostgreSQL 实例Cloud Run 会自动为容器注入该 Cloud SQL 实例的 Unix socket 连接与上一步PG_HOST/cloudsql/CLOUD_SQL_CONNECTION_NAME的设置配合使用。全部参数设置完成后点击 Deploy 完成部署。服务创建并运行后若要让 Cloud Run 分配的 URL 对外可访问请参考 Cloud Run 访问管理文档 将服务设为公开。部署 ToolJet DatabasePostgRESTToolJet Database 是 ToolJet 内置的类数据库功能。从ToolJet 3.0起部署 ToolJet Database 是强制要求否则迁移可能失败。升级到 v3 的完整说明含破坏性变更见 docs/docs/setup/upgrade-to-v3.md。ToolJet Database 的查询能力由 PostgREST 提供——它把 PostgreSQL 表直接暴露为 REST APIToolJet 服务端通过 HTTP 代理与其通信参见 server/src/modules/tooljet-db/services/postgrest-proxy.service.ts 中PGRST_HOST的默认值http://localhost:3001与 JWT 鉴权逻辑。部署步骤如下第 1 步将 PostgREST 镜像推送到 Google Container RegistryCloud Run 要求镜像已存在于云仓库中。先在本地使用已登录的 Google Cloud CLI从 Docker Hub 拉取官方 PostgREST 镜像再打标签推送docker pull postgrest/postgrest:v12.0.2仓库中 docker-compose.yaml 使用的 PostgREST 版本为postgrest/postgrest:v12.2.0PGRST_SERVER_PORT3000与 Cloud Run 部署的 v12.0.2 同属 v12 大版本配置方式完全一致。推送时执行docker tag与docker push到你的 GCR/Artifact Registry 项目路径即可。第 2 步Ingress 与 Authentication与 ToolJet 应用容器相同先设置 Ingress 与 Authentication可自由按安全需求调整参考 ingress-auth.png。第 3 步容器配置Port3000CPU 容量1GiBPostgREST 是轻量进程内存需求低于 ToolJet 应用第 4 步环境变量PostgREST 容器需要以下环境变量详见 docs/docs/setup/env-vars.md 的 PostgREST server 小节变量说明PGRST_JWT_SECRET客户端提供的 JWT 鉴权密钥。可用openssl rand -hex 32生成不设置时 PostgREST 会拒绝所有鉴权请求PGRST_DB_URIToolJet Database 的数据库连接串格式为postgrest://[USERNAME]:[PASSWORD][HOST]:[PORT]/[DATABASE]PGRST_LOG_LEVEL日志级别建议info关于更多 PostgREST 环境变量的说明可参考 PostgREST 官方配置文档。第 5 步关联 Cloud SQL 实例在 Connection 选项卡中选择你为 ToolJet 应用创建的 PostgreSQL 实例或单独为 ToolJet Database 创建的 PostgreSQL 实例点击 Deploy 完成 PostgREST 服务部署。第 6 步在 ToolJet 应用中配置 PostgREST 连接为了让 ToolJet 应用/服务端能够连接 PostgREST还需在 ToolJet 容器中补充以下环境变量与第 4 步的 ToolJet Database 变量相呼应TOOLJET_DBToolJet Database 名称默认tooljet_dbTOOLJET_DB_HOST/TOOLJET_DB_USER/TOOLJET_DB_PASS/TOOLJET_DB_PORTPGRST_JWT_SECRET必须与 PostgREST 容器中配置的 JWT 密钥一致PGRST_HOSTPostgREST 服务的访问地址关键点在于JWT 密钥的一致性ToolJet 服务端用PGRST_JWT_SECRET签发/校验与 PostgREST 通信的令牌见 postgrest-proxy.service.ts 中对PGRST_JWT_SECRET的读取两者不一致将导致 ToolJet Database 查询失败。启用 Workflows 调度ToolJet Workflows 允许用户使用可视化节点界面设计和执行复杂的数据密集型自动化。若要启用 Workflow 的定时调度能力需要额外部署两个容器。Worker 容器Worker 容器复用tooljet/tooljet:ee-latest镜像即 ToolJet 应用镜像并携带 ToolJet 应用容器的全部环境变量同时设置以下调度开关WORKFLOW_WORKERtrue ENABLE_WORKFLOW_SCHEDULINGtrue TOOLJET_WORKFLOWS_TEMPORAL_NAMESPACEdefault TEMPORAL_SERVER_ADDRESSTemporal_Server_AddressWORKFLOW_WORKER将进程切换为 Worker 模式仅在后台消费任务队列。这一设计在源码中有明确体现server/src/modules/workflows/module.ts 中只有WORKERtrue时才注册 BullMQ 处理器并引导调度器。ENABLE_WORKFLOW_SCHEDULINGWorkflow 调度总开关该变量同时会出现在服务端下发给前端的公共配置中参见 server/src/modules/configs/service.ts。TEMPORAL_SERVER_ADDRESS指向下方 Temporal Server 容器的地址。TOOLJET_WORKFLOWS_TEMPORAL_NAMESPACETemporal 命名空间默认default。在 Containers 选项卡中将容器命令设置为npm, run, worker:prod该命令对应 server/package.json 中的worker:prod: WORKERtrue NODE_ENVproduction node dist/src/main即设置WORKERtrue后以生产模式启动同一入口进程转为纯 Worker 角色。Temporal Server 容器镜像标签设置为temporalio/auto-setup:1.25.1该镜像会自动完成 Temporal 的数据库建表与初始化对应 temporal-settings.png 中的配置。按 temporal-variables-and-secrets.png 中的示例为 Temporal 容器添加其所需的数据库连接等环境变量与 Secret。Temporal 负责编排 Workflow 的执行与重试状态Worker 容器通过TEMPORAL_SERVER_ADDRESS与之通信从而驱动 ToolJet Workflows 的定时调度。升级到最新 LTS 版本ToolJet 每 3–5 个月发布新的 LTS 版本生命周期End of Life至少 18 个月。LTS 镜像的标签遵循LTS-前缀加版本号的命名约定例如tooljet/tooljet:ee-lts-latest可到 ToolJet Docker Hub 页面查看最新 LTS 标签。注意新安装用户无需执行本升级流程直接使用最新版本即可。升级前置条件务必备份数据库升级前必须对数据库做完整备份防止数据丢失。版本门槛版本早于v2.23.0-ee2.10.2的用户必须先升级到该版本才能继续升级到 LTS 版本。由于 Cloud Run 每次部署都会创建新 revision升级时只需将镜像标签更新为目标 LTS 版本并重新部署同时确认数据库迁移命令npm, run, start:prod自动触发的迁移逻辑执行成功即可。常见问题与排查要点迁移失败将容器命令临时改为迁移命令db:migrate:prod对应脚本手动执行完成后改回npm, run, start:prod重启实例务必先备份数据库。ToolJet Database 无法查询核对 ToolJet 应用与 PostgREST 两个容器中的PGRST_JWT_SECRET是否一致、PGRST_HOST地址是否可达、TOOLJET_DB_*是否指向正确的 PostgreSQL 库。服务无法访问检查 Cloud Run 服务的 Ingress/Authentication 设置并按官方文档将服务设为公开。Cloud SQL 公网 IP 连接失败确认PG_HOST使用了/cloudsql/CLOUD_SQL_CONNECTION_NAME的 Unix socket 格式且已在 Connection 选项卡中关联对应 Cloud SQL 实例。总结在 Google Cloud Run 上部署 ToolJet 本质上是一条镜像 端口 命令 环境变量 Cloud SQL的组合链路ToolJet 应用容器监听 3000 端口并以start:prod启动ToolJet Database 依赖 PostgREST 容器与同一 PostgreSQL 实例Workflows 调度则需要 Worker 容器与 Temporal 容器协同。理解 server/package.json 中的启动脚本、server/src/main.ts 的端口逻辑以及 postgrest-proxy.service.ts 的代理鉴权机制能帮助你在配置出问题时快速定位根因。完整的环境变量参考请查阅 docs/docs/setup/env-vars.md。【免费下载链接】ToolJetOpen-source foundation of ToolJet AI - the enterprise app generation platform for internal tools, dashboards, business applications, workflows and AI agents. Build visually, from a prompt, or from Claude Code, Codex and Cursor over MCP 项目地址: https://gitcode.com/GitHub_Trending/to/ToolJet创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考